modular-service-cli/modular_service_cli/group/application.py (134 lines of code) (raw):
import json
import operator
import click
from modular_service_cli.group import (
ApiResponse,
ContextObj,
ViewCommand,
build_limit_option,
build_next_token_option,
cli_response,
)
from modular_service_cli.service.constants import ApplicationType
attributes_order = 'application_id', 'type', 'description',
@click.group(name='application')
def application():
"""Manages Application Entity"""
@application.command(cls=ViewCommand, name='describe')
@click.option('--application_id', '-aid', type=str,
help='Application id to describe.')
@build_limit_option()
@build_next_token_option()
@click.option('--type', '-t',
type=click.Choice(tuple(map(operator.attrgetter('value'), ApplicationType))),
help='Application type to filter applications')
@cli_response(attributes_order=attributes_order)
def describe(ctx: ContextObj, application_id, limit, next_token, type,
customer_id):
"""
Describes Application.
"""
if application_id:
return ctx.api_client.get_application(application_id,
customer_id=customer_id)
return ctx.api_client.query_application(
customer_id=customer_id,
limit=limit,
next_token=next_token,
type=type
)
@application.command(cls=ViewCommand, name='create_aws_role')
@click.option('--role_name', '-rn', type=str, required=True,
help='AWS Role name')
@click.option('--account_id', '-aid', type=str, required=True,
help='AWS Account id.')
@click.option('--description', '-d', type=str, required=True,
help='Application description.')
@cli_response(attributes_order=attributes_order)
def create_aws_role(ctx: ContextObj, role_name, account_id, description,
customer_id):
"""
Creates Application with type AWS_ROLE
"""
return ctx.api_client.create_application_aws_role(
description=description,
role_name=role_name,
account_id=account_id,
customer_id=customer_id
)
@application.command(cls=ViewCommand, name='create_aws_credentials')
@click.option('--access_key_id', '-ak', type=str, required=True,
help='AWS Access key')
@click.option('--secret_access_key', '-sk', type=str, required=True,
help='AWS Secret Access key')
@click.option('--session_token', '-st', type=str, required=False,
help='AWS Session token key')
@click.option('--default_region', '-dr', type=str, default='us-east-1',
help='AWS region to use by default')
@click.option('--description', '-d', type=str, required=True,
help='Application description.')
@cli_response(attributes_order=attributes_order)
def create_aws_credentials(ctx: ContextObj, **kwargs):
"""
Creates Application with type AWS_CREDENTIALS
"""
return ctx.api_client.create_application_aws_credentials(**kwargs)
@application.command(cls=ViewCommand, name='create_azure_credentials')
@click.option('--client_id', '-cid', type=str, required=True,
help='AZURE Client id')
@click.option('--tenant_id', '-tid', type=str, required=True,
help='AZURE Tenant id')
@click.option('--api_key', '-ak', type=str, required=True,
help='AZURE api key')
@click.option('--description', '-d', type=str, required=True,
help='Application description.')
@cli_response(attributes_order=attributes_order)
def create_azure_credentials(ctx: ContextObj, **kwargs):
"""
Creates Application with type AZURE_CREDENTIALS
"""
return ctx.api_client.create_application_azure_credentials(**kwargs)
@application.command(cls=ViewCommand, name='create_azure_certificate')
@click.option('--client_id', '-cid', type=str, required=True,
help='AZURE Client id')
@click.option('--tenant_id', '-tid', type=str, required=True,
help='AZURE Tenant id')
@click.option('--certificate', '-cert', type=str, required=True,
help='Base64 encoded azure certificate')
@click.option('--password', '-p', type=str, required=False,
help='Password from the certificate')
@click.option('--description', '-d', type=str, required=True,
help='Application description.')
@cli_response(attributes_order=attributes_order)
def create_azure_certificate(ctx: ContextObj, **kwargs):
"""
Creates Application with type AZURE_CERTIFICATE
"""
return ctx.api_client.create_application_azure_certificate(**kwargs)
@application.command(cls=ViewCommand, name='create_gcp_service_account')
@click.option('--path', '-p', type=str, required=True,
help='Path to JSON file with GCP service account creds')
@click.option('--description', '-d', type=str, required=True,
help='Application description.')
@cli_response(attributes_order=attributes_order)
def create_gcp_service_account(ctx: ContextObj, path, description,
customer_id):
"""
Creates Application with type GCP_SERVICE_ACCOUNT
"""
try:
with open(path, 'r') as fp:
data = json.load(fp)
except FileNotFoundError:
return ApiResponse.build(f'File {path} not found')
except json.JSONDecodeError:
return ApiResponse.build(f'File {path} contains invalid JSON')
except Exception:
return ApiResponse.build(f'Could not load file {path}')
return ctx.api_client.create_application_gcp_service_account(
description=description,
customer_id=customer_id,
credentials=data
)
@application.command(cls=ViewCommand, name='update')
@click.option('--application_id', '-aid', type=str, required=True,
help='Application id to update')
@click.option('--description', '-d', type=str, required=True,
help='Application description.')
@cli_response(attributes_order=attributes_order)
def update(ctx: ContextObj, application_id, description, customer_id):
"""
Updates Application.
"""
return ctx.api_client.patch_application(
id=application_id,
description=description,
customer_id=customer_id
)
@application.command(cls=ViewCommand, name='delete')
@click.option('--application_id', '-aid', type=str, required=True,
help='Application id to describe.')
@cli_response()
def deactivate(ctx: ContextObj, application_id, customer_id):
"""
Deactivates Application.
"""
return ctx.api_client.delete_application(
id=application_id,
customer_id=customer_id
)