autostacker24 2.7.0 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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