List <EnvironmentResource> GetEnvironments(IOctopusSpaceRepository repository) { var selectedEnvironments = repository.Environments.FindByNames(EnvironmentNames); var missing = EnvironmentNames.Except(selectedEnvironments.Select(e => e.Name), StringComparer.OrdinalIgnoreCase).ToList(); if (missing.Any()) { throw new ArgumentException(CouldNotFindMessage("environment", missing.ToArray())); } return(selectedEnvironments); }
List <WorkerPoolResource> GetWorkerPools(IOctopusSpaceRepository repository) { var selectedPools = repository.WorkerPools.FindByNames(WorkerPoolNames); var missing = WorkerPoolNames.Except(selectedPools.Select(p => p.Name), StringComparer.OrdinalIgnoreCase).ToList(); if (missing.Any()) { throw new InvalidRegistrationArgumentsException(CouldNotFindMessage("worker pool", missing.ToArray())); } return(selectedPools); }
protected ProxyResource GetProxy(IOctopusSpaceRepository repository) { var proxy = default(ProxyResource); if (!string.IsNullOrEmpty(ProxyName)) { proxy = repository.Proxies.FindByName(ProxyName); if (proxy == null) { throw new ArgumentException(CouldNotFindMessage("proxy name", ProxyName)); } } return(proxy); }
protected MachinePolicyResource GetMachinePolicy(IOctopusSpaceRepository repository) { var machinePolicy = default(MachinePolicyResource); if (!string.IsNullOrEmpty(MachinePolicy)) { machinePolicy = repository.MachinePolicies.FindByName(MachinePolicy); if (machinePolicy == null) { throw new ArgumentException(CouldNotFindMessage("machine policy", MachinePolicy)); } } return(machinePolicy); }
void ValidateTenantTags(IOctopusSpaceRepository repository) { if (TenantTags == null || !TenantTags.Any()) { return; } var tagSets = repository.TagSets.FindAll(); var missingTags = TenantTags.Where(tt => !tagSets.Any(ts => ts.Tags.Any(t => t.CanonicalTagName.Equals(tt, StringComparison.OrdinalIgnoreCase)))).ToList(); if (missingTags.Any()) { throw new ArgumentException(CouldNotFindMessage("tag", missingTags.ToArray())); } }
MachineResource GetMachine(IOctopusSpaceRepository repository) { var existing = default(MachineResource); try { existing = repository.Machines.FindByName(MachineName); if (!AllowOverwrite && existing?.Id != null) { throw new ArgumentException($"A machine named '{MachineName}' already exists on the Octopus Server in the target space. Use the 'force' parameter if you intended to update the existing machine."); } } catch (OctopusDeserializationException) // eat it, probably caused by resource incompatability between versions { } return(existing ?? new MachineResource()); }
WorkerResource GetWorker(IOctopusSpaceRepository repository) { var existing = default(WorkerResource); try { existing = repository.Workers.FindByName(MachineName); if (!AllowOverwrite && existing?.Id != null) { throw new InvalidRegistrationArgumentsException($"A worker named '{MachineName}' already exists. Use the 'force' parameter if you intended to update the existing machine."); } } catch (OctopusDeserializationException) // eat it, probably caused by resource incompatability between versions { } return(existing ?? new WorkerResource()); }
/// <summary> /// Executes the operation against the specified Octopus Deploy server. /// </summary> /// <param name="repository">The Octopus Deploy server repository.</param> /// <exception cref="InvalidRegistrationArgumentsException"> /// </exception> public override void Execute(IOctopusSpaceRepository repository) { var selectedPools = GetWorkerPools(repository); var machinePolicy = GetMachinePolicy(repository); var machine = GetWorker(repository); var proxy = GetProxy(repository); ApplyBaseChanges(machine, machinePolicy, proxy); machine.WorkerPoolIds = new ReferenceCollection(selectedPools.Select(p => p.Id).ToArray()); if (machine.Id != null) { repository.Workers.Modify(machine); } else { repository.Workers.Create(machine); } }
List <TenantResource> GetTenants(IOctopusSpaceRepository repository) { if (Tenants == null || !Tenants.Any()) { return(new List <TenantResource>()); } var tenantsByName = repository.Tenants.FindByNames(Tenants); var missing = Tenants.Except(tenantsByName.Select(e => e.Name), StringComparer.OrdinalIgnoreCase).ToArray(); var tenantsById = repository.Tenants.Get(missing); missing = missing.Except(tenantsById.Select(e => e.Id), StringComparer.OrdinalIgnoreCase).ToArray(); if (missing.Any()) { throw new ArgumentException(CouldNotFindMessage("tenant", missing)); } return(tenantsById.Concat(tenantsByName).ToList()); }
/// <summary> /// Executes the operation against the specified Octopus Deploy server. /// </summary> /// <param name="repository">The Octopus Deploy server repository.</param> /// <exception cref="System.ArgumentException"> /// </exception> public override void Execute(IOctopusSpaceRepository repository) { var selectedEnvironments = GetEnvironments(repository); var machinePolicy = GetMachinePolicy(repository); var machine = GetMachine(repository); var tenants = GetTenants(repository); ValidateTenantTags(repository); var proxy = GetProxy(repository); ApplyBaseChanges(machine, machinePolicy, proxy); ApplyDeploymentTargetChanges(machine, selectedEnvironments, tenants); if (machine.Id != null) { repository.Machines.Modify(machine); } else { repository.Machines.Create(machine); } }
/// <summary> /// Executes the operation against the specified Octopus Deploy server. /// </summary> /// <param name="repository">The Octopus Deploy server repository.</param> /// <exception cref="System.ArgumentException"> /// </exception> public abstract void Execute(IOctopusSpaceRepository repository);