示例#1
0
        /// <summary>
        /// Delete VMdk AntiAffinity Rule Spec
        /// </summary>
        /// <param name="podName">string</param>
        /// <param name="ruleName">string</param>
        private void DeleteVmdkAntiAffinityRule(string podName, string ruleName)
        {
            ManagedObjectReference srmRef  = cb._connection._sic.storageResourceManager;
            ManagedObjectReference sdrsMor = cb._svcUtil.getEntityByName("StoragePod", podName);

            if (sdrsMor != null)
            {
                PodStorageDrsEntry       podStorageDrsEntry = (PodStorageDrsEntry)cb._svcUtil.GetDynamicProperty(sdrsMor, "podStorageDrsEntry");
                StorageDrsVmConfigInfo   drsVmConfigInfo    = null;
                StorageDrsConfigSpec     sdrsConfigSpec     = new StorageDrsConfigSpec();
                StorageDrsVmConfigSpec   drsVmConfigSpec    = new StorageDrsVmConfigSpec();
                StorageDrsVmConfigInfo[] sdrsVmConfig       = podStorageDrsEntry.storageDrsConfig.vmConfig;

                foreach (StorageDrsVmConfigInfo vmConfig in sdrsVmConfig)
                {
                    if (vmConfig.intraVmAntiAffinity != null)
                    {
                        if (vmConfig.intraVmAntiAffinity.name.Equals(ruleName))
                        {
                            drsVmConfigInfo = vmConfig;
                        }
                    }
                }

                if (drsVmConfigInfo != null)
                {
                    drsVmConfigInfo.intraVmAntiAffinity = null;
                    drsVmConfigSpec.info        = drsVmConfigInfo;
                    drsVmConfigSpec.operation   = ArrayUpdateOperation.edit;
                    sdrsConfigSpec.vmConfigSpec = new StorageDrsVmConfigSpec[] { drsVmConfigSpec };
                }
                else
                {
                    string msg = "\nFailure: Rule " + ruleName + " not found.";
                    throw new Exception(msg);
                }

                ManagedObjectReference taskmor =
                    cb._connection._service.ConfigureStorageDrsForPod_Task(srmRef,
                                                                           sdrsMor, sdrsConfigSpec, true);
                if (taskmor != null)
                {
                    String status = cb.getServiceUtil().WaitForTask(
                        taskmor);
                    if (status.Equals("sucess"))
                    {
                        Console.WriteLine("Success: Delete VmdkAntiAffinity Rule.");
                    }
                    else
                    {
                        Console.WriteLine("Failure: Delete VmdkAntiAffinity Rule.");
                        throw new Exception(status);
                    }
                }
            }
            else
            {
                throw new Exception("Storage Pod " + podName + "not found");
            }
        }
示例#2
0
        /// <summary>
        /// Method to delete VM Anti AffinityRule
        /// </summary>
        /// <param name="podName">string</param>
        /// <param name="ruleName">string</param>
        private void DeleteVmAntiAffinityRule(string podName, string ruleName)
        {
            ManagedObjectReference srmRef  = cb._connection._sic.storageResourceManager;
            ManagedObjectReference sdrsMor = cb._svcUtil.getEntityByName("StoragePod", podName);

            if (sdrsMor != null)
            {
                PodStorageDrsEntry          podStorageDrsEntry     = (PodStorageDrsEntry)cb._svcUtil.GetDynamicProperty(sdrsMor, "podStorageDrsEntry");
                ClusterRuleSpec             ruleSpec               = new ClusterRuleSpec();
                ClusterRuleInfo[]           clusterRuleInfo        = podStorageDrsEntry.storageDrsConfig.podConfig.rule;
                StorageDrsConfigSpec        sdrsConfigSpec         = new StorageDrsConfigSpec();
                StorageDrsPodConfigSpec     podConfigSpec          = new StorageDrsPodConfigSpec();
                ClusterAntiAffinityRuleSpec vmAntiAffinityRuleSpec = null;
                if (clusterRuleInfo != null)
                {
                    foreach (ClusterRuleInfo vmRule in clusterRuleInfo)
                    {
                        if (vmRule.name.Equals(ruleName))
                        {
                            vmAntiAffinityRuleSpec = (ClusterAntiAffinityRuleSpec)vmRule;
                        }
                    }
                    if (vmAntiAffinityRuleSpec != null)
                    {
                        ruleSpec.operation           = ArrayUpdateOperation.remove;
                        ruleSpec.info                = vmAntiAffinityRuleSpec;
                        ruleSpec.removeKey           = vmAntiAffinityRuleSpec.key;
                        podConfigSpec.rule           = new ClusterRuleSpec[] { ruleSpec };
                        sdrsConfigSpec.podConfigSpec = podConfigSpec;
                        ManagedObjectReference taskmor =
                            cb._connection._service.ConfigureStorageDrsForPod_Task(srmRef,
                                                                                   sdrsMor, sdrsConfigSpec, true);
                        if (taskmor != null)
                        {
                            String status = cb.getServiceUtil().WaitForTask(taskmor);
                            if (status.Equals("sucess"))
                            {
                                Console.WriteLine("Success: Delete VmAntiAffinity Rule.");
                            }
                            else
                            {
                                Console.WriteLine("Failure: Delete VmAntiAffinity Rule.");
                                throw new Exception(status);
                            }
                        }
                    }
                    else
                    {
                        string msg = "\nFailure: Rule " + ruleName + " not found.";
                        throw new Exception(msg);
                    }
                }
            }
            else
            {
                throw new Exception("Storage Pod " + podName + "not found");
            }
        }
