class Chef::Knife::VcVmConfigGuest

Public Instance Methods

run() click to toggle source
# File lib/chef/knife/vm/vc_vm_config_guest.rb, line 57
def run
  $stdout.sync = true

  vm_arg = @name_args.shift
  computer_name = locate_config_value(:guest_computer_name)
  script_filename = locate_config_value(:customization_script)

  if script_filename
    script = File.read(script_filename)
    raise ArgumentError,
      "A customization script cannot exceed 49000 characters" if script.size > 49_000
  end

  config = {
    :enabled => locate_config_value(:guest_enabled),
    :admin_passwd_enabled => locate_config_value(:admin_passwd_enabled),
    :admin_passwd => locate_config_value(:admin_passwd),
    :customization_script => script
  }

  connection.login

  vm = get_vm(vm_arg)

  if config[:admin_passwd].nil? && vm[:guest_customizations][:admin_passwd_enabled]
    ui.msg('Inheriting admin password')
    config[:admin_passwd] = vm[:guest_customizations][:admin_passwd]
  end

  if computer_name.nil?
    computer_name = vm[:guest_customizations][:computer_name]
  end

  stop_if_running(connection, vm)

  guest_name = sanitize_guest_name(computer_name)

  ui.msg "Renaming guest name to #{guest_name}..." if locate_config_value(:guest_computer_name)
  task_id, response = connection.set_vm_guest_customization vm[:id], guest_name, config

  ui.msg "VM guest configuration..."
  wait_task(connection, task_id)

  if locate_config_value(:force_customization)
    ui.msg "Forcing Guest Customization..."
    task_id = connection.force_customization_vm vm[:id]
    wait_task(connection, task_id)
  end

  connection.logout
end