kamal 2.0.0.rc3 → 2.0.0

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: 0acf7f55645630211284dffb4f7f5db52eb35cd3f5cb2db8ab50a5448ce7f930
4
- data.tar.gz: b8ae61897e21ec514a1957697ef936dd9eaee88f90fcbb6fd5e15c3d9e5ef6a7
3
+ metadata.gz: d6fd8cd960f0fd6434ee39f897eb22356bcf5d374476ccd71e1cd0fb34aa547e
4
+ data.tar.gz: 609c5d520f27e51a28a09e9db7f56023fadad1125b1ca5f78cd4c72044d23952
5
5
  SHA512:
6
- metadata.gz: 26210d782be1d4c8d916dfb9dfaccd2e3b00792186959df4e11dc6f54db7b87279c56fe52b726681eb93dd5c61c9dde7d5e6321b1058d25988d3f38b493ca81e
7
- data.tar.gz: 21d0ba0ffcd5731843f6f5d6705bdad5b3cb1e055c6516da6112781fd72957d3a02fc28ca389f58896f725288555bc66dd8ec31a5729ff7cd29ed04e8bbd8d2f
6
+ metadata.gz: f88f3d860d07fd44b69688eebb0d285b651db56263c22cd1546cff08e2bbbd3119a50a5ad6e7155b02e7d5b1b2e260a8f56e01d7a6c1115095de574bf14df596
7
+ data.tar.gz: bf4b40fe0f56affbbd57dc550301fc902fd769e4910d51f2ecc704d45674c315dd70d4a289a865cc2f91e0e1a571c8e8bbd9cb358a25fe18fc0a3e149ec52206
@@ -21,6 +21,36 @@ class Kamal::Cli::Proxy < Kamal::Cli::Base
21
21
  end
22
22
  end
23
23
 
24
+ desc "boot_config <set|get|clear>", "Mange kamal-proxy boot configuration"
25
+ option :publish, type: :boolean, default: true, desc: "Publish the proxy ports on the host"
26
+ option :http_port, type: :numeric, default: Kamal::Configuration::PROXY_HTTP_PORT, desc: "HTTP port to publish on the host"
27
+ option :https_port, type: :numeric, default: Kamal::Configuration::PROXY_HTTPS_PORT, desc: "HTTPS port to publish on the host"
28
+ option :docker_options, type: :array, default: [], desc: "Docker options to pass to the proxy container", banner: "option=value option2=value2"
29
+ def boot_config(subcommand)
30
+ case subcommand
31
+ when "set"
32
+ boot_options = [
33
+ *(KAMAL.config.proxy_publish_args(options[:http_port], options[:https_port]) if options[:publish]),
34
+ *options[:docker_options].map { |option| "--#{option}" }
35
+ ]
36
+
37
+ on(KAMAL.proxy_hosts) do |host|
38
+ execute(*KAMAL.proxy.ensure_proxy_directory)
39
+ upload! StringIO.new(boot_options.join(" ")), KAMAL.config.proxy_options_file
40
+ end
41
+ when "get"
42
+ on(KAMAL.proxy_hosts) do |host|
43
+ puts "Host #{host}: #{capture_with_info(*KAMAL.proxy.get_boot_options)}"
44
+ end
45
+ when "reset"
46
+ on(KAMAL.proxy_hosts) do |host|
47
+ execute *KAMAL.proxy.reset_boot_options
48
+ end
49
+ else
50
+ raise ArgumentError, "Unknown boot_config subcommand #{subcommand}"
51
+ end
52
+ end
53
+
24
54
  desc "reboot", "Reboot proxy on servers (stop container, remove container, start new container)"
25
55
  option :rolling, type: :boolean, default: false, desc: "Reboot proxy on hosts in sequence, rather than in parallel"
26
56
  option :confirmed, aliases: "-y", type: :boolean, default: false, desc: "Proceed without confirmation question"
@@ -169,6 +199,7 @@ class Kamal::Cli::Proxy < Kamal::Cli::Base
169
199
  stop
170
200
  remove_container
171
201
  remove_image
202
+ remove_proxy_directory
172
203
  end
173
204
  end
174
205
  end
@@ -193,6 +224,15 @@ class Kamal::Cli::Proxy < Kamal::Cli::Base
193
224
  end
194
225
  end
195
226
 
227
+ desc "remove_proxy_directory", "Remove the proxy directory from servers", hide: true
228
+ def remove_proxy_directory
229
+ with_lock do
230
+ on(KAMAL.proxy_hosts) do
231
+ execute *KAMAL.proxy.remove_proxy_directory, raise_on_non_zero_exit: false
232
+ end
233
+ end
234
+ end
235
+
196
236
  private
197
237
  def removal_allowed?(force)
198
238
  on(KAMAL.proxy_hosts) do |host|
@@ -1,3 +1,3 @@
1
1
  #!/bin/sh
2
2
 
3
- echo "Rebooting Traefik on $KAMAL_HOSTS..."
3
+ echo "Rebooting kamal-proxy on $KAMAL_HOSTS..."
@@ -7,9 +7,8 @@ class Kamal::Commands::Proxy < Kamal::Commands::Base
7
7
  "--network", "kamal",