示例#3
0
        /// <summary>
        /// Create Object of StorageDrsConfigSpec
        /// </summary>
        /// <param name="behavior">string</param>
        /// <param name="loadBalanceInterval">string</param>
        /// <returns></returns>
        private StorageDrsConfigSpec GetStorageDrsConfigSpec(string behavior, string loadBalanceInterval)
        {
            StorageDrsConfigSpec    sdrsConfigSpec = new StorageDrsConfigSpec();
            StorageDrsPodConfigSpec podConfigSpec  = new StorageDrsPodConfigSpec();

            if (behavior.Equals("true"))
            {
                podConfigSpec.defaultVmBehavior = "automated";
            }
            else
            {
                podConfigSpec.defaultVmBehavior = "manual";
            }
            podConfigSpec.defaultIntraVmAffinity          = true;
            podConfigSpec.defaultIntraVmAffinitySpecified = true;
            podConfigSpec.enabled          = true;
            podConfigSpec.enabledSpecified = true;
            StorageDrsIoLoadBalanceConfig sdrsIoLoadBalanceConfig =
                new StorageDrsIoLoadBalanceConfig();

            if (ioLatencythreshold != null)
            {
                sdrsIoLoadBalanceConfig.ioLatencyThreshold          = int.Parse(ioLatencythreshold);
                sdrsIoLoadBalanceConfig.ioLatencyThresholdSpecified = true;
            }
            if (ioLoadImbalanceThreshold != null)
            {
                sdrsIoLoadBalanceConfig.ioLoadImbalanceThreshold          = int.Parse(ioLoadImbalanceThreshold);
                sdrsIoLoadBalanceConfig.ioLoadImbalanceThresholdSpecified = true;
            }
            podConfigSpec.ioLoadBalanceConfig           = sdrsIoLoadBalanceConfig;
            podConfigSpec.ioLoadBalanceEnabled          = true;
            podConfigSpec.ioLoadBalanceEnabledSpecified = true;
            if (loadBalanceInterval != null)
            {
                podConfigSpec.loadBalanceInterval          = int.Parse(loadBalanceInterval);
                podConfigSpec.loadBalanceIntervalSpecified = true;
            }
            StorageDrsSpaceLoadBalanceConfig sdrsSpaceLoadBalanceConfig =
                new StorageDrsSpaceLoadBalanceConfig();

            if (spaceUtilizationThreshold != null)
            {
                sdrsSpaceLoadBalanceConfig.spaceUtilizationThreshold          = int.Parse(spaceUtilizationThreshold);
                sdrsSpaceLoadBalanceConfig.spaceUtilizationThresholdSpecified = true;
            }
            if (minSpaceUtilizationDifference != null)
            {
                sdrsSpaceLoadBalanceConfig.minSpaceUtilizationDifference          = int.Parse(minSpaceUtilizationDifference);
                sdrsSpaceLoadBalanceConfig.minSpaceUtilizationDifferenceSpecified = true;
            }
            podConfigSpec.spaceLoadBalanceConfig = sdrsSpaceLoadBalanceConfig;
            sdrsConfigSpec.podConfigSpec         = podConfigSpec;
            return(sdrsConfigSpec);
        }
        /// <summary>
        /// Create Object of StorageDrsConfigSpec
        /// </summary>
        /// <param name="behavior">string</param>
        /// <param name="loadBalanceInterval">string</param>
        /// <returns></returns>
        private StorageDrsConfigSpec GetStorageDrsConfigSpec(string behavior, string loadBalanceInterval)
        {

            StorageDrsConfigSpec sdrsConfigSpec = new StorageDrsConfigSpec();
            StorageDrsPodConfigSpec podConfigSpec = new StorageDrsPodConfigSpec();
            if (behavior.Equals("true"))
            {
                podConfigSpec.defaultVmBehavior = "automated";
            }
            else
            {
                podConfigSpec.defaultVmBehavior = "manual";
            }
            podConfigSpec.defaultIntraVmAffinity = true;
            podConfigSpec.defaultIntraVmAffinitySpecified = true;
            podConfigSpec.enabled = true;
            podConfigSpec.enabledSpecified = true;
            StorageDrsIoLoadBalanceConfig sdrsIoLoadBalanceConfig =
            new StorageDrsIoLoadBalanceConfig();
            if (ioLatencythreshold != null)
            {
                sdrsIoLoadBalanceConfig.ioLatencyThreshold = int.Parse(ioLatencythreshold);
                sdrsIoLoadBalanceConfig.ioLatencyThresholdSpecified = true;
            }
            if (ioLoadImbalanceThreshold != null)
            {
                sdrsIoLoadBalanceConfig.ioLoadImbalanceThreshold = int.Parse(ioLoadImbalanceThreshold);
                sdrsIoLoadBalanceConfig.ioLoadImbalanceThresholdSpecified = true;
            }
            podConfigSpec.ioLoadBalanceConfig = sdrsIoLoadBalanceConfig;
            podConfigSpec.ioLoadBalanceEnabled = true;
            podConfigSpec.ioLoadBalanceEnabledSpecified = true;
            if (loadBalanceInterval != null)
            {
                podConfigSpec.loadBalanceInterval = int.Parse(loadBalanceInterval);
                podConfigSpec.loadBalanceIntervalSpecified = true;
            }
            StorageDrsSpaceLoadBalanceConfig sdrsSpaceLoadBalanceConfig =
                             new StorageDrsSpaceLoadBalanceConfig();
            if (spaceUtilizationThreshold != null)
            {
                sdrsSpaceLoadBalanceConfig.spaceUtilizationThreshold = int.Parse(spaceUtilizationThreshold);
                sdrsSpaceLoadBalanceConfig.spaceUtilizationThresholdSpecified = true;
            }
            if (minSpaceUtilizationDifference != null)
            {
                sdrsSpaceLoadBalanceConfig.minSpaceUtilizationDifference = int.Parse(minSpaceUtilizationDifference);
                sdrsSpaceLoadBalanceConfig.minSpaceUtilizationDifferenceSpecified = true;
            }
            podConfigSpec.spaceLoadBalanceConfig = sdrsSpaceLoadBalanceConfig;
            sdrsConfigSpec.podConfigSpec = podConfigSpec;
            return sdrsConfigSpec;

        }
