ciinabox-ecs 0.1.6

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.
@@ -0,0 +1,100 @@
1
+ require 'cfndsl'
2
+ require_relative '../../ext/helper'
3
+
4
+ if !defined? timezone
5
+ timezone = 'GMT'
6
+ end
7
+
8
+ image = 'fabric8/hawtio'
9
+ java_opts = ''
10
+ memory = 1024
11
+ cpu = 300
12
+ container_port = 0
13
+ service = lookup_service('hawtio', services)
14
+ if service
15
+ java_opts = service['JAVA_OPTS'] || java_opts
16
+ image = service['ContainerImage'] || image
17
+ memory = service['ContainerMemory'] || memory
18
+ cpu = service['ContainerCPU'] || cpu
19
+ container_port = service['InstancePort'] || container_port
20
+ end
21
+
22
+ CloudFormation {
23
+
24
+ AWSTemplateFormatVersion "2010-09-09"
25
+ Description "ciinabox - ECS Service Hawtio v#{ciinabox_version}"
26
+
27
+ Parameter("ECSCluster"){ Type 'String' }
28
+ Parameter("ECSRole"){ Type 'String' }
29
+ Parameter("ServiceELB"){ Type 'String' }
30
+
31
+ Resource('HawtioTask') {
32
+ Type "AWS::ECS::TaskDefinition"
33
+ Property('ContainerDefinitions', [
34
+ {
35
+ Name: 'hawtio',
36
+ Memory: memory,
37
+ Cpu: cpu,
38
+ Image: image,
39
+ Environment: [
40
+ {
41
+ Name: 'JAVA_OPTS',
42
+ Value: "#{java_opts} -Duser.timezone=#{timezone}"
43
+ },
44
+ {
45
+ Name: 'VIRTUAL_HOST',
46
+ Value: "hawtio.#{dns_domain}"
47
+ },
48
+ {
49
+ Name: 'VIRTUAL_PORT',
50
+ Value: '8080'
51
+ },
52
+ {
53
+ Name: 'hawtio_dirname',
54
+ Value: '/var/hawtio'
55
+ },
56
+
57
+ ],
58
+ Essential: true,
59
+ MountPoints: [
60
+ {
61
+ ContainerPath: '/etc/localtime',
62
+ SourceVolume: 'timezone',
63
+ ReadOnly: true
64
+ },
65
+ {
66
+ ContainerPath: '/var/hawtio',
67
+ SourceVolume: 'data',
68
+ ReadOnly: false
69
+ }
70
+ ]
71
+ }
72
+ ])
73
+ Property('Volumes', [
74
+ {
75
+ Name: 'timezone',
76
+ Host: {
77
+ SourcePath: '/etc/localtime'
78
+ }
79
+ },
80
+ {
81
+ Name: 'data',
82
+ Host: {
83
+ SourcePath: '/data/hawtio'
84
+ }
85
+ }
86
+ ])
87
+ }
88
+
89
+ Resource('HawtioService') {
90
+ Type 'AWS::ECS::Service'
91
+ Property('Cluster', Ref('ECSCluster'))
92
+ Property('DesiredCount', 1)
93
+ Property('TaskDefinition', Ref('HawtioTask'))
94
+ Property('Role', Ref('ECSRole')) unless container_port == 0
95
+ Property('LoadBalancers', [
96
+ { ContainerName: 'hawtio', ContainerPort: container_port, LoadBalancerName: Ref('ServiceELB') }
97
+ ]) unless container_port == 0
98
+
99
+ }
100
+ }
@@ -0,0 +1,79 @@
1
+ require 'cfndsl'
2
+ require_relative '../../ext/helper'
3
+
4
+ if !defined? timezone
5
+ timezone = 'GMT'
6
+ end
7
+
8
+ #icinga2_image: AWS_ACCOUNT_ID.dkr.ecr.AWS_REGION/base2/icinga2:VERSION_TAG
9
+ image = "icinga/icinga2" #fail safe so file compiles
10
+
11
+ if defined? icinga2_image
12
+ image = icinga2_image
13
+ end
14
+
15
+ memory = 1024
16
+ cpu = 300
17
+ container_port = 0
18
+
19
+ CloudFormation {
20
+
21
+ AWSTemplateFormatVersion "2010-09-09"
22
+ Description "ciinabox - ECS Service Hawtio v#{ciinabox_version}"
23
+
24
+ Parameter("ECSCluster"){ Type 'String' }
25
+ Parameter("ECSRole"){ Type 'String' }
26
+ Parameter("ServiceELB"){ Type 'String' }
27
+
28
+ Resource('Icinga2Task') {
29
+ Type "AWS::ECS::TaskDefinition"
30
+ Property('ContainerDefinitions', [
31
+ {
32
+ Name: 'icinga2',
33
+ Memory: memory,
34
+ Cpu: cpu,
35
+ Image: image,
36
+ Environment: [
37
+ {
38
+ Name: 'VIRTUAL_HOST',
39
+ Value: "icinga2.#{dns_domain}"
40
+ },
41
+ {
42
+ Name: 'VIRTUAL_PORT',
43
+ Value: '80'
44
+ }
45
+
46
+ ],
47
+ Essential: true,
48
+ MountPoints: [
49
+ {
50
+ ContainerPath: '/etc/localtime',
51
+ SourceVolume: 'timezone',
52
+ ReadOnly: true
53
+ }
54
+ ]
55
+ }
56
+ ])
57
+ Property('Volumes', [
58
+ {
59
+ Name: 'timezone',
60
+ Host: {
61
+ SourcePath: '/etc/localtime'
62
+ }
63
+ }
64
+
65
+ ])
66
+ }
67
+
68
+ Resource('IcingaService') {
69
+ Type 'AWS::ECS::Service'
70
+ Property('Cluster', Ref('ECSCluster'))
71
+ Property('DesiredCount', 1)
72
+ Property('TaskDefinition', Ref('Icinga2Task'))
73
+ Property('Role', Ref('ECSRole')) unless container_port == 0
74
+ # Property('LoadBalancers', [
75
+ # { ContainerName: 'hawtio', ContainerPort: container_port, LoadBalancerName: Ref('ServiceELB') }
76
+ # ]) unless container_port == 0
77
+
78
+ }
79
+ }
@@ -0,0 +1,209 @@
1
+ require 'cfndsl'
2
+
3
+ if !defined? timezone
4
+ timezone = 'GMT'
5
+ end
6
+
7
+ if !defined? internal_elb
8
+ internal_elb = nil
9
+ end
10
+
11
+ if !defined? volatile_jenkins_slave
12
+ volatile_jenkins_slave = false
13
+ end
14
+
15
+ # Prefixing application images allows us to 'vendorize' ciinabox into client's account by setting
16
+ # ciinabox_repo to ${account_no}.dkr.ecr.${region}.amazonaws.com
17
+ if not defined? ciinabox_repo
18
+ ciinabox_repo=''
19
+ end
20
+
21
+ image = "#{ciinabox_repo}base2/ciinabox-jenkins:lts"
22
+
23
+ jenkins_java_opts = ''
24
+ memory = 2048
25
+ slave_memory = 2048
26
+ cpu = 300
27
+ container_port = 0
28
+ service = lookup_service('jenkins', services)
29
+ virtual_host = "jenkins.#{dns_domain}"
30
+ if defined? internal_elb and internal_elb
31
+ virtual_host = "#{virtual_host},internal-jenkins.#{dns_domain}"
32
+ end
33
+ port_mappings = []
34
+
35
+ if defined? service
36
+ service = {} if service.nil?
37
+ jenkins_java_opts = service['JAVA_OPTS'] || ''
38
+ image = service['ContainerImage'] || image
39
+ memory = service['ContainerMemory'] || 2048
40
+ slave_memory = service['SlaveContainerMemory'] || 2048
41
+ cpu = service['ContainerCPU'] || 300
42
+
43
+ if service['InstancePort']
44
+ port_mappings << {
45
+ HostPort: service['InstancePort'],
46
+ ContainerPort: service['InstancePort']
47
+ }
48
+ container_port = service['InstancePort']
49
+ virtual_host = "jenkins.#{dns_domain},internal-jenkins.#{dns_domain}"
50
+ end
51
+
52
+ end
53
+
54
+ # container volumes and container definitions depending on feature flags
55
+ volumes = [
56
+ {
57
+ Name: 'timezone',
58
+ Host: {
59
+ SourcePath: '/etc/localtime'
60
+ }
61
+ },
62
+ {
63
+ Name: 'jenkins_data',
64
+ Host: {
65
+ SourcePath: '/data/jenkins'
66
+ }
67
+ }]
68
+
69
+ container_definitions = [
70
+ {
71
+ Name: 'jenkins',
72
+ Links: [],
73
+ Memory: memory,
74
+ Cpu: cpu,
75
+ Image: image,
76
+ PortMappings: port_mappings,
77
+ Environment: [
78
+ {
79
+ Name: 'JAVA_OPTS',
80
+ Value: "#{jenkins_java_opts} -Duser.timezone=#{timezone}"
81
+ },
82
+ {
83
+ Name: 'VIRTUAL_HOST',
84
+ Value: virtual_host
85
+ },
86
+ {
87
+ Name: 'VIRTUAL_PORT',
88
+ Value: '8080'
89
+ }
90
+ ],
91
+ Essential: true,
92
+ MountPoints: [
93
+ {
94
+ ContainerPath: '/etc/localtime',
95
+ SourceVolume: 'timezone',
96
+ ReadOnly: true
97
+ },
98
+ {
99
+ ContainerPath: '/var/jenkins_home',
100
+ SourceVolume: 'jenkins_data',
101
+ ReadOnly: false
102
+ }
103
+ ]
104
+ }
105
+ ]
106
+
107
+ # If docker in docker slave is enabled
108
+ if defined? include_diind_slave and include_diind_slave
109
+ container_definitions[0][:Links] << 'jenkins-docker-dind-slave'
110
+ dind_definition = {
111
+ Name: 'jenkins-docker-dind-slave',
112
+ Memory: slave_memory,
113
+ Image: "#{ciinabox_repo}base2/ciinabox-docker-slave:#{docker_slave_version}",
114
+ Environment: [{Name: 'RUN_DOCKER_IN_DOCKER', Value: 1}],
115
+ Essential: false,
116
+ Privileged: true
117
+ }
118
+ dind_definition[:Environment] << { Name: 'USE_ECR_CREDENTIAL_HELPER', Value: 1 } if docker_slave_enable_ecr_credentials_helper
119
+ if not volatile_jenkins_slave
120
+ dind_definition[:MountPoints] = [
121
+ {
122
+ ContainerPath: '/var/lib/docker',
123
+ SourceVolume: 'jenkins_dind_data',
124
+ ReadOnly: false
125
+ }
126
+ ]
127
+ volumes << {
128
+ Name: 'jenkins_dind_data',
129
+ Host: {
130
+ SourcePath: '/data/jenkins-diind'
131
+ }
132
+ }
133
+ end
134
+ container_definitions << dind_definition
135
+
136
+ end
137
+
138
+ # If docker outside of docker slave is enabled
139
+ if defined? include_dood_slave and include_dood_slave
140
+ container_definitions[0][:Links] << 'jenkins-docker-dood-slave'
141
+ dood_definition = {
142
+ Name: 'jenkins-docker-dood-slave',
143
+ Memory: slave_memory,
144
+ Image: "#{ciinabox_repo}base2/ciinabox-docker-slave:#{docker_slave_version}",
145
+ Environment: [{Name: 'RUN_DOCKER_IN_DOCKER', Value: 0}],
146
+ MountPoints: [
147
+ {
148
+ ContainerPath: '/var/run/docker.sock',
149
+ SourceVolume: 'docker_socket',
150
+ ReadOnly: false
151
+ },
152
+ {
153
+ ContainerPath: '/data/jenkins-dood',
154
+ SourceVolume: 'jenkins_dood_data',
155
+ ReadOnly: false
156
+ }
157
+ ],
158
+ Essential: false,
159
+ Privileged: false
160
+ }
161
+ dood_definition[:Environment] << { Name: 'USE_ECR_CREDENTIAL_HELPER', Value: 1 } if docker_slave_enable_ecr_credentials_helper
162
+ container_definitions << dood_definition
163
+ volumes << {
164
+ Name: 'jenkins_dood_data',
165
+ Host: {
166
+ SourcePath: '/data/jenkins-dood'
167
+ }
168
+ }
169
+ volumes << {
170
+ Name: 'docker_socket',
171
+ Host: {
172
+ SourcePath: '/var/run/docker.sock'
173
+ }
174
+ }
175
+ end
176
+
177
+
178
+ CloudFormation {
179
+
180
+ AWSTemplateFormatVersion "2010-09-09"
181
+ Description "ciinabox - ECS Service Jenkins v#{ciinabox_version}"
182
+
183
+ Parameter("ECSCluster") {Type 'String'}
184
+ Parameter("ECSRole") {Type 'String'}
185
+ Parameter("ServiceELB") {Type 'String'}
186
+ Parameter('InternalELB') {Type 'String'} if internal_elb
187
+
188
+ Resource('JenkinsTask') {
189
+ Type "AWS::ECS::TaskDefinition"
190
+ Property('ContainerDefinitions', container_definitions)
191
+ Property('Volumes', volumes)
192
+ }
193
+
194
+ Resource('JenkinsService') {
195
+ Type 'AWS::ECS::Service'
196
+ Property('Cluster', Ref('ECSCluster'))
197
+ Property('DeploymentConfiguration', {
198
+ MaximumPercent: 100,
199
+ MinimumHealthyPercent: 0
200
+ })
201
+ Property('DesiredCount', 1)
202
+ Property('TaskDefinition', Ref('JenkinsTask'))
203
+ #For Role... Conditional. This parameter is required only if you specify the LoadBalancers property.
204
+ Property('Role', Ref('ECSRole')) if internal_elb and container_port != 0
205
+ Property('LoadBalancers', [
206
+ {ContainerName: 'jenkins', ContainerPort: container_port, LoadBalancerName: Ref('InternalELB')}
207
+ ]) if internal_elb and container_port != 0
208
+ }
209
+ }
@@ -0,0 +1,96 @@
1
+ require 'cfndsl'
2
+ require_relative '../../ext/helper'
3
+
4
+ if !defined? timezone
5
+ timezone = 'GMT'
6
+ end
7
+
8
+ image = 'base2/ciinabox-nexus'
9
+ java_opts = ''
10
+ memory = 1024
11
+ cpu = 300
12
+ container_port = 0
13
+ service = lookup_service('nexus', services)
14
+ if service
15
+ java_opts = service['JAVA_OPTS'] || ''
16
+ image = service['ContainerImage'] || image
17
+ memory = service['ContainerMemory'] || 1024
18
+ cpu = service['ContainerCPU'] || 300
19
+ container_port = service['InstancePort'] || 0
20
+ end
21
+
22
+ CloudFormation {
23
+
24
+ AWSTemplateFormatVersion "2010-09-09"
25
+ Description "ciinabox - ECS Service Nexus v#{ciinabox_version}"
26
+
27
+ Parameter("ECSCluster"){ Type 'String' }
28
+ Parameter("ECSRole"){ Type 'String' }
29
+ Parameter("ServiceELB"){ Type 'String' }
30
+
31
+ Resource('NexusTask') {
32
+ Type "AWS::ECS::TaskDefinition"
33
+ Property('ContainerDefinitions', [
34
+ {
35
+ Name: 'nexus',
36
+ Memory: memory,
37
+ Cpu: cpu,
38
+ Image: image,
39
+ Environment: [
40
+ {
41
+ Name: 'JAVA_OPTS',
42
+ Value: "#{java_opts} -Duser.timezone=#{timezone} -server -Djava.net.preferIPv4Stack=true"
43
+ },
44
+ {
45
+ Name: 'VIRTUAL_HOST',
46
+ Value: "nexus.#{dns_domain}"
47
+ },
48
+ {
49
+ Name: 'VIRTUAL_PORT',
50
+ Value: '8081'
51
+ }
52
+ ],
53
+ Essential: true,
54
+ MountPoints: [
55
+ {
56
+ ContainerPath: '/etc/localtime',
57
+ SourceVolume: 'timezone',
58
+ ReadOnly: true
59
+ },
60
+ {
61
+ ContainerPath: '/sonatype-work',
62
+ SourceVolume: 'nexus_data',
63
+ ReadOnly: false
64
+ }
65
+ ]
66
+ }
67
+ ])
68
+ Property('Volumes', [
69
+ {
70
+ Name: 'timezone',
71
+ Host: {
72
+ SourcePath: '/etc/localtime'
73
+ }
74
+ },
75
+ {
76
+ Name: 'nexus_data',
77
+ Host: {
78
+ SourcePath: '/data/nexus'
79
+ }
80
+ }
81
+ ])
82
+ }
83
+
84
+ Resource('NexusService') {
85
+ Type 'AWS::ECS::Service'
86
+ Property('Cluster', Ref('ECSCluster'))
87
+ Property('DesiredCount', 1)
88
+ Property('TaskDefinition', Ref('NexusTask'))
89
+ Property('Role', Ref('ECSRole')) unless container_port == 0
90
+ Property('LoadBalancers', [
91
+ { ContainerName: 'nexus', ContainerPort: container_port, LoadBalancerName: Ref('ServiceELB') }
92
+ ]) unless container_port == 0
93
+
94
+ }
95
+
96
+ }