Пример #1
0
        public async Task SetAffinity(string isolationTag, Vm[] vms, bool start)
        {
            if (_config.IsVCenter)
            {
                var configSpec       = new ClusterConfigSpec();
                var affinityRuleSpec = new ClusterAffinityRuleSpec();
                var clusterRuleSpec  = new ClusterRuleSpec();

                affinityRuleSpec.vm                 = vms.Select(m => m.Reference.AsReference()).ToArray();
                affinityRuleSpec.name               = $"Affinity#{isolationTag}";
                affinityRuleSpec.enabled            = true;
                affinityRuleSpec.enabledSpecified   = true;
                affinityRuleSpec.mandatory          = true;
                affinityRuleSpec.mandatorySpecified = true;

                clusterRuleSpec.operation = ArrayUpdateOperation.add;
                clusterRuleSpec.info      = affinityRuleSpec;

                configSpec.rulesSpec = new ClusterRuleSpec[] { clusterRuleSpec };
                _logger.LogDebug("setaffinity: reconfiguring cluster ");
                await _vim.ReconfigureCluster_TaskAsync(_res, configSpec, true);
            }

            if (start)
            {
                List <Task <Vm> > tasks = new List <Task <Vm> >();
                foreach (Vm vm in vms)
                {
                    tasks.Add(Start(vm.Id));
                }

                await Task.WhenAll(tasks.ToArray());
            }
        }