ruby_aem_aws_odysseas 1.4.2

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.
Files changed (36) hide show
  1. checksums.yaml +7 -0
  2. data/conf/gem.yaml +1 -0
  3. data/lib/ruby_aem_aws/abstract/cloudwatch.rb +83 -0
  4. data/lib/ruby_aem_aws/abstract/component.rb +54 -0
  5. data/lib/ruby_aem_aws/abstract/grouped_component.rb +39 -0
  6. data/lib/ruby_aem_aws/abstract/single_component.rb +36 -0
  7. data/lib/ruby_aem_aws/abstract/snapshot.rb +35 -0
  8. data/lib/ruby_aem_aws/abstract/stackmanager.rb +68 -0
  9. data/lib/ruby_aem_aws/architecture/consolidated_stack.rb +49 -0
  10. data/lib/ruby_aem_aws/architecture/full_set_stack.rb +141 -0
  11. data/lib/ruby_aem_aws/architecture/stack_manager.rb +44 -0
  12. data/lib/ruby_aem_aws/client/cloudwatch.rb +87 -0
  13. data/lib/ruby_aem_aws/client/dynamo_db.rb +36 -0
  14. data/lib/ruby_aem_aws/client/s3.rb +42 -0
  15. data/lib/ruby_aem_aws/client/sns_topic.rb +30 -0
  16. data/lib/ruby_aem_aws/component/author.rb +71 -0
  17. data/lib/ruby_aem_aws/component/author_dispatcher.rb +84 -0
  18. data/lib/ruby_aem_aws/component/author_primary.rb +62 -0
  19. data/lib/ruby_aem_aws/component/author_publish_dispatcher.rb +56 -0
  20. data/lib/ruby_aem_aws/component/author_standby.rb +62 -0
  21. data/lib/ruby_aem_aws/component/chaos_monkey.rb +78 -0
  22. data/lib/ruby_aem_aws/component/component_descriptor.rb +28 -0
  23. data/lib/ruby_aem_aws/component/orchestrator.rb +78 -0
  24. data/lib/ruby_aem_aws/component/publish.rb +78 -0
  25. data/lib/ruby_aem_aws/component/publish_dispatcher.rb +83 -0
  26. data/lib/ruby_aem_aws/component/stack_manager_resources.rb +90 -0
  27. data/lib/ruby_aem_aws/constants.rb +53 -0
  28. data/lib/ruby_aem_aws/error.rb +68 -0
  29. data/lib/ruby_aem_aws/mixins/healthy_count_verifier.rb +154 -0
  30. data/lib/ruby_aem_aws/mixins/healthy_resource_verifier.rb +188 -0
  31. data/lib/ruby_aem_aws/mixins/healthy_state_verifier.rb +45 -0
  32. data/lib/ruby_aem_aws/mixins/instance_describer.rb +34 -0
  33. data/lib/ruby_aem_aws/mixins/metric_verifier.rb +189 -0
  34. data/lib/ruby_aem_aws/mixins/snapshot_verifier.rb +37 -0
  35. data/lib/ruby_aem_aws_odysseas.rb +152 -0
  36. metadata +148 -0
