diff --git a/Octopus-Cmdlets/GetCertificate.cs b/Octopus-Cmdlets/GetCertificate.cs index 2627d54..fe826b3 100644 --- a/Octopus-Cmdlets/GetCertificate.cs +++ b/Octopus-Cmdlets/GetCertificate.cs @@ -56,12 +56,20 @@ public class GetCertificate : PSCmdlet public string[] CertificateId { get; set; } /// - /// The environments of the certificates to retrieve. + /// The thumbprint of the certificate to retrieve. /// [Parameter( - ParameterSetName = "ByEnvironment", + ParameterSetName = "ByThumbprint", Mandatory = true, ValueFromPipelineByPropertyName = true)] + public string[] Thumbprint { get; set; } + + /// + /// The environments of the certificates to retrieve. + /// + [Parameter( + Mandatory = false, + ValueFromPipelineByPropertyName = true)] public string[] Environment { get; set; } /// @@ -106,50 +114,66 @@ protected override void ProcessRecord() case "ById": ProcessById(); break; - case "ByEnvironment": - ProcessByEnvironment(); + case "ByThumbprint": + ProcessByThumbprint(); break; default: throw new Exception("Unknown ParameterSetName: " + ParameterSetName); } } - private void ProcessByEnvironment() + private void ProcessByName() { - var certs = Environment == null + var certs = Name == null ? _certificates : (from c in _certificates - from cenv in c.EnvironmentIds - from env in Environment - where cenv == env + from n in Name + where c.Name.Equals(n, StringComparison.InvariantCultureIgnoreCase) select c); + certs = FilterEnvironment(certs); + foreach (var cert in certs) WriteObject(cert); } - private void ProcessByName() + private void ProcessById() { - var certs = Name == null - ? _certificates - : (from c in _certificates - from n in Name - where c.Name.Equals(n, StringComparison.InvariantCultureIgnoreCase) - select c); + var certs = from c in _certificates + from id in CertificateId + where id == c.Id + select c; + + certs = FilterEnvironment(certs); foreach (var cert in certs) WriteObject(cert); } - private void ProcessById() + private void ProcessByThumbprint() { var certs = from c in _certificates - from id in CertificateId - where id == c.Id - select c; + from thumb in Thumbprint + where thumb == c.Thumbprint + select c; + + certs = FilterEnvironment(certs); foreach (var cert in certs) WriteObject(cert); } + + private IEnumerable FilterEnvironment(IEnumerable certs) + { + if (Environment == null || Environment.Length == 0) + { + return certs; + } + + return from c in certs + from e in Environment + where c.EnvironmentIds.Contains(e, StringComparer.OrdinalIgnoreCase) + select c; + } } } diff --git a/Octopus-Cmdlets/Octopus-Cmdlets.psd1 b/Octopus-Cmdlets/Octopus-Cmdlets.psd1 index be5a0fa..61cc0aa 100644 Binary files a/Octopus-Cmdlets/Octopus-Cmdlets.psd1 and b/Octopus-Cmdlets/Octopus-Cmdlets.psd1 differ diff --git a/Octopus-Cmdlets/RemoveLibraryVariable.cs b/Octopus-Cmdlets/RemoveLibraryVariable.cs new file mode 100644 index 0000000..6baeef4 --- /dev/null +++ b/Octopus-Cmdlets/RemoveLibraryVariable.cs @@ -0,0 +1,128 @@ +#region License +// Copyright 2014 Colin Svingen + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#endregion + +using System; +using System.Linq; +using System.Management.Automation; +using Octopus.Client; +using Octopus.Client.Model; + +namespace Octopus_Cmdlets +{ + /// + /// Remove a variable from the Octopus Deploy library variable set. + /// The Remove-OctoLibraryVariable cmdlet removes a variable from the Octopus Deploy library variable set. + /// + /// + /// PS C:\>remove-octolibraryvariable -VariableSet Database -Name ConnectionString + /// + /// Remove the variable 'ConnectionString' from the variable set 'Database'. + /// + /// + [Cmdlet(VerbsCommon.Remove, "LibraryVariable", DefaultParameterSetName = "ByName")] + public class RemoveLibraryVariable : PSCmdlet + { + /// + /// The name of the library variable set to remove the variable from. + /// + [Parameter( + Position = 0, + Mandatory = true, + ValueFromPipelineByPropertyName = true)] + public string VariableSet { get; set; } + + /// + /// The name of the variable to remove. + /// + [Parameter( + ParameterSetName = "ByName", + Position = 1, + Mandatory = true, + ValueFromPipelineByPropertyName = true)] + public string[] Name { get; set; } + + private IOctopusRepository _octopus; + private VariableSetResource _variableSet; + + /// + /// BeginProcessing + /// + protected override void BeginProcessing() + { + _octopus = Session.RetrieveSession(this); + + var libraryVariableSet = + _octopus.LibraryVariableSets.FindOne( + v => v.Name.Equals(VariableSet, StringComparison.InvariantCultureIgnoreCase)); + + if (libraryVariableSet == null) + throw new Exception(string.Format("Library variable set '{0}' was not found.", VariableSet)); + + _variableSet = _octopus.VariableSets.Get(libraryVariableSet.Link("Variables")); + WriteDebug("Found variable set" + _variableSet.Id); + } + + /// + /// ProcessRecord + /// + protected override void ProcessRecord() + { + WriteDebug("ParameterSetName: " + ParameterSetName); + + switch (ParameterSetName) + { + case "ByName": + ProcessByName(); + break; + default: + throw new ArgumentException("Unknown ParameterSetName: " + ParameterSetName); + } + } + + private void ProcessByName() + { + foreach (var name in Name) + { + var found = false; + var nameForClosure = name; + + var variables = + _variableSet.Variables.Where( + variable => variable.Name.Equals(nameForClosure, StringComparison.InvariantCultureIgnoreCase)).ToArray(); + + foreach (var variable in variables) + { + WriteVerbose(string.Format("Removing variable '{0}' from variable set '{1}'.", variable.Name, VariableSet)); + _variableSet.Variables.Remove(variable); + found = true; + } + + if (!found) + WriteWarning(string.Format("Variable '{0}' in variable set '{1}' does not exist.", name, VariableSet)); + } + } + + /// + /// EndProcessing + /// + protected override void EndProcessing() + { + // Save the variables + _octopus.VariableSets.Modify(_variableSet); + WriteVerbose("Saved changes"); + } + } +} diff --git a/Octopus-Cmdlets/UpdateLibraryVariable.cs b/Octopus-Cmdlets/UpdateLibraryVariable.cs index c6588dd..3ce3a31 100644 --- a/Octopus-Cmdlets/UpdateLibraryVariable.cs +++ b/Octopus-Cmdlets/UpdateLibraryVariable.cs @@ -84,6 +84,15 @@ public class UpdateLibraryVariable : PSCmdlet ParameterSetName = "Parts")] public string Value { get; set; } + /// + /// The type of the variable to create. + /// + [Parameter( + ParameterSetName = "Parts", + Mandatory = false, + ValueFromPipelineByPropertyName = true)] + public VariableType? Type { get; set; } + /// /// The environments to restrict the scope to. /// @@ -198,6 +207,8 @@ private void ProcessByParts() variable.IsSensitive = Sensitive; if (Value != null) variable.Value = Value; + if (Type.HasValue) + variable.Type = Type.Value; if (Environments != null) { @@ -228,7 +239,7 @@ protected override void EndProcessing() { // Save the variables _octopus.VariableSets.Modify(_variableSet); - + WriteDebug("Modified the variable set"); } } diff --git a/Octopus-Cmdlets/UpdateVariable.cs b/Octopus-Cmdlets/UpdateVariable.cs index e95cec3..9d0e313 100644 --- a/Octopus-Cmdlets/UpdateVariable.cs +++ b/Octopus-Cmdlets/UpdateVariable.cs @@ -79,6 +79,15 @@ public class UpdateVariable : PSCmdlet ParameterSetName = "Parts")] public string Value { get; set; } + /// + /// The type of the variable to create. + /// + [Parameter( + ParameterSetName = "Parts", + Mandatory = false, + ValueFromPipelineByPropertyName = true)] + public VariableType? Type { get; set; } + /// /// The environments to restrict the scope to. /// @@ -190,6 +199,8 @@ private void ProcessByParts() variable.IsSensitive = Sensitive; if (Value != null) variable.Value = Value; + if (Type.HasValue) + variable.Type = Type.Value; if (Environments != null) { diff --git a/README.md b/README.md index 6bcf12a..e0f9f1d 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ Powershell Gallery (preferred method) Binary Archive -------------- -Download the latest binary: [v0.6.0](https://github.com/Swoogan/Octopus-Cmdlets/releases/download/v0.6.0/Octopus-Cmdlets-v0.6.0.zip) +Download the latest binary: [v0.7.0](https://github.com/Swoogan/Octopus-Cmdlets/releases/download/v0.7.0/Octopus-Cmdlets-v0.7.0.zip) Extract the zip and copy the `Octopus-Cmdlets` folder into a folder in your `$env:PSModulePath`. diff --git a/Version.cs b/Version.cs index 3d1c903..307555b 100644 --- a/Version.cs +++ b/Version.cs @@ -1,4 +1,4 @@ using System.Reflection; -[assembly: AssemblyVersion("0.6.0.0")] -[assembly: AssemblyFileVersion("0.6.0.0")] \ No newline at end of file +[assembly: AssemblyVersion("0.7.0.0")] +[assembly: AssemblyFileVersion("0.7.0.0")] \ No newline at end of file