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)
{
}
}
}