8
8
  "--detach",
9
9
  "--restart", "unless-stopped",
10
- *config.proxy_publish_args,
11
10
  "--volume", "kamal-proxy-config:/home/kamal-proxy/.config/kamal-proxy",
12
- *config.logging_args,
11
+ "\$\(#{get_boot_options.join(" ")}\)",
13
12
  config.proxy_image
14
13
  end
15
14
 
@@ -65,6 +64,22 @@ class Kamal::Commands::Proxy < Kamal::Commands::Base
65
64
  )
66
65
  end
67
66
 
67
+ def ensure_proxy_directory
68
+ make_directory config.proxy_directory
69
+ end
70
+
71
+ def remove_proxy_directory
72
+ remove_directory config.proxy_directory
73
+ end
74
+
75
+ def get_boot_options
76
+ combine [ :cat, config.proxy_options_file ], [ :echo, "\"#{config.proxy_options_default.join(" ")}\"" ], by: "||"
77
+ end
78
+
79
+ def reset_boot_options
80
+ remove_file config.proxy_options_file
81
+ end
82
+
68
83
  private
69
84
  def container_name
70
85
  config.proxy_container_name
@@ -29,7 +29,7 @@ class Kamal::Configuration::Proxy
29
29
  def deploy_options
30
30
  {
31
31
  host: proxy_config["host"],
32
- tls: proxy_config["ssl"],
32
+ tls: proxy_config["ssl"] ? true : nil,
33
33
  "deploy-timeout": seconds_duration(config.deploy_timeout),
34
34
  "drain-timeout": seconds_duration(config.drain_timeout),
35
35
  "health-check-interval": seconds_duration(proxy_config.dig("healthcheck", "interval")),
@@ -14,7 +14,7 @@ class Kamal::Configuration
14
14
 
15
15
  include Validation
16
16
 
17
- PROXY_MINIMUM_VERSION = "v0.4.0"
17
+ PROXY_MINIMUM_VERSION = "v0.6.0"
18
18
  PROXY_HTTP_PORT = 80
19
19
  PROXY_HTTPS_PORT = 443
20
20
 
@@ -246,8 +246,12 @@ class Kamal::Configuration
246
246
  env_tags.detect { |t| t.name == name.to_s }
247
247
  end
248
248
 
249
- def proxy_publish_args
250
- argumentize "--publish", [ "#{PROXY_HTTP_PORT}:#{PROXY_HTTP_PORT}", "#{PROXY_HTTPS_PORT}:#{PROXY_HTTPS_PORT}" ]
249
+ def proxy_publish_args(http_port, https_port)
250
+ argumentize "--publish", [ "#{http_port}:#{PROXY_HTTP_PORT}", "#{https_port}:#{PROXY_HTTPS_PORT}" ]
251
+ end
252
+
253
+ def proxy_options_default
254
+ proxy_publish_args PROXY_HTTP_PORT, PROXY_HTTPS_PORT
251
255
  end
252
256
 
253
257
  def proxy_image
@@ -258,6 +262,14 @@ class Kamal::Configuration
258
262
  "kamal-proxy"
259
263
  end
260
264
 
265
+ def proxy_directory
266
+ File.join run_directory, "proxy"
267
+ end
268
+
269
+ def proxy_options_file
270
+ File.join proxy_directory, "options"
271
+ end
272
+
261
273
 
262
274
  def to_h
263
275
  {
@@ -3,7 +3,7 @@ class Kamal::Secrets::Adapters::LastPass < Kamal::Secrets::Adapters::Base
3
3
  def login(account)
4
4
  unless loggedin?(account)
5
5
  `lpass login #{account.shellescape}`
6
- raise RuntimeError, "Failed to login to 1Password" unless $?.success?
6
+ raise RuntimeError, "Failed to login to LastPass" unless $?.success?
7
7
  end
8
8
  end
9
9
 
@@ -13,7 +13,7 @@ class Kamal::Secrets::Adapters::LastPass < Kamal::Secrets::Adapters::Base
13
13
 
14
14
  def fetch_secrets(secrets, account:, session:)
15
15
  items = `lpass show #{secrets.map(&:shellescape).join(" ")} --json`
16
- raise RuntimeError, "Could not read #{secrets} from 1Password" unless $?.success?
16
+ raise RuntimeError, "Could not read #{secrets} from LastPass" unless $?.success?
17
17
 
18
18
  items = JSON.parse(items)
19
19
 
data/lib/kamal/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Kamal
2
- VERSION = "2.0.0.rc3"
2
+ VERSION = "2.0.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kamal
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.rc3
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-09-23 00:00:00.000000000 Z
11
+ date: 2024-09-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -336,7 +336,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
336
336
  - !ruby/object:Gem::Version
337
337
  version: '0'
338
338
  requirements: []
339
- rubygems_version: 3.5.16
339
+ rubygems_version: 3.3.22
340
340
  signing_key:
341
341
  specification_version: 4
342
342
  summary: Deploy web apps in containers to servers running Docker with zero downtime.