ruby_aem_aws 1.3.0 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/conf/gem.yaml +1 -1
  3. data/lib/ruby_aem_aws/abstract/cloudwatch.rb +3 -3
  4. data/lib/ruby_aem_aws/abstract/component.rb +1 -2
  5. data/lib/ruby_aem_aws/abstract/grouped_component.rb +1 -1
  6. data/lib/ruby_aem_aws/abstract/single_component.rb +1 -1
  7. data/lib/ruby_aem_aws/abstract/snapshot.rb +1 -1
  8. data/lib/ruby_aem_aws/abstract/stackmanager.rb +2 -2
  9. data/lib/ruby_aem_aws/architecture/consolidated_stack.rb +1 -6
  10. data/lib/ruby_aem_aws/architecture/full_set_stack.rb +2 -40
  11. data/lib/ruby_aem_aws/architecture/stack_manager.rb +1 -1
  12. data/lib/ruby_aem_aws/client/cloudwatch.rb +1 -1
  13. data/lib/ruby_aem_aws/client/dynamo_db.rb +1 -1
  14. data/lib/ruby_aem_aws/client/s3.rb +1 -1
  15. data/lib/ruby_aem_aws/client/sns_topic.rb +1 -1
  16. data/lib/ruby_aem_aws/component/author.rb +2 -2
  17. data/lib/ruby_aem_aws/component/author_dispatcher.rb +5 -4
  18. data/lib/ruby_aem_aws/component/author_primary.rb +1 -1
  19. data/lib/ruby_aem_aws/component/author_publish_dispatcher.rb +1 -1
  20. data/lib/ruby_aem_aws/component/author_standby.rb +1 -1
  21. data/lib/ruby_aem_aws/component/chaos_monkey.rb +4 -3
  22. data/lib/ruby_aem_aws/component/component_descriptor.rb +1 -1
  23. data/lib/ruby_aem_aws/component/orchestrator.rb +4 -3
  24. data/lib/ruby_aem_aws/component/publish.rb +4 -3
  25. data/lib/ruby_aem_aws/component/publish_dispatcher.rb +5 -4
  26. data/lib/ruby_aem_aws/component/stack_manager_resources.rb +1 -2
  27. data/lib/ruby_aem_aws/constants.rb +21 -6
  28. data/lib/ruby_aem_aws/error.rb +1 -8
  29. data/lib/ruby_aem_aws/mixins/healthy_count_verifier.rb +50 -20
  30. data/lib/ruby_aem_aws/mixins/healthy_resource_verifier.rb +53 -23
  31. data/lib/ruby_aem_aws/mixins/healthy_state_verifier.rb +3 -3
  32. data/lib/ruby_aem_aws/mixins/instance_describer.rb +1 -1
  33. data/lib/ruby_aem_aws/mixins/metric_verifier.rb +2 -2
  34. data/lib/ruby_aem_aws/mixins/snapshot_verifier.rb +1 -1
  35. data/lib/ruby_aem_aws.rb +5 -24
  36. metadata +18 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2119ea82ad020763efc3509aeb665994a52deed4
4
- data.tar.gz: 5f497699aca45316d69e62a864d95e30fb7df1db
3
+ metadata.gz: d0449e7cac793e0800bfef68c08bd32e1081fd04
4
+ data.tar.gz: 7d65262846445f5b575108fb2949ec6c875d12c9
5
5
  SHA512:
6
- metadata.gz: 65a7e1bc47342df6ddc07f23e54d7b75f347264c9d8b69592caef796a49ac88f23b85a0564c006eea8393dd8458d5b98c8199ce82c863edf92fa98a0a60ae613
7
- data.tar.gz: 40ff794bd6ecd741d1c4f19ac1c00555a49e1f5ff5103f5399c8b1004b3e25b1d4b283549ff63e45fd1f02188ec82f9a370178d257ac399cc6ea998a47645e19
6
+ metadata.gz: ceb1b660d9f5ed17b89e82eb2a7cfe117da776c4ea075cae3cdbbe5badb2e464bd1d6c2c986fb2250f943ee056492fbfe35c4ffe740b3d62469b64f42756d35a
7
+ data.tar.gz: b9babf9f36d1257d1373ed2f10494a9edbd7effa4f366f8b9eefac4df264c6fccdd034b5eb1c1b1353d9e5e81c0c63996a3741231e8d47c8bf895f91dc31e7a8
data/conf/gem.yaml CHANGED
@@ -1 +1 @@
1
- version: 1.3.0
1
+ version: 2.0.1
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -39,7 +39,7 @@ module RubyAemAws
39
39
  }
40
40
  end
41
41
 
42
- # @param loggroup_name Cloudwatch loggroup name
42
+ # @param log_group_name Cloudwatch loggroup name
43
43
  # @param log_stream_name Cloudwatch logstream name
44
44
  # @return Array of a Cloudwatch log stream filter to filter for a specific Cloudwatch log stream
45
45
  def filter_for_cloudwatch_log_stream(log_group_name, log_stream_name)