示例#5
0
        /// <summary>
        /// Method to create Storage DRSgroup
        /// </summary>
        private void CreateSDRS()
        {
            string dcName                                 = cb.get_option("dcname");
            string drsname                                = cb.get_option("sdrsname");
            string behavior                               = cb.get_option("behavior");
            string loadBalanceInterval                    = cb.get_option("loadbalinterval");
            string dsname                                 = cb.get_option("datastore");
            ManagedObjectReference storagePod             = new ManagedObjectReference();
            ManagedObjectReference storageResourceManager =
                cb._connection._sic.storageResourceManager;
            ManagedObjectReference dcmor = cb._svcUtil.getEntityByName("Datacenter", dcName);

            if (dcmor != null)
            {
                ManagedObjectReference datastoreFolder = cb.getServiceUtil().GetMoRefProp
                                                             (dcmor, "datastoreFolder");
                storagePod = cb.getConnection()._service.CreateStoragePod(datastoreFolder, drsname);

                Console.WriteLine("Success: Creating storagePod.");
                StorageDrsConfigSpec   sdrsConfigSpec = GetStorageDrsConfigSpec(behavior, loadBalanceInterval);
                ManagedObjectReference taskmor        =
                    cb.getConnection()._service.ConfigureStorageDrsForPod_Task(storageResourceManager,
                                                                               storagePod, sdrsConfigSpec, true);
                if (taskmor != null)
                {
                    String status = cb.getServiceUtil().WaitForTask(
                        taskmor);
                    if (status.Equals("sucess"))
                    {
                        Console.WriteLine("Sucessfully configured storage pod"
                                          + drsname);
                    }
                    else
                    {
                        Console.WriteLine("Failure: Configuring storagePod");
                        throw new Exception(status);
                    }
                }
                if (dsname != null)
                {
                    ManagedObjectReference dsMoref = cb._svcUtil.getEntityByName("Datastore", dsname);
                    if (dsMoref != null)
                    {
                        ManagedObjectReference[] dslist = new ManagedObjectReference[] { dsMoref };
                        ManagedObjectReference   task   = cb.getConnection()._service.
                                                          MoveIntoFolder_Task(storagePod, dslist);
                        if (task != null)
                        {
                            String status = cb.getServiceUtil().WaitForTask(
                                taskmor);
                            if (status.Equals("sucess"))
                            {
                                Console.WriteLine("\nSuccess: Adding datastore to storagePod.");
                            }
                            else
                            {
                                Console.WriteLine("Failure: Adding datastore to storagePod.");
                                throw new Exception(status);
                            }
                        }
                    }
                    else
                    {
                        throw new Exception("Datastore" + dsname + "not found");
                    }
                }
            }
            else
            {
                throw new Exception("datacenter" + dcName + "not found");
            }
        }
示例#6
0
        /// <summary>
        /// Method to add VmAntiAffinityRule
        /// </summary>
        /// <param name="podName">string</param>
        /// <param name="ruleName">string</param>
        /// <param name="enabled">string</param>
        /// <param name="vm">string array</param>
        private void AddVmAntiAffinityRule(string podName,
                                           string ruleName, string enabled,
                                           string[] vm)
        {
            ManagedObjectReference srmRef  = cb._connection._sic.storageResourceManager;
            ManagedObjectReference sdrsMor = cb._svcUtil.getEntityByName("StoragePod", podName);

            if (sdrsMor != null)
            {
                ManagedObjectReference      vmMoref                = null;
                StorageDrsConfigSpec        sdrsConfigSpec         = new StorageDrsConfigSpec();
                StorageDrsPodConfigSpec     podConfigSpec          = new StorageDrsPodConfigSpec();
                ClusterAntiAffinityRuleSpec vmAntiAffinityRuleSpec =
                    new ClusterAntiAffinityRuleSpec();
                ClusterRuleSpec ruleSpec = new ClusterRuleSpec();
                vmAntiAffinityRuleSpec.name = ruleName;
                List <ManagedObjectReference> mor = new List <ManagedObjectReference>();
                if (enabled.Equals("true"))
                {
                    vmAntiAffinityRuleSpec.enabled          = true;
                    vmAntiAffinityRuleSpec.enabledSpecified = true;
                }
                else
                {
                    vmAntiAffinityRuleSpec.enabled          = false;
                    vmAntiAffinityRuleSpec.enabledSpecified = false;
                }
                foreach (string vmname in vm)
                {
                    vmMoref = cb._svcUtil.getEntityByName("VirtualMachine", vmname);
                    if (vmMoref != null)
                    {
                        mor.Add(vmMoref);
                    }
                    else
                    {
                        string message = "Failure: " + vmname + "VM not found";
                        throw new Exception(message);
                    }
                }
                vmAntiAffinityRuleSpec.vm                   = mor.ToArray();
                vmAntiAffinityRuleSpec.userCreated          = true;
                vmAntiAffinityRuleSpec.userCreatedSpecified = true;
                ruleSpec.info                = vmAntiAffinityRuleSpec;
                ruleSpec.operation           = ArrayUpdateOperation.add;
                podConfigSpec.rule           = new ClusterRuleSpec[] { ruleSpec };
                sdrsConfigSpec.podConfigSpec = podConfigSpec;
                ManagedObjectReference taskmor =
                    cb._connection._service.ConfigureStorageDrsForPod_Task(srmRef,
                                                                           sdrsMor, sdrsConfigSpec, true);
                if (taskmor != null)
                {
                    String status = cb.getServiceUtil().WaitForTask(
                        taskmor);
                    if (status.Equals("sucess"))
                    {
                        Console.WriteLine("Success: Adding VmAntiAffinity Rule.");
                    }
                    else
                    {
                        Console.WriteLine("Failure: Adding VmAntiAffinity Rule.");
                        throw new Exception(status);
                    }
                }
            }
            else
            {
                throw new Exception("Storage Pod " + podName + "not found");
            }
        }
