stackose 0.1.3 → 0.2.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.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -5
  3. data/lib/stackose.rb +47 -28
  4. data/stackose.gemspec +1 -1
  5. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 605c55367fefa8f2d9518040cbfd23b5078da42f
4
- data.tar.gz: 6a3ee981a12f891484b3a2165d7d9fdebcbb7305
3
+ metadata.gz: 8cd9c334e1c92f496ec2540fe51d30c05dd95605
4
+ data.tar.gz: a95027f7146ce0ff78ffbecd5ba4bc0a11b90b34
5
5
  SHA512:
6
- metadata.gz: 58f20daf3487f2224d2bdf4cf59ebd32b1258329dc160a3835790466b9f022daaafc0e3193fe933fe57b70a0289bcbeb96cb44157620a846f405bb9f02de8b1a
7
- data.tar.gz: b231facc6bd2c95805a28a43375b36794471d6b05a51906d7a53e6cbd8de08f0799f7a248a51e71dc4323fc65d426ed90fd199a3a523d003822731884b413be5
6
+ metadata.gz: 4ac276b5f6c9d589e8ef102136cd84e083f0f4f8b542b2c649bc8b2530bbeca82181d31f37cb3a5326361b090b4a0fdc5f4e5a76a45ce10a585a5972640e8dc8
7
+ data.tar.gz: 0a8a8023750c8868d268ab63d9406e2bce6e84a17acbda823bfc7db63cfa602129fdfc73504f8fbd790a80a9844bf5de1b0d811f7775c574be22c2d6c880b8c3
data/README.md CHANGED
@@ -29,16 +29,14 @@ This gem uses couple variables which can be modified inside your deploy scripts,
29
29
  set :stackose_commands - list of commands to be run with docker-compose, defaults to []
30
30
  set :stackose_docker_mount_point - mount point inside the application container, defaults to "/usr/share/www/"
31
31
  set :stackose_linked_folders - list of folders to link inside de image
32
- set :stackose_service_to_build - name of the services with the application to run (default: ['app'])
32
+ set :stackose_service_to_build - name of the services with the application to run (default: ['app']) and should use the deploy user and group id
33
+ set :stackose_skip_image_build - true|[false] to skip the generation of the image, the compose file should have already the image defined(register) the only think is the building of compose_file with user and group id
33
34
 
34
35
  ### Folders to be linked
35
36
  If you need to link shared folders to the root of your application path, like capistrano standard linked_folders do,
36
37
  you can setup this like:
37
38
 
