Skip to content

Commit f19b02c

Browse files
authored
Merge pull request #194 from awslabs/develop
Merge 1.3.2 release into master
2 parents e1cfc8e + 88c940f commit f19b02c

File tree

17 files changed

+3213
-228
lines changed

17 files changed

+3213
-228
lines changed

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ python:
66
- "3.3"
77
- "3.4"
88
- "3.5"
9+
- "3.6"
910

1011
install:
1112
- cd cli

CHANGELOG.rst

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,18 @@
22
CHANGELOG
33
=========
44

5+
1.3.2
6+
=====
7+
* feature:``cfncluster``: Add support for r2.xlarge/t2.2xlarge,
8+
x1.16xlarge, r4.*, f1.*, and i3.* instance types
9+
* bugfix:``cfncluster``: Fix support for p2.2xlarge instance type
10+
* feature:``cfncluster``: Add support for eu-west-2, us-east-2, and
11+
ca-central-1 regions
12+
* updates:``cfncluster-cookbook``: Updated to cfncluster-cookbook-1.3.2
13+
* updates:``ami``: Update all base AMIs to latest patch levels
14+
* updates:``cfncluster``: Moved to Apache 2.0 license
15+
* updates:``cfncluster``: Support for Python 3
16+
517
1.3.1
618
=====
719
* feature:``ami``: Added support for Ubuntu 16.04 LTS
@@ -198,4 +210,4 @@ changes should be non-instrusive.
198210
0.0.5
199211
=====
200212

201-
* Release on GitHub and PyPi
213+
* Release on GitHub and PyPi

CONTRIBUTORS.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ List of contributors:
33
- Dougal Ballantyne - dougalb at amazon dot com
44
- Adam Boeglin - boeglina at amazon dot com
55
- Sean Smith - sensmit at amazon dot com
6+
- Brian Barrett - bbarrett at amazon dot com
67

78
- Kenneth Daily - kmdaily at gmail dot com
89
- John Lilley - johnbot at ltech dot edu

README.rst

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,15 @@ CfnCluster
77

88
CfnCluster ("cloud formation cluster") is a framework that deploys and maintains high performance computing clusters on Amazon Web Services (AWS). Developed by AWS, CfnCluster facilitates both quick start proof of concepts (POCs) and production deployments. CfnCluster supports many different types of clustered applications and can easily be extended to support different frameworks. The CLI is stateless, everything is done using CloudFormation or resources within AWS.
99

10+
Known Issues
11+
============
12+
13+
* CfnCluster 1.3.2 supports the I3 and F1 instance families. However,
14+
it will not automatically setup a single, RAIDed volume across all
15+
available instance store volumes (like it will for other instance
16+
families which support instance storage). This will be fixed in a
17+
future release.
18+
1019
Documentation
1120
=============
1221

@@ -15,4 +24,6 @@ Documentation is part of the project and is published to - https://cfncluster.re
1524
Issues
1625
======
1726

18-
Any issues or feedback, should be posted in the AWS HPC forum - https://forums.aws.amazon.com/forum.jspa?forumID=192
27+
Please open a GitHub issue for any feedback or issues:
28+
https://github.com/awslabs/cfncluster. There is also an active AWS
29+
HPC forum which may be helpful:https://forums.aws.amazon.com/forum.jspa?forumID=192.

amis.txt

