Source code for infrahouse_toolkit.cli.ih_plan.cmd_remove
"""
.. topic:: ``ih-plan remove``
A ``ih-plan remove`` subcommand.
See ``ih-plan remove --help`` for more details.
"""
import click
from infrahouse_toolkit.cli.lib import get_bucket, get_s3_client
[docs]def validate_key_name(ctx, param, value): # pylint: disable=unused-argument
"""Check if passed value ends with a ".state"."""
bad_ending = ".state"
if value.endswith(bad_ending):
raise click.BadParameter(f"The file cannot end with a {bad_ending}")
return value
@click.command(name="remove")
@click.argument("key_name", callback=validate_key_name)
@click.pass_context
def cmd_remove(ctx, key_name):
"""
Remove a file from an S3 bucket.
It could be a simple ``aws s3 rm s3://...`` but the command will do two things additionally:
\b
- It will parse a Terraform backend configuration to find the bucket name (See ih-plan --help).
- It will refuse to delete a file if it ends with a ".state".
"""
s3_client = get_s3_client(role=ctx.obj["aws_assume_role_arn"])
bucket = ctx.obj["bucket"] or get_bucket(ctx.obj["tf_backend_file"])
s3_client.delete_object(Bucket=bucket, Key=key_name)
print(f"Successfully removed s3://{bucket}/{key_name}.")