class Chef::Knife::VsphereVmPropertySet
VsphereVMPropertySet extends Basevspherecommand
Public Instance Methods
run()
click to toggle source
The main run method for vm_property_set
# File lib/chef/knife/vsphere_vm_property_set.rb, line 25 def run $stdout.sync = true vmname = @name_args[0] if vmname.nil? show_usage fatal_exit("You must specify a virtual machine name") end property_name = @name_args[1] if property_name.nil? show_usage fatal_exit("You must specify a PROPERTY name (e.g. annotation)") end property_name = property_name.to_sym property_value = @name_args[2] if property_value.nil? show_usage fatal_exit("You must specify a PROPERTY value") end vim_connection dc = datacenter vm = get_vm_by_name(vmname, get_config(:folder)) || fatal_exit("Could not find #{vmname}") if vm.config.vAppConfig && vm.config.vAppConfig.property existing_property = vm.config.vAppConfig.property.find { |p| p.props[:id] == property_name.to_s } end if existing_property operation = "edit" property_key = existing_property.props[:key] else operation = "add" property_key = property_name.object_id end vm_config_spec = RbVmomi::VIM.VirtualMachineConfigSpec( vAppConfig: RbVmomi::VIM.VmConfigSpec( property: [ RbVmomi::VIM.VAppPropertySpec( operation: operation, info: { key: property_key, id: property_name.to_s, type: "string", userConfigurable: true, value: property_value, } ), ] ) ) unless config[:ovf_environment_transport].nil? transport = config[:ovf_environment_transport].split(",") transport = [""] if transport == [] ## because "".split returns [] and vmware wants [""] vm_config_spec[:vAppConfig][:ovfEnvironmentTransport] = transport end vm.ReconfigVM_Task(spec: vm_config_spec).wait_for_completion end