dry-stack 0.1.16 → 0.1.18

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b5ebf65f6db6234c39d5bfe0b4b6c0be4dc1a2528a361a497b3aa80d093b3e02
4
- data.tar.gz: 823bc35c24d568a2c76b4ed921e13e2ed6c9779a1deab5abcf22cc54bb97bc58
3
+ metadata.gz: 54829c262a7ebcc4f610e60677db92468afdc9ef8d0f96a40b25146586182906
4
+ data.tar.gz: a9aef297aa9089a01dec3dfba63b06eebd9ea8465f724fab13c2abb3c725f560
5
5
  SHA512:
6
- metadata.gz: 0eb24c92c82d33345308c66f430ffce14cad8fc841c212c9f9927f13c3273c9d66eff66f9dffe25ca7aad43e26a10b5cedda1fef1572b45ac23875490497e03c
7
- data.tar.gz: 829f7596fda69391400a2166256632c2e4b5516cf6b07ae445a7c7eb49c24c90e8df80cc9558424b2dc9d3e6f36a33fc0e2abb56eb82be89fac18f262dd17a30
6
+ metadata.gz: 0dc83172b86117389996574cfbd7a351b9dfb195037ee1727ec2510954daddb7970904ea2798d00632844041fecd611f1e1697a0d21b2a147a69300071f90953
7
+ data.tar.gz: 89e35595ec63f7005ce4427622171d657785c9092001db88d0807214566b3f05a5b9dcb32a04e722fb4cabd81ce5b882eeeca9de141265a65b8d738837bcc819
@@ -9,31 +9,33 @@ Dry::CommandLine::COMMANDS[:swarm_deploy] = Class.new do
9
9
  _params = stack.options.merge params
10
10
  stack.name = _params[:name] if _params[:name]
11
11
 
12
- if params[:context_endpoint]
13
- name = params[:context_endpoint].gsub( /[\/.:@]/,'_').gsub( '__','_')
14
- name = "dry-#{name}".to_sym
15
- endpoint = params[:context_endpoint]
16
- contexts = {}
17
- exec_o_lines 'docker context ls --format json' do |line|
18
- ctx = JSON.parse line, symbolize_names: true
19
- contexts[ctx[:Name].to_sym] = ctx # {"Current":false,"Description":"","DockerEndpoint":"ssh://root@x.x.x.x","Error":"","Name":"prod-swarm"}
20
- end
21
-
22
- if contexts[name] && contexts[name][:DockerEndpoint] != endpoint
23
- raise "context '#{name}' has different host value: #{contexts[name][:DockerEndpoint]} != #{endpoint}"
24
- end
25
-
26
- exec_i "docker context create #{name} --docker host=#{endpoint}" unless contexts[name]
27
-
28
- ENV['DOCKER_CONTEXT'] = name.to_s
12
+ raise 'Context endpoint required' unless params[:context_endpoint]
13
+
14
+ name = params[:context_endpoint].gsub( /[\/.:@]/,'_').gsub( '__','_')
15
+ name = "dry-#{name}".to_sym
16
+ endpoint = params[:context_endpoint]
17
+ $stdout.puts "Looking for docker context '#{name}'"
18
+
19
+ contexts = {}
20
+ exec_o_lines 'docker context ls --format json' do |line|
21
+ ctx = JSON.parse line, symbolize_names: true
22
+ contexts[ctx[:Name].to_sym] = ctx # {"Current":false,"Description":"","DockerEndpoint":"ssh://root@x.x.x.x","Error":"","Name":"prod-swarm"}
23
+ end
24
+
25
+ if contexts[name] && contexts[name][:DockerEndpoint] != endpoint
26
+ raise "context '#{name}' has different host value: #{contexts[name][:DockerEndpoint]} != #{endpoint}"
29
27
  end
30
28
 
29
+ exec_i "docker context create #{name} --docker host=#{endpoint}" unless contexts[name]
30
+
31
+ ENV['DOCKER_CONTEXT'] = name.to_s
32
+
31
33
  # substitute ENV variables
32
34
  yaml = stack.to_compose(_params).lines[1..].join
