ruby_aem_aws 0.9.3 → 1.0.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 +4 -4
- data/lib/ruby_aem_aws/abstract/cloudwatch.rb +81 -0
- data/lib/ruby_aem_aws/{component/abstract_component.rb → abstract/component.rb} +4 -2
- data/lib/ruby_aem_aws/{component/abstract_grouped_component.rb → abstract/grouped_component.rb} +1 -1
- data/lib/ruby_aem_aws/{component/abstract_single_component.rb → abstract/single_component.rb} +1 -1
- data/lib/ruby_aem_aws/{component/abstract_snapshot.rb → abstract/snapshot.rb} +1 -1
- data/lib/ruby_aem_aws/{component/abstract_stackmanager.rb → abstract/stackmanager.rb} +10 -0
- data/lib/ruby_aem_aws/{consolidated_stack.rb → architecture/consolidated_stack.rb} +21 -7
- data/lib/ruby_aem_aws/architecture/full_set_stack.rb +141 -0
- data/lib/ruby_aem_aws/architecture/stack_manager.rb +44 -0
- data/lib/ruby_aem_aws/client/cloudwatch.rb +87 -0
- data/lib/ruby_aem_aws/{component/mixins → client}/dynamo_db.rb +0 -0
- data/lib/ruby_aem_aws/{component/mixins → client}/s3.rb +1 -1
- data/lib/ruby_aem_aws/{component/mixins → client}/sns_topic.rb +0 -0
- data/lib/ruby_aem_aws/component/author.rb +16 -8
- data/lib/ruby_aem_aws/component/author_dispatcher.rb +19 -16
- data/lib/ruby_aem_aws/component/author_primary.rb +14 -11
- data/lib/ruby_aem_aws/component/author_publish_dispatcher.rb +14 -12
- data/lib/ruby_aem_aws/component/author_standby.rb +14 -12
- data/lib/ruby_aem_aws/component/chaos_monkey.rb +16 -13
- data/lib/ruby_aem_aws/component/orchestrator.rb +16 -13
- data/lib/ruby_aem_aws/component/publish.rb +17 -15
- data/lib/ruby_aem_aws/component/publish_dispatcher.rb +19 -16
- data/lib/ruby_aem_aws/component/stack_manager_resources.rb +19 -11
- data/lib/ruby_aem_aws/error.rb +7 -0
- data/lib/ruby_aem_aws/mixins/healthy_count_verifier.rb +148 -0
- data/lib/ruby_aem_aws/{component/mixins/healthy_count_verifier.rb → mixins/healthy_resource_verifier.rb} +29 -43
- data/lib/ruby_aem_aws/{component/mixins → mixins}/healthy_state_verifier.rb +1 -1
- data/lib/ruby_aem_aws/{component/mixins → mixins}/instance_describer.rb +0 -0
- data/lib/ruby_aem_aws/mixins/metric_verifier.rb +186 -0
- data/lib/ruby_aem_aws/{component/mixins → mixins}/snapshot_verifier.rb +0 -0
- data/lib/ruby_aem_aws.rb +60 -19
- metadata +21 -18
- data/lib/ruby_aem_aws/component/mixins/metric_verifier.rb +0 -43
- data/lib/ruby_aem_aws/full_set_stack.rb +0 -69
- data/lib/ruby_aem_aws/stack_manager.rb +0 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3daf08867a182eb7c35e8ed5ebcfb53e7bb389a5
|
4
|
+
data.tar.gz: 6da14e3a85100aa7a00f101ce126bd58e1eab7b8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5684eeab58ef11ff2eb70f7478f2ca52f56d1402119c5c96ef81f44981dfd14347cdb91e673191a68864e0657d9ff06d7577007a382f4ff6d937233429c46a1d
|
7
|
+
data.tar.gz: f21329b8af855fdec77baa94587f9fafd1f593ca5687365bab749ad92f5d879ed486f33dbf7ed0804261ff2807b32967fe3b5dde909bc429894aa4d5823b5877
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# Copyright 2018 Shine Solutions
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
require_relative '../error'
|
16
|
+
|
17
|
+
module RubyAemAws
|
18
|
+
# Add common methods to all Components.
|
19
|
+
module AbstractCloudwatch
|
20
|
+
# @param alarm_name Cloudwatch alarm name
|
21
|
+
# @return Array of a Cloudwatch alarm filter to filter for a specific Cloudwatch alarm
|
22
|
+
private def filter_for_cloudwatch_alarm(alarm_name)
|
23
|
+
{
|
24
|
+
alarm_names: [alarm_name]
|
25
|
+
}
|
26
|
+
end
|
27
|
+
|
28
|
+
# @param loggroup_name Cloudwatch loggroup name
|
29
|
+
# @param log_stream_name Cloudwatch logstream name
|
30
|
+
# @param log_message log message to filter for
|
31
|
+
# @return Array of a Cloudwatch log event filter to filter for a specific Cloudwatch log event
|
32
|
+
private def filter_for_cloudwatch_log_event(loggroup_name, log_stream_name, log_message)
|
33
|
+
{
|
34
|
+
log_group_name: loggroup_name,
|
35
|
+
log_stream_names: [log_stream_name],
|
36
|
+
filter_pattern: log_message
|
37
|
+
}
|
38
|
+
end
|
39
|
+
|
40
|
+
# @param loggroup_name Cloudwatch loggroup name
|
41
|
+
# @param log_stream_name Cloudwatch logstream name
|
42
|
+
# @return Array of a Cloudwatch log stream filter to filter for a specific Cloudwatch log stream
|
43
|
+
private def filter_for_cloudwatch_log_stream(log_group_name, log_stream_name)
|
44
|
+
{
|
45
|
+
log_group_name: log_group_name,
|
46
|
+
log_stream_name_prefix: log_stream_name,
|
47
|
+
order_by: 'LogStreamName'
|
48
|
+
}
|
49
|
+
end
|
50
|
+
|
51
|
+
# @param namespace Cloudwatch metric namespace
|
52
|
+
# @param metric_name Cloudwatch metric name
|
53
|
+
# @return Array of a Cloudwatch metric filter to filter for a specific Cloudwatch metric
|
54
|
+
private def filter_for_cloudwatch_metric(namespace, metric_name)
|
55
|
+
{
|
56
|
+
namespace: namespace,
|
57
|
+
metric_name: metric_name
|
58
|
+
}
|
59
|
+
end
|
60
|
+
|
61
|
+
# @param dimension_values Cloudwatch Dimension value
|
62
|
+
# @return Array of a Cloudwatch dimension filter for the Cloudwatch metric filter
|
63
|
+
private def dimensions_filter_for_cloudwatch_metric(dimension_values)
|
64
|
+
{
|
65
|
+
dimensions: [
|
66
|
+
dimension_values
|
67
|
+
]
|
68
|
+
}
|
69
|
+
end
|
70
|
+
|
71
|
+
# @param dimensions_name Cloudwatch Dimension name
|
72
|
+
# @param dimension_values Cloudwatch Dimension value
|
73
|
+
# @return Array of a Cloudwatch Dimension value filter for the Cloudwatch dimension filter
|
74
|
+
private def dimensions_value_filter_for_cloudwatch_metric(dimensions_name, dimensions_value)
|
75
|
+
{
|
76
|
+
name: dimensions_name,
|
77
|
+
value: dimensions_value
|
78
|
+
}
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -12,8 +12,8 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
-
require_relative 'component_descriptor'
|
16
|
-
require_relative 'mixins/instance_describer'
|
15
|
+
require_relative '../component/component_descriptor'
|
16
|
+
require_relative '../mixins/instance_describer'
|
17
17
|
require_relative '../error'
|
18
18
|
|
19
19
|
module RubyAemAws
|
@@ -36,6 +36,8 @@ module RubyAemAws
|
|
36
36
|
}
|
37
37
|
end
|
38
38
|
|
39
|
+
# @param snapshot_type SnapshotType tag
|
40
|
+
# @return Array of a EC2 filter to filter for a specific Snapshottype
|
39
41
|
private def filter_for_snapshot(snapshot_type)
|
40
42
|
{
|
41
43
|
filters: [
|
@@ -15,6 +15,9 @@
|
|
15
15
|
module RubyAemAws
|
16
16
|
# Add common methods to StackManager resource
|
17
17
|
module AbstractStackManager
|
18
|
+
# @param dynamodb_tablename AWS DynamoDB table name
|
19
|
+
# @param attribute_value value to scan for
|
20
|
+
# @return Array of a DynamoDB filter to scan for a specific value
|
18
21
|
private def filter_for_db_scan(dynamodb_tablename, attribute_value)
|
19
22
|
{
|
20
23
|
table_name: dynamodb_tablename,
|
@@ -29,6 +32,9 @@ module RubyAemAws
|
|
29
32
|
}
|
30
33
|
end
|
31
34
|
|
35
|
+
# @param dynamodb_tablename AWS DynamoDB table name
|
36
|
+
# @param attkey_attribute_valueribute_value Key value to query for
|
37
|
+
# @return Array of a DynamoDB filter to query for a specific value
|
32
38
|
private def filter_for_db_query(dynamodb_tablename, key_attribute_value)
|
33
39
|
{
|
34
40
|
table_name: dynamodb_tablename,
|
@@ -49,6 +55,10 @@ module RubyAemAws
|
|
49
55
|
}
|
50
56
|
end
|
51
57
|
|
58
|
+
# @param task Stack Manager task to trigger
|
59
|
+
# @param stack_prefix Target Stack Prefix name
|
60
|
+
# @param details SNS Message payload
|
61
|
+
# @return Array of a AWS SNS publish filter to query for a specific value
|
52
62
|
private def message_for_sns_publish(task, stack_prefix, details)
|
53
63
|
"{ \"default\": \"{ 'task': '#{task}', 'stack_prefix': '#{stack_prefix}', 'details': #{details} }\"}"
|
54
64
|
end
|
@@ -12,24 +12,38 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
-
require_relative 'component/author_publish_dispatcher'
|
15
|
+
require_relative '../component/author_publish_dispatcher'
|
16
16
|
|
17
17
|
module RubyAemAws
|
18
18
|
# Factory for the consolidated AEM stack component interface.
|
19
19
|
class ConsolidatedStack
|
20
|
+
attr_reader :cloudformation_client
|
21
|
+
|
20
22
|
# @param stack_prefix AWS tag: StackPrefix
|
21
|
-
# @param
|
22
|
-
#
|
23
|
+
# @param params Array of AWS Clients and Resource connections:
|
24
|
+
# - CloudFormationClient: AWS Cloudformation Client.
|
25
|
+
# - CloudWatchClient: AWS Cloudwatch Client.
|
26
|
+
# - CloudWatchLogsClient: AWS Cloudwatch Logs Client.
|
27
|
+
# - Ec2Resource: AWS EC2 Resource connection.
|
23
28
|
# @return new RubyAemAws::ConsolidatedStack instance
|
24
|
-
def initialize(stack_prefix,
|
29
|
+
def initialize(stack_prefix, params)
|
30
|
+
@consolidated_aws_clients = {
|
31
|
+
CloudWatchClient: params[:CloudWatchClient],
|
32
|
+
CloudWatchLogsClient: params[:CloudWatchLogsClient],
|
33
|
+
Ec2Resource: params[:Ec2Resource]
|
34
|
+
}
|
35
|
+
@cloudformation_client = cloudformation_client
|
25
36
|
@stack_prefix = stack_prefix
|
26
|
-
@ec2_resource = ec2_resource
|
27
|
-
@cloud_watch_client = cloud_watch_client
|
28
37
|
end
|
29
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.
|
30
44
|
# @return new RubyAemAws::Component::AuthorPublishDispatcher instance
|
31
45
|
def author_publish_dispatcher
|
32
|
-
RubyAemAws::Component::AuthorPublishDispatcher.new(@stack_prefix, @
|
46
|
+
RubyAemAws::Component::AuthorPublishDispatcher.new(@stack_prefix, @consolidated_aws_clients)
|
33
47
|
end
|
34
48
|
end
|
35
49
|
end
|
@@ -0,0 +1,141 @@
|
|
1
|
+
# Copyright 2018 Shine Solutions
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
require_relative '../component/author_dispatcher'
|
16
|
+
require_relative '../component/author'
|
17
|
+
require_relative '../component/chaos_monkey'
|
18
|
+
require_relative '../component/orchestrator'
|
19
|
+
require_relative '../component/publish_dispatcher'
|
20
|
+
require_relative '../component/publish'
|
21
|
+
require_relative '../mixins/metric_verifier'
|
22
|
+
|
23
|
+
module RubyAemAws
|
24
|
+
# Factory for the full-set AEM stack component interfaces.
|
25
|
+
class FullSetStack
|
26
|
+
attr_reader :cloudformation_client, :cloud_watch_client
|
27
|
+
include MetricVerifier
|
28
|
+
|
29
|
+
# @param stack_prefix AWS tag: StackPrefix
|
30
|
+
# @param params Array of AWS Clients and Resource connections:
|
31
|
+
# - AutoScalingClient: AWS AutoScalingGroup Client.
|
32
|
+
# - CloudFormationClient: AWS Cloudformation Client.
|
33
|
+
# - CloudWatchClient: AWS Cloudwatch Client.
|
34
|
+
# - CloudWatchLogsClient: AWS Cloudwatch Logs Client.
|
35
|
+
# - Ec2Resource: AWS EC2 Resource connection.
|
36
|
+
# - ElbClient: AWS ElasticLoadBalancer Client.
|
37
|
+
# @return new RubyAemAws::FullSetStack instance
|
38
|
+
def initialize(stack_prefix, params)
|
39
|
+
@author_aws_clients = {
|
40
|
+
CloudWatchClient: params[:CloudWatchClient],
|
41
|
+
CloudWatchLogsClient: params[:CloudWatchLogsClient],
|
42
|
+
Ec2Resource: params[:Ec2Resource],
|
43
|
+
ElbClient: params[:ElbClient]
|
44
|
+
}
|
45
|
+
|
46
|
+
@dispatcher_aws_clients = {
|
47
|
+
AutoScalingClient: params[:AutoScalingClient],
|
48
|
+
CloudWatchClient: params[:CloudWatchClient],
|
49
|
+
CloudWatchLogsClient: params[:CloudWatchLogsClient],
|
50
|
+
Ec2Resource: params[:Ec2Resource],
|
51
|
+
ElbClient: params[:ElbClient]
|
52
|
+
}
|
53
|
+
|
54
|
+
@publish_aws_clients = {
|
55
|
+
AutoScalingClient: params[:AutoScalingClient],
|
56
|
+
CloudWatchClient: params[:CloudWatchClient],
|
57
|
+
CloudWatchLogsClient: params[:CloudWatchLogsClient],
|
58
|
+
Ec2Resource: params[:Ec2Resource]
|
59
|
+
}
|
60
|
+
|
61
|
+
@aem_java_aws_clients = {
|
62
|
+
AutoScalingClient: params[:AutoScalingClient],
|
63
|
+
CloudWatchClient: params[:CloudWatchClient],
|
64
|
+
CloudWatchLogsClient: params[:CloudWatchLogsClient],
|
65
|
+
Ec2Resource: params[:Ec2Resource]
|
66
|
+
}
|
67
|
+
|
68
|
+
@cloudformation_client = params[:CloudFormationClient]
|
69
|
+
@cloud_watch_client = params[:CloudWatchClient]
|
70
|
+
@stack_prefix = stack_prefix
|
71
|
+
end
|
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
|
+
# @return new RubyAemAws::Component::AuthorDispatcher instance
|
81
|
+
def author_dispatcher
|
82
|
+
RubyAemAws::Component::AuthorDispatcher.new(@stack_prefix, @dispatcher_aws_clients)
|
83
|
+
end
|
84
|
+
|
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
|
+
# @return new RubyAemAws::Component::Author instance
|
92
|
+
def author
|
93
|
+
RubyAemAws::Component::Author.new(@stack_prefix, @author_aws_clients)
|
94
|
+
end
|
95
|
+
|
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
|
+
# @return new RubyAemAws::Component::ChaosMonkey instance
|
103
|
+
def chaos_monkey
|
104
|
+
RubyAemAws::Component::ChaosMonkey.new(@stack_prefix, @aem_java_aws_clients)
|
105
|
+
end
|
106
|
+
|
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
|
+
# @return new RubyAemAws::Component::Orchestrator instance
|
114
|
+
def orchestrator
|
115
|
+
RubyAemAws::Component::Orchestrator.new(@stack_prefix, @aem_java_aws_clients)
|
116
|
+
end
|
117
|
+
|
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
|
+
# @return new RubyAemAws::Component::Publish instance
|
125
|
+
def publish
|
126
|
+
RubyAemAws::Component::Publish.new(@stack_prefix, @publish_aws_clients)
|
127
|
+
end
|
128
|
+
|
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
|
+
# @return new RubyAemAws::Component::PublishDispatcher instance
|
137
|
+
def publish_dispatcher
|
138
|
+
RubyAemAws::Component::PublishDispatcher.new(@stack_prefix, @dispatcher_aws_clients)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# Copyright 2018 Shine Solutions
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
require_relative '../component/stack_manager_resources'
|
16
|
+
|
17
|
+
module RubyAemAws
|
18
|
+
# Interface to interact with AEM StackManager
|
19
|
+
class StackManager
|
20
|
+
attr_reader :sm_resources, :cloudformation_client
|
21
|
+
# @param stack_prefix AWS tag: StackPrefix
|
22
|
+
# @param params Array of AWS Clients and Resource connections:
|
23
|
+
# - CloudFormationClient: AWS Cloudformation Client.
|
24
|
+
# - CloudWatchClient: AWS Cloudwatch Client.
|
25
|
+
# - CloudWatchLogsClient: AWS Cloudwatch Logs Client.
|
26
|
+
# - DynamoDBClient: AWS DynamoDB Client.
|
27
|
+
# - S3Client: AWS S3 Client.
|
28
|
+
# - S3Resource: AWS S3 Resource connection.
|
29
|
+
# @return new RubyAemAws::StackManager instance
|
30
|
+
def initialize(stack_prefix, params)
|
31
|
+
stack_manager_aws_client = {
|
32
|
+
CloudWatchClient: params[:CloudWatchClient],
|
33
|
+
CloudWatchLogsClient: params[:CloudWatchLogsClient],
|
34
|
+
DynamoDBClient: params[:DynamoDBClient],
|
35
|
+
S3Client: params[:S3Client],
|
36
|
+
S3Resource: params[:S3Resource]
|
37
|
+
}
|
38
|
+
|
39
|
+
@sm_resources = RubyAemAws::Component::StackManagerResources.new(stack_manager_aws_client)
|
40
|
+
@cloudformation_client = params[:CloudFormationClient]
|
41
|
+
@stack_prefix = stack_prefix
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
# Copyright 2018 Shine Solutions
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module RubyAemAws
|
16
|
+
# Mixin for checking that an instance has associated CloudWatch metrics.
|
17
|
+
module CloudwatchClient
|
18
|
+
# @param alarm_name Cloudwatch alarm name
|
19
|
+
# @return Cloudwatch client describe_alarms response
|
20
|
+
def get_alarm(alarm_name)
|
21
|
+
alarm_filter = filter_for_cloudwatch_alarm(alarm_name)
|
22
|
+
|
23
|
+
response = cloud_watch_client.describe_alarms(alarm_filter)
|
24
|
+
|
25
|
+
until response.next_token.nil?
|
26
|
+
next_token = { next_token: response.next_token }
|
27
|
+
filter.update(next_token)
|
28
|
+
response = cloud_watch_client.describe_alarms(alarm_filter)
|
29
|
+
end
|
30
|
+
|
31
|
+
response
|
32
|
+
end
|
33
|
+
|
34
|
+
# @param loggroup_name Cloudwatch loggroup name
|
35
|
+
# @param log_stream_name Cloudwatch log stream name
|
36
|
+
# @param log_message Log message to filter for
|
37
|
+
# @return Cloudwatch log client filter_log_events response
|
38
|
+
def get_log_event(loggroup_name, log_stream_name, log_message)
|
39
|
+
filter = filter_for_cloudwatch_log_event(loggroup_name, log_stream_name, log_message)
|
40
|
+
response = cloud_watch_log_client.filter_log_events(filter)
|
41
|
+
|
42
|
+
until response.next_token.nil?
|
43
|
+
next_token = { next_token: response.next_token }
|
44
|
+
filter.update(next_token)
|
45
|
+
response = cloud_watch_client.filter_log_events(filter)
|
46
|
+
end
|
47
|
+
|
48
|
+
response
|
49
|
+
end
|
50
|
+
|
51
|
+
# @param loggroup_name Cloudwatch loggroup name
|
52
|
+
# @param log_stream_name Cloudwatch log stream name
|
53
|
+
# @return Cloudwatch log client describe_log_streams response
|
54
|
+
def get_log_streams(loggroup_name, log_stream_name)
|
55
|
+
filter = filter_for_cloudwatch_log_stream(loggroup_name, log_stream_name)
|
56
|
+
|
57
|
+
response = cloud_watch_log_client.describe_log_streams(filter)
|
58
|
+
|
59
|
+
until response.next_token.nil?
|
60
|
+
next_token = { next_token: response.next_token }
|
61
|
+
filter.update(next_token)
|
62
|
+
response = cloud_watch_client.describe_log_streams(filter)
|
63
|
+
end
|
64
|
+
|
65
|
+
response
|
66
|
+
end
|
67
|
+
|
68
|
+
# @param namespace Cloudwatch namespace name
|
69
|
+
# @param metric_name Cloudwatch metric name
|
70
|
+
# @param dimension Cloudwatch dimension filter
|
71
|
+
# @return Cloudwatch client list_metrics response
|
72
|
+
def get_metrics(namespace, metric_name, dimension)
|
73
|
+
filter = filter_for_cloudwatch_metric(namespace, metric_name)
|
74
|
+
filter.update(dimension)
|
75
|
+
|
76
|
+
response = cloud_watch_client.list_metrics(filter)
|
77
|
+
|
78
|
+
until response.next_token.nil?
|
79
|
+
next_token = { next_token: response.next_token }
|
80
|
+
filter.update(next_token)
|
81
|
+
response = cloud_watch_client.list_metrics(filter)
|
82
|
+
end
|
83
|
+
|
84
|
+
response
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
File without changes
|
@@ -36,7 +36,7 @@ module RubyAemAws
|
|
36
36
|
def get_s3_object(bucket, s3_object_name, dest_path)
|
37
37
|
options = { bucket: bucket, key: s3_object_name }
|
38
38
|
options = options.merge(response_target: dest_path) unless dest_path.nil?
|
39
|
-
s3_client.get_object(
|
39
|
+
s3_client.get_object(options)
|
40
40
|
end
|
41
41
|
end
|
42
42
|
end
|
File without changes
|
@@ -25,15 +25,23 @@ module RubyAemAws
|
|
25
25
|
ELB_NAME = 'AEM Author Load Balancer'.freeze
|
26
26
|
|
27
27
|
# @param stack_prefix AWS tag: StackPrefix
|
28
|
-
# @param
|
29
|
-
#
|
30
|
-
#
|
28
|
+
# @param params Array of AWS Clients and Resource connections:
|
29
|
+
# - CloudWatchClient: AWS Cloudwatch Client.
|
30
|
+
# - CloudWatchLogsClient: AWS Cloudwatch Logs Client.
|
31
|
+
# - Ec2Resource: AWS EC2 Resource connection.
|
32
|
+
# - ElbClient: AWS ElasticLoadBalancer Client.
|
31
33
|
# @return new RubyAemAws::FullSet::Author
|
32
|
-
def initialize(stack_prefix,
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
34
|
+
def initialize(stack_prefix, params)
|
35
|
+
author_aws_clients = {
|
36
|
+
CloudWatchClient: params[:CloudWatchClient],
|
37
|
+
CloudWatchLogsClient: params[:CloudWatchLogsClient],
|
38
|
+
Ec2Resource: params[:Ec2Resource]
|
39
|
+
}
|
40
|
+
|
41
|
+
@author_primary = Component::AuthorPrimary.new(stack_prefix, author_aws_clients)
|
42
|
+
@author_standby = Component::AuthorStandby.new(stack_prefix, author_aws_clients)
|
43
|
+
@ec2_resource = params[:Ec2Resource]
|
44
|
+
@elb_client = params[:ElbClient]
|
37
45
|
end
|
38
46
|
|
39
47
|
# @return true, if all author instances are healthy
|
@@ -12,21 +12,21 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
-
require_relative '
|
16
|
-
require_relative '
|
17
|
-
require_relative 'mixins/
|
18
|
-
require_relative 'mixins/metric_verifier'
|
15
|
+
require_relative '../abstract/grouped_component'
|
16
|
+
require_relative '../abstract/snapshot'
|
17
|
+
require_relative '../mixins/healthy_resource_verifier'
|
18
|
+
require_relative '../mixins/metric_verifier'
|
19
19
|
require_relative 'component_descriptor'
|
20
|
-
require_relative 'mixins/snapshot_verifier'
|
20
|
+
require_relative '../mixins/snapshot_verifier'
|
21
21
|
|
22
22
|
module RubyAemAws
|
23
23
|
module Component
|
24
24
|
# Interface to the AWS instances playing and supporting the AuthorDispatcher role in a full-set AEM stack.
|
25
25
|
class AuthorDispatcher
|
26
|
-
attr_reader :descriptor, :ec2_resource, :asg_client, :elb_client, :cloud_watch_client
|
26
|
+
attr_reader :descriptor, :ec2_resource, :asg_client, :elb_client, :cloud_watch_client, :cloud_watch_log_client
|
27
27
|
include AbstractGroupedComponent
|
28
28
|
include AbstractSnapshot
|
29
|
-
include
|
29
|
+
include HealthyResourceVerifier
|
30
30
|
include MetricVerifier
|
31
31
|
include SnapshotVerifier
|
32
32
|
|
@@ -36,19 +36,22 @@ module RubyAemAws
|
|
36
36
|
ELB_NAME = 'AEM Author Dispatcher Load Balancer'.freeze
|
37
37
|
|
38
38
|
# @param stack_prefix AWS tag: StackPrefix
|
39
|
-
# @param
|
40
|
-
#
|
41
|
-
#
|
42
|
-
#
|
39
|
+
# @param params Array of AWS Clients and Resource connections:
|
40
|
+
# - AutoScalingClient: AWS AutoScalingGroup Client.
|
41
|
+
# - CloudWatchClient: AWS Cloudwatch Client.
|
42
|
+
# - CloudWatchLogsClient: AWS Cloudwatch Logs Client.
|
43
|
+
# - Ec2Resource: AWS EC2 Resource connection.
|
44
|
+
# - ElbClient: AWS ElasticLoadBalancer Client.
|
43
45
|
# @return new RubyAemAws::FullSet::AuthorDispatcher
|
44
|
-
def initialize(stack_prefix,
|
46
|
+
def initialize(stack_prefix, params)
|
45
47
|
@descriptor = ComponentDescriptor.new(stack_prefix,
|
46
48
|
EC2Descriptor.new(EC2_COMPONENT, EC2_NAME),
|
47
49
|
ELBDescriptor.new(ELB_ID, ELB_NAME))
|
48
|
-
@
|
49
|
-
@
|
50
|
-
@
|
51
|
-
@
|
50
|
+
@asg_client = params[:AutoScalingClient]
|
51
|
+
@cloud_watch_client = params[:CloudWatchClient]
|
52
|
+
@cloud_watch_log_client = params[:CloudWatchLogsClient]
|
53
|
+
@ec2_resource = params[:Ec2Resource]
|
54
|
+
@elb_client = params[:ElbClient]
|
52
55
|
end
|
53
56
|
|
54
57
|
def terminate_all_instances
|
@@ -12,17 +12,17 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
-
require_relative '
|
16
|
-
require_relative '
|
17
|
-
require_relative 'mixins/healthy_state_verifier'
|
18
|
-
require_relative 'mixins/metric_verifier'
|
19
|
-
require_relative 'mixins/snapshot_verifier'
|
15
|
+
require_relative '../abstract/single_component'
|
16
|
+
require_relative '../abstract/snapshot'
|
17
|
+
require_relative '../mixins/healthy_state_verifier'
|
18
|
+
require_relative '../mixins/metric_verifier'
|
19
|
+
require_relative '../mixins/snapshot_verifier'
|
20
20
|
|
21
21
|
module RubyAemAws
|
22
22
|
module Component
|
23
23
|
# Interface to the AWS instance running the Author-Primary component of a full-set AEM stack.
|
24
24
|
class AuthorPrimary
|
25
|
-
attr_reader :descriptor, :ec2_resource, :cloud_watch_client
|
25
|
+
attr_reader :descriptor, :ec2_resource, :cloud_watch_client, :cloud_watch_log_client
|
26
26
|
include AbstractSingleComponent
|
27
27
|
include AbstractSnapshot
|
28
28
|
include HealthyStateVerifier
|
@@ -33,14 +33,17 @@ module RubyAemAws
|
|
33
33
|
EC2_NAME = 'AEM Author - Primary'.freeze
|
34
34
|
|
35
35
|
# @param stack_prefix AWS tag: StackPrefix
|
36
|
-
# @param
|
37
|
-
#
|
36
|
+
# @param params Array of AWS Clients and Resource connections:
|
37
|
+
# - CloudWatchClient: AWS Cloudwatch Client.
|
38
|
+
# - CloudWatchLogsClient: AWS Cloudwatch Logs Client.
|
39
|
+
# - Ec2Resource: AWS EC2 Resource connection.
|
38
40
|
# @return new RubyAemAws::FullSet::AuthorPrimary
|
39
|
-
def initialize(stack_prefix,
|
41
|
+
def initialize(stack_prefix, params)
|
40
42
|
@descriptor = ComponentDescriptor.new(stack_prefix,
|
41
43
|
EC2Descriptor.new(EC2_COMPONENT, EC2_NAME))
|
42
|
-
@
|
43
|
-
@
|
44
|
+
@cloud_watch_client = params[:CloudWatchClient]
|
45
|
+
@cloud_watch_log_client = params[:CloudWatchLogsClient]
|
46
|
+
@ec2_resource = params[:Ec2Resource]
|
44
47
|
end
|
45
48
|
|
46
49
|
# @return Aws::EC2::Instance
|