Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aws
GitHub Repository: aws/aws-cli
Path: blob/develop/awscli/customizations/emr/instancegroupsutils.py
1567 views
1
# Copyright 2014 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
#
3
# Licensed under the Apache License, Version 2.0 (the "License"). You
4
# may not use this file except in compliance with the License. A copy of
5
# the License is located at
6
#
7
# http://aws.amazon.com/apache2.0/
8
#
9
# or in the "license" file accompanying this file. This file is
10
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
# ANY KIND, either express or implied. See the License for the specific
12
# language governing permissions and limitations under the License.
13
14
from awscli.customizations.emr import constants
15
from awscli.customizations.emr import exceptions
16
17
18
def build_instance_groups(parsed_instance_groups):
19
"""
20
Helper method that converts --instance-groups option value in
21
create-cluster and add-instance-groups to
22
Amazon Elastic MapReduce InstanceGroupConfig data type.
23
"""
24
instance_groups = []
25
for instance_group in parsed_instance_groups:
26
ig_config = {}
27
28
keys = instance_group.keys()
29
if 'Name' in keys:
30
ig_config['Name'] = instance_group['Name']
31
else:
32
ig_config['Name'] = instance_group['InstanceGroupType']
33
ig_config['InstanceType'] = instance_group['InstanceType']
34
ig_config['InstanceCount'] = instance_group['InstanceCount']
35
ig_config['InstanceRole'] = instance_group['InstanceGroupType'].upper()
36
37
if 'BidPrice' in keys:
38
if instance_group['BidPrice'] != 'OnDemandPrice':
39
ig_config['BidPrice'] = instance_group['BidPrice']
40
ig_config['Market'] = constants.SPOT
41
else:
42
ig_config['Market'] = constants.ON_DEMAND
43
if 'EbsConfiguration' in keys:
44
ig_config['EbsConfiguration'] = instance_group['EbsConfiguration']
45
46
if 'AutoScalingPolicy' in keys:
47
ig_config['AutoScalingPolicy'] = instance_group['AutoScalingPolicy']
48
49
if 'Configurations' in keys:
50
ig_config['Configurations'] = instance_group['Configurations']
51
52
if 'CustomAmiId' in keys:
53
ig_config['CustomAmiId'] = instance_group['CustomAmiId']
54
55
instance_groups.append(ig_config)
56
return instance_groups
57
58
59
def _build_instance_group(
60
instance_type, instance_count, instance_group_type):
61
ig_config = {}
62
ig_config['InstanceType'] = instance_type
63
ig_config['InstanceCount'] = instance_count
64
ig_config['InstanceRole'] = instance_group_type.upper()
65
ig_config['Name'] = ig_config['InstanceRole']
66
ig_config['Market'] = constants.ON_DEMAND
67
return ig_config
68
69
70
def validate_and_build_instance_groups(
71
instance_groups, instance_type, instance_count):
72
if (instance_groups is None and instance_type is None):
73
raise exceptions.MissingRequiredInstanceGroupsError
74
75
if (instance_groups is not None and
76
(instance_type is not None or
77
instance_count is not None)):
78
raise exceptions.InstanceGroupsValidationError
79
80
if instance_groups is not None:
81
return build_instance_groups(instance_groups)
82
else:
83
instance_groups = []
84
master_ig = _build_instance_group(
85
instance_type=instance_type,
86
instance_count=1,
87
instance_group_type="MASTER")
88
instance_groups.append(master_ig)
89
if instance_count is not None and int(instance_count) > 1:
90
core_ig = _build_instance_group(
91
instance_type=instance_type,
92
instance_count=int(instance_count) - 1,
93
instance_group_type="CORE")
94
instance_groups.append(core_ig)
95
96
return instance_groups
97
98