Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
  1. User clicks "Create Image"
  2. PHP frontend code inserts the new image/imagerevision and rows into the image and imagerevision tables and inserts a new request into the database
    • request state is "image"
    • image.deleted = 1, this prevents the new image from being available for checkout until the image creation process is done
    • reservation contains image information is for the new image, not the image used as the base image
  3. vcld processes detects the request new request and begins to process it 
      a new process is forked
    • a new image.pm object is created
    • image.pm::process() is called
  4. image.pm::process()
    • make sure image does not already exist in the image repository
  5. OS::capture_prepare()
    • logoff user
    • remove user account
    • make sure DHCP is enabled on the private NIC
    • disable the pagefile
      • set sshd service startup to auto
      • reboot
      • delete the pagefile
    • configure auto admin login to login as root
    • copy Sysprep, drivers, and scripts to the computer
    • set sshd service startup to manual so that it doesn't immediately start up when the computer the image is loaded on boots up
  6. provisioner::capture_prepare()
    • write the currentimage.txt file on the computer
    • update nodetype.tab with the new image name
    • create a .tmpl file for the new image
    • run 'nodeset <node> image' to instruct xCAT to save an image the next time the computer boots
  7. OS::capture_start()
    • run sysprep.cmd
      • cleans various files from the hard drive
      • copies VCLprepare.cmd script to group policy logon scripts directory
      • copies VCLcleanup.cmd script to group policy logoff scripts directory
  8. provisioner::capture_monitor()
    • continuously check the size of the new image files to make sure they're growing
    • continuously check the nodeset status of the computer, imaging is done when it changes to 'boot'
    • create hda.mbr, hda.sfdisk, sda.mbr, sda.sfdisk files
  9. image.pm::process()
    • update request state to completed
    • provisioner::get_image_size() is called
    • database tables are updated for the newly created image
      • image.lastupdate timestamp = current time
      • image.deleted = 0
      • image.size = result from provisioner::get_image_size()
      • image.name = imagerevision.imagename, this updates the image to contain the correct revision number in the name
      • imagerevision.deleted = 0, this causes the image to appear in the list available for checkout
      • imagerevision.datecreated = current time
  10. image.pm::image_creation_successful()
    • email message is sent notifying the image creator that the process has completed
    • email message is sent to the system administrators
    • reload request is inserted into the database - the computer is reloaded with the newly created image
  • image.pm::image_creation_failed()
    • email message is sent notifying the image creator that the process has been delayed
    • email message is sent to the system administrators notifying them that the image creation process failed
    • request state is updated to maintenance, this prevents vcld from attempting to process or delete the request until an administrator has investigated the problem
    • computer state is updated to maintenance, this prevents any other processes from altering or reloading the computer