ciinabox-ecs 0.3.2 → 0.4.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 290615a87906adae6078212fa7b2b73f1675f0a64eec2820e7652d24e1f29ae9
4
- data.tar.gz: 99e29c42c55cb2265b560ad944bb405d382c1ec981d80b03e5421a28dc32d22a
3
+ metadata.gz: 6cb8948addbd8934d3ce023ebe42cdc62c351543cd18e3bab5bcede51b721cd8
4
+ data.tar.gz: b9580c6df69c88aae63efa127df2c2f7776f5d43be0e3786571f2377813a120b
5
5
  SHA512:
6
- metadata.gz: f4f836716a32b0307e092446ba77a288f8d45a0518372f28ec8efe0700f94261ce3565266666f8449c17ebc25c262d8660c376a955ca0d58d7ef950542f8f1f1
7
- data.tar.gz: 6de2338585808d75804ca6592089ebced3e930c3d529aab78c06648f91470eafc9222756d26852b33305c450b6dd84fbf70d0936258efc7d5e643b9a3b3074bc
6
+ metadata.gz: dfaf07f44c8c9df46e421deede422ec11d8c487127164e3976b42afeb662cd395b00e261d2efd34c9efd19a136e02956fdc635f85cd0e4973667f0e44af04f28
7
+ data.tar.gz: 3a56e95ab477129ef96d2bfbb47c33ef08606c3eea4f4260410f76f3debf1c3de3bcb635f706392955cd7a4060442b70cdf72b1b1a9d61b1570eb377396a933b
data/README.md CHANGED
@@ -234,6 +234,23 @@ A common update would be to lock down ip access to your ciinabox environment
234
234
  ....
235
235
  ```
236
236
 
237
+ or using AWS IP Prefix Lists
238
+
239
+ ```yaml
240
+ ....
241
+ #Environment Access
242
+ #add list of public IP addresses you want to access the environment from
243
+ #default to public access probably best to change this
244
+ opsIpPrefixLists:
245
+ - pl-12345
246
+ - pl-abcde
247
+ #add list of public IP addresses for your developers to access the environment
248
+ #default to public access probably best to change this
249
+ devIpPrefixLists:
250
+ - pl-11111
251
+ ....
252
+ ```
253
+
237
254
  2. update your ciinabox
238
255
  ```bash
239
256
  $ ciinabox-ecs generate deploy update [ciinabox_name]
@@ -137,20 +137,23 @@ CloudFormation {
137
137
  ])
138
138
  }
139
139
 
140
- if defined? webHooks
141
- rules = []
142
- webHooks.each do |ip|
143
- rules << { IpProtocol: 'tcp', FromPort: '443', ToPort: '443', CidrIp: ip }
144
- end
145
- else
146
- rules = [{ IpProtocol: 'tcp', FromPort: '443', ToPort: '443', CidrIp: '192.168.1.1/32' }]
140
+ webHooks = webHooks || []
141
+ webHooksIpPrefixLists = webHooksIpPrefixLists || []
142
+
143
+ rules = []
144
+ webHooks.each do |ip|
145
+ rules << { IpProtocol: 'tcp', FromPort: '443', ToPort: '443', CidrIp: ip }
146
+ end
147
+
148
+ webHooksIpPrefixLists.each do |list|
149
+ rules << { IpProtocol: 'tcp', FromPort: '443', ToPort: '443', SourcePrefixListId: list }
147
150
  end
148
151
 
149
152
  Resource("SecurityGroupWebHooks") {
150
153
  Type 'AWS::EC2::SecurityGroup'
151
154
  Property('VpcId', Ref('VPC'))
152
155
  Property('GroupDescription', 'WebHooks like github')
153
- Property('SecurityGroupIngress', rules)
156
+ Property('SecurityGroupIngress', rules) if rules.any?
154
157
  }
155
158
 