@@ -71,7 +71,7 @@ module RubyAemAws
71
71
  end
72
72
 
73
73
  # @param dimensions_name Cloudwatch Dimension name
74
- # @param dimension_values Cloudwatch Dimension value
74
+ # @param dimensions_value Cloudwatch Dimension value
75
75
  # @return Array of a Cloudwatch Dimension value filter for the Cloudwatch dimension filter
76
76
  def dimensions_value_filter_for_cloudwatch_metric(dimensions_name, dimensions_value)
77
77
  {
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -33,7 +33,6 @@ module RubyAemAws
33
33
  filters: [
34
34
  { name: 'tag:StackPrefix', values: [@descriptor.stack_prefix] },
35
35
  { name: 'tag:Component', values: [@descriptor.ec2.component] },
36
- { name: 'tag:Name', values: [@descriptor.ec2.name] },
37
36
  { name: 'instance-state-name', values: ['running'] }
38
37
  ]
39
38
  }
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -35,7 +35,7 @@ module RubyAemAws
35
35
  end
36
36
 
37
37
  # @param dynamodb_tablename AWS DynamoDB table name
38
- # @param attkey_attribute_valueribute_value Key value to query for
38
+ # @param key_attribute_value Key value to query for
39
39
  # @return Array of a DynamoDB filter to query for a specific value
40
40
  def filter_for_db_query(dynamodb_tablename, key_attribute_value)
