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.
- checksums.yaml +4 -4
- data/conf/gem.yaml +1 -1
- data/lib/ruby_aem_aws/abstract/cloudwatch.rb +3 -3
- data/lib/ruby_aem_aws/abstract/component.rb +1 -2
- data/lib/ruby_aem_aws/abstract/grouped_component.rb +1 -1
- data/lib/ruby_aem_aws/abstract/single_component.rb +1 -1
- data/lib/ruby_aem_aws/abstract/snapshot.rb +1 -1
- data/lib/ruby_aem_aws/abstract/stackmanager.rb +2 -2
- data/lib/ruby_aem_aws/architecture/consolidated_stack.rb +1 -6
- data/lib/ruby_aem_aws/architecture/full_set_stack.rb +2 -40
- data/lib/ruby_aem_aws/architecture/stack_manager.rb +1 -1
- data/lib/ruby_aem_aws/client/cloudwatch.rb +1 -1
- data/lib/ruby_aem_aws/client/dynamo_db.rb +1 -1
- data/lib/ruby_aem_aws/client/s3.rb +1 -1
- data/lib/ruby_aem_aws/client/sns_topic.rb +1 -1
- data/lib/ruby_aem_aws/component/author.rb +2 -2
- data/lib/ruby_aem_aws/component/author_dispatcher.rb +5 -4
- data/lib/ruby_aem_aws/component/author_primary.rb +1 -1
- data/lib/ruby_aem_aws/component/author_publish_dispatcher.rb +1 -1
- data/lib/ruby_aem_aws/component/author_standby.rb +1 -1
- data/lib/ruby_aem_aws/component/chaos_monkey.rb +4 -3
- data/lib/ruby_aem_aws/component/component_descriptor.rb +1 -1
- data/lib/ruby_aem_aws/component/orchestrator.rb +4 -3
- data/lib/ruby_aem_aws/component/publish.rb +4 -3
- data/lib/ruby_aem_aws/component/publish_dispatcher.rb +5 -4
- data/lib/ruby_aem_aws/component/stack_manager_resources.rb +1 -2
- data/lib/ruby_aem_aws/constants.rb +21 -6
- data/lib/ruby_aem_aws/error.rb +1 -8
- data/lib/ruby_aem_aws/mixins/healthy_count_verifier.rb +50 -20
- data/lib/ruby_aem_aws/mixins/healthy_resource_verifier.rb +53 -23
- data/lib/ruby_aem_aws/mixins/healthy_state_verifier.rb +3 -3
- data/lib/ruby_aem_aws/mixins/instance_describer.rb +1 -1
- data/lib/ruby_aem_aws/mixins/metric_verifier.rb +2 -2
- data/lib/ruby_aem_aws/mixins/snapshot_verifier.rb +1 -1
- data/lib/ruby_aem_aws.rb +5 -24
- metadata +18 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d0449e7cac793e0800bfef68c08bd32e1081fd04
|
4
|
+
data.tar.gz: 7d65262846445f5b575108fb2949ec6c875d12c9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ceb1b660d9f5ed17b89e82eb2a7cfe117da776c4ea075cae3cdbbe5badb2e464bd1d6c2c986fb2250f943ee056492fbfe35c4ffe740b3d62469b64f42756d35a
|
7
|
+
data.tar.gz: b9babf9f36d1257d1373ed2f10494a9edbd7effa4f366f8b9eefac4df264c6fccdd034b5eb1c1b1353d9e5e81c0c63996a3741231e8d47c8bf895f91dc31e7a8
|
data/conf/gem.yaml
CHANGED
@@ -1 +1 @@
|
|
1
|
-
version:
|
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
|
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
|
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.
|
@@ -35,7 +35,7 @@ module RubyAemAws
|
|
35
35
|
end
|
36
36
|
|
37
37
|
# @param dynamodb_tablename AWS DynamoDB table name
|
38
|
-
# @param
|
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.
|
@@ -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.
|
@@ -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'
|
@@ -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
|
-
|
29
|
-
|
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 = [
|
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
|
-
|
54
|
+
INSTANCE_STATE_CODE_RUNNING = RubyAemAws::InstanceStateCode::RUNNING
|
55
|
+
ELB_INSTANCE_INSERVICE = RubyAemAws::ELBInstanceState::HEALTHY.freeze
|
41
56
|
end
|
42
57
|
end
|
data/lib/ruby_aem_aws/error.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.
|
@@ -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
|
-
|
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
|
114
|
+
# @return ElasticLoadBalancer Arn.
|
112
115
|
def find_elb(elb_client)
|
113
|
-
elbs = elb_client.describe_load_balancers
|
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
|
-
|
117
|
-
|
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
|
-
|
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
|
-
|
127
|
-
|
128
|
-
|
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
|
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
|
-
|
141
|
-
instance = get_instance_by_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:
|
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
|
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.
|
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.
|
94
|
-
|
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
|
161
|
+
# @return ElasticLoadBalancer Arn.
|
159
162
|
def find_elb(elb_client)
|
160
|
-
elbs = elb_client.describe_load_balancers
|
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
|
-
|
164
|
-
|
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
|
-
|
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
|
-
|
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 !=
|
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 !=
|
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.
|
@@ -170,7 +170,7 @@ module RubyAemAws
|
|
170
170
|
return true unless response.events.empty?
|
171
171
|
end
|
172
172
|
|
173
|
-
# @param
|
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'
|
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
|
-
# -
|
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[:
|
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[:
|
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::
|
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:
|
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:
|
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.
|
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.
|
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:
|