Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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