38
- set :capose_linked_folders, [ 'tmp/pids',
39
- 'tmp/cache',
40
- 'tmp/sockets',
41
- 'public/system',
39
+ set :capose_linked_folders, [ 'public/system',
42
40
  'public/pictures',
43
41
  'public/attachments',
44
42
  'public/pages',
data/lib/stackose.rb CHANGED
@@ -97,34 +97,48 @@ namespace :stackose do
97
97
  end
98
98
  end
99
99
 
100
+
100
101
  base_image_name = "#{fetch(:stackose_project)}:#{fetch(:stackose_image_tag)}"
101
102
  compose_override = "docker-compose-image-override.yml"
102
103
 
103
- ## costruiamo l'immagine
104
+
104
105
  on roles(fetch(:stackose_role)) do
105
106
  within release_path do
106
107
  with fetch(:stackose_env) do
107
108
 
108
109
  user_id = capture :id, '-u'
109
110
  group_id = capture :id, '-g'
110
-
111
- execute :docker, :build, "-t #{base_image_name} ."
112
-
113
111
  services_to_build = fetch(:stackose_service_to_build, ['app'])
114
-
115
112
  services_to_build = [services_to_build].flatten
116
113
 
114
+ if fetch(:stackose_skip_image_build, false)
115
+ #skippando la costruzione dell'immagine dobbiamo però inserire nei servizi, se non già presente, il vero utente di appartenenza
116
+ #
117
+
118
+ compose_production = {
119
+ version: '3',
120
+ services: services_to_build.collect {|s|
121
+ [s.to_sym, {
122
+ user: "#{user_id}:#{group_id}"
123
+ }]
124
+ }.to_h
125
+ }
126
+ else
127
+ ## costruiamo l'immagine
128
+ execute :docker, :build, "-t #{base_image_name} ."
129
+
130
+
131
+ compose_production = {
132
+ version: '3',
133
+ services: services_to_build.collect {|s|
134
+ [s.to_sym, {
135
+ image: base_image_name,
136
+ user: "#{user_id}:#{group_id}"
137
+ }]
138
+ }.to_h
139
+ }
117
140
 
118
- compose_production = {
119
- version: '3',
120
- services: services_to_build.collect {|s|
121
- [s.to_sym, {
122
- image: base_image_name,
123
- user: "#{user_id}:#{group_id}"
124
- }]
125
- }.to_h
126
- }
127
-
141
+ end
128
142
  contents = StringIO.new(JSON[compose_production.to_json].to_yaml)
129
143
  upload! contents, "#{release_path}/#{compose_override}"
130
144
 
@@ -139,11 +153,15 @@ namespace :stackose do
139
153
  on roles(fetch(:stackose_role)) do
140
154
  within release_path do
141
155
  with fetch(:stackose_env) do
156
+
157
+ execute :"docker-compose", _command('pull')
158
+
159
+
142
160
  fetch(:stackose_commands).each do |command|
143
161
  execute :"docker-compose", _command(command)
144
162
  end
145
163
 
146
- execute :docker, :stack, :deploy, "-c #{fetch(:stackose_file).join(' -c ')} #{fetch(:stackose_project)}"
164
+ execute :docker, :stack, :deploy, "--prune", "-c #{fetch(:stackose_file).join(' -c ')} #{fetch(:stackose_project)}"
147
165
 
148
166
  end
149
167
  end
@@ -158,12 +176,6 @@ namespace :stackose do
158
176
  with fetch(:stackose_env) do
159
177
 
160
178
 
161
- stopped_containers = capture :docker, :ps, "--all -f 'status=exited' -f 'label=com.docker.stack.namespace=#{fetch(:stackose_project)}'", '--format "{{.ID}}"'
162
-
163
- stopped_containers = stopped_containers.split
164
-
165
- execute(:docker, :rm, stopped_containers) if stopped_containers.length > 0
166
-
167
179
  tags_list = capture :docker, :images, fetch(:stackose_project).to_sym, '--format "{{.Tag}}"'
168
180
 
169
181
  list = tags_list.split
@@ -190,10 +202,14 @@ namespace :stackose do
190
202
  ask(:need_redis_service, true)
191
203
 
192
204
 
205
+ services_to_build = fetch(:stackose_service_to_build, ['app'])
206
+
207
+ services_to_build = [services_to_build].flatten
208
+
193
209
  compose_production = {
194
210
  version: '3',
195
- services: {
196
- fetch(:stackose_service_to_build, 'app').to_sym => {
211
+ services: services_to_build.collect {|s|
212
+ [s.to_sym, {
197
213
  restart: 'unless-stopped',
198
214
  environment: {:RAILS_ENV => fetch(:rails_env).to_s,
199
215
  :RAILS_SERVE_STATIC_FILES => 'true',
@@ -213,8 +229,8 @@ namespace :stackose do
213
229
  k.join(':')
214
230
  end,
215
231
  ports: ["#{fetch(:exposed_port)}:3000"]
216
- }
217
- }
232
+ }]
233
+ }.to_h
218
234
  }
219
235
 
220
236
  if fetch(:need_redis_service)
@@ -231,7 +247,9 @@ namespace :stackose do
231
247
  }
232
248
  }
233
249
 
234
- compose_production[:services][fetch(:stackose_service_to_build, 'app').to_sym].merge!({depends_on: ['redis']})
250
+ services_to_build.each do |srv|
251
+ compose_production[:services][srv.to_sym].merge!({depends_on: ['redis']})
252
+ end
235
253
 
236
254
  File.open("config/redis.conf", 'w') {|file| file.write("maxmemory 50mb\nmaxmemory-policy allkeys-lfu")}
237
255
  end
@@ -271,7 +289,7 @@ namespace :stackose do
271
289
  database: /usr/share/application_storage/production.sqlite3
272
290
  "
273
291
 
274
- File.open("docker-compose-production.yml", 'w') {|file| file.write(JSON[compose_production.to_json].to_yaml)}
292
+ File.open("docker-compose-#{fetch(:stage)}.yml", 'w') {|file| file.write(JSON[compose_production.to_json].to_yaml)}
275
293
  end
276
294
 
277
295
  end
@@ -282,6 +300,7 @@ namespace :load do
282
300
  set :stackose_copy, -> {[]}
283
301
  set :stackose_project, -> {fetch(:application)}
284
302
  set :stackose_file, -> {["docker-compose.yml", "docker-compose-#{fetch(:stage)}.yml"]}
303
+ set :stackose_skip_image_build, -> {false} #Skip full image generation in swarm, the compose file must already include the image name
285
304
  set :stackose_env, -> {{}}
286
305
  set :stackose_image_tag, -> {fetch(:release_timestamp)}
287
306
  set :stackose_service_to_build, -> {['app']}
data/stackose.gemspec CHANGED
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
 
4
4
  Gem::Specification.new do |spec|
5
5
  spec.name = 'stackose'
6
- spec.version = '0.1.3'
6
+ spec.version = '0.2.0'
7
7
  spec.authors = ["Marino Bonetti"]
8
8
  spec.email = ["marinobonetti@gmail.com"]
9
9
  spec.description = %q{Docker-Stack support for Capistrano 3.x}
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stackose
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marino Bonetti
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-06 00:00:00.000000000 Z
11
+ date: 2018-07-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capistrano