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()); } }