156
159
  Resource('ToolsSSLCertificate') {
@@ -261,6 +264,14 @@ CloudFormation {
261
264
  end
262
265
  end
263
266
 
267
+ log_group_retention = log_group_retention || 90
268
+
269
+ Resource("LogGroup") {
270
+ Type "AWS::Logs::LogGroup"
271
+ Property("LogGroupName", "/ciinabox/#{ciinabox_name}/proxy")
272
+ Property("RetentionInDays", log_group_retention)
273
+ }
274
+
264
275
  volumes = []
265
276
  mount_points = []
266
277
 
@@ -290,6 +301,14 @@ CloudFormation {
290
301
  HostPort: 8080,
291
302
  ContainerPort: 80
292
303
  }],
304
+ LogConfiguration: {
305
+ LogDriver: 'awslogs',
306
+ Options: {
307
+ 'awslogs-group' => Ref("LogGroup"),
308
+ "awslogs-region" => Ref("AWS::Region"),
309
+ "awslogs-stream-prefix" => "proxy"
310
+ }
311
+ },
293
312
  Essential: true,
294
313
  MountPoints: mount_points
295
314
  }
@@ -1,189 +1,219 @@
1
1
  require 'cfndsl'
2
2
  require_relative '../../ext/helper'
3
3
 