Lines changed: 70 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,75 @@
11
# centos6
2-
ap-northeast-1: ami-46b17b27
3-
ap-northeast-2: ami-75e1341b
4-
ap-south-1: ami-a392e7cc
5-
ap-southeast-1: ami-23f22940
6-
ap-southeast-2: ami-0ea6906d
7-
eu-central-1: ami-5fd92a30
8-
eu-west-1: ami-27f78554
9-
sa-east-1: ami-8ad848e6
10-
us-east-1: ami-504b2047
11-
us-west-1: ami-051f5365
12-
us-west-2: ami-6e30e10e
2+
ap-northeast-1: ami-10686677
3+
ap-northeast-2: ami-bb77abd5
4+
ap-south-1: ami-0a710e65
5+
ap-southeast-1: ami-9b1596f8
6+
ap-southeast-2: ami-c7b9afa4
7+
ca-central-1: ami-a6f847c2
8+
eu-central-1: ami-56d67239
9+
eu-west-1: ami-abd5c9cd
10+
eu-west-2: ami-cabcabae
11+
sa-east-1: ami-b491f9d8
12+
us-east-1: ami-a293c9b4
13+
us-east-2: ami-2cd3f549
14+
us-west-1: ami-65c2e005
15+
us-west-2: ami-6bb1b812
1316
# centos7
14-
ap-northeast-1: ami-43c90322
15-
ap-northeast-2: ami-5cec3932
16-
ap-south-1: ami-bf90e5d0
17-
ap-southeast-1: ami-d5f52eb6
18-
ap-southeast-2: ami-79a5931a
19-
eu-central-1: ami-fcda2993
20-
eu-west-1: ami-5af48629
21-
sa-east-1: ami-f8d84894
22-
us-east-1: ami-e94328fe
23-
us-west-1: ami-a51955c5
24-
us-west-2: ami-2e1dcc4e
17+
ap-northeast-1: ami-0e6b6569
18+
ap-northeast-2: ami-9377abfd
19+
ap-south-1: ami-546d123b
20+
ap-southeast-1: ami-da1596b9
21+
ap-southeast-2: ami-afa6b0cc
22+
ca-central-1: ami-62f94606
23+
eu-central-1: ami-9cd571f3
24+
eu-west-1: ami-6dd8c40b
25+
eu-west-2: ami-9cb9aef8
26+
sa-east-1: ami-5092fa3c
27+
us-east-1: ami-d29cc6c4
28+
us-east-2: ami-c3d2f4a6
29+
us-west-1: ami-17fcde77
30+
us-west-2: ami-22b2bb5b
2531
# alinux
26-
ap-northeast-1: ami-50bd7731
27-
ap-northeast-2: ami-afe431c1
28-
ap-south-1: ami-0495e06b
29-
ap-southeast-1: ami-9af229f9
30-
ap-southeast-2: ami-51b98f32
31-
eu-central-1: ami-96db28f9
32-
eu-west-1: ami-d8f785ab
33-
sa-east-1: ami-8bd848e7
34-
us-east-1: ami-d5751ec2
35-
us-west-1: ami-5f19553f
36-
us-west-2: ami-1e31e07e
32+
ap-northeast-1: ami-586b653f
33+
ap-northeast-2: ami-ea71ad84
34+
ap-south-1: ami-1f720d70
35+
ap-southeast-1: ami-1f1b987c
36+
ap-southeast-2: ami-56b9af35
37+
ca-central-1: ami-65f94601
38+
eu-central-1: ami-7fd17510
39+
eu-west-1: ami-6ddac60b
40+
eu-west-2: ami-f1bbac95
41+
sa-east-1: ami-a990f8c5
42+
us-east-1: ami-2492c832
43+
us-east-2: ami-a6d3f5c3
44+
us-west-1: ami-39c2e059
45+
us-west-2: ami-f4b0b98d
3746
# ubuntu1404
38-
ap-northeast-1: ami-89bd77e8
39-
ap-northeast-2: ami-bae732d4
40-
ap-south-1: ami-489de827
41-
ap-southeast-1: ami-95f229f6
42-
ap-southeast-2: ami-d3b98fb0
43-
eu-central-1: ami-89db28e6
44-
eu-west-1: ami-3ff0824c
45-
sa-east-1: ami-3f34a553
46-
us-east-1: ami-ba4a21ad
47-
us-west-1: ami-40185420
48-
us-west-2: ami-4633e226
47+
ap-northeast-1: ami-466c6221
48+
ap-northeast-2: ami-2877ab46
49+
ap-south-1: ami-11700f7e
50+
ap-southeast-1: ami-be1497dd
51+
ap-southeast-2: ami-37a4b254
52+
ca-central-1: ami-eefc438a
53+
eu-central-1: ami-bcd773d3
54+
eu-west-1: ami-83d4c8e5
55+
eu-west-2: ami-5cb9ae38
56+
sa-east-1: ami-6d91f901
57+
us-east-1: ami-a192c8b7
58+
us-east-2: ami-e2d3f587
59+
us-west-1: ami-b5c2e0d5
60+
us-west-2: ami-f5b0b98c
4961
# ubuntu1604
50-
ap-northeast-1: ami-eabe748b
51-
ap-northeast-2: ami-7eef3a10
52-
ap-south-1: ami-5d90e532
53-
ap-southeast-1: ami-23f32840
54-
ap-southeast-2: ami-c1b98fa2
55-
eu-central-1: ami-9dd427f2
56-
eu-west-1: ami-99f082ea
57-
sa-east-1: ami-8d0e9fe1
58-
us-east-1: ami-d6751ec1
59-
us-west-1: ami-751f5315
60-
us-west-2: ami-870edfe7
62+
ap-northeast-1: ami-ce6c62a9
63+
ap-northeast-2: ami-d072aebe
64+
ap-south-1: ami-446f102b
65+
ap-southeast-1: ami-951596f6
66+
ap-southeast-2: ami-cca6b0af
67+
ca-central-1: ami-a7fa45c3
68+
eu-central-1: ami-40d6722f
69+
eu-west-1: ami-e6d5c980
70+
eu-west-2: ami-5eb9ae3a
71+
sa-east-1: ami-df90f8b3
72+
us-east-1: ami-8c9fc59a
73+
us-east-2: ami-54d5f331
74+
us-west-1: ami-0dfddf6d
75+
us-west-2: ami-c4b1b8bd

cli/cfncluster/cfncluster.py

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from __future__ import print_function
2+
from __future__ import absolute_import
13
# Copyright 2013-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved.
24
#
35
# Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with the
@@ -9,6 +11,7 @@
911
# OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions and
1012
# limitations under the License.
1113

14+
from builtins import str
1215
import sys
1316
import boto.cloudformation
1417
import boto.ec2.autoscale
@@ -19,13 +22,13 @@
1922
import socket
2023
import logging
2124

22-
import cfnconfig
25+
from . import cfnconfig
2326

2427
logger = logging.getLogger('cfncluster.cfncluster')
2528

2629
def version(args):
2730
config = cfnconfig.CfnClusterConfig(args)
28-
print config.version
31+
print(config.version)
2932

3033
def create(args):
3134
print('Starting: %s' % (args.cluster_name))
@@ -50,7 +53,7 @@ def create(args):
5053
aws_secret_access_key=config.aws_secret_access_key)
5154
availability_zone = str(vpcconn.get_all_subnets(subnet_ids=master_subnet_id)[0].availability_zone)
5255
except boto.exception.BotoServerError as e:
53-
print e.message
56+
print(e.message)
5457
sys.exit(1)
5558
config.parameters.append(('AvailabilityZone', availability_zone))
5659
except ValueError:
@@ -75,12 +78,12 @@ def create(args):
7578
time.sleep(5)
7679
outputs = cfnconn.describe_stacks(stack)[0].outputs
7780
for output in outputs:
78-
print output
81+
print(output)
7982
else:
8083
status = cfnconn.describe_stacks(stack)[0].stack_status
8184
print('Status: %s' % status)
8285
except boto.exception.BotoServerError as e:
83-
print e.message
86+
print(e.message)
8487
sys.exit(1)
8588
except KeyboardInterrupt:
8689
print('\nExiting...')
@@ -118,7 +121,7 @@ def update(args):
118121
aws_secret_access_key=config.aws_secret_access_key)
119122
availability_zone = str(vpcconn.get_all_subnets(subnet_ids=master_subnet_id)[0].availability_zone)
120123
except boto.exception.BotoServerError as e:
121-
print e.message
124+
print(e.message)
122125
sys.exit(1)
123126
config.parameters.append(('AvailabilityZone', availability_zone))
124127
except ValueError:
@@ -142,7 +145,7 @@ def update(args):
142145
status = cfnconn.describe_stacks(stack)[0].stack_status
143146
print('Status: %s' % status)
144147
except boto.exception.BotoServerError as e:
145-
print e.message
148+
print(e.message)
146149
sys.exit(1)
147150
except KeyboardInterrupt:
148151
print('\nExiting...')
@@ -161,7 +164,7 @@ def start(args):
161164
response = ec2conn.start_instances(master_server_id)
162165
except boto.exception.BotoServerError as e:
163166
if e.message.endswith("does not exist"):
164-
print e.message
167+
print(e.message)
165168
sys.stdout.flush()
166169
sys.exit(0)
167170
else:
@@ -173,11 +176,13 @@ def start(args):
173176
# Set asg limits
174177
max_queue_size = [param[1] for param in config.parameters if param[0] == 'MaxQueueSize']
175178
max_queue_size = max_queue_size[0] if len(max_queue_size) > 0 else 10
176-
initial_queue_size = [param[1] for param in config.parameters if param[0] == 'InitialQueueSize'] if args.reset_desired else [0]
177-
initial_queue_size = initial_queue_size[0] if len(initial_queue_size) > 0 else 0
179+
desired_queue_size = [param[1] for param in config.parameters if param[0] == 'InitialQueueSize']
180+
desired_queue_size = desired_queue_size[0] if len(desired_queue_size) > 0 else 2
181+
min_queue_size = [desired_queue_size for param in config.parameters if param[0] == 'MaintainInitialSize' and param[1] == "true"]
182+
min_queue_size = min_queue_size[0] if len(min_queue_size) > 0 else 0
178183

179184
asg = get_asg(stack_name=stack_name, config=config)
180-
set_asg_limits(asg=asg, min=initial_queue_size, max=max_queue_size, desired=initial_queue_size)
185+
set_asg_limits(asg=asg, min=min_queue_size, max=max_queue_size, desired=desired_queue_size)
181186

182187
# Poll for status
183188
poll_master_server_state(stack_name, config)
@@ -201,7 +206,7 @@ def stop(args):
201206
response = ec2conn.stop_instances(master_server_id)
202207
except boto.exception.BotoServerError as e:
203208
if e.message.endswith("does not exist"):
204-
print e.message
209+
print(e.message)
205210
sys.stdout.flush()
206211
sys.exit(0)
207212
else:
@@ -224,7 +229,7 @@ def list(args):
224229
print('%s' % (stack.stack_name[11:]))
225230
except boto.exception.BotoServerError as e:
226231
if e.message.endswith("does not exist"):
227-
print e.message
232+
print(e.message)
228233
else:
229234
raise e
230235
except KeyboardInterrupt:
@@ -243,7 +248,7 @@ def get_master_server_id(stack_name, config):
243248
resources = cfnconn.describe_stack_resources(stack_name)
244249
except boto.exception.BotoServerError as e:
245250
if e.message.endswith("does not exist"):
246-
print e.message
251+
print(e.message)
247252
sys.stdout.flush()
248253
sys.exit(0)
249254
else:
@@ -280,7 +285,7 @@ def poll_master_server_state(stack_name, config):
280285
sys.stdout.flush()
281286
except boto.exception.BotoServerError as e:
282287
if e.message.endswith("does not exist"):
283-
print e.message
288+
print(e.message)
284289
sys.stdout.flush()
285290
sys.exit(0)
286291
else:
@@ -303,7 +308,7 @@ def get_ec2_instances(stack, config):
303308
except boto.exception.BotoServerError as e:
304309
if e.message.endswith("does not exist"):
305310
#sys.stdout.write('\r\n')
306-
print e.message
311+
print(e.message)
307312
sys.stdout.flush()
308313
sys.exit(0)
309314
else:
@@ -334,7 +339,7 @@ def get_asg(stack_name, config):
334339
return asgconn.get_all_groups(names=[asg_id])[0]
335340
except boto.exception.BotoServerError as e:
336341
if e.message.endswith("does not exist"):
337-
print e.message
342+
print(e.message)
338343
sys.stdout.flush()
339344
sys.exit(0)
340345
else:
@@ -363,7 +368,7 @@ def get_asg_ids(stack, config):
363368
except boto.exception.BotoServerError as e:
364369
if e.message.endswith("does not exist"):
365370
#sys.stdout.write('\r\n')
366-
print e.message
371+
print(e.message)
367372
sys.stdout.flush()
368373
sys.exit(0)
369374
else:
@@ -433,22 +438,22 @@ def status(args):
433438
if state == 'running':
434439
outputs = cfnconn.describe_stacks(stack)[0].outputs
435440
for output in outputs:
436-
print output
441+
print(output)
437442
elif ((status == 'ROLLBACK_COMPLETE') or (status == 'CREATE_FAILED') or (status == 'DELETE_FAILED') or
438443
(status == 'UPDATE_ROLLBACK_COMPLETE')):
439444
events = cfnconn.describe_stack_events(stack)
440445
for event in events:
441446
if ((event.resource_status == 'CREATE_FAILED') or (event.resource_status == 'DELETE_FAILED') or
442447
(event.resource_status == 'UPDATE_FAILED')):
443-
print event.timestamp, event.resource_status, event.resource_type, event.logical_resource_id, \
444-
event.resource_status_reason
448+
print(event.timestamp, event.resource_status, event.resource_type, event.logical_resource_id, \
449+
event.resource_status_reason)
445450
else:
446451
sys.stdout.write('\n')
447452
sys.stdout.flush()
448453
except boto.exception.BotoServerError as e:
449454
if e.message.endswith("does not exist"):
450455
sys.stdout.write('\r')
451-
print e.message
456+
print(e.message)
452457
sys.stdout.flush()
453458
sys.exit(0)
454459
else:
@@ -489,7 +494,7 @@ def delete(args):
489494
except boto.exception.BotoServerError as e:
490495
if e.message.endswith("does not exist"):
491496
#sys.stdout.write('\r\n')
492-
print e.message
497+
print(e.message)
493498
sys.stdout.flush()
494499
sys.exit(0)
495500
else:

0 commit comments

Comments
 (0)