Exemple #1
0
    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
Exemple #2
0
    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
Exemple #3
0
    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')
Exemple #5
0
    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')
Exemple #8
0
def get_cluster(client):
    from psphere.managedobjects import ClusterComputeResource
    clusters = ClusterComputeResource.all(client)

    return api_params_resolution(clusters, 'cluster', 'cluster')