4
- if !defined? timezone
5
- timezone = 'GMT'
6
- end
7
-
8
- if !defined? internal_elb
9
- internal_elb = nil
10
- end
11
-
12
- if !defined? volatile_jenkins_slave
13
- volatile_jenkins_slave = false
14
- end
15
-
16
- # Prefixing application images allows us to 'vendorize' ciinabox into client's account by setting
17
- # ciinabox_repo to ${account_no}.dkr.ecr.${region}.amazonaws.com
18
- if not defined? ciinabox_repo
19
- ciinabox_repo = 'ghcr.io/base2services'
20
- end
21
- image = "#{ciinabox_repo}/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}"
4
+ CloudFormation {
5
+ AWSTemplateFormatVersion "2010-09-09"
6
+ Description "ciinabox - ECS Service Jenkins v#{ciinabox_version}"
7
+
8
+ Parameter("ECSCluster") {Type 'String'}
9
+ Parameter("ECSRole") {Type 'String'}
10
+ Parameter("ServiceELB") {Type 'String'}
11
+ Parameter('InternalELB') {Type 'String'} if internal_elb
12
+
13
+ if !defined? timezone
14
+ timezone = 'GMT'
50
15
  end
51
16
 
52
- end
17
+ if !defined? internal_elb
18
+ internal_elb = nil
19
+ end
53
20
 
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,
21
+ if !defined? volatile_jenkins_slave
22
+ volatile_jenkins_slave = false
23
+ end
24
+
25
+ # Prefixing application images allows us to 'vendorize' ciinabox into client's account by setting
26
+ # ciinabox_repo to ${account_no}.dkr.ecr.${region}.amazonaws.com
27
+ if not defined? ciinabox_repo
28
+ ciinabox_repo = 'ghcr.io/base2services'
29
+ end
30
+ image = "#{ciinabox_repo}/ciinabox-jenkins:lts"
31
+
32
+ jenkins_java_opts = ''
33
+ memory = 2048
34
+ slave_memory = 2048
35
+ cpu = 300
36
+ container_port = 0
37
+ service = lookup_service('jenkins', services)
38
+ virtual_host = "jenkins.#{dns_domain}"
39
+ if defined? internal_elb and internal_elb
40
+ virtual_host = "#{virtual_host},internal-jenkins.#{dns_domain}"
41
+ end
42
+ port_mappings = []
43
+
44
+ if defined? service
45
+ service = {} if service.nil?
46
+ jenkins_java_opts = service['JAVA_OPTS'] || ''
47
+ image = service['ContainerImage'] || image
48
+ memory = service['ContainerMemory'] || 2048
49
+ slave_memory = service['SlaveContainerMemory'] || 2048
50
+ cpu = service['ContainerCPU'] || 300
51
+
52
+ if service['InstancePort']
53
+ port_mappings << {
54
+ HostPort: service['InstancePort'],
55
+ ContainerPort: service['InstancePort']
56
+ }
57
+ container_port = service['InstancePort']
58
+ virtual_host = "jenkins.#{dns_domain},internal-jenkins.#{dns_domain}"
59
+ end
60
+
61
+ end
62
+
63
+ # container volumes and container definitions depending on feature flags
64
+ volumes = [
65
+ {
66
+ Name: 'timezone',
67
+ Host: {
68
+ SourcePath: '/etc/localtime'
69
+ }
70
+ },
71
+ {
72
+ Name: 'jenkins_data',
73
+ Host: {
74
+ SourcePath: '/data/jenkins'
75
+ }
76
+ }]
77
+
78
+ container_definitions = [
79
+ {
80
+ Name: 'jenkins',
81
+ Links: [],
82
+ Memory: memory,
83
+ Cpu: cpu,
84
+ Image: image,
85
+ PortMappings: port_mappings,
86
+ Environment: [
87
+ {
88
+ Name: 'JAVA_OPTS',
89
+ Value: "#{jenkins_java_opts} -Duser.timezone=#{timezone}"
90
+ },
91
+ {
92
+ Name: 'VIRTUAL_HOST',
93
+ Value: virtual_host
94
+ },
95
+ {
96
+ Name: 'VIRTUAL_PORT',
97
+ Value: '8080'
98
+ }
99
+ ],
100
+ LogConfiguration: {
101
+ LogDriver: 'awslogs',
102
+ Options: {
103
+ 'awslogs-group' => Ref("LogGroup"),
104
+ "awslogs-region" => Ref("AWS::Region"),
105
+ "awslogs-stream-prefix" => "jenkins"
106
+ }
107
+ },
108
+ Essential: true,
109
+ MountPoints: [
110
+ {
111
+ ContainerPath: '/etc/localtime',
112
+ SourceVolume: 'timezone',
113
+ ReadOnly: true
114
+ },
115
+ {
116
+ ContainerPath: '/var/jenkins_home',
117
+ SourceVolume: 'jenkins_data',
118
+ ReadOnly: false
119
+ }
120
+ ]
121
+ }
122
+ ]
123
+
124
+ # If docker in docker slave is enabled
125
+ if defined? include_diind_slave and include_diind_slave
126
+ container_definitions[0][:Links] << 'jenkins-docker-dind-slave'
127
+ dind_definition = {
128
+ Name: 'jenkins-docker-dind-slave',
129
+ Memory: slave_memory,
130
+ Image: "#{ciinabox_repo}/ciinabox-docker-slave:#{docker_slave_version}",
131
+ Environment: [{Name: 'RUN_DOCKER_IN_DOCKER', Value: 1}],
132
+ LogConfiguration: {
133
+ LogDriver: 'awslogs',
134
+ Options: {
135
+ 'awslogs-group' => Ref("LogGroup"),
136
+ "awslogs-region" => Ref("AWS::Region"),
137
+ "awslogs-stream-prefix" => "jenkins-docker-dind-slave"
138
+ }
139
+ },
140
+ Essential: false,
141
+ Privileged: true
142
+ }
143
+ dind_definition[:Environment] << { Name: 'USE_ECR_CREDENTIAL_HELPER', Value: 1 } if docker_slave_enable_ecr_credentials_helper
144
+ if not volatile_jenkins_slave
145
+ dind_definition[:MountPoints] = [
146
+ {
147
+ ContainerPath: '/var/lib/docker',
148
+ SourceVolume: 'jenkins_dind_data',
149
+ ReadOnly: false
150
+ }
151
+ ]
152
+ volumes << {
153
+ Name: 'jenkins_dind_data',
154
+ Host: {
155
+ SourcePath: '/data/jenkins-diind'
156
+ }
157
+ }
158
+ end
159
+ container_definitions << dind_definition
160
+
161
+ end
162
+
163
+ # If docker outside of docker slave is enabled
164
+ if defined? include_dood_slave and include_dood_slave
165
+ container_definitions[0][:Links] << 'jenkins-docker-dood-slave'
166
+ dood_definition = {
167
+ Name: 'jenkins-docker-dood-slave',
168
+ Memory: slave_memory,
169
+ Image: "#{ciinabox_repo}/ciinabox-docker-slave:#{docker_slave_version}",
170
+ Environment: [{Name: 'RUN_DOCKER_IN_DOCKER', Value: 0}],
171
+ LogConfiguration: {
172
+ LogDriver: 'awslogs',
173
+ Options: {
174
+ 'awslogs-group' => Ref("LogGroup"),
175
+ "awslogs-region" => Ref("AWS::Region"),
176
+ "awslogs-stream-prefix" => "jenkins-docker-dood-slave"
177
+ }
178
+ },
92
179
  MountPoints: [
93
180
  {
94
- ContainerPath: '/etc/localtime',
95
- SourceVolume: 'timezone',
96
- ReadOnly: true
181
+ ContainerPath: '/var/run/docker.sock',
182
+ SourceVolume: 'docker_socket',
183
+ ReadOnly: false
97
184
  },
98
185
  {
99
- ContainerPath: '/var/jenkins_home',
100
- SourceVolume: 'jenkins_data',
186
+ ContainerPath: '/data/jenkins-dood',
187
+ SourceVolume: 'jenkins_dood_data',
101
188
  ReadOnly: false
102
189
  }
103
- ]
190
+ ],
191
+ Essential: false,
192
+ Privileged: false
104
193
  }
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}/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
194
+ dood_definition[:Environment] << { Name: 'USE_ECR_CREDENTIAL_HELPER', Value: 1 } if docker_slave_enable_ecr_credentials_helper
195
+ container_definitions << dood_definition
196
+ volumes << {
197
+ Name: 'jenkins_dood_data',
198
+ Host: {
199
+ SourcePath: '/data/jenkins-dood'
125
200
  }
126
- ]
201
+ }
127
202
  volumes << {
128
- Name: 'jenkins_dind_data',
203
+ Name: 'docker_socket',
129
204
  Host: {
130
- SourcePath: '/data/jenkins-diind'
205
+ SourcePath: '/var/run/docker.sock'
131
206
  }
132
207
  }
