Upgrade commands for Kamal 1.x -> 2.0
Adds: - `kamal upgrade` to upgrade all app hosts and accessory hosts - `kamal proxy upgrade` to upgrade the proxy on all hosts - `kamal accessory upgrade [name]` to upgrade accessories on all hosts Upgrade takes rolling and confirmed options and calls `proxy upgrade` and `accessory upgrade` in turn. To just upgrade a single host add -h [host] to the command. But the upgrade should run on all hosts, not just those running the proxy. Calling upgrade on a host that has already been upgraded should work ok. Upgrading hosts causes downtime but you can avoid if you run multiple hosts by: 1. Implementing the pre-proxy-reboot and post-proxy-reboot hooks to remove the host from external load balancers 2. Running the upgrade with the --rolling option **kamal proxy upgrade** 1. Creates a `kamal` network if required 2. Stops and removes the old proxy (whether Traefik or kamal-proxy) 3. Starts a kamal-proxy container in the `kamal` network 4. Reboots the app containers in the `kamal` network **kamal accessory upgrade [name]** 1. Creates a `kamal` network if required 2. Reboots the accessory containers in the `kamal` network A matching `downgrade` command will be added to Kamal 1.9.
This commit is contained in:
@@ -189,6 +189,37 @@ class Kamal::Cli::Main < Kamal::Cli::Base
|
||||
end
|
||||
end
|
||||
|
||||
desc "upgrade", "Upgrade from Kamal 1.x to 2.0"
|
||||
option :confirmed, aliases: "-y", type: :boolean, default: false, desc: "Proceed without confirmation question"
|
||||
option :rolling, type: :boolean, default: false, desc: "Upgrade one host at a time"
|
||||
def upgrade
|
||||
confirming "This will replace Traefik with kamal-proxy and restart all accessories" do
|
||||
with_lock do
|
||||
if options[:rolling]
|
||||
(KAMAL.hosts | KAMAL.accessory_hosts).each do |host|
|
||||
KAMAL.with_specific_hosts(host) do
|
||||
say "Upgrading #{host}...", :magenta
|
||||
if KAMAL.hosts.include?(host)
|
||||
invoke "kamal:cli:proxy:upgrade", [], options.merge(confirmed: true, rolling: false)
|
||||
reset_invocation(Kamal::Cli::Proxy)
|
||||
end
|
||||
if KAMAL.accessory_hosts.include?(host)
|
||||
invoke "kamal:cli:accessory:upgrade", [ "all" ], options.merge(confirmed: true, rolling: false)
|
||||
reset_invocation(Kamal::Cli::Accessory)
|
||||
end
|
||||
say "Upgraded #{host}", :magenta
|
||||
end
|
||||
end
|
||||
else
|
||||
say "Upgrading all hosts...", :magenta
|
||||
invoke "kamal:cli:proxy:upgrade", [], options.merge(confirmed: true)
|
||||
invoke "kamal:cli:accessory:upgrade", [ "all" ], options.merge(confirmed: true)
|
||||
say "Upgraded all hosts", :magenta
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
desc "version", "Show Kamal version"
|
||||
def version
|
||||
puts Kamal::VERSION
|
||||
|
||||
Reference in New Issue
Block a user