示例#7
0
        /// <summary>
        /// Method to add VmdkAntiAffinityRule
        /// </summary>
        /// <param name="podName">string</param>
        /// <param name="ruleName">string</param>
        /// <param name="enabled">string</param>
        /// <param name="vm">string</param>
        private void AddVmdkAntiAffinityRule(string podName, string ruleName, string enabled,
                                             string vm)
        {
            ManagedObjectReference srmRef  = cb._connection._sic.storageResourceManager;
            ManagedObjectReference sdrsMor = cb._svcUtil.getEntityByName("StoragePod", podName);

            if (sdrsMor != null)
            {
                ManagedObjectReference          vmMoref                  = null;
                StorageDrsConfigSpec            sdrsConfigSpec           = new StorageDrsConfigSpec();
                StorageDrsVmConfigSpec          drsVmConfigSpec          = new StorageDrsVmConfigSpec();
                StorageDrsVmConfigInfo          drsVmConfigInfo          = new StorageDrsVmConfigInfo();
                VirtualDiskAntiAffinityRuleSpec vmdkAntiAffinityRuleSpec =
                    new VirtualDiskAntiAffinityRuleSpec();
                vmdkAntiAffinityRuleSpec.name = ruleName;
                if (enabled.Equals("true"))
                {
                    vmdkAntiAffinityRuleSpec.enabled          = true;
                    vmdkAntiAffinityRuleSpec.enabledSpecified = true;
                }
                else
                {
                    vmdkAntiAffinityRuleSpec.enabled          = false;
                    vmdkAntiAffinityRuleSpec.enabledSpecified = false;
                }
                vmMoref = cb._svcUtil.getEntityByName("VirtualMachine", vm);
                if (vmMoref != null)
                {
                    VirtualMachineConfigInfo vmConfigInfo = (VirtualMachineConfigInfo)cb._svcUtil.GetDynamicProperty(vmMoref, "config");
                    VirtualDevice[]          vDevice      = vmConfigInfo.hardware.device;
                    List <VirtualDevice>     vDisk        = new List <VirtualDevice>();
                    VirtualDevice[]          virtualDisk  = null;
                    List <int> diskIdList = new List <int>();
                    foreach (VirtualDevice device in vDevice)
                    {
                        if (device.GetType().Name.Equals("VirtualDisk"))
                        {
                            vDisk.Add(device);
                            diskIdList.Add(device.key);
                        }
                    }
                    virtualDisk = vDisk.ToArray();
                    vmdkAntiAffinityRuleSpec.diskId = diskIdList.ToArray();
                    if (virtualDisk.Length < 2)
                    {
                        throw new Exception(
                                  "VM should have minimum of 2 virtual disks"
                                  + " while adding VMDK AntiAffinity Rule.");
                    }
                    Console.WriteLine("Adding below list of virtual disk to rule "
                                      + ruleName + " :");
                    foreach (VirtualDevice device in virtualDisk)
                    {
                        Console.WriteLine("Virtual Disk : "
                                          + device.deviceInfo.label + ", Key : "
                                          + device.key);
                    }

                    vmdkAntiAffinityRuleSpec.userCreated          = true;
                    vmdkAntiAffinityRuleSpec.userCreatedSpecified = true;
                    drsVmConfigInfo.intraVmAntiAffinity           = vmdkAntiAffinityRuleSpec;
                    drsVmConfigInfo.intraVmAffinitySpecified      = true;
                    drsVmConfigInfo.vm = vmMoref;
                }
                else
                {
                    string message = "Failure: " + vm + "VM not found";
                    throw new Exception(message);
                }
                drsVmConfigSpec.info        = drsVmConfigInfo;
                drsVmConfigSpec.operation   = ArrayUpdateOperation.add;
                sdrsConfigSpec.vmConfigSpec = new StorageDrsVmConfigSpec[] { drsVmConfigSpec };
                ManagedObjectReference taskmor =
                    cb._connection._service.ConfigureStorageDrsForPod_Task(srmRef,
                                                                           sdrsMor, sdrsConfigSpec, true);
                if (taskmor != null)
                {
                    String status = cb.getServiceUtil().WaitForTask(
                        taskmor);
                    if (status.Equals("sucess"))
                    {
                        Console.WriteLine("Success: Adding VmdkAntiAffinity Rule.");
                    }
                    else
                    {
                        Console.WriteLine("Failure: Adding VmdkAntiAffinity Rule.");
                        throw new Exception(status);
                    }
                }
            }
            else
            {
                throw new Exception("Storage Pod " + podName + "not found");
            }
        }