33
35
  # system " echo \"#{yaml.gsub("`", '\\\`')}\" | docker stack deploy -c - #{stack.name} --prune --resolve-image changed"
34
36
 
35
37
  # --prune --resolve-image changed
36
- exec_i "docker stack deploy -c - #{stack.name} #{extra}", yaml
38
+ exec_i "docker stack deploy -c - --with-registry-auth #{extra}" #{stack.name} , yaml
37
39
  system "docker config rm $(docker config ls --filter label=com.docker.stack.namespace=#{stack.name} --format \"{{.ID}}\")"
38
40
 
39
41
  exec_i "docker config rm #{stack.name}_readme || echo 'failed to remove config #{stack.name}_readme'"
@@ -15,6 +15,7 @@ require_relative 'apache_specific_md5'
15
15
 
16
16
  module Dry
17
17
  EMPTY_HASH = :empty_hash
18
+ DEFAULT_INIT_SERVICE = true # add "init: true" option
18
19
 
19
20
  class ::Hash
20
21
  def deep_merge!(second)
@@ -205,23 +206,26 @@ module Dry
205
206
  rule << "PathPrefix(`#{nginx_host2regexp ing[:path]}`)" if ing[:path]
206
207
  rule << "#{ing[:rule]}" if ing[:rule]
207
208
 
209
+ middlewares = []
210
+
208
211
  if ing[:basic_auth]
209
212
  ba_user, ba_password, salt = ing[:basic_auth].split ':'
210
213
  hashed_password = apr1_crypt ba_password, (salt || rand(36**8).to_s(36))
211
214
  service[:deploy][:labels] << "traefik.http.middlewares.#{service_name}-#{index}_auth.basicauth.users=#{ba_user}:#{hashed_password.gsub('$','$$')}"
212
- service[:deploy][:labels] << "traefik.http.routers.#{service_name}-#{index}.middlewares=#{service_name}-#{index}_auth"
215
+ middlewares << "#{service_name}-#{index}_auth"
213
216
  end
214
217
 
215
-
216
218
  service[:deploy][:labels] << "traefik.http.routers.#{service_name}-#{index}.rule=#{rule.join ' && '}"
217
219
 
218
220
  if ing[:path_sub]
221
+ middlewares << "#{service_name}-#{index}-path_sub"
219
222
  service[:deploy][:labels] += [
220
- "traefik.http.routers.#{service_name}-#{index}.middlewares=#{service_name}-#{index}-path_sub",
221
223
  "traefik.http.middlewares.#{service_name}-#{index}-path_sub.replacepathregex.regex=#{ing[:path_sub][0]}",
222
224
  "traefik.http.middlewares.#{service_name}-#{index}-path_sub.replacepathregex.replacement=#{ing[:path_sub][1].gsub('$','$$')}"
223
225
  ]
224
226
  end
227
+
228
+ service[:deploy][:labels] << "traefik.http.routers.#{service_name}-#{index}.middlewares=#{middlewares.join ","}" unless middlewares.empty?
225
229
  end
226
230
  end
227
231
  service.delete :ingress
@@ -381,7 +385,11 @@ module Dry
381
385
  opts[:ports] = [opts[:ports]].flatten if opts.key? :ports
382
386
  opts[:environment] = opts.delete(:env) if opts.key? :env
383
387
 
384
- service = @services[name.to_sym] ||= {environment: {}, deploy: {labels: []}, networks: {}}
388
+ service = @services[name.to_sym] ||= begin
389
+ s = {environment: {}, deploy: {labels: []}, networks: {}}
390
+ DEFAULT_INIT_SERVICE ? s.merge(init: true) : s
391
+ end
392
+
385
393
  service.deep_merge! opts
386
394
  ServiceFunction.new(service, &) if block_given?
387
395
  end
data/lib/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Dry
2
2
  class Stack
3
- VERSION = '0.1.16'
3
+ VERSION = '0.1.18'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dry-stack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.16
4
+ version: 0.1.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Artyom B
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-09-12 00:00:00.000000000 Z
11
+ date: 2024-10-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake