autostacker24 2.7.0 → 2.8.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6050696250eac4f4d41ddb4519d21a18fe8cabe4
4
- data.tar.gz: b4a86b81d92b8f13ddea6663f1ebca27bd3cfe38
3
+ metadata.gz: e405c67f86a7a42682df12547de1686350b61ffa
4
+ data.tar.gz: 29ae7334844df70bebbbdd4d240efc17ff722c32
5
5
  SHA512:
6
- metadata.gz: 535dda70739b3401231f2b1e2b0ac3e5cc3f4f5fc83eeb574e84067f5c99d0a82a8ce2b206eeafbaf8b837089c145ea1f4167209c2061cca7ae04e7902ae340e
7
- data.tar.gz: a5c895e4ce74db80b00b1fda8e32bde0f9f0546c0d531299971358c03b63969628a053175cc900e4366fd1147d7bc8b1d25cec67273bf8f1ab56bf60a88f83f6
6
+ metadata.gz: d1cda7fb0afcc62f33425db43e57a6833471347f846cee8bbcb8eaae9b218eb99e0775f841437206c67417780cbfdca48084d24e9cf1646b00ee31448951450d
7
+ data.tar.gz: dbbb645e16fcbe0e6df6e071c0af501c4e377d39fbcb1cec18b592999e136a9286f3e5c58eed5abc2086a5be49ae1f45d83a82ac46f424225b1284ff4a12ccad
@@ -27,6 +27,12 @@ def load_file(path)
27
27
  json?(data) ? JSON.parse(data) : YAML.load(data)
28
28
  end
29
29
 
30
+ def validate_param(param)
31
+ kv = param.split('=', 2)
32
+ error("parameter #{param} is missing mandatory value") unless kv.size == 2
33
+ kv
34
+ end
35
+
30
36
  args = OpenStruct.new
31
37
  args.region = ENV['AWS_REGION']
32
38
  args.params = {}
@@ -34,6 +40,7 @@ parser = OptionParser.new do |opts|
34
40
  opts.banner = 'Usage: autostacker24 command [options]'
35
41
  opts.separator ''
36
42
  opts.separator 'Commands:'
43
+ opts.separator "\tlist list stacks"
37
44
  opts.separator "\tupdate create or update a stack"
38
45
  opts.separator "\tdelete delete a stack"
39
46
  opts.separator "\tshow show processed template with pretty printing"
@@ -45,9 +52,10 @@ parser = OptionParser.new do |opts|
45
52
  opts.on('--template TEMPLATE', 'Path to template') {|v| args.template = v}
46
53
  opts.on('--stack STACK', 'Name of stack') {|v| args.stack = v}
47
54
  opts.on('--parent PARENT', 'Name of parent stack') {|v| args.parent = v}
55
+ opts.on('--role-arn ROLE-ARN', 'Arn of execution role') {|v| args.role_arn = v}
48
56
  opts.on('--region REGION', 'AWS region') {|v| args.region = v}
49
57
  opts.on('--profile PROFILE', 'AWS profile (use aws configure)') {|v| args.profile = v}
50
- opts.on('--param KEY=VALUE', 'Stack Parameter') {|v| args.params.store(*v.split('=')) }
58
+ opts.on('--param KEY=VALUE', 'Stack Parameter') {|v| args.params.store(*validate_param(v)) }
51
59
  opts.on('--params FILE', 'Stack Parameter from yaml/json file') {|v| args.params.merge!(load_file(v)) }
52
60
  opts.on('--help', 'Show this help') {|_| puts opts; exit!;}
53
61
  opts.on('--version', 'Show version') {|_| puts `gem list autostacker24`; exit!;}
@@ -75,10 +83,12 @@ case args.command
75
83
  when /create|update|create_or_update/
76
84
  check_template(args)
77
85
  check_stack(args)
78
- Stacker.create_or_update_stack(args.stack, args.template, args.params, args.parent)
86
+ Stacker.create_or_update_stack(args.stack, args.template, args.params, args.parent, args.role_arn)
87
+ when /list/
88
+ Stacker.list_stacks()
79
89
  when /delete/
80
90
  check_stack(args)
81
- Stacker.delete_stack(args.stack)
91
+ Stacker.delete_stack(args.stack, args.role_arn)
82
92
  when /process/
83
93
  check_template(args)
84
94
  puts Stacker.template_body(args.template)
@@ -36,26 +36,27 @@ module Stacker
36
36
  end
37
37
  end
38
38
 
39
- def create_or_update_stack(stack_name, template, parameters, parent_stack_name = nil, tags = nil, timeout_in_minutes = DEFAULT_TIMEOUT)
39
+ def create_or_update_stack(stack_name, template, parameters, parent_stack_name = nil, role_arn = nil, tags = nil, timeout_in_minutes = DEFAULT_TIMEOUT)
40
40
  if find_stack(stack_name).nil?
41
- create_stack(stack_name, template, parameters, parent_stack_name, tags, timeout_in_minutes)
41
+ create_stack(stack_name, template, parameters, parent_stack_name, role_arn, tags, timeout_in_minutes)
42
42
  else
43
- update_stack(stack_name, template, parameters, parent_stack_name, tags, timeout_in_minutes)
43
+ update_stack(stack_name, template, parameters, parent_stack_name, role_arn, tags, timeout_in_minutes)
44
44
  end
45
45
  end
46
46
 
47
- def create_stack(stack_name, template, parameters, parent_stack_name = nil, tags = nil, timeout_in_minutes = DEFAULT_TIMEOUT)
47
+ def create_stack(stack_name, template, parameters, parent_stack_name = nil, role_arn = nil, tags = nil, timeout_in_minutes = DEFAULT_TIMEOUT)
48
48
  merge_and_validate(template, parameters, parent_stack_name)
49
49
  cloud_formation.create_stack(stack_name: stack_name,
50
50
  template_body: template_body(template),
51
51
  on_failure: 'DELETE',
52
52
  parameters: transform_input(parameters),
53
53
  capabilities: ['CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM'],
54
+ role_arn: role_arn,
54
55
  tags: tags)
55
56
  wait_for_stack(stack_name, :create, Set.new, timeout_in_minutes)
56
57
  end
57
58
 
58
- def update_stack(stack_name, template, parameters, parent_stack_name = nil, tags = nil, timeout_in_minutes = DEFAULT_TIMEOUT)
59
+ def update_stack(stack_name, template, parameters, parent_stack_name = nil, role_arn = nil, tags = nil, timeout_in_minutes = DEFAULT_TIMEOUT)
59
60
  seen_events = get_stack_events(stack_name).map {|e| e[:event_id]}
60
61
  begin
61
62
  merge_and_validate(template, parameters, parent_stack_name)
@@ -63,6 +64,7 @@ module Stacker
63
64
  template_body: template_body(template),
64
65
  parameters: transform_input(parameters),
65
66
  capabilities: ['CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM'],
67
+ role_arn: role_arn,
66
68
  tags: tags)
67
69
  rescue Aws::CloudFormation::Errors::ValidationError => error
68
70
  raise error unless error.message =~ /No updates are to be performed/i # may be flaky, do more research in API
@@ -73,6 +75,22 @@ module Stacker
73
75
  end
74
76
  end
75
77
 
78
+ def list_stacks()
79
+ next_token = nil
80
+ loop do
81
+ res = cloud_formation.list_stacks(next_token: next_token)
82
+ res.stack_summaries.each { |summary| print_stack_summary(summary) }
83
+
84
+ next_token = res.next_token
85
+ break if next_token.nil?
86
+ end
87
+ end
88
+
89
+ def print_stack_summary(summary)
90
+ change_date = summary.last_updated_time ? summary.last_updated_time : summary.creation_time
91
+ puts "#{summary.stack_name}\t#{summary.stack_status}\t#{change_date}" unless summary.stack_status == 'DELETE_COMPLETE'
92
+ end
93
+
76
94
  # if stack_name is given assign read the output parameters and copy them to the given template parameters
77
95
  # if a aparameter is already defined, it will not be overwritten
78
96
  # finally, if mandatory parameters are missing, an error will be raised
@@ -95,9 +113,9 @@ module Stacker
95
113
  cloud_formation.validate_template(template_body: template_body(template))
96
114
  end
97
115
 
98
- def delete_stack(stack_name, timeout_in_minutes = 60)
116
+ def delete_stack(stack_name, role_arn = nil, timeout_in_minutes = 60)
99
117
  seen_events = get_stack_events(stack_name).map {|e| e[:event_id]}
100
- cloud_formation.delete_stack(stack_name: stack_name)
118
+ cloud_formation.delete_stack(stack_name: stack_name, role_arn: role_arn)
101
119
  wait_for_stack(stack_name, :delete, seen_events, timeout_in_minutes)
102
120
  end
103
121
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: autostacker24
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.7.0
4
+ version: 2.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Johannes Mueller
@@ -9,92 +9,92 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-03-21 00:00:00.000000000 Z
12
+ date: 2017-10-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: aws-sdk-core
15
+ name: aws-sdk
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: '2'
20
+ version: '3'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: '2'
27
+ version: '3'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: json
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: '2.0'
34
+ version: '2'
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: '2.0'
41
+ version: '2'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: json_pure
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: '2.0'
48
+ version: '2'
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: '2.0'
55
+ version: '2'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: rubocop
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
60
  - - "~>"
61
61
  - !ruby/object:Gem::Version
62
- version: '0.37'
62
+ version: '0'
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: '0.37'
69
+ version: '0'
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: rake
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
74
  - - "~>"
75
75
  - !ruby/object:Gem::Version
76
- version: '10.0'
76
+ version: '12'
77
77
  type: :development
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
81
  - - "~>"
82
82
  - !ruby/object:Gem::Version
83
- version: '10.0'
83
+ version: '12'
84
84
  - !ruby/object:Gem::Dependency
85
85
  name: rspec
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  requirements:
88
88
  - - "~>"
89
89
  - !ruby/object:Gem::Version
90
- version: '3.4'
90
+ version: '3'
91
91
  type: :development
92
92
  prerelease: false
93
93
  version_requirements: !ruby/object:Gem::Requirement
94
94
  requirements:
95
95
  - - "~>"
96
96
  - !ruby/object:Gem::Version
97
- version: '3.4'
97
+ version: '3'
98
98
  description: AutoStacker24 is a small ruby gem for managing AWS CloudFormation stacks.
99
99
  It is a thin wrapper around the AWS Ruby SDK. It lets you write simple and convenient
100
100
  automation scripts, especially if you have lots of parameters or dependencies between