133
208
  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}/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
209
 
178
- CloudFormation {
210
+ log_group_retention = log_group_retention || 90
179
211
 
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
212
+ Resource("LogGroup") {
213
+ Type "AWS::Logs::LogGroup"
214
+ Property("LogGroupName", "/ciinabox/#{ciinabox_name}/jenkins")
215
+ Property("RetentionInDays", log_group_retention)
216
+ }
187
217
 
188
218
  Resource('JenkinsTask') {
189
219
  Type "AWS::ECS::TaskDefinition"
data/templates/vpc.rb CHANGED
@@ -158,6 +158,9 @@ CloudFormation {
158
158
  end
159
159
 
160
160
  rules = []
161
+
162
+ opsAccess = opsAccess || []
163
+
161
164
  opsAccess.each do |ip|
162
165
  rules << { IpProtocol: 'tcp', FromPort: '22', ToPort: '22', CidrIp: ip }
163
166
  rules << { IpProtocol: 'tcp', FromPort: '80', ToPort: '80', CidrIp: ip }
@@ -167,14 +170,24 @@ CloudFormation {
167
170
  rules << { IpProtocol: 'tcp', FromPort: '50000', ToPort: '50000', CidrIp: ip }
168
171
  end
169
172
 
173
+ opsIpPrefixLists = opsIpPrefixLists || []
174
+
175
+ opsIpPrefixLists.each do |list|
176
+ rules << { IpProtocol: 'tcp', FromPort: '80', ToPort: '80', SourcePrefixListId: list }
177
+ rules << { IpProtocol: 'tcp', FromPort: '443', ToPort: '443', SourcePrefixListId: list }
178
+ end
179
+
170
180
  Resource("SecurityGroupOps") {
171
181
  Type 'AWS::EC2::SecurityGroup'
172
182
  Property('VpcId', Ref('VPC'))
173
183
  Property('GroupDescription', 'Ops External Access')
174
- Property('SecurityGroupIngress', rules)
184
+ Property('SecurityGroupIngress', rules) if rules.any?
175
185
  }
176
186
 
177
187
  rules = []
188
+
189
+ devAccess = devAccess || []
190
+
178
191
  devAccess.each do |ip|
179
192
  rules << { IpProtocol: 'tcp', FromPort: '22', ToPort: '22', CidrIp: ip }
180
193
  rules << { IpProtocol: 'tcp', FromPort: '80', ToPort: '80', CidrIp: ip }
@@ -184,11 +197,18 @@ CloudFormation {
184
197
  rules << { IpProtocol: 'tcp', FromPort: '50000', ToPort: '50000', CidrIp: ip }
185
198
  end
186
199
 
200
+ devIpPrefixLists = devIpPrefixLists || []
201
+
202
+ devIpPrefixLists.each do |list|
203
+ rules << { IpProtocol: 'tcp', FromPort: '80', ToPort: '80', SourcePrefixListId: list }
204
+ rules << { IpProtocol: 'tcp', FromPort: '443', ToPort: '443', SourcePrefixListId: list }
205
+ end
206
+
187
207
  Resource("SecurityGroupDev") {
188
208
  Type 'AWS::EC2::SecurityGroup'
189
209
  Property('VpcId', Ref('VPC'))
190
210
  Property('GroupDescription', 'Dev Team Access')
191
- Property('SecurityGroupIngress', rules)
211
+ Property('SecurityGroupIngress', rules) if rules.any?
192
212
  }
193
213
 
194
214
 
@@ -286,4 +306,4 @@ CloudFormation {
286
306
  Value(Ref('SecurityGroupDev'))
287
307
  }
288
308
 
289
- }
309
+ }
data/templates/vpn.rb CHANGED
@@ -41,6 +41,9 @@ CloudFormation do
41
41
  security_groups << Ref('VpnSecurityGroupOps')
42
42
 
43
43
  rules = []
44
+
45
+ devAccess = devAccess || []
46
+
44
47
  devAccess.each do |ip|
45
48
  rules << { IpProtocol: 'tcp', FromPort: '443', ToPort: '443', CidrIp: ip }
46
49
  rules << { IpProtocol: 'tcp', FromPort: '9443', ToPort: '9443', CidrIp: ip }
@@ -48,11 +51,20 @@ CloudFormation do
48
51
  rules << { IpProtocol: 'udp', FromPort: '1194', ToPort: '1194', CidrIp: ip }
49
52
  end
50
53
 
54
+ devIpPrefixLists = devIpPrefixLists || []
55
+
56
+ devIpPrefixLists.each do |list|
57
+ rules << { IpProtocol: 'tcp', FromPort: '443', ToPort: '443', SourcePrefixListId: list }
58
+ rules << { IpProtocol: 'tcp', FromPort: '9443', ToPort: '9443', SourcePrefixListId: list }
59
+ rules << { IpProtocol: 'tcp', FromPort: '943', ToPort: '943', SourcePrefixListId: list }
60
+ rules << { IpProtocol: 'udp', FromPort: '1194', ToPort: '1194', SourcePrefixListId: list }
61
+ end
62
+
51
63
  Resource("VpnSecurityGroupDev") {
52
64
  Type 'AWS::EC2::SecurityGroup'
53
65
  Property('VpcId', Ref('VPC'))
54
66
  Property('GroupDescription', 'Dev Team Access')
55
- Property('SecurityGroupIngress', rules)
67
+ Property('SecurityGroupIngress', rules) if rules.any?
56
68
  }
57
69
 
58
70
  security_groups << Ref('VpnSecurityGroupDev')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ciinabox-ecs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Base2Services
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-08 00:00:00.000000000 Z
11
+ date: 2021-09-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -169,7 +169,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
169
169
  - !ruby/object:Gem::Version
170
170
  version: '0'
171
171
  requirements: []
172
- rubygems_version: 3.2.19
172
+ rubygems_version: 3.1.6
173
173
  signing_key:
174
174
  specification_version: 4
175
175
  summary: Manage ciinabox on Aws Ecs