using System; using System.Collections.Generic; using System.Threading.Tasks; using Amazon.Common.DotNetCli.Tools; using Amazon.Common.DotNetCli.Tools.Options; using Amazon.Lambda.Model; using ThirdParty.Json.LitJson; namespace Amazon.Lambda.Tools.Commands { /// /// Command to delete a Lambda layer version /// public class DeleteLayerVersionCommand : LambdaBaseCommand { public const string COMMAND_NAME = "delete-layer-version"; public const string COMMAND_DESCRIPTION = "Command to delete a version of a Layer"; public const string COMMAND_ARGUMENTS = " The arn of the Layer version to delete"; public static readonly IList CommandOptions = BuildLineOptions(new List { LambdaDefinedCommandOptions.ARGUMENT_LAYER_VERSION_ARN }); public string LayerVersionArn { get; set; } public DeleteLayerVersionCommand(IToolLogger logger, string workingDirectory, string[] args) : base(logger, workingDirectory, CommandOptions, args) { } /// /// Parse the CommandOptions into the Properties on the command. /// /// protected override void ParseCommandArguments(CommandOptions values) { base.ParseCommandArguments(values); if (values.Arguments.Count > 0) { this.LayerVersionArn = values.Arguments[0]; } Tuple tuple; if ((tuple = values.FindCommandOption(LambdaDefinedCommandOptions.ARGUMENT_LAYER_VERSION_ARN.Switch)) != null) this.LayerVersionArn = tuple.Item2.StringValue; } protected override async Task PerformActionAsync() { var layerVersionArn = this.GetStringValueOrDefault(this.LayerVersionArn, LambdaDefinedCommandOptions.ARGUMENT_LAYER_VERSION_ARN, true); var results = LambdaUtilities.ParseLayerVersionArn(layerVersionArn); var deleteRequest = new DeleteLayerVersionRequest { LayerName = results.Name, VersionNumber = results.VersionNumber }; try { await this.LambdaClient.DeleteLayerVersionAsync(deleteRequest); } catch(Exception e) { throw new LambdaToolsException("Error deleting Lambda layer version: " + e.Message, LambdaToolsException.LambdaErrorCode.LambdaDeleteLayerVersion, e); } this.Logger?.WriteLine($"Deleted version {results.VersionNumber} for layer {results.Name}"); return true; } protected override void SaveConfigFile(JsonData data) { } } }