示例#8
0
        /// <summary>
        /// Method to modify VM Anti Affinity Rule
        /// </summary>
        /// <param name="podName">string</param>
        /// <param name="ruleName">string</param>
        /// <param name="newRuleName">string</param>
        /// <param name="enabled">string</param>
        /// <param name="vmList">string array</param>
        private void ModifyVmAntiAffinityRule(string podName, string ruleName,
                                              string newRuleName, string enabled,
                                              string[] vmList)
        {
            ManagedObjectReference srmRef  = cb._connection._sic.storageResourceManager;
            ManagedObjectReference sdrsMor = cb._svcUtil.getEntityByName("StoragePod", podName);

            if (sdrsMor != null)
            {
                PodStorageDrsEntry            podStorageDrsEntry     = (PodStorageDrsEntry)cb._svcUtil.GetDynamicProperty(sdrsMor, "podStorageDrsEntry");
                ClusterRuleInfo[]             clusterRuleInfo        = podStorageDrsEntry.storageDrsConfig.podConfig.rule;
                ClusterRuleSpec               ruleSpec               = new ClusterRuleSpec();
                List <ManagedObjectReference> vmMorefList            = new List <ManagedObjectReference>();
                ManagedObjectReference        vmMoref                = null;
                StorageDrsConfigSpec          sdrsConfigSpec         = new StorageDrsConfigSpec();
                StorageDrsPodConfigSpec       podConfigSpec          = new StorageDrsPodConfigSpec();
                ClusterAntiAffinityRuleSpec   vmAntiAffinityRuleSpec = null;
                foreach (ClusterRuleInfo vmRule in clusterRuleInfo)
                {
                    if (vmRule.name.Equals(ruleName))
                    {
                        vmAntiAffinityRuleSpec = (ClusterAntiAffinityRuleSpec)vmRule;
                    }
                }

                if (vmAntiAffinityRuleSpec != null)
                {
                    if (newRuleName != null)
                    {
                        vmAntiAffinityRuleSpec.name = newRuleName;
                    }

                    if (enabled.Equals("true"))
                    {
                        vmAntiAffinityRuleSpec.enabled          = true;
                        vmAntiAffinityRuleSpec.enabledSpecified = true;
                    }
                    else
                    {
                        vmAntiAffinityRuleSpec.enabled          = false;
                        vmAntiAffinityRuleSpec.enabledSpecified = false;
                    }

                    foreach (string vmname in vmList)
                    {
                        vmMoref = cb._svcUtil.getEntityByName("VirtualMachine", vmname);
                        if (vmMoref != null)
                        {
                            vmMorefList.Add(vmMoref);
                        }
                        else
                        {
                            string message = "Failure: " + vmname + "VM not found";
                            throw new Exception(message);
                        }
                    }
                    vmAntiAffinityRuleSpec.vm = vmMorefList.ToArray();

                    vmAntiAffinityRuleSpec.userCreated          = true;
                    vmAntiAffinityRuleSpec.userCreatedSpecified = true;
                    ruleSpec.info                = vmAntiAffinityRuleSpec;
                    ruleSpec.operation           = ArrayUpdateOperation.edit;
                    podConfigSpec.rule           = new ClusterRuleSpec[] { ruleSpec };
                    sdrsConfigSpec.podConfigSpec = podConfigSpec;
                    ManagedObjectReference taskmor =
                        cb._connection._service.ConfigureStorageDrsForPod_Task(srmRef,
                                                                               sdrsMor, sdrsConfigSpec, true);

                    if (taskmor != null)
                    {
                        String status = cb.getServiceUtil().WaitForTask(
                            taskmor);
                        if (status.Equals("sucess"))
                        {
                            Console.WriteLine("Success: Modifying VmAntiAffinity Rule.");
                        }
                        else
                        {
                            Console.WriteLine("Failure: Modifying VmAntiAffinity Rule.");
                            throw new Exception(status);
                        }
                    }
                }
                else
                {
                    string msg = "\nFailure: Rule " + ruleName + " not found.";
                    throw new Exception(msg);
                }
            }
            else
            {
                throw new Exception("Storage Pod " + podName + "not found");
            }
        }
示例#9
0
        /// <summary>
        /// Method to add VmAntiAffinityRule
        /// </summary>
        /// <param name="podName">string</param>
        /// <param name="ruleName">string</param>
        /// <param name="enabled">string</param>
        /// <param name="vm">string array</param>
        private void AddVmAntiAffinityRule(string podName,
                                           string ruleName, string enabled,
                                           string[] vm)
        {
            ManagedObjectReference srmRef = cb._connection._sic.storageResourceManager;
            ManagedObjectReference sdrsMor = cb._svcUtil.getEntityByName("StoragePod", podName);
            if (sdrsMor != null)
            {
                ManagedObjectReference vmMoref = null;
                StorageDrsConfigSpec sdrsConfigSpec = new StorageDrsConfigSpec();
                StorageDrsPodConfigSpec podConfigSpec = new StorageDrsPodConfigSpec();
                ClusterAntiAffinityRuleSpec vmAntiAffinityRuleSpec =
               new ClusterAntiAffinityRuleSpec();
                ClusterRuleSpec ruleSpec = new ClusterRuleSpec();
                vmAntiAffinityRuleSpec.name = ruleName;
                List<ManagedObjectReference> mor = new List<ManagedObjectReference>();
                if (enabled.Equals("true"))
                {
                    vmAntiAffinityRuleSpec.enabled = true;
                    vmAntiAffinityRuleSpec.enabledSpecified = true;
                }
                else
                {
                    vmAntiAffinityRuleSpec.enabled = false;
                    vmAntiAffinityRuleSpec.enabledSpecified = false;
                }
                foreach (string vmname in vm)
                {
                    vmMoref = cb._svcUtil.getEntityByName("VirtualMachine", vmname);
                    if (vmMoref != null)
                    {
                        mor.Add(vmMoref);
                    }
                    else
                    {
                        string message = "Failure: " + vmname + "VM not found";
                        throw new Exception(message);
                    }
                }
                vmAntiAffinityRuleSpec.vm = mor.ToArray();
                vmAntiAffinityRuleSpec.userCreated = true;
                vmAntiAffinityRuleSpec.userCreatedSpecified = true;
                ruleSpec.info = vmAntiAffinityRuleSpec;
                ruleSpec.operation = ArrayUpdateOperation.add;
                podConfigSpec.rule = new ClusterRuleSpec[] { ruleSpec };
                sdrsConfigSpec.podConfigSpec = podConfigSpec;
                ManagedObjectReference taskmor =
                       cb._connection._service.ConfigureStorageDrsForPod_Task(srmRef,
                       sdrsMor, sdrsConfigSpec, true);
                if (taskmor != null)
                {
                    String status = cb.getServiceUtil().WaitForTask(
                          taskmor);
                    if (status.Equals("sucess"))
                    {
                        Console.WriteLine("Success: Adding VmAntiAffinity Rule.");
                    }
                    else
                    {
                        Console.WriteLine("Failure: Adding VmAntiAffinity Rule.");
                        throw new Exception(status);
                    }
                }

            }
            else
            {
                throw new Exception("Storage Pod " + podName + "not found");
            }
        }
示例#10
0
        /// <summary>
        /// Method to add VmdkAntiAffinityRule
        /// </summary>
        /// <param name="podName">string</param>
        /// <param name="ruleName">string</param>
        /// <param name="enabled">string</param>
        /// <param name="vm">string</param>
        private void AddVmdkAntiAffinityRule(string podName, string ruleName, string enabled,
                                             string vm)
        {
            ManagedObjectReference srmRef = cb._connection._sic.storageResourceManager;
            ManagedObjectReference sdrsMor = cb._svcUtil.getEntityByName("StoragePod", podName);
            if (sdrsMor != null)
            {
                ManagedObjectReference vmMoref = null;
                StorageDrsConfigSpec sdrsConfigSpec = new StorageDrsConfigSpec();
                StorageDrsVmConfigSpec drsVmConfigSpec = new StorageDrsVmConfigSpec();
                StorageDrsVmConfigInfo drsVmConfigInfo = new StorageDrsVmConfigInfo();
                VirtualDiskAntiAffinityRuleSpec vmdkAntiAffinityRuleSpec =
                      new VirtualDiskAntiAffinityRuleSpec();
                vmdkAntiAffinityRuleSpec.name = ruleName;
                if (enabled.Equals("true"))
                {
                    vmdkAntiAffinityRuleSpec.enabled = true;
                    vmdkAntiAffinityRuleSpec.enabledSpecified = true;
                }
                else
                {
                    vmdkAntiAffinityRuleSpec.enabled = false;
                    vmdkAntiAffinityRuleSpec.enabledSpecified = false;
                }
                vmMoref = cb._svcUtil.getEntityByName("VirtualMachine", vm);
                if (vmMoref != null)
                {
                    VirtualMachineConfigInfo vmConfigInfo = (VirtualMachineConfigInfo)cb._svcUtil.GetDynamicProperty(vmMoref, "config");
                    VirtualDevice[] vDevice = vmConfigInfo.hardware.device;
                    List<VirtualDevice> vDisk = new List<VirtualDevice>();
                    VirtualDevice[] virtualDisk = null;
                    List<int> diskIdList = new List<int>();
                    foreach (VirtualDevice device in vDevice)
                    {
                        if (device.GetType().Name.Equals("VirtualDisk"))
                        {
                            vDisk.Add(device);
                            diskIdList.Add(device.key);
                        }
                    }
                    virtualDisk = vDisk.ToArray();
                    vmdkAntiAffinityRuleSpec.diskId = diskIdList.ToArray();
                    if (virtualDisk.Length < 2)
                    {
                        throw new Exception(
                              "VM should have minimum of 2 virtual disks"
                                    + " while adding VMDK AntiAffinity Rule.");
                    }
                    Console.WriteLine("Adding below list of virtual disk to rule "
                 + ruleName + " :");
                    foreach (VirtualDevice device in virtualDisk)
                    {
                        Console.WriteLine("Virtual Disk : "
                             + device.deviceInfo.label + ", Key : "
                             + device.key);
                    }

                    vmdkAntiAffinityRuleSpec.userCreated = true;
                    vmdkAntiAffinityRuleSpec.userCreatedSpecified = true;
                    drsVmConfigInfo.intraVmAntiAffinity = vmdkAntiAffinityRuleSpec;
                    drsVmConfigInfo.intraVmAffinitySpecified = true;
                    drsVmConfigInfo.vm = vmMoref;
                }
                else
                {
                    string message = "Failure: " + vm + "VM not found";
                    throw new Exception(message);
                }
                drsVmConfigSpec.info = drsVmConfigInfo;
                drsVmConfigSpec.operation = ArrayUpdateOperation.add;
                sdrsConfigSpec.vmConfigSpec = new StorageDrsVmConfigSpec[] { drsVmConfigSpec };
                ManagedObjectReference taskmor =
               cb._connection._service.ConfigureStorageDrsForPod_Task(srmRef,
                     sdrsMor, sdrsConfigSpec, true);
                if (taskmor != null)
                {
                    String status = cb.getServiceUtil().WaitForTask(
                          taskmor);
                    if (status.Equals("sucess"))
                    {
                        Console.WriteLine("Success: Adding VmdkAntiAffinity Rule.");
                    }
                    else
                    {
                        Console.WriteLine("Failure: Adding VmdkAntiAffinity Rule.");
                        throw new Exception(status);
                    }
                }
            }
            else
            {
                throw new Exception("Storage Pod " + podName + "not found");
            }
        }
