ebcli/operations/scaleops.py (39 lines of code) (raw):
# Copyright 2015 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 ebcli.lib import elasticbeanstalk
from ebcli.core import io
from ebcli.resources.strings import prompts
from ebcli.operations import commonops
def scale(app_name, env_name, number, confirm, timeout=None):
options = []
env = elasticbeanstalk.describe_configuration_settings(
app_name, env_name
)['OptionSettings']
namespace = 'aws:elasticbeanstalk:environment'
setting = next((n for n in env if n["Namespace"] == namespace), None)
value = setting['Value']
if value == 'SingleInstance':
if not confirm:
io.echo(prompts['scale.switchtoloadbalance'])
io.log_warning(prompts['scale.switchtoloadbalancewarn'])
switch = io.get_boolean_response()
if not switch:
return
options.append({'Namespace': namespace,
'OptionName': 'EnvironmentType',
'Value': 'LoadBalanced'})
namespace = 'aws:autoscaling:asg'
max = 'MaxSize'
min = 'MinSize'
for name in [max, min]:
options.append(
{
'Namespace': namespace,
'OptionName': name,
'Value': str(number)
}
)
request_id = elasticbeanstalk.update_environment(env_name, options)
commonops.wait_for_success_events(
request_id,
timeout_in_minutes=timeout or 5,
can_abort=True
)