ebcli/operations/lifecycleops.py (48 lines of code) (raw):
# Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
# http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file 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.
from cement.utils.misc import minimal_logger
from ebcli.lib import elasticbeanstalk, aws
from ebcli.core import fileoperations, io
from ebcli.objects.lifecycleconfiguration import LifecycleConfiguration
from ebcli.objects.exceptions import InvalidSyntaxError
from ebcli.resources.strings import strings
LOG = minimal_logger(__name__)
SPACER = ' ' * 2
NO_ITEM_TOKEN = '-'
def print_lifecycle_policy(app_name):
application = elasticbeanstalk.describe_application(app_name)
region = aws.get_region_name()
io.echo('Application details for:', app_name)
io.echo('{0}Region:'.format(SPACER), region)
io.echo('{0}Description:'.format(SPACER), getattr(application, 'Description', NO_ITEM_TOKEN))
io.echo('{0}Date Created:'.format(SPACER), application['DateCreated'].strftime("%Y/%m/%d %H:%M %Z"))
io.echo('{0}Date Updated:'.format(SPACER), application['DateUpdated'].strftime("%Y/%m/%d %H:%M %Z"))
io.echo('{0}Application Versions:'.format(SPACER), getattr(application, 'Versions', NO_ITEM_TOKEN))
io.echo('{0}Resource Lifecycle Config(s):'.format(SPACER))
resource_configs = application['ResourceLifecycleConfig']
recursive_print_api_dict(resource_configs)
def recursive_print_api_dict(config, spaced=2):
for entry in config:
entry_value = config[u'{0}'.format(entry)]
if isinstance(entry_value, dict):
io.echo('{0}{1}:'.format(SPACER * spaced, entry))
recursive_print_api_dict(entry_value, spaced + 1)
else:
io.echo('{0}{1}: {2}'.format(SPACER * spaced, entry, entry_value))
def interactive_update_lifcycle_policy(app_name):
api_model = elasticbeanstalk.describe_application(app_name)
lifecycle_config = LifecycleConfiguration(api_model)
usr_model = lifecycle_config.convert_api_to_usr_model()
file_location = fileoperations.save_app_file(usr_model)
fileoperations.open_file_for_editing(file_location)
try:
usr_model = fileoperations.get_application_from_file(app_name)
config_changes = lifecycle_config.collect_changes(usr_model)
fileoperations.delete_app_file(app_name)
except InvalidSyntaxError:
io.log_error(strings['lifecycle.invalidsyntax'])
fileoperations.delete_app_file(app_name)
return
if not config_changes:
io.log_warning(strings['lifecycle.updatenochanges'])
return
elasticbeanstalk.update_application_resource_lifecycle(app_name, config_changes)
io.echo(strings['lifecycle.success'])