Path: blob/develop/awscli/customizations/emr/instancegroupsutils.py
1567 views
# Copyright 2014 Amazon.com, Inc. or its affiliates. All Rights Reserved.1#2# Licensed under the Apache License, Version 2.0 (the "License"). You3# may not use this file except in compliance with the License. A copy of4# the License is located at5#6# http://aws.amazon.com/apache2.0/7#8# or in the "license" file accompanying this file. This file is9# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF10# ANY KIND, either express or implied. See the License for the specific11# language governing permissions and limitations under the License.1213from awscli.customizations.emr import constants14from awscli.customizations.emr import exceptions151617def build_instance_groups(parsed_instance_groups):18"""19Helper method that converts --instance-groups option value in20create-cluster and add-instance-groups to21Amazon Elastic MapReduce InstanceGroupConfig data type.22"""23instance_groups = []24for instance_group in parsed_instance_groups:25ig_config = {}2627keys = instance_group.keys()28if 'Name' in keys:29ig_config['Name'] = instance_group['Name']30else:31ig_config['Name'] = instance_group['InstanceGroupType']32ig_config['InstanceType'] = instance_group['InstanceType']33ig_config['InstanceCount'] = instance_group['InstanceCount']34ig_config['InstanceRole'] = instance_group['InstanceGroupType'].upper()3536if 'BidPrice' in keys:37if instance_group['BidPrice'] != 'OnDemandPrice':38ig_config['BidPrice'] = instance_group['BidPrice']39ig_config['Market'] = constants.SPOT40else:41ig_config['Market'] = constants.ON_DEMAND42if 'EbsConfiguration' in keys:43ig_config['EbsConfiguration'] = instance_group['EbsConfiguration']4445if 'AutoScalingPolicy' in keys:46ig_config['AutoScalingPolicy'] = instance_group['AutoScalingPolicy']4748if 'Configurations' in keys:49ig_config['Configurations'] = instance_group['Configurations']5051if 'CustomAmiId' in keys:52ig_config['CustomAmiId'] = instance_group['CustomAmiId']5354instance_groups.append(ig_config)55return instance_groups565758def _build_instance_group(59instance_type, instance_count, instance_group_type):60ig_config = {}61ig_config['InstanceType'] = instance_type62ig_config['InstanceCount'] = instance_count63ig_config['InstanceRole'] = instance_group_type.upper()64ig_config['Name'] = ig_config['InstanceRole']65ig_config['Market'] = constants.ON_DEMAND66return ig_config676869def validate_and_build_instance_groups(70instance_groups, instance_type, instance_count):71if (instance_groups is None and instance_type is None):72raise exceptions.MissingRequiredInstanceGroupsError7374if (instance_groups is not None and75(instance_type is not None or76instance_count is not None)):77raise exceptions.InstanceGroupsValidationError7879if instance_groups is not None:80return build_instance_groups(instance_groups)81else:82instance_groups = []83master_ig = _build_instance_group(84instance_type=instance_type,85instance_count=1,86instance_group_type="MASTER")87instance_groups.append(master_ig)88if instance_count is not None and int(instance_count) > 1:89core_ig = _build_instance_group(90instance_type=instance_type,91instance_count=int(instance_count) - 1,92instance_group_type="CORE")93instance_groups.append(core_ig)9495return instance_groups969798