dry-stack 0.1.16 → 0.1.18

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: 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