Search code examples
pythonvspherepyvmomi

python vsphere DRS group


I am working on a python script to add a VM to a DRS group. Here is a powershell script that is doing the job. How to translate it to py?

$spec = New-Object VMware.Vim.ClusterConfigSpecEx
$spec.groupSpec = New-Object VMware.Vim.ClusterGroupSpec[] (1)
$spec.groupSpec[0] = New-Object VMware.Vim.ClusterGroupSpec
$spec.groupSpec[0].operation = "edit"
$spec.groupSpec[0].info = $DrsGroup
$spec.groupSpec[0].info.vm += $VM.ExtensionData.MoRef

$Cluster.ExtensionData.ReconfigureComputeResource_Task($spec, $true) 

actually I block on the last line becuase I do not found the ReconfigureComputeResource methode. My code hereafter:

def get_drsgroup(self, cluster_obj=None, group_name=None):
    if cluster_obj is None:
        cluster_obj = self.cluster_obj
    if group_name:
        group_list = [group for group in cluster_obj.configurationEx.group if group.name == group_name]
        if group_list:
            return group_list[0]
    return None

def assign_vm_to_group(self):
    drs_group = self.get_drsgroup(group_name="DC_VM")
    my_vm = self.get_obj(
        [vim.VirtualMachine],
        "Test_vm",
        return_all=True)

    spec = vim.cluster.ConfigSpecEx()
    groupspec = vim.cluster.GroupSpec()
    groupspec.operation = "edit"
    groupspec.info = drs_group
    groupspec.info.vm += my_vm

    self.cluster_obj.xxxxxxxxxxxxxx

Thanks for your help


Solution

  •      def manage_vm_to_DRS_group(self, action=None):
            #--- requiered objects already exist
            drs_group = self.get_drsgroup(group_name=self.drs_rule_name)
            my_vm = self.get_obj(
                [vim.VirtualMachine],
                self.vm,
                return_all=True
            )
            #---
            try:
                spec = vim.cluster.ConfigSpecEx()
                my_groupSpec = vim.cluster.GroupSpec()
    
                my_groupSpec.operation = "edit"
                my_groupSpec.info = drs_group
                if self.state == 'present':
                    my_groupSpec.info.vm += my_vm
                elif self.state == 'removed':
                    #my_groupSpec.info.vm = my_groupSpec.info.vm.remove(my_vm[0])
                    my_groupSpec.info.vm.remove(my_vm[0])
                else:
                    self.module.fail_json(msg="Module failure: check module, fuction: assign_vm_to_group, indice: 1")
                spec.groupSpec.append(my_groupSpec)
    
                if not self.check_mode:
                    self.cluster_obj.ReconfigureComputeResource_Task(spec, modify=True)
    
            except:
                self.module.fail_json(msg="Module failure:Failed to assign vm '%s' to DRS group '%s'" % (
                    self.vm, self.drs_rule_name))
    
            self.module.exit_json(changed=True, result="SUCCESS vm '%s' is '%s' on  DRS group '%s'" % (
                    self.vm, self.state, self.drs_rule_name))