41
41
  {
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -36,11 +36,6 @@ module RubyAemAws
36
36
  @stack_prefix = stack_prefix
37
37
  end
38
38
 
39
- # @param stack_prefix AWS tag: StackPrefix
40
- # @param consolidated_aws_clients Array of AWS Clients and Resource connections:
41
- # - CloudWatchClient: AWS Cloudwatch Client.
42
- # - CloudWatchLogsClient: AWS Cloudwatch Logs Client.
43
- # - Ec2Resource: AWS EC2 Resource connection.
44
39
  # @return new RubyAemAws::Component::AuthorPublishDispatcher instance
45
40
  def author_publish_dispatcher
46
41
  RubyAemAws::Component::AuthorPublishDispatcher.new(@stack_prefix, @consolidated_aws_clients)
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -33,7 +33,7 @@ module RubyAemAws
33
33
  # - CloudWatchClient: AWS Cloudwatch Client.
34
34
  # - CloudWatchLogsClient: AWS Cloudwatch Logs Client.
35
35
  # - Ec2Resource: AWS EC2 Resource connection.
36
- # - ElbClient: AWS ElasticLoadBalancer Client.
36
+ # - ElbClient: AWS ElasticLoadBalancer v2 Client.
37
37
  # @return new RubyAemAws::FullSetStack instance
38
38
  def initialize(stack_prefix, params)
39
39
  @author_aws_clients = {
@@ -70,69 +70,31 @@ module RubyAemAws
70
70
  @stack_prefix = stack_prefix
71
71
  end
72
72
 
73
- # @param stack_prefix AWS tag: StackPrefix
74
- # @param dispatcher_aws_clients Array of AWS Clients and Resource connections:
75
- # - AutoScalingClient: AWS AutoScalingGroup Client.
76
- # - CloudWatchClient: AWS Cloudwatch Client.
77
- # - CloudWatchLogsClient: AWS Cloudwatch Logs Client.
78
- # - Ec2Resource: AWS EC2 Resource connection.
79
- # - ElbClient: AWS ElasticLoadBalancer Client.
80
73
  # @return new RubyAemAws::Component::AuthorDispatcher instance
81
74
  def author_dispatcher
82
75
  RubyAemAws::Component::AuthorDispatcher.new(@stack_prefix, @dispatcher_aws_clients)
83
76
  end
84
77
 
85
- # @param stack_prefix AWS tag: StackPrefix
86
- # @param author_aws_clients Array of AWS Clients and Resource connections:
87
- # - CloudWatchClient: AWS Cloudwatch Client.
88
- # - CloudWatchLogsClient: AWS Cloudwatch Logs Client.
89
- # - Ec2Resource: AWS EC2 Resource connection.
90
- # - ElbClient: AWS ElasticLoadBalancer Client.
91
78
  # @return new RubyAemAws::Component::Author instance
92
79
  def author
93
80
  RubyAemAws::Component::Author.new(@stack_prefix, @author_aws_clients)
94
81
  end
95
82
 
96
- # @param stack_prefix AWS tag: StackPrefix
97
- # @param chaos_monkey_aws_clients Array of AWS Clients and Resource connections:
98
- # - AutoScalingClient: AWS AutoScalingGroup Client.
99
- # - CloudWatchClient: AWS Cloudwatch Client.
100
- # - CloudWatchLogsClient: AWS Cloudwatch Logs Client.
101
- # - Ec2Resource: AWS EC2 Resource connection.
102
83
  # @return new RubyAemAws::Component::ChaosMonkey instance
103
84
  def chaos_monkey
104
85
  RubyAemAws::Component::ChaosMonkey.new(@stack_prefix, @aem_java_aws_clients)
105
86
  end
106
87
 
107
- # @param stack_prefix AWS tag: StackPrefix
108
- # @param orchestrator_aws_clients Array of AWS Clients and Resource connections:
109
- # - AutoScalingClient: AWS AutoScalingGroup Client.
110
- # - CloudWatchClient: AWS Cloudwatch Client.
111
- # - CloudWatchLogsClient: AWS Cloudwatch Logs Client.
112
- # - Ec2Resource: AWS EC2 Resource connection.
113
88
  # @return new RubyAemAws::Component::Orchestrator instance
114
89
  def orchestrator
115
90
  RubyAemAws::Component::Orchestrator.new(@stack_prefix, @aem_java_aws_clients)
116
91
  end
117
92
 
118
- # @param stack_prefix AWS tag: StackPrefix
119
- # @param publish_aws_clients Array of AWS Clients and Resource connections:
120
- # - AutoScalingClient: AWS AutoScalingGroup Client.
121
- # - CloudWatchClient: AWS Cloudwatch Client.
122
- # - CloudWatchLogsClient: AWS Cloudwatch Logs Client.
123
- # - Ec2Resource: AWS EC2 Resource connection.
124
93
  # @return new RubyAemAws::Component::Publish instance
125
94
  def publish
126
95
  RubyAemAws::Component::Publish.new(@stack_prefix, @publish_aws_clients)
127
96
  end
128
97
 
129
- # @param stack_prefix AWS tag: StackPrefix
130
- # @param dispatcher_aws_clients Array of AWS Clients and Resource connections:
131
- # - AutoScalingClient: AWS AutoScalingGroup Client.
132
- # - CloudWatchClient: AWS Cloudwatch Client.
133
- # - CloudWatchLogsClient: AWS Cloudwatch Logs Client.
134
- # - Ec2Resource: AWS EC2 Resource connection.
135
- # - ElbClient: AWS ElasticLoadBalancer Client.
136
98
  # @return new RubyAemAws::Component::PublishDispatcher instance
137
99
  def publish_dispatcher
138
100
  RubyAemAws::Component::PublishDispatcher.new(@stack_prefix, @dispatcher_aws_clients)
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -29,7 +29,7 @@ module RubyAemAws
29
29
  # - CloudWatchClient: AWS Cloudwatch Client.
30
30
  # - CloudWatchLogsClient: AWS Cloudwatch Logs Client.
31
31
  # - Ec2Resource: AWS EC2 Resource connection.
32
- # - ElbClient: AWS ElasticLoadBalancer Client.
32
+ # - ElbClient: AWS ElasticLoadBalancer v2 Client.
33
33
  # @return new RubyAemAws::FullSet::Author
34
34
  def initialize(stack_prefix, params)
35
35
  author_aws_clients = {
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -14,6 +14,7 @@
14
14
 
15
15
  require_relative '../abstract/grouped_component'
16
16
  require_relative '../abstract/snapshot'
17
+ require_relative '../constants'
17
18
  require_relative '../mixins/healthy_resource_verifier'
18
19
  require_relative '../mixins/metric_verifier'
19
20
  require_relative 'component_descriptor'
@@ -41,7 +42,7 @@ module RubyAemAws
41
42
  # - CloudWatchClient: AWS Cloudwatch Client.
42
43
  # - CloudWatchLogsClient: AWS Cloudwatch Logs Client.
43
44
  # - Ec2Resource: AWS EC2 Resource connection.
44
- # - ElbClient: AWS ElasticLoadBalancer Client.
45
+ # - ElbClient: AWS ElasticLoadBalancer v2 Client.
45
46
  # @return new RubyAemAws::FullSet::AuthorDispatcher
46
47
  def initialize(stack_prefix, params)
47
48
  @descriptor = ComponentDescriptor.new(stack_prefix,
@@ -56,7 +57,7 @@ module RubyAemAws
56
57
 
57
58
  def terminate_all_instances
58
59
  get_all_instances.each do |i|
59
- next if i.nil?
60
+ next if i.nil? || i.state.code != Constants::INSTANCE_STATE_CODE_RUNNING
60
61
 
61
62
  i.terminate
62
63
  i.wait_until_terminated
@@ -72,7 +73,7 @@ module RubyAemAws
72
73
  def get_tags
73
74
  tags = []
74
75
  get_all_instances.each do |i|
75
- next if i.nil?
76
+ next if i.nil? || i.state.code != Constants::INSTANCE_STATE_CODE_RUNNING
76
77
 
77
78
  tags.push(i.tags)
78
79
  end
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -14,6 +14,7 @@
14
14
 
15
15
  require_relative '../abstract/grouped_component'
16
16
  require_relative '../abstract/snapshot'
17
+ require_relative '../constants'
17
18
  require_relative '../mixins/healthy_resource_verifier'
18
19
  require_relative '../mixins/metric_verifier'
19
20
  require_relative '../mixins/snapshot_verifier'
@@ -50,7 +51,7 @@ module RubyAemAws
50
51
 
51
52
  def terminate_all_instances
52
53
  get_all_instances.each do |i|
53
- next if i.nil?
54
+ next if i.nil? || i.state.code != Constants::INSTANCE_STATE_CODE_RUNNING
54
55
 
55
56
  i.terminate
56
57
  i.wait_until_terminated
@@ -66,7 +67,7 @@ module RubyAemAws
66
67
  def get_tags
67
68
  tags = []
68
69
  get_all_instances.each do |i|
69
- next if i.nil?
70
+ next if i.nil? || i.state.code != Constants::INSTANCE_STATE_CODE_RUNNING
70
71
 
71
72
  tags.push(i.tags)
72
73
  end
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -14,6 +14,7 @@
14
14
 
15
15
  require_relative '../abstract/grouped_component'
16
16
  require_relative '../abstract/snapshot'
17
+ require_relative '../constants'
17
18
  require_relative '../mixins/healthy_resource_verifier'
18
19
  require_relative '../mixins/metric_verifier'
19
20
  require_relative '../mixins/snapshot_verifier'
@@ -50,7 +51,7 @@ module RubyAemAws
50
51
 
51
52
  def terminate_all_instances
52
53
  get_all_instances.each do |i|
53
- next if i.nil?
54
+ next if i.nil? || i.state.code != Constants::INSTANCE_STATE_CODE_RUNNING
54
55
 
55
56
  i.terminate
56
57
  i.wait_until_terminated
@@ -66,7 +67,7 @@ module RubyAemAws
66
67
  def get_tags
67
68
  tags = []
68
69
  get_all_instances.each do |i|
69
- next if i.nil?
70
+ next if i.nil? || i.state.code != Constants::INSTANCE_STATE_CODE_RUNNING
70
71
 
71
72
  tags.push(i.tags)
72
73
  end
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -14,6 +14,7 @@
14
14
 
15
15
  require_relative '../abstract/grouped_component'
16
16
  require_relative '../abstract/snapshot'
17
+ require_relative '../constants'
17
18
  require_relative '../mixins/healthy_resource_verifier'
18
19
  require_relative '../mixins/metric_verifier'
19
20
  require_relative '../mixins/snapshot_verifier'
@@ -50,7 +51,7 @@ module RubyAemAws
50
51
 
51
52
  def terminate_all_instances
52
53
  get_all_instances.each do |i|
53
- next if i.nil?
54
+ next if i.nil? || i.state.code != Constants::INSTANCE_STATE_CODE_RUNNING
54
55
 
55
56
  i.terminate
56
57
  i.wait_until_terminated
@@ -66,7 +67,7 @@ module RubyAemAws
66
67
  def get_tags
67
68
  tags = []
68
69
  get_all_instances.each do |i|
69
- next if i.nil?
70
+ next if i.nil? || i.state.code != Constants::INSTANCE_STATE_CODE_RUNNING
70
71
 
71
72
  tags.push(i.tags)
72
73
  end
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -14,6 +14,7 @@
14
14
 
15
15
  require_relative '../abstract/grouped_component'
16
16
  require_relative '../abstract/snapshot'
17
+ require_relative '../constants'
17
18
  require_relative '../mixins/healthy_resource_verifier'
18
19
  require_relative '../mixins/metric_verifier'
19
20
  require_relative '../mixins/snapshot_verifier'
@@ -40,7 +41,7 @@ module RubyAemAws
40
41
  # - CloudWatchClient: AWS Cloudwatch Client.
41
42
  # - CloudWatchLogsClient: AWS Cloudwatch Logs Client.
42
43
  # - Ec2Resource: AWS EC2 Resource connection.
43
- # - ElbClient: AWS ElasticLoadBalancer Client.
44
+ # - ElbClient: AWS ElasticLoadBalancer v2 Client.
44
45
  # @return new RubyAemAws::FullSet::PublishDispatcher
45
46
  def initialize(stack_prefix, params)
46
47
  @descriptor = ComponentDescriptor.new(stack_prefix,
@@ -55,7 +56,7 @@ module RubyAemAws
55
56
 
56
57
  def terminate_all_instances
57
58
  get_all_instances.each do |i|
58
- next if i.nil?
59
+ next if i.nil? || i.state.code != Constants::INSTANCE_STATE_CODE_RUNNING
59
60
 
60
61
  i.terminate
61
62
  i.wait_until_terminated
@@ -71,7 +72,7 @@ module RubyAemAws
71
72
  def get_tags
72
73
  tags = []
73
74
  get_all_instances.each do |i|
74
- next if i.nil?
75
+ next if i.nil? || i.state.code != Constants::INSTANCE_STATE_CODE_RUNNING
75
76
 
76
77
  tags.push(i.tags)
77
78
  end
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -29,7 +29,6 @@ module RubyAemAws
29
29
  include SNSTopic
30
30
  include S3Access
31
31
 
32
- # @param dynamodb_client AWS DynamoDB client connection
33
32
  # @param params Array of AWS Clients and Resource connections:
34
33
  # - CloudWatchClient: AWS Cloudwatch Client.
35
34
  # - CloudWatchLogsClient: AWS Cloudwatch Logs Client.
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -24,19 +24,34 @@ module RubyAemAws
24
24
  ALL_ACTIVE = [PENDING, RUNNING, SHUTTING_DOWN, STOPPING, STOPPED].freeze
25
25
  end
26
26
 
27
+ # API InstanceState codes https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_InstanceState.html
28
+ class InstanceStateCode
29
+ PENDING = 0
30
+ RUNNING = 16
31
+ SHUTTING_DOWN = 32
32
+ TERMINATED = 48
33
+ STOPPING = 64
34
+ STOPPED = 80
35
+ end
36
+
27
37
  class ELBInstanceState
28
- INSERVICE = 'InService'.freeze
29
- OUTOFSERVICE = 'OutOfService'.freeze
38
+ DRAINING = 'draining'.freeze
39
+ HEALTHY = 'healthy'.freeze
40
+ INITIAL = 'initial'.freeze
41
+ UNAVAILABLE = 'unavailable'.freeze
42
+ UNHEALTHY = 'unhealthy'.freeze
43
+ UNUSED = 'unused'.freeze
30
44
 
31
- ALL_ACTIVE = [INSERVICE, OUTOFSERVICE].freeze
45
+ ALL_ACTIVE = [HEALTHY, INITIAL, UNAVAILABLE, UNUSED].freeze
32
46
  end
33
47
 
34
48
  class Constants
35
- REGION_DEFAULT = 'ap-southeast-2'.freeze
49
+ REGION_DEFAULT = ENV['AWS_DEFAULT_REGION'] || ENV['aws_default_region'] || ENV['AWS_REGION'] || ENV['aws_region'] || 'ap-southeast-2'.freeze
36
50
  ACCESS_KEY_ID = ENV['AWS_ACCESS_KEY_ID'] || ENV['aws_access_key_id']
37
51
  SECRET_ACCESS_KEY = ENV['AWS_SECRET_ACCESS_KEY'] || ENV['aws_scret_access_key']
38
52
  PROFILE = ENV['AWS_PROFILE']
39
53
  INSTANCE_STATE_HEALTHY = RubyAemAws::InstanceState::RUNNING.freeze
40
- ELB_INSTANCE_INSERVICE = RubyAemAws::ELBInstanceState::INSERVICE.freeze
54
+ INSTANCE_STATE_CODE_RUNNING = RubyAemAws::InstanceStateCode::RUNNING
55
+ ELB_INSTANCE_INSERVICE = RubyAemAws::ELBInstanceState::HEALTHY.freeze
41
56
  end
42
57
  end
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -43,13 +43,6 @@ module RubyAemAws
43
43
 
44
44
  # Raise this when a component unexpectedly has more than one instance.
45
45
  class ExpectedSingleInstanceError < StandardError
46
- # def initialize(count, descriptor)
47
- # message << 'Expected exactly one instance'
48
- # message << " but got #{count}" unless count.nil?
49
- # message << "for (#{descriptor.stack_prefix}, #{descriptor.ec2.component}, #{descriptor.ec2.name})" unless descriptor.nil?
50
- # super(message)
51
- # end
52
-
53
46
  def initialize(msg = 'Expected exactly one instance')
54
47
  super
55
48
  end
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -48,7 +48,10 @@ module RubyAemAws
48
48
  return :no_elb if elb.nil?
49
49
 
50
50
  elb_running_instances = 0
51
- get_instances_state_from_elb(elb).each do |i|
51
+ elb_instances = get_instances_state(elb_client, elb)
52
+ return :no_elb_targets if elb_instances.nil?
53
+
54
+ elb_instances.each do |i|
52
55
  elb_running_instances += 1 if i[:state] == RubyAemAws::Constants::INSTANCE_STATE_HEALTHY
53
56
  end
54
57
 
@@ -108,44 +111,71 @@ module RubyAemAws
108
111
  nil
109
112
  end
110
113
 
111
- # @return ElasticLoadBalancer by StackPrefix and logical-id tags.
114
+ # @return ElasticLoadBalancer Arn.
112
115
  def find_elb(elb_client)
113
- elbs = elb_client.describe_load_balancers.load_balancer_descriptions
116
+ elbs = elb_client.describe_load_balancers(page_size: 50)
117
+ elb_arn = find_elb_arn(elbs.load_balancers)
118
+
119
+ return elb_arn unless elb_arn.nil?
120
+
121
+ until elbs.last_page?
122
+ elbs = elb_client.describe_load_balancers(page_size: 50, marker: elbs.next_marker)
123
+ elb_arn = find_elb_arn(elbs.load_balancers)
124
+ return elb_arn unless elb_arn.nil?
125
+ end
126
+ nil
127
+ end
128
+
129
+ # @return ElasticLoadBalancer Arn by StackPrefix tag & ELB name.
130
+ def find_elb_arn(elbs)
114
131
  elbs.each do |elb|
115
132
  elb_matches_stack_prefix = false
116
- elb_matches_logical_id = false
117
- tag_descriptions = elb_client.describe_tags(load_balancer_names: [elb.load_balancer_name]).tag_descriptions
133
+ elb_matches_name = false
134
+ begin
135
+ tag_descriptions = elb_client.describe_tags(resource_arns: [elb.load_balancer_arn]).tag_descriptions
136
+ rescue Aws::ElasticLoadBalancingV2::Errors::LoadBalancerNotFound
137
+ next
138
+ end
139
+
118
140
  next if tag_descriptions.empty?
119
141
 
120
142
  tags = tag_descriptions[0].tags
121
143
  tags.each do |tag|
122
- if tag.key == 'StackPrefix' && tag.value == descriptor.stack_prefix
123
- elb_matches_stack_prefix = true
124
- break if elb_matches_logical_id
144
+ elb_matches_stack_prefix = true if tag.key == 'StackPrefix' && tag.value == descriptor.stack_prefix
145
+ elb_matches_name = true if tag.key == 'Name' && tag.value == descriptor.elb.name
125
146
 
126
- next
127
- end
128
- if tag.key == 'aws:cloudformation:logical-id' && tag.value == descriptor.elb.id
129
- elb_matches_logical_id = true
130
- break if elb_matches_stack_prefix
131
- end
147
+ return elb.load_balancer_arn if elb_matches_stack_prefix && elb_matches_name
148
+
149
+ next
132
150
  end
133
- return elb if elb_matches_stack_prefix && elb_matches_logical_id
134
151
  end
135
152
  nil
136
153
  end
137
154
 
138
- def get_instances_state_from_elb(elb)
155
+ def get_instances_state(elb_client, elb_arn)
156
+ described_target_groups = elb_client.describe_target_groups(load_balancer_arn: elb_arn)
157
+
158
+ return nil if described_target_groups.target_groups.empty?
159
+
160
+ target_group = described_target_groups.target_groups[0]
161
+ target_group_arn = target_group.target_group_arn
162
+
163
+ described_target_health = elb_client.describe_target_health(target_group_arn: target_group_arn)
164
+
165
+ return nil if described_target_health.target_health_descriptions.empty?
166
+
167
+ targets = described_target_health.target_health_descriptions
168
+
139
169
  stack_prefix_instances = []
140
- elb.instances.each do |i|
141
- instance = get_instance_by_id(i.instance_id)
170
+ targets.each do |t|
171
+ instance = get_instance_by_id(t.target.id)
142
172
  next if instance.nil?
143
173
 
144
174
  instance.tags.each do |tag|
145
175
  next if tag.key != 'StackPrefix'
146
176
  break if tag.value != descriptor.stack_prefix
147
177
 
148
- stack_prefix_instances.push(id: i.instance_id, state: instance.state.name)
178
+ stack_prefix_instances.push(id: t.target.id, state: instance.state.name)
149
179
  end
150
180
  end
151
181
  stack_prefix_instances
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -53,15 +53,15 @@ module RubyAemAws
53
53
  elb = find_elb(elb_client)
54
54
  return :no_elb if elb.nil?
55
55
 
56
- elb_instance_state = elb_client.describe_instance_health(load_balancer_name: elb.load_balancer_name)
56
+ elb_instance_state = get_instances_elb_state(elb_client, elb)
57
+ return :no_elb_targets if elb_instance_state.nil?
57
58
 
58
59
  elb_running_instances = 0
59
- elb_instance_state.instance_states.each do |i|
60
- elb_running_instances += 1 if i.state == RubyAemAws::Constants::ELB_INSTANCE_INSERVICE
60
+ elb_instance_state.each do |i|
61
+ elb_running_instances += 1 if i.target_health.state == RubyAemAws::Constants::ELB_INSTANCE_INSERVICE
61
62
  end
62
63
 
63
64
  desired_capacity = asg.desired_capacity
64
-
65
65
  return :misconfigured if desired_capacity < 1
66
66
  return :recovering if elb_running_instances < desired_capacity
67
67
  return :scaling if elb_running_instances > desired_capacity
@@ -87,11 +87,14 @@ module RubyAemAws
87
87
  # puts(" Instance #{i.instance_id}: #{i.health_status}")
88
88
  # end
89
89
  # end
90
-
91
- desired_capacity = asg.desired_capacity
92
90
  instances_inservice = 0
93
- asg.instances.each do |instances|
94
- instances_inservice += 1 if instances.health_status.eql? 'Healthy'
91
+ desired_capacity = asg.desired_capacity
92
+
93
+ get_all_instances.each do |i|
94
+ next if i.nil? || i.state.code != Constants::INSTANCE_STATE_CODE_RUNNING
95
+ return false if i.state.name != Constants::INSTANCE_STATE_HEALTHY
96
+
97
+ instances_inservice += 1
95
98
  end
96
99
 
97
100
  return :misconfigured if desired_capacity < 1
@@ -155,31 +158,58 @@ module RubyAemAws
155
158
  nil
156
159
  end
157
160
 
158
- # @return ElasticLoadBalancer by StackPrefix and logical-id tags.
161
+ # @return ElasticLoadBalancer Arn.
159
162
  def find_elb(elb_client)
160
- elbs = elb_client.describe_load_balancers.load_balancer_descriptions
163
+ elbs = elb_client.describe_load_balancers(page_size: 50)
164
+ elb_arn = find_elb_arn(elbs.load_balancers)
165
+
166
+ return elb_arn unless elb_arn.nil?
167
+
168
+ until elbs.last_page?
169
+ elbs = elb_client.describe_load_balancers(page_size: 50, marker: elbs.next_marker)
170
+ elb_arn = find_elb_arn(elbs.load_balancers)
171
+ return elb_arn unless elb_arn.nil?
172
+ end
173
+ nil
174
+ end
175
+
176
+ # @return ElasticLoadBalancer Arn by StackPrefix tag & ELB name.
177
+ def find_elb_arn(elbs)
161
178
  elbs.each do |elb|
162
179
  elb_matches_stack_prefix = false
163
- elb_matches_logical_id = false
164
- tag_descriptions = elb_client.describe_tags(load_balancer_names: [elb.load_balancer_name]).tag_descriptions
180
+ elb_matches_name = false
181
+ begin
182
+ tag_descriptions = elb_client.describe_tags(resource_arns: [elb.load_balancer_arn]).tag_descriptions
183
+ rescue Aws::ElasticLoadBalancingV2::Errors::LoadBalancerNotFound
184
+ next
185
+ end
186
+
165
187
  next if tag_descriptions.empty?
166
188
 
167
189
  tags = tag_descriptions[0].tags
168
190
  tags.each do |tag|
169
- if tag.key == 'StackPrefix' && tag.value == descriptor.stack_prefix
170
- elb_matches_stack_prefix = true
171
- break if elb_matches_logical_id
191
+ elb_matches_stack_prefix = true if tag.key == 'StackPrefix' && tag.value == descriptor.stack_prefix
192
+ elb_matches_name = true if tag.key == 'Name' && tag.value == descriptor.elb.name
172
193
 
173
- next
174
- end
175
- if tag.key == 'aws:cloudformation:logical-id' && tag.value == descriptor.elb.id
176
- elb_matches_logical_id = true
177
- break if elb_matches_stack_prefix
178
- end
194
+ return elb.load_balancer_arn if elb_matches_stack_prefix && elb_matches_name
179
195
  end
180
- return elb if elb_matches_stack_prefix && elb_matches_logical_id
181
196
  end
182
197
  nil
183
198
  end
199
+
200
+ def get_instances_elb_state(elb_client, elb_arn)
201
+ described_target_groups = elb_client.describe_target_groups(load_balancer_arn: elb_arn)
202
+
203
+ return nil if described_target_groups.target_groups.empty?
204
+
205
+ target_group = described_target_groups.target_groups[0]
206
+ target_group_arn = target_group.target_group_arn
207
+
208
+ described_target_health = elb_client.describe_target_health(target_group_arn: target_group_arn)
209
+
210
+ return nil if described_target_health.target_health_descriptions.empty?
211
+
212
+ described_target_health.target_health_descriptions
213
+ end
184
214
  end
185
215
  end
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@ module RubyAemAws
22
22
  def healthy?
23
23
  has_instance = false
24
24
  get_all_instances.each do |i|
25
- next if i.nil? || i.state.code != 16
25
+ next if i.nil? || i.state.code != Constants::INSTANCE_STATE_CODE_RUNNING
26
26
 
27
27
  has_instance = true
28
28
  return false if i.state.name != Constants::INSTANCE_STATE_HEALTHY
@@ -33,7 +33,7 @@ module RubyAemAws
33
33
  def wait_until_healthy
34
34
  instance_healthy = false
35
35
  get_all_instances.each do |i|
36
- next if i.nil? || i.state.code != 16
36
+ next if i.nil? || i.state.code != Constants::INSTANCE_STATE_CODE_RUNNING
37
37
 
38
38
  i.wait_until_running
39
39
  instance_healthy = true
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -170,7 +170,7 @@ module RubyAemAws
170
170
  return true unless response.events.empty?
171
171
  end
172
172
 
173
- # @param loggroup Cloudwatch loggroup name
173
+ # @param loggroup_name Cloudwatch loggroup name
174
174
  # @return True if Cloudwatch loggroup exists
175
175
  def loggroup?(loggroup_name)
176
176
  namespace = 'AWS/Logs'
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
data/lib/ruby_aem_aws.rb CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Shine Solutions
1
+ # Copyright 2018-2021 Shine Solutions Group
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -20,18 +20,18 @@ module RubyAemAws
20
20
  # AemAws class represents the AWS stack for AEM.
21
21
  class AemAws
22
22
  # @param conf configuration hash of the following configuration values:
23
- # - region: the AWS region (eg ap-southeast-2)
23
+ # - aws_region: the AWS region (eg ap-southeast-2)
24
24
  # - aws_access_key_id: the AWS access key
25
25
  # - aws_secret_access_key: the AWS secret access key
26
26
  # - aws_profile: AWS profile name
27
27
  # @return new RubyAemAws::AemAws instance
28
28
  def initialize(conf = {})
29
- conf[:region] ||= Constants::REGION_DEFAULT
29
+ conf[:aws_region] ||= Constants::REGION_DEFAULT
30
30
  conf[:aws_access_key_id] ||= Constants::ACCESS_KEY_ID
31
31
  conf[:aws_secret_access_key] ||= Constants::SECRET_ACCESS_KEY
32
32
  conf[:aws_profile] ||= Constants::PROFILE
33
33
 
34
- Aws.config.update(region: conf[:region])
34
+ Aws.config.update(region: conf[:aws_region])
35
35
 
36
36
  credentials = Aws::Credentials.new(conf[:aws_access_key_id], conf[:aws_secret_access_key]) unless conf[:aws_access_key_id].nil?
37
37
  credentials = Aws::SharedCredentials.new(profile_name: conf[:aws_profile]) unless conf[:aws_profile].nil?
@@ -58,11 +58,6 @@ module RubyAemAws
58
58
  # Create a consolidated instance.
59
59
  #
60
60
  # @param stack_prefix AWS tag: StackPrefix
61
- # @param aws_clients Array of AWS Clients and Resource connections:
62
- # - CloudFormationClient: AWS Cloudformation Client.
63
- # - CloudWatchClient: AWS Cloudwatch Client.
64
- # - CloudWatchLogsClient: AWS Cloudwatch Logs Client.
65
- # - Ec2Resource: AWS EC2 Resource connection.
66
61
  # @return new RubyAemAws::ConsolidatedStack instance
67
62
  def consolidated(stack_prefix)
68
63
  aws_clients = {
@@ -78,13 +73,6 @@ module RubyAemAws
78
73
  # Create a full set instance.
79
74
  #
80
75
  # @param stack_prefix AWS tag: StackPrefix
81
- # @param aws_clients Array of AWS Clients and Resource connections:
82
- # - AutoScalingClient: AWS AutoScalingGroup Client.
83
- # - CloudFormationClient: AWS Cloudformation Client.
84
- # - CloudWatchClient: AWS Cloudwatch Client.
85
- # - CloudWatchLogsClient: AWS Cloudwatch Logs Client.
86
- # - Ec2Resource: AWS EC2 Resource connection.
87
- # - ElbClient: AWS ElasticLoadBalancer Client.
88
76
  # @return new RubyAemAws::FullSetStack instance
89
77
  def full_set(stack_prefix)
90
78
  aws_clients = {
@@ -102,13 +90,6 @@ module RubyAemAws
102
90
  # Create Stack Manager resources
103
91
  #
104
92
  # @param stack_prefix AWS tag: StackPrefix
105
- # @param aws_clients Array of AWS Clients and Resource connections:
106
- # - CloudFormationClient: AWS Cloudformation Client.
107
- # - CloudWatchClient: AWS Cloudwatch Client.
108
- # - CloudWatchLogsClient: AWS Cloudwatch Logs Client.
109
- # - DynamoDBClient: AWS DynamoDB Client.
110
- # - S3Client: AWS S3 Client.
111
- # - S3Resource: AWS S3 Resource connection.
112
93
  # @return new RubyAemAws::StackManager instance
113
94
  def stack_manager(stack_prefix)
114
95
  aws_clients = {
@@ -130,7 +111,7 @@ module RubyAemAws
130
111
  {
131
112
  Ec2Client: Aws::EC2::Client.new,
132
113
  Ec2Resource: Aws::EC2::Resource.new,
133
- ElbClient: Aws::ElasticLoadBalancing::Client.new(
114
+ ElbClient: Aws::ElasticLoadBalancingV2::Client.new(
134
115
  retry_limit: 20
135
116
  ),
136
117
  AutoScalingClient: Aws::AutoScaling::Client.new(
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_aem_aws
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shine Solutions
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-23 00:00:00.000000000 Z
11
+ date: 2021-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.0.5
41
+ - !ruby/object:Gem::Dependency
42
+ name: tuples
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '='
46
+ - !ruby/object:Gem::Version
47
+ version: 0.1.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '='
53
+ - !ruby/object:Gem::Version
54
+ version: 0.1.0
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rspec
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -58,14 +72,14 @@ dependencies:
58
72
  requirements:
59
73
  - - '='
60
74
  - !ruby/object:Gem::Version
61
- version: 0.9.19
75
+ version: 0.9.20
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - '='
67
81
  - !ruby/object:Gem::Version
68
- version: 0.9.19
82
+ version: 0.9.20
69
83
  description: ruby_aem_aws is a Ruby client for Shine Solutions Adobe Experience Manager
70
84
  (AEM) Platform on AWS
71
85
  email: