protected override void ProcessRecord() { var baseResourceList = new List <EnvironmentResource>(); var environmentNameList = EnvironmentName?.ToList().ConvertAll(s => s.ToLower()); switch (this.ParameterSetName) { case All: baseResourceList = _connection.Repository.Environments.FindAll(); break; case ByName: //Multiple values but one of them is wildcarded, which is not an accepted scenario (I.e -MachineName WebServer*, Database1) if (environmentNameList.Any(item => WildcardPattern.ContainsWildcardCharacters(item) && environmentNameList.Count > 1)) { throw OctoposhExceptions.ParameterCollectionHasRegularAndWildcardItem("EnvironmentName"); } //Only 1 wildcarded value (ie -MachineName WebServer*) else if (environmentNameList.Any(item => WildcardPattern.ContainsWildcardCharacters(item) && environmentNameList.Count == 1)) { var pattern = new WildcardPattern(environmentNameList.First().ToLower()); baseResourceList = _connection.Repository.Environments.FindMany(x => pattern.IsMatch(x.Name.ToLower())); } //multiple non-wildcared values (i.e. -MachineName WebServer1,Database1) else if (!environmentNameList.Any(WildcardPattern.ContainsWildcardCharacters)) { baseResourceList = _connection.Repository.Environments.FindMany(x => environmentNameList.Contains(x.Name.ToLower())); } break; } if (ResourceOnly) { if (baseResourceList.Count == 1) { WriteObject(baseResourceList.FirstOrDefault(), true); } else { WriteObject(baseResourceList, true); } } else { var converter = new OutputConverter(); var outputList = converter.GetOctopusEnvironment(baseResourceList); if (outputList.Count == 1) { WriteObject(outputList.FirstOrDefault(), true); } else { WriteObject(outputList, true); } } }
protected override void ProcessRecord() { var baseResourceList = new List <MachineResource>(); switch (ParameterSetName) { case All: baseResourceList = _connection.Repository.Machines.FindAll(); break; case ByName: var machineNameList = MachineName?.ToList().ConvertAll(s => s.ToLower()); //Multiple values but one of them is wildcarded, which is not an accepted scenario (I.e -MachineName WebServer*, Database1) if (machineNameList.Any(item => WildcardPattern.ContainsWildcardCharacters(item) && machineNameList.Count > 1)) { throw OctoposhExceptions.ParameterCollectionHasRegularAndWildcardItem("MachineName"); } //Only 1 wildcarded value (ie -MachineName WebServer*) else if (machineNameList.Any(item => WildcardPattern.ContainsWildcardCharacters(item) && machineNameList.Count == 1)) { var pattern = new WildcardPattern(machineNameList.First()); baseResourceList = _connection.Repository.Machines.FindMany(x => pattern.IsMatch(x.Name.ToLower())); } //multiple non-wildcared values (i.e. -MachineName WebServer1,Database1) else if (!machineNameList.Any(item => WildcardPattern.ContainsWildcardCharacters(item))) { baseResourceList = _connection.Repository.Machines.FindMany(x => machineNameList.Contains(x.Name.ToLower())); } break; case ByUrl: var urlList = URL.ToList().ConvertAll(s => s.ToLower()); //Multiple values but one of them is wildcarded, which is not an accepted scenario (I.e -URL http://Tentacle*, http://Database1) if (urlList.Any(item => WildcardPattern.ContainsWildcardCharacters(item) && urlList.Count > 1)) { throw OctoposhExceptions.ParameterCollectionHasRegularAndWildcardItem("URL"); } //Only 1 wildcarded value (ie -URL http://Tentacle*) else if (urlList.Any(item => WildcardPattern.ContainsWildcardCharacters(item) && urlList.Count == 1)) { var pattern = new WildcardPattern(urlList.First()); baseResourceList = _connection.Repository.Machines.FindMany(x => pattern.IsMatch(x.Uri)); } //multiple non-wildcared values (i.e. -URL http://Tentacle ,http://Database) else if (!urlList.Any(item => WildcardPattern.ContainsWildcardCharacters(item))) { baseResourceList = _connection.Repository.Machines.FindMany(x => urlList.Contains(x.Uri)); } break; case ByCommunicationStyle: var endpointtype = ""; switch (CommunicationStyle) { case "Polling": endpointtype = "Octopus.Client.Model.Endpoints.PollingTentacleEndpointResource"; break; case "Listening": endpointtype = "Octopus.Client.Model.Endpoints.ListeningTentacleEndpointResource"; break; case "CloudRegion": endpointtype = "Octopus.Client.Model.Endpoints.CloudRegionEndpointResource"; break; case "OfflineDrop": endpointtype = "Octopus.Client.Model.Endpoints.OfflineDropEndpointResource"; break; case "SSH": endpointtype = "Octopus.Client.Model.Endpoints.SSHEndpointResource"; break; } baseResourceList = _connection.Repository.Machines.FindMany(x => String.Equals(x.Endpoint.GetType().ToString(), endpointtype, StringComparison.CurrentCultureIgnoreCase)); break; case ByEnvironment: var environmentNameList = EnvironmentName.ToList().ConvertAll(s => s.ToLower()); foreach (var name in environmentNameList) { var environment = _connection.Repository.Environments.FindByName(name); baseResourceList.AddRange(_connection.Repository.Environments.GetMachines(environment)); } break; } if (ResourceOnly) { WriteObject(baseResourceList); } else { var converter = new OutputConverter(); var outputList = converter.GetOctopusMachine(baseResourceList); WriteObject(outputList); } }