示例#11
0
 /// <summary>
 /// Method to Modify VmdkAntiAffinityRule
 /// </summary>
 /// <param name="podName">string</param>
 /// <param name="ruleName">string</param>
 /// <param name="newRuleName">string</param>
 /// <param name="enabled">string</param>
 private void ModifyVmdkAntiAffinityRule(string podName, string ruleName,
                                         string newRuleName, string enabled)
 {
     ManagedObjectReference srmRef = cb._connection._sic.storageResourceManager;
     ManagedObjectReference sdrsMor = cb._svcUtil.getEntityByName("StoragePod", podName);
     if (sdrsMor != null)
     {
         PodStorageDrsEntry podStorageDrsEntry = (PodStorageDrsEntry)cb._svcUtil.GetDynamicProperty(sdrsMor, "podStorageDrsEntry");
         StorageDrsVmConfigInfo drsVmConfigInfo = null;
         StorageDrsConfigSpec sdrsConfigSpec = new StorageDrsConfigSpec();
         StorageDrsVmConfigSpec drsVmConfigSpec = new StorageDrsVmConfigSpec();
         StorageDrsVmConfigInfo[] sdrsVmConfig = podStorageDrsEntry.storageDrsConfig.vmConfig;
         foreach (StorageDrsVmConfigInfo vmConfig in sdrsVmConfig)
         {
             if (vmConfig.intraVmAntiAffinity != null)
             {
                 if (vmConfig.intraVmAntiAffinity.name.Equals(ruleName))
                 {
                     drsVmConfigInfo = vmConfig;
                 }
             }
         }
         if (drsVmConfigInfo != null)
         {
             if (newRuleName != null)
             {
                 drsVmConfigInfo.intraVmAntiAffinity.name = newRuleName;
             }
             if (enabled != null)
             {
                 if (enabled.Equals("true"))
                 {
                     drsVmConfigInfo.intraVmAntiAffinity.enabled = true;
                     drsVmConfigInfo.intraVmAntiAffinity.enabledSpecified = true;
                 }
                 else
                 {
                     drsVmConfigInfo.intraVmAntiAffinity.enabled = false;
                     drsVmConfigInfo.intraVmAntiAffinity.enabledSpecified = false;
                 }
             }
             drsVmConfigSpec.info = drsVmConfigInfo;
             drsVmConfigSpec.operation = ArrayUpdateOperation.edit;
             sdrsConfigSpec.vmConfigSpec = new StorageDrsVmConfigSpec[] { drsVmConfigSpec };
         }
         else
         {
             string msg = "\nFailure: Rule " + ruleName + " not found.";
             throw new Exception(msg);
         }
         ManagedObjectReference taskmor =
        cb._connection._service.ConfigureStorageDrsForPod_Task(srmRef,
              sdrsMor, sdrsConfigSpec, true);
         if (taskmor != null)
         {
             String status = cb.getServiceUtil().WaitForTask(
                   taskmor);
             if (status.Equals("sucess"))
             {
                 Console.WriteLine("Success: Modify VmdkAntiAffinity Rule.");
             }
             else
             {
                 Console.WriteLine("Failure: Modify VmdkAntiAffinity Rule.");
                 throw new Exception(status);
             }
         }
     }
     else
     {
         throw new Exception("Storage Pod " + podName + "not found");
     }
 }
