def add_vm(self): params = self.params source_vapp_resource = self.get_source_resource() target_vm_name = params.get('target_vm_name') source_vm_name = params.get('source_vm_name') hostname = params.get('hostname') vmpassword = params.get('vmpassword') vmpassword_auto = params.get('vmpassword_auto') vmpassword_reset = params.get('vmpassword_reset') network = params.get('network') all_eulas_accepted = params.get('all_eulas_accepted') power_on = params.get('power_on') ip_allocation_mode = params.get('ip_allocation_mode') cust_script = params.get('cust_script') storage_profile = params.get('storage_profile') properties = params.get('properties') response = dict() response['changed'] = False try: self.get_vm() except EntityNotFoundException: spec = { 'source_vm_name': source_vm_name, 'vapp': source_vapp_resource, 'target_vm_name': target_vm_name, 'hostname': hostname, 'password': vmpassword, 'password_auto': vmpassword_auto, 'password_reset': vmpassword_reset, 'ip_allocation_mode': ip_allocation_mode, 'network': network, 'cust_script': cust_script } if storage_profile!='': spec['storage_profile'] = self.get_storage_profile(storage_profile) spec = {k: v for k, v in spec.items() if v} source_vm = self.vapp.to_sourced_item(spec) # Check the source vm if we need to inject OVF properties. source_vapp = VApp(self.client, resource=source_vapp_resource) vm = source_vapp.get_vm(source_vm_name) productsection = vm.find('ovf:ProductSection', NSMAP) if productsection is not None: for prop in productsection.iterfind('ovf:Property', NSMAP): if properties and prop.get('{'+NSMAP['ovf']+'}key') in properties: val = prop.find('ovf:Value', NSMAP) if val: prop.remove(val) val = E_OVF.Value() val.set('{'+NSMAP['ovf']+'}value', properties[prop.get('{'+NSMAP['ovf']+'}key')]) prop.append(val) source_vm.InstantiationParams.append(productsection) source_vm.VmGeneralParams.NeedsCustomization = E.NeedsCustomization('true') params = E.RecomposeVAppParams(deploy='true', powerOn='true' if power_on else 'false') params.append(source_vm) if all_eulas_accepted is not None: params.append(E.AllEULAsAccepted(all_eulas_accepted)) add_vms_task = self.client.post_linked_resource( self.get_target_resource(), RelationType.RECOMPOSE, EntityType.RECOMPOSE_VAPP_PARAMS.value, params) self.execute_task(add_vms_task) response['msg'] = 'Vapp VM {} has been created.'.format( target_vm_name) response['changed'] = True else: response['warnings'] = 'Vapp VM {} is already present.'.format( target_vm_name) return response
def update_vm_ng(self): source_vapp_resource = self.get_source_resource() source_vapp_name = self.params.get('vapp') target_vapp_name = self.params.get('vapp') vapp = self.params.get('vapp') source_vm_name = self.params.get('vm_name') target_vm_name = self.params.get('vm_name') vm_name = self.params.get('vm_name') force_customization = self.params.get('force_customization') hostname = self.params.get('hostname') vmpassword = self.params.get('vmpassword') vmpassword_auto = self.params.get('vmpassword_auto') vmpassword_reset = self.params.get('vmpassword_reset') network = self.params.get('network') all_eulas_accepted = self.params.get('all_eulas_accepted') power_on = self.params.get('power_on') deploy = self.params.get('deploy') ip_allocation_mode = self.params.get('ip_allocation_mode') cust_script = self.params.get('cust_script') storage_profile = self.params.get('storage_profile') properties = self.params.get('properties') response = dict() response['changed'] = False self.vapp = vapp self.target_vm_name = target_vm_name self.source_vm_name = source_vm_name self.source_vapp_name = vapp self.target_vapp_name = vapp self.vm_name = vm_name self.hostname = hostname self.vmpassword = vmpassword self.vmpassword_auto = vmpassword_auto self.vmpassword_reset = vmpassword_reset self.network = network self.force_customization = force_customization self.all_eulas_accepted = all_eulas_accepted self.power_on = power_on self.ip_allocation_mode = ip_allocation_mode self.cust_script = cust_script self.storage_profile = storage_profile # self.params = vm = self.get_vm() self.vm = vm source_vm = vm target_vm = vm self.source_vm = source_vm self.target_vm = target_vm spec = { 'source_vm_name': source_vm, 'target_vm_name': target_vm, 'vapp': vapp, 'vm_name': vm_name, 'hostname': hostname, 'password': vmpassword, 'password_auto': vmpassword_auto, 'password_reset': vmpassword_reset, 'ip_allocation_mode': ip_allocation_mode, 'network': network, 'cust_script': cust_script, 'force_customization': force_customization } spec = {k: v for k, v in spec.items() if v} if storage_profile != '': spec['storage_profile'] = self.get_storage_profile(storage_profile) # source_vm = self.vapp.to_sourced_item(spec) # # Check the source vm if we need to inject OVF properties. # source_vapp = VApp(self.client, resource=source_vapp_resource) # vm = source_vapp.get_vm(source_vm_name) productsection = vm.find('ovf:ProductSection', NSMAP) if productsection is not None: for prop in productsection.iterfind('ovf:Property', NSMAP): if properties and prop.get('{' + NSMAP['ovf'] + '}key') in properties: val = prop.find('ovf:Value', NSMAP) if val: prop.remove(val) val = E_OVF.Value() val.set('{' + NSMAP['ovf'] + '}value', properties[prop.get('{' + NSMAP['ovf'] + '}key')]) prop.append(val) source_vm.InstantiationParams.append(productsection) source_vm.VmGeneralParams.NeedsCustomization = E.NeedsCustomization( 'true') params = E.RecomposeVAppParams(state='update' if state else 'false', deploy='true' if deploy else 'false', powerOn='true' if power_on else 'false') params.append(source_vm) if all_eulas_accepted is not None: params.update(E.AllEULAsAccepted(all_eulas_accepted)) update_vm_ngs_task = self.client.post_linked_resource( self.get_target_resource(), RelationType.RECOMPOSE, EntityType.RECOMPOSE_VAPP_PARAMS.value, params) self.execute_task(update_vm_ngs_task) response['msg'] = 'VM {} has been created.'.format(target_vm_name) response['changed'] = True return response