@@ -0,0 +1,56 @@
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 '../abstract/single_component'
16
+ require_relative '../abstract/snapshot'
17
+ require_relative '../mixins/healthy_state_verifier'
18
+ require_relative '../mixins/metric_verifier'
19
+ require_relative 'component_descriptor'
20
+ require_relative '../mixins/snapshot_verifier'
21
+
22
+ module RubyAemAws
23
+ module Component
24
+ # Interface to a single AWS instance running all three AEM components as a consolidated stack.
25
+ class AuthorPublishDispatcher
26
+ attr_reader :descriptor, :ec2_resource, :cloud_watch_client, :cloud_watch_log_client
27
+ include AbstractSingleComponent
28
+ include AbstractSnapshot
29
+ include HealthyStateVerifier
30
+ include MetricVerifier
31
+ include SnapshotVerifier
32
+
33
+ EC2_COMPONENT = 'author-publish-dispatcher'.freeze
34
+ EC2_NAME = 'AuthorPublishDispatcher'.freeze
35
+
36
+ # @param stack_prefix AWS tag: StackPrefix
37
+ # @param params Array of AWS Clients and Resource connections:
38
+ # - CloudWatchClient: AWS Cloudwatch Client.
39
+ # - CloudWatchLogsClient: AWS Cloudwatch Logs Client.
40
+ # - Ec2Resource: AWS EC2 Resource connection.
41
+ # @return new RubyAemAws::Consolidated::AuthorPublishDispatcher instance
42
+ def initialize(stack_prefix, params)
43
+ @descriptor = ComponentDescriptor.new(stack_prefix,
44
+ EC2Descriptor.new(EC2_COMPONENT, EC2_NAME))
45
+ @cloud_watch_client = params[:CloudWatchClient]
46
+ @cloud_watch_log_client = params[:CloudWatchLogsClient]
47
+ @ec2_resource = params[:Ec2Resource]
48
+ end
49
+
50
+ def get_tags
51
+ instance = get_instance
52
+ instance.tags
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,62 @@
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 '../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
+
21
+ module RubyAemAws
22
+ module Component
23
+ # Interface to the AWS instance running the Author-Standby component of a full-set AEM stack.
24
+ class AuthorStandby
25
+ attr_reader :descriptor, :ec2_resource, :cloud_watch_client, :cloud_watch_log_client
26
+ include AbstractSingleComponent
27
+ include AbstractSnapshot
28
+ include HealthyStateVerifier
29
+ include MetricVerifier
30
+ include SnapshotVerifier
31
+
32
+ EC2_COMPONENT = 'author-standby'.freeze
33
+ EC2_NAME = 'AEM Author - Standby'.freeze
34
+
35
+ # @param stack_prefix AWS tag: StackPrefix
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.
40
+ # @return new RubyAemAws::FullSet::AuthorStandby
41
+ def initialize(stack_prefix, params)
42
+ @descriptor = ComponentDescriptor.new(stack_prefix,
43
+ EC2Descriptor.new(EC2_COMPONENT, EC2_NAME))
44
+ @cloud_watch_client = params[:CloudWatchClient]
45
+ @cloud_watch_log_client = params[:CloudWatchLogsClient]
46
+ @ec2_resource = params[:Ec2Resource]
47
+ end
48
+
49
+ # @return Aws::EC2::Instance
50
+ def terminate
51
+ instance = get_instance
52
+ instance.terminate
53
+ instance.wait_until_terminated
54
+ end
55
+
56
+ def get_tags
57
+ instance = get_instance
58
+ instance.tags
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,78 @@
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 '../abstract/grouped_component'
16
+ require_relative '../abstract/snapshot'
17
+ require_relative '../constants'
18
+ require_relative '../mixins/healthy_resource_verifier'
19
+ require_relative '../mixins/metric_verifier'
20
+ require_relative '../mixins/snapshot_verifier'
21
+
22
+ module RubyAemAws
23
+ module Component
24
+ # Interface to the AWS instance running the ChaosMonkey component of a full-set AEM stack.
25
+ class ChaosMonkey
26
+ attr_reader :descriptor, :ec2_resource, :asg_client, :cloud_watch_client, :cloud_watch_log_client
27
+ include AbstractGroupedComponent
28
+ include AbstractSnapshot
29
+ include HealthyResourceVerifier
30
+ include MetricVerifier
31
+ include SnapshotVerifier
32
+
33
+ EC2_COMPONENT = 'chaos-monkey'.freeze
34
+ EC2_NAME = 'AEM Chaos Monkey'.freeze
35
+
36
+ # @param stack_prefix AWS tag: StackPrefix
37
+ # @param params Array of AWS Clients and Resource connections:
38
+ # - AutoScalingClient: AWS AutoScalingGroup Client.
39
+ # - CloudWatchClient: AWS Cloudwatch Client.
40
+ # - CloudWatchLogsClient: AWS Cloudwatch Logs Client.
41
+ # - Ec2Resource: AWS EC2 Resource connection.
42
+ # @return new RubyAemAws::FullSet::ChaosMonkey
43
+ def initialize(stack_prefix, params)
44
+ @descriptor = ComponentDescriptor.new(stack_prefix,
45
+ EC2Descriptor.new(EC2_COMPONENT, EC2_NAME))
46
+ @asg_client = params[:AutoScalingClient]
47
+ @cloud_watch_client = params[:CloudWatchClient]
48
+ @cloud_watch_log_client = params[:CloudWatchLogsClient]
49
+ @ec2_resource = params[:Ec2Resource]
50
+ end
51
+
52
+ def terminate_all_instances
53
+ get_all_instances.each do |i|
54
+ next if i.nil? || i.state.code != Constants::INSTANCE_STATE_CODE_RUNNING
55
+
56
+ i.terminate
57
+ i.wait_until_terminated
58
+ end
59
+ end
60
+
61
+ def terminate_random_instance
62
+ instance = get_random_instance
63
+ instance.terminate
64
+ instance.wait_until_terminated
65
+ end
66
+
67
+ def get_tags
68
+ tags = []
69
+ get_all_instances.each do |i|
70
+ next if i.nil? || i.state.code != Constants::INSTANCE_STATE_CODE_RUNNING
71
+
72
+ tags.push(i.tags)
73
+ end
74
+ tags
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,28 @@
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
+ module Component
17
+ ComponentDescriptor = Struct.new(:stack_prefix_in, :ec2, :elb) do
18
+ def stack_prefix
19
+ # Unwrap from {:stack_prefix = value} to the value if necessary.
20
+ return stack_prefix_in[:stack_prefix] if stack_prefix_in.is_a? Hash
21
+
22
+ stack_prefix_in
23
+ end
24
+ end
25
+ EC2Descriptor = Struct.new(:component, :name)
26
+ ELBDescriptor = Struct.new(:id, :name)
27
+ end
28
+ end
@@ -0,0 +1,78 @@
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 '../abstract/grouped_component'
16
+ require_relative '../abstract/snapshot'
17
+ require_relative '../constants'
18
+ require_relative '../mixins/healthy_resource_verifier'
19
+ require_relative '../mixins/metric_verifier'
20
+ require_relative '../mixins/snapshot_verifier'
21
+
22
+ module RubyAemAws
23
+ module Component
24
+ # Interface to the AWS instance running the Orchestrator component of a full-set AEM stack.
25
+ class Orchestrator
26
+ attr_reader :descriptor, :ec2_resource, :asg_client, :cloud_watch_client, :cloud_watch_log_client
27
+ include AbstractGroupedComponent
28
+ include AbstractSnapshot
29
+ include HealthyResourceVerifier
30
+ include MetricVerifier
31
+ include SnapshotVerifier
32
+
33
+ EC2_COMPONENT = 'orchestrator'.freeze
34
+ EC2_NAME = 'AEM Orchestrator'.freeze
35
+
36
+ # @param stack_prefix AWS tag: StackPrefix
37
+ # @param params Array of AWS Clients and Resource connections:
38
+ # - AutoScalingClient: AWS AutoScalingGroup Client.
39
+ # - CloudWatchClient: AWS Cloudwatch Client.
40
+ # - CloudWatchLogsClient: AWS Cloudwatch Logs Client.
41
+ # - Ec2Resource: AWS EC2 Resource connection.
42
+ # @return new RubyAemAws::FullSet::Orchestrator
43
+ def initialize(stack_prefix, params)
44
+ @descriptor = ComponentDescriptor.new(stack_prefix,
45
+ EC2Descriptor.new(EC2_COMPONENT, EC2_NAME))
46
+ @asg_client = params[:AutoScalingClient]
47
+ @cloud_watch_client = params[:CloudWatchClient]
48
+ @cloud_watch_log_client = params[:CloudWatchLogsClient]
49
+ @ec2_resource = params[:Ec2Resource]
50
+ end
51
+
52
+ def terminate_all_instances
53
+ get_all_instances.each do |i|
54
+ next if i.nil? || i.state.code != Constants::INSTANCE_STATE_CODE_RUNNING
55
+
56
+ i.terminate
57
+ i.wait_until_terminated
58
+ end
59
+ end
60
+
61
+ def terminate_random_instance
62
+ instance = get_random_instance
63
+ instance.terminate
64
+ instance.wait_until_terminated
65
+ end
66
+
67
+ def get_tags
68
+ tags = []
69
+ get_all_instances.each do |i|
70
+ next if i.nil? || i.state.code != Constants::INSTANCE_STATE_CODE_RUNNING
71
+
72
+ tags.push(i.tags)
73
+ end
74
+ tags
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,78 @@
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 '../abstract/grouped_component'
16
+ require_relative '../abstract/snapshot'
17
+ require_relative '../constants'
18
+ require_relative '../mixins/healthy_resource_verifier'
19
+ require_relative '../mixins/metric_verifier'
20
+ require_relative '../mixins/snapshot_verifier'
21
+
22
+ module RubyAemAws
23
+ module Component
24
+ # Interface to the AWS instance running the Publish component of a full-set AEM stack.
25
+ class Publish
26
+ attr_reader :descriptor, :ec2_resource, :cloud_watch_client, :asg_client, :cloud_watch_log_client
27
+ include AbstractGroupedComponent
28
+ include AbstractSnapshot
29
+ include HealthyResourceVerifier
30
+ include MetricVerifier
31
+ include SnapshotVerifier
32
+
33
+ EC2_COMPONENT = 'publish'.freeze
34
+ EC2_NAME = 'AEM Publish'.freeze
35
+
36
+ # @param stack_prefix AWS tag: StackPrefix
37
+ # @param params Array of AWS Clients and Resource connections:
38
+ # - AutoScalingClient: AWS AutoScalingGroup Client.
39
+ # - CloudWatchClient: AWS Cloudwatch Client.
40
+ # - CloudWatchLogsClient: AWS Cloudwatch Logs Client.
41
+ # - Ec2Resource: AWS EC2 Resource connection.
42
+ # @return new RubyAemAws::FullSet::AuthorPrimary
43
+ def initialize(stack_prefix, params)
44
+ @descriptor = ComponentDescriptor.new(stack_prefix,
45
+ EC2Descriptor.new(EC2_COMPONENT, EC2_NAME))
46
+ @asg_client = params[:AutoScalingClient]
47
+ @cloud_watch_client = params[:CloudWatchClient]
48
+ @cloud_watch_log_client = params[:CloudWatchLogsClient]
49
+ @ec2_resource = params[:Ec2Resource]
50
+ end
51
+
52
+ def terminate_all_instances
53
+ get_all_instances.each do |i|
54
+ next if i.nil? || i.state.code != Constants::INSTANCE_STATE_CODE_RUNNING
55
+
56
+ i.terminate
57
+ i.wait_until_terminated
58
+ end
59
+ end
60
+
61
+ def terminate_random_instance
62
+ instance = get_random_instance
63
+ instance.terminate
64
+ instance.wait_until_terminated
65
+ end
66
+
67
+ def get_tags
68
+ tags = []
69
+ get_all_instances.each do |i|
70
+ next if i.nil? || i.state.code != Constants::INSTANCE_STATE_CODE_RUNNING
71
+
72
+ tags.push(i.tags)
73
+ end
74
+ tags
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,83 @@
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 '../abstract/grouped_component'
16
+ require_relative '../abstract/snapshot'
17
+ require_relative '../constants'
18
+ require_relative '../mixins/healthy_resource_verifier'
19
+ require_relative '../mixins/metric_verifier'
20
+ require_relative '../mixins/snapshot_verifier'
21
+
22
+ module RubyAemAws
23
+ module Component
24
+ # Interface to the AWS instance running the PublishDispatcher component of a full-set AEM stack.
25
+ class PublishDispatcher
26
+ attr_reader :descriptor, :ec2_resource, :asg_client, :elb_client, :cloud_watch_client, :cloud_watch_log_client
27
+ include AbstractGroupedComponent
28
+ include AbstractSnapshot
29
+ include HealthyResourceVerifier
30
+ include MetricVerifier
31
+ include SnapshotVerifier
32
+
33
+ EC2_COMPONENT = 'publish-dispatcher'.freeze
34
+ EC2_NAME = 'AEM Publish Dispatcher'.freeze
35
+ ELB_ID = 'PublishDispatcherLoadBalancer'.freeze
36
+ ELB_NAME = 'AEM Publish Dispatcher Load Balancer'.freeze
37
+
38
+ # @param stack_prefix AWS tag: StackPrefix
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.
45
+ # @return new RubyAemAws::FullSet::PublishDispatcher
46
+ def initialize(stack_prefix, params)
47
+ @descriptor = ComponentDescriptor.new(stack_prefix,
48
+ EC2Descriptor.new(EC2_COMPONENT, EC2_NAME),
49
+ ELBDescriptor.new(ELB_ID, ELB_NAME))
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]
55
+ end
56
+
57
+ def terminate_all_instances
58
+ get_all_instances.each do |i|
59
+ next if i.nil? || i.state.code != Constants::INSTANCE_STATE_CODE_RUNNING
60
+
61
+ i.terminate
62
+ i.wait_until_terminated
63
+ end
64
+ end
65
+
66
+ def terminate_random_instance
67
+ instance = get_random_instance
68
+ instance.terminate
69
+ instance.wait_until_terminated
70
+ end
71
+
72
+ def get_tags
73
+ tags = []
74
+ get_all_instances.each do |i|
75
+ next if i.nil? || i.state.code != Constants::INSTANCE_STATE_CODE_RUNNING
76
+
77
+ tags.push(i.tags)
78
+ end
79
+ tags
80
+ end
81
+ end
82
+ end
83
+ end