home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / root / usr / share / YaST2 / clients / inst_vm_kickoff.ycp < prev    next >
Text File  |  2006-11-29  |  6KB  |  211 lines

  1. /**
  2.  * Module:    inst_vm_kickoff.ycp
  3.  *
  4.  * Authors:    Ladislav Slezak <lslezak@suse.cz>
  5.  *        Michael G. Fritch <mgfritch@novell.com>
  6.  *
  7.  * Purpose:    Prepare and start installation in a virtual machine.
  8.  *
  9.  * $Id: inst_vm_kickoff.ycp 30722 2006-05-05 22:59:43Z mgfritch $
  10.  */
  11. {
  12.     import "VM";
  13.     import "VM_XEN";
  14.     import "VM_Common";
  15.     import "Directory";
  16.     import "Progress";
  17.     import "Report";
  18.     import "Service";
  19.     import "Popup";
  20.     import "Label";
  21.  
  22.     textdomain "vm";
  23.  
  24.  
  25.     list <string> progress_stages = [];
  26.     list progress_descriptions = [];
  27.     string headline = "";
  28.     string help_text = "";
  29.     if (VM_Common::proposal_type == "install") { // install
  30.     progress_stages = [
  31.              // progress stage 1/4
  32.              _("Install packages"),
  33.              // progress stage 2/4
  34.              _("Prepare virtual machine environment"),
  35.              // progress stage 3/4
  36.              _("Write virtual machine configuration"),
  37.             // progress stage 4/4
  38.              _("Start the virtual machine"),
  39.     ];
  40.  
  41.     progress_descriptions = [
  42.              // progress stage description 1/4
  43.              _("Installing packages"),
  44.              // progress stage description 2/4
  45.              _("Preparing virtual machine environment"),
  46.              // progress stage description 3/4
  47.              _("Writing virtual machine configuration"),
  48.              // progress stage description 4/4
  49.              _("Starting the virtual machine"),
  50.     ];
  51.  
  52.     // Headline for virtual machine installation
  53.     headline = _("Preparing Installation of the Virtual Machine");
  54.  
  55.     // help text 1/1
  56.     help_text = _("<p><b><big>Installation<big></b></p><p>Preparing the virtual machine for installation...</p>");
  57.     }
  58.     else { // existing or boot
  59.     progress_stages = [
  60.              // progress stage 1/2
  61.              _("Update virtual machine configuration"),
  62.              // progress stage 1/2
  63.              _("Start the virtual machine"),
  64.     ];
  65.  
  66.     progress_descriptions = [
  67.              // progress stage description 1/2
  68.              _("Updating virtual machine configuration"),
  69.              // progress stage description 2/2
  70.              _("Starting the virtual machine"),
  71.     ];
  72.  
  73.     // Headline for virtual machine installation
  74.     string headline = _("Virtual Machine Started");
  75.     
  76.     // help text 1/2
  77.     string help_text = _("<p><b><big>Virtual Machine Started<big></b></p><p>Your virtual machine should now be running in a separate window.</p>");
  78.     // help text 2/2
  79.     help_text = help_text + _("<p>If problems have occurred, you may need to edit the VM configuration file and manually re-start your VM. VM configuration files are stored in <tt>/etc/xen/vm/</tt>.</p>");
  80.     }
  81.  
  82.     integer progress_length = size(progress_stages);
  83.  
  84.     // enable progress
  85.     boolean progress_state = Progress::set(true);
  86.  
  87.     // Headline for virtual machine installation
  88.     Progress::New (headline, "", progress_length,
  89.            progress_stages, progress_descriptions, help_text);
  90.  
  91.     boolean success = true;
  92.     // part of an error message
  93.     string abortmsg = _("The installation will be aborted.");
  94.  
  95.     if (VM_Common::proposal_type == "install") {
  96.     Progress::NextStage ();
  97.  
  98.     success = VM::InstallPackages();
  99.     
  100.     if (!success) {
  101.         // popup error message
  102.         Report::Error(_("Cannot install the required packages.") + "\n" + abortmsg);
  103.         return `forceback;
  104.     }
  105.  
  106.     Progress::NextStage ();
  107.     
  108.     success = VM::Prepare();
  109.     
  110.     if (!success)
  111.     {
  112.         // popup error message
  113.         Report::Error(_("Cannot prepare the virtual machine environment.") + "\n" + abortmsg);
  114.         return `forceback;
  115.     }
  116.     }
  117.  
  118.     Progress::NextStage ();
  119.  
  120.     success = VM::Write();
  121.     if (!success) {
  122.     // popup error message
  123.     Report::Error(_("Cannot write the configuration of the virtual machine.") + "\n" + abortmsg);
  124.     return `forceback;
  125.     }
  126.  
  127.     Progress::NextStage ();
  128.  
  129.     if (VM_Common::proposal_type != "install") {
  130.     success = VM::Prepare2();
  131.     if (!success)
  132.     {
  133.         // popup error message
  134.         Report::Error(_("Cannot update the configuration of the virtual machine.") + "\n" + abortmsg);
  135.         return `forceback;
  136.     }
  137.     }
  138.  
  139.     Pkg::SourceReleaseAll();
  140.  
  141.     // start the VM
  142.     success = VM::StartVirtualMachine(VM_Common::config_name, true);
  143.     if (!success) return `forceback;
  144.  
  145.     // open the XTerm console if para virtualized.
  146.     if (VM_Common::GetVirtualizationType() == "para") {
  147.     boolean isNetWare = false;
  148.     if (VM_Common::GetCustomKernel()) {
  149.         isNetWare = VM_Common::IsNetWareKernel(VM_Common::GetKernelImage());
  150.     }
  151.     boolean background = (VM_Common::proposal_type != "install"); // Do not start in background when installing.
  152.     success = VM::ViewVirtualMachineConsole(VM_Common::config_name, (VM_Common::GetVirtualizationType() == "full"), isNetWare, background, true);
  153.     }
  154.     if (!success) return `forceback;
  155.  
  156.     Progress::Finish ();
  157.     Progress::set(progress_state);
  158.  
  159.     if (VM_Common::proposal_type == "install") {
  160.         if (VM_Common::GetVirtualizationType() == "full") {
  161.         // popup message heading 
  162.         boolean cont = Popup::AnyQuestionRichText(_("Installation Started"),
  163.         // rich text message
  164.         _("The virtual machine installation should now be running in a separate window. When the installation has completed, click 'Continue' to finalize the boot settings."),
  165.         50, 15,
  166.         Label::ContinueButton(),
  167.         Label::CancelButton(),
  168.         `yes);
  169.  
  170.         if (cont)
  171.             return `next;
  172.         else
  173.             return `forceback;
  174.         }
  175.         else {
  176.             // If the user closed the "xm console", clean up the VM.
  177.             VM::TerminateVirtualMachine(VM_Common::config_name, false);
  178.         // popup message heading
  179.         boolean cont = Popup::AnyQuestionRichText(_("Installation Complete"),
  180.         // rich text message
  181.         _("The virtual machine settings now need to be finalized."),
  182.         50, 15,
  183.         Label::ContinueButton(),
  184.         Label::CancelButton(),
  185.         `yes);
  186.  
  187.         if (cont)
  188.             return `next;
  189.         else 
  190.             return `forceback;
  191.     }
  192.         return `next;
  193.     }
  194.     else {
  195.     // popup message heading
  196.     boolean more = Popup::AnyQuestionRichText(_("Virtual Machine Started"),
  197.         // rich text message
  198.         _("<p>Your virtual machine should now be running in a separate window.</p><p>If problems have occurred, you may need to edit the VM configuration file and manually re-start your VM. VM configuration files are stored in <tt>/etc/xen/vm/</tt>.</p>"),
  199.         50, 15,
  200.         // popup message button
  201.         _("Create More..."),
  202.         Label::FinishButton(),
  203.         `yes);
  204.  
  205.     if (more)
  206.         return `again;
  207.     else
  208.         return `finish;
  209.     }
  210. }
  211.