Exemple #1
0
        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);
            }
        }