def get_objects(self): self.datastore = find_datastore_by_name(self.si, self.params['datastore']) if not self.datastore: self.module.fail_json(msg='%(datastore)s could not be located' % self.params) self.datacenter = find_datacenter_by_name(self.si, self.params['datacenter']) if not self.datacenter: self.module.fail_json(msg='%(datacenter)s could not be located' % self.params) # self.vm = find_vm_by_name(self.si, self.params['name']) # if not self.vm: # self.module.fail_json(msg='%(name)s could not be located' % self.params) self.resource_pool = find_resource_pool_by_name( self.si, self.params['resource_pool']) if not self.resource_pool: self.module.fail_json( msg='%(resource_pool)s could not be located' % self.params) for key, value in self.params['ovf_networks'].items(): network = find_network_by_name(self.si, value) if not network: self.module.fail_json( msg='%(ovf_network)s could not be located' % self.params) network_mapping = vim.OvfManager.NetworkMapping() network_mapping.name = key network_mapping.network = network self.network_mappings.append(network_mapping) if self.params['property_map']: for key, value in self.params['property_map'].items(): property_map = vim.KeyValue() property_map.key = key property_map.value = value self.property_mappings.append(property_map) return self.datastore, self.datacenter, self.resource_pool, self.network_mappings, self.property_mappings
def get_lease(self): datastore, datacenter, resource_pool, network_mappings = self.get_objects() params = { 'diskProvisioning': self.params['disk_provisioning'], } if self.params['name']: params['entityName'] = self.params['name'] if network_mappings: params['networkMapping'] = network_mappings if self.params['deployment_option']: params['deploymentOption'] = self.params['deployment_option'] if self.params['properties']: params['propertyMapping'] = [] for key, value in self.params['properties'].items(): property_mapping = vim.KeyValue() property_mapping.key = key property_mapping.value = value params['propertyMapping'].append(property_mapping) if self.params['folder']: folder = self.si.searchIndex.FindByInventoryPath(self.params['folder']) else: folder = datacenter.vmFolder spec_params = vim.OvfManager.CreateImportSpecParams(**params) ovf_descriptor = self.get_ovf_descriptor() self.import_spec = self.si.ovfManager.CreateImportSpec( ovf_descriptor, resource_pool, datastore, spec_params ) errors = [to_native(e.msg) for e in getattr(self.import_spec, 'error', [])] if self.params['fail_on_spec_warnings']: errors.extend( (to_native(w.msg) for w in getattr(self.import_spec, 'warning', [])) ) if errors: self.module.fail_json( msg='Failure validating OVF import spec: %s' % '. '.join(errors) ) for warning in getattr(self.import_spec, 'warning', []): self.module.warn('Problem validating OVF import spec: %s' % to_native(warning.msg)) if not self.params['allow_duplicates']: name = self.import_spec.importSpec.configSpec.name match = find_vm_by_name(self.si, name, folder=folder) if match: self.module.exit_json(instance=gather_vm_facts(self.si, match), changed=False) if self.module.check_mode: self.module.exit_json(changed=True, instance={'hw_name': name}) try: self.lease = resource_pool.ImportVApp( self.import_spec.importSpec, folder ) except vmodl.fault.SystemError as e: self.module.fail_json( msg='Failed to start import: %s' % to_native(e.msg) ) while self.lease.state != vim.HttpNfcLease.State.ready: time.sleep(0.1) self.entity = self.lease.info.entity return self.lease, self.import_spec