示例#12
0
 /// <summary>
 /// Method to delete VM Anti AffinityRule
 /// </summary>
 /// <param name="podName">string</param>
 /// <param name="ruleName">string</param>
 private void DeleteVmAntiAffinityRule(string podName, string ruleName)
 {
     ManagedObjectReference srmRef = cb._connection._sic.storageResourceManager;
     ManagedObjectReference sdrsMor = cb._svcUtil.getEntityByName("StoragePod", podName);
     if (sdrsMor != null)
     {
         PodStorageDrsEntry podStorageDrsEntry = (PodStorageDrsEntry)cb._svcUtil.GetDynamicProperty(sdrsMor, "podStorageDrsEntry");
         ClusterRuleSpec ruleSpec = new ClusterRuleSpec();
         ClusterRuleInfo[] clusterRuleInfo = podStorageDrsEntry.storageDrsConfig.podConfig.rule;
         StorageDrsConfigSpec sdrsConfigSpec = new StorageDrsConfigSpec();
         StorageDrsPodConfigSpec podConfigSpec = new StorageDrsPodConfigSpec();
         ClusterAntiAffinityRuleSpec vmAntiAffinityRuleSpec = null;
         if (clusterRuleInfo != null)
         {
             foreach (ClusterRuleInfo vmRule in clusterRuleInfo)
             {
                 if (vmRule.name.Equals(ruleName))
                 {
                     vmAntiAffinityRuleSpec = (ClusterAntiAffinityRuleSpec)vmRule;
                 }
             }
             if (vmAntiAffinityRuleSpec != null)
             {
                 ruleSpec.operation = ArrayUpdateOperation.remove;
                 ruleSpec.info = vmAntiAffinityRuleSpec;
                 ruleSpec.removeKey = vmAntiAffinityRuleSpec.key;
                 podConfigSpec.rule = new ClusterRuleSpec[] { ruleSpec };
                 sdrsConfigSpec.podConfigSpec = podConfigSpec;
                 ManagedObjectReference taskmor =
                        cb._connection._service.ConfigureStorageDrsForPod_Task(srmRef,
                  sdrsMor, sdrsConfigSpec, true);
                 if (taskmor != null)
                 {
                     String status = cb.getServiceUtil().WaitForTask(taskmor);
                     if (status.Equals("sucess"))
                     {
                         Console.WriteLine("Success: Delete VmAntiAffinity Rule.");
                     }
                     else
                     {
                         Console.WriteLine("Failure: Delete VmAntiAffinity Rule.");
                         throw new Exception(status);
                     }
                 }
             }
             else
             {
                 string msg = "\nFailure: Rule " + ruleName + " not found.";
                 throw new Exception(msg);
             }
         }
     }
     else
     {
         throw new Exception("Storage Pod " + podName + "not found");
     }
 }
示例#13
0
        /// <summary>
        /// Method to modify VM Anti Affinity Rule
        /// </summary>
        /// <param name="podName">string</param>
        /// <param name="ruleName">string</param>
        /// <param name="newRuleName">string</param>
        /// <param name="enabled">string</param>
        /// <param name="vmList">string array</param>
        private void ModifyVmAntiAffinityRule(string podName, string ruleName,
                                              string newRuleName, string enabled,
                                              string[] vmList)
        {
            ManagedObjectReference srmRef = cb._connection._sic.storageResourceManager;
            ManagedObjectReference sdrsMor = cb._svcUtil.getEntityByName("StoragePod", podName);
            if (sdrsMor != null)
            {
                PodStorageDrsEntry podStorageDrsEntry = (PodStorageDrsEntry)cb._svcUtil.GetDynamicProperty(sdrsMor, "podStorageDrsEntry");
                ClusterRuleInfo[] clusterRuleInfo = podStorageDrsEntry.storageDrsConfig.podConfig.rule;
                ClusterRuleSpec ruleSpec = new ClusterRuleSpec();
                List<ManagedObjectReference> vmMorefList = new List<ManagedObjectReference>();
                ManagedObjectReference vmMoref = null;
                StorageDrsConfigSpec sdrsConfigSpec = new StorageDrsConfigSpec();
                StorageDrsPodConfigSpec podConfigSpec = new StorageDrsPodConfigSpec();
                ClusterAntiAffinityRuleSpec vmAntiAffinityRuleSpec = null;
                foreach (ClusterRuleInfo vmRule in clusterRuleInfo)
                {
                    if (vmRule.name.Equals(ruleName))
                    {
                        vmAntiAffinityRuleSpec = (ClusterAntiAffinityRuleSpec)vmRule;
                    }
                }

                if (vmAntiAffinityRuleSpec != null)
                {
                    if (newRuleName != null)
                    {
                        vmAntiAffinityRuleSpec.name = newRuleName;
                    }

                    if (enabled.Equals("true"))
                    {
                        vmAntiAffinityRuleSpec.enabled = true;
                        vmAntiAffinityRuleSpec.enabledSpecified = true;
                    }
                    else
                    {
                        vmAntiAffinityRuleSpec.enabled = false;
                        vmAntiAffinityRuleSpec.enabledSpecified = false;
                    }

                    foreach (string vmname in vmList)
                    {
                        vmMoref = cb._svcUtil.getEntityByName("VirtualMachine", vmname);
                        if (vmMoref != null)
                        {
                            vmMorefList.Add(vmMoref);
                        }
                        else
                        {
                            string message = "Failure: " + vmname + "VM not found";
                            throw new Exception(message);
                        }
                    }
                    vmAntiAffinityRuleSpec.vm = vmMorefList.ToArray();

                    vmAntiAffinityRuleSpec.userCreated = true;
                    vmAntiAffinityRuleSpec.userCreatedSpecified = true;
                    ruleSpec.info = vmAntiAffinityRuleSpec;
                    ruleSpec.operation = ArrayUpdateOperation.edit;
                    podConfigSpec.rule = new ClusterRuleSpec[] { ruleSpec };
                    sdrsConfigSpec.podConfigSpec = podConfigSpec;
                    ManagedObjectReference taskmor =
                   cb._connection._service.ConfigureStorageDrsForPod_Task(srmRef,
                         sdrsMor, sdrsConfigSpec, true);

                    if (taskmor != null)
                    {
                        String status = cb.getServiceUtil().WaitForTask(
                              taskmor);
                        if (status.Equals("sucess"))
                        {
                            Console.WriteLine("Success: Modifying VmAntiAffinity Rule.");
                        }
                        else
                        {
                            Console.WriteLine("Failure: Modifying VmAntiAffinity Rule.");
                            throw new Exception(status);
                        }
                    }
                }
                else
                {
                    string msg = "\nFailure: Rule " + ruleName + " not found.";
                    throw new Exception(msg);
                }
            }
            else
            {
                throw new Exception("Storage Pod " + podName + "not found");
            }
        }