def clone(self, cursor, payload): ''' clone the template with our payload ''' while payload: data = payload.pop(0) try: cluster = ClusterComputeResource.get(cursor, name=data['cluster']) except Exception, e: log.error( "Unable to locate a cluster resource witht the name {}. Omitting build" .format(data['cluster'])) else: pool = cluster.resourcePool esxhost = choice(cluster.host) datastore = choice(cluster.datastore) log.info( "Cloning virtual machine named {} into cluster {} from template {}" .format(data['vm_name'], data['cluster'], data['template'])) template = VirtualMachine.get(cursor, name=data['template']) folder = cluster.parent.parent.vmFolder _ip_spec = self._vm_ip_spec(cursor, domain=data['domain'], dns=data['dns'], gateway=data['gateway'], ip=data['ip'], netmask=data['netmask']) _adapter_spec = self._vm_adapter_spec(cursor, _ip_spec) _net_spec = self._vm_net_spec(cursor, cluster.network, vlan=data['vlan']) _custom_spec = self._vm_custom_spec(cursor, _adapter_spec, template=data['template'], domain=data['domain'], name=data['vm_name'], ip=data['ip'], gateway=data['gateway'], netmask=data['netmask'], dns=data['dns']) _config_spec = self._vm_config_spec(cursor, _net_spec, memory=data['memory'], cpus=data['cpus'], cores=data['cores'], name=data['vm_name']) _relo_spec = self._vm_relo_spec(cursor, esxhost, datastore, pool) _clone_spec = self._vm_clone_spec(cursor, _relo_spec, _config_spec, _custom_spec) try: #self.wait_for_task(template.CloneVM_Task(folder = folder, name = data['vm_name'], spec=_clone_spec)) template.CloneVM_Task(folder=folder, name=data['vm_name'], spec=_clone_spec) except VimFault, e: print e
def clone(self,cursor,payload): ''' clone the template with our payload ''' while payload: data = payload.pop(0) try: cluster = ClusterComputeResource.get(cursor, name=data['cluster']) except Exception, e: log.error("Unable to locate a cluster resource witht the name {}. Omitting build".format(data['cluster'])) else: pool = cluster.resourcePool esxhost = choice(cluster.host) datastore = choice(cluster.datastore) log.info("Cloning virtual machine named {} into cluster {} from template {}".format(data['vm_name'],data['cluster'],data['template'])) template = VirtualMachine.get(cursor, name=data['template']) folder = cluster.parent.parent.vmFolder _ip_spec = self._vm_ip_spec(cursor, domain = data['domain'], dns = data['dns'], gateway = data['gateway'], ip = data['ip'], netmask = data['netmask']) _adapter_spec = self._vm_adapter_spec(cursor,_ip_spec) _net_spec = self._vm_net_spec(cursor,cluster.network, vlan = data['vlan']) _custom_spec = self._vm_custom_spec(cursor, _adapter_spec, template = data['template'], domain = data['domain'], name = data['vm_name'], ip = data['ip'], gateway = data['gateway'], netmask = data['netmask'], dns = data['dns']) _config_spec = self._vm_config_spec(cursor, _net_spec, memory = data['memory'], cpus = data['cpus'], cores = data['cores'], name = data['vm_name']) _relo_spec = self._vm_relo_spec(cursor,esxhost,datastore,pool) _clone_spec = self._vm_clone_spec(cursor, _relo_spec, _config_spec, _custom_spec) try: #self.wait_for_task(template.CloneVM_Task(folder = folder, name = data['vm_name'], spec=_clone_spec)) template.CloneVM_Task(folder = folder, name = data['vm_name'], spec=_clone_spec) except VimFault, e: print e
def get_inventory(self, meta_hostvars=True): ''' Reads the inventory from cache or VMware API via pSphere. ''' # Use different cache names for guests only vs. all hosts. if self.guests_only: cache_name = '__inventory_guests__' else: cache_name = '__inventory_all__' inv = self._get_cache(cache_name, None) if inv is not None: return inv inv = {'all': {'hosts': []}} if meta_hostvars: inv['_meta'] = {'hostvars': {}} default_group = os.path.basename(sys.argv[0]).rstrip('.py') if not self.guests_only: if self.config.has_option('defaults', 'hw_group'): hw_group = self.config.get('defaults', 'hw_group') else: hw_group = default_group + '_hw' if self.config.has_option('defaults', 'vm_group'): vm_group = self.config.get('defaults', 'vm_group') else: vm_group = default_group + '_vm' if self.config.has_option('defaults', 'prefix_filter'): prefix_filter = self.config.get('defaults', 'prefix_filter') else: prefix_filter = None if self.filter_clusters: # Loop through clusters and find hosts: hosts = [] for cluster in ClusterComputeResource.all(self.client): if cluster.name in self.filter_clusters: for host in cluster.host: hosts.append(host) else: # Get list of all physical hosts hosts = HostSystem.all(self.client) # Loop through physical hosts: for host in hosts: if not self.guests_only: self._add_host(inv, 'all', host.name) self._add_host(inv, hw_group, host.name) host_info = self._get_host_info(host) if meta_hostvars: inv['_meta']['hostvars'][host.name] = host_info self._put_cache(host.name, host_info) # Loop through all VMs on physical host. for vm in host.vm: if prefix_filter: if vm.name.startswith(prefix_filter): continue self._add_host(inv, 'all', vm.name) self._add_host(inv, vm_group, vm.name) vm_info = self._get_vm_info(vm) if meta_hostvars: inv['_meta']['hostvars'][vm.name] = vm_info self._put_cache(vm.name, vm_info) # Group by resource pool. vm_resourcePool = vm_info.get('vmware_resourcePool', None) if vm_resourcePool: self._add_child(inv, vm_group, 'resource_pools') self._add_child(inv, 'resource_pools', vm_resourcePool) self._add_host(inv, vm_resourcePool, vm.name) # Group by datastore. for vm_datastore in vm_info.get('vmware_datastores', []): self._add_child(inv, vm_group, 'datastores') self._add_child(inv, 'datastores', vm_datastore) self._add_host(inv, vm_datastore, vm.name) # Group by network. for vm_network in vm_info.get('vmware_networks', []): self._add_child(inv, vm_group, 'networks') self._add_child(inv, 'networks', vm_network) self._add_host(inv, vm_network, vm.name) # Group by guest OS. vm_guestId = vm_info.get('vmware_guestId', None) if vm_guestId: self._add_child(inv, vm_group, 'guests') self._add_child(inv, 'guests', vm_guestId) self._add_host(inv, vm_guestId, vm.name) # Group all VM templates. vm_template = vm_info.get('vmware_template', False) if vm_template: self._add_child(inv, vm_group, 'templates') self._add_host(inv, 'templates', vm.name) self._put_cache(cache_name, inv) return inv
def get_cluster(client): clusters = ClusterComputeResource.all(client.api) return api_params_resolution(clusters, 'cluster', 'cluster')
def get_inventory(self, meta_hostvars=True): ''' Reads the inventory from cache or VMware API via pSphere. ''' # Use different cache names for guests only vs. all hosts. if self.guests_only: cache_name = '__inventory_guests__' else: cache_name = '__inventory_all__' inv = self._get_cache(cache_name, None) if inv is not None: return inv inv = {'all': {'hosts': []}} if meta_hostvars: inv['_meta'] = {'hostvars': {}} default_group = os.path.basename(sys.argv[0]).rstrip('.py') if not self.guests_only: if self.config.has_option('defaults', 'hw_group'): hw_group = self.config.get('defaults', 'hw_group') else: hw_group = default_group + '_hw' if self.config.has_option('defaults', 'vm_group'): vm_group = self.config.get('defaults', 'vm_group') else: vm_group = default_group + '_vm' if self.config.has_option('defaults', 'prefix_filter'): prefix_filter = self.config.get('defaults', 'prefix_filter') else: prefix_filter = None if self.filter_clusters: # Loop through clusters and find hosts: hosts = [] for cluster in ClusterComputeResource.all(self.client): if cluster.name in self.filter_clusters: for host in cluster.host: hosts.append(host) else: # Get list of all physical hosts hosts = HostSystem.all(self.client) # Loop through physical hosts: for host in hosts: if not self.guests_only: self._add_host(inv, 'all', host.name) self._add_host(inv, hw_group, host.name) host_info = self._get_host_info(host) if meta_hostvars: inv['_meta']['hostvars'][host.name] = host_info self._put_cache(host.name, host_info) # Loop through all VMs on physical host. for vm in host.vm: if prefix_filter: if vm.name.startswith(prefix_filter): continue self._add_host(inv, 'all', vm.name) self._add_host(inv, vm_group, vm.name) vm_info = self._get_vm_info(vm) if meta_hostvars: inv['_meta']['hostvars'][vm.name] = vm_info self._put_cache(vm.name, vm_info) # Group by resource pool. vm_resourcePool = vm_info.get('vmware_resourcePool', None) if vm_resourcePool: self._add_child(inv, vm_group, 'resource_pools') self._add_child(inv, 'resource_pools', vm_resourcePool) self._add_host(inv, vm_resourcePool, vm.name) # Group by datastore. for vm_datastore in vm_info.get('vmware_datastores', []): self._add_child(inv, vm_group, 'datastores') self._add_child(inv, 'datastores', vm_datastore) self._add_host(inv, vm_datastore, vm.name) # Group by network. for vm_network in vm_info.get('vmware_networks', []): self._add_child(inv, vm_group, 'networks') self._add_child(inv, 'networks', vm_network) self._add_host(inv, vm_network, vm.name) # Group by guest OS. vm_guestId = vm_info.get('vmware_guestId', None) if vm_guestId: self._add_child(inv, vm_group, 'guests') self._add_child(inv, 'guests', vm_guestId) self._add_host(inv, vm_guestId, vm.name) # Group all VM templates. vm_template = vm_info.get('vmware_template', False) if vm_template: self._add_child(inv, vm_group, 'templates') self._add_host(inv, 'templates', vm.name) self._put_cache(cache_name, inv) return inv
def get_cluster(client): from psphere.managedobjects import ClusterComputeResource clusters = ClusterComputeResource.all(client) return api_params_resolution(clusters, 'cluster', 'cluster')
def get_cluster(client): clusters = ClusterComputeResource.all(client.api) return api_params_resolution(clusters, 'cluster', 'cluster')
def get_cluster(client): from psphere.managedobjects import ClusterComputeResource clusters = ClusterComputeResource.all(client) return api_params_resolution(clusters, 'cluster', 'cluster')