Merge pull request #1032 from basecamp/set-config-file-and-deploy-in-aliases
Allow destination and config-file in aliases
This commit is contained in:
@@ -30,7 +30,8 @@ module Kamal::Cli
|
|||||||
else
|
else
|
||||||
super
|
super
|
||||||
end
|
end
|
||||||
initialize_commander unless KAMAL.configured?
|
|
||||||
|
initialize_commander unless config[:invoked_via_subcommand]
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|||||||
@@ -382,8 +382,10 @@ class CliAppTest < CliTestCase
|
|||||||
|
|
||||||
|
|
||||||
test "version through main" do
|
test "version through main" do
|
||||||
stdouted { Kamal::Cli::Main.start([ "app", "version", "-c", "test/fixtures/deploy_with_accessories.yml", "--hosts", "1.1.1.1" ]) }.tap do |output|
|
with_argv([ "app", "version", "-c", "test/fixtures/deploy_with_accessories.yml", "--hosts", "1.1.1.1" ]) do
|
||||||
assert_match "sh -c 'docker ps --latest --format '\\''{{.Names}}'\\'' --filter label=service=app --filter label=destination= --filter label=role=web --filter status=running --filter status=restarting --filter ancestor=$(docker image ls --filter reference=dhh/app:latest --format '\\''{{.ID}}'\\'') ; docker ps --latest --format '\\''{{.Names}}'\\'' --filter label=service=app --filter label=destination= --filter label=role=web --filter status=running --filter status=restarting' | head -1 | while read line; do echo ${line#app-web-}; done", output
|
stdouted { Kamal::Cli::Main.start }.tap do |output|
|
||||||
|
assert_match "sh -c 'docker ps --latest --format '\\''{{.Names}}'\\'' --filter label=service=app --filter label=destination= --filter label=role=web --filter status=running --filter status=restarting --filter ancestor=$(docker image ls --filter reference=dhh/app:latest --format '\\''{{.ID}}'\\'') ; docker ps --latest --format '\\''{{.Names}}'\\'' --filter label=service=app --filter label=destination= --filter label=role=web --filter status=running --filter status=restarting' | head -1 | while read line; do echo ${line#app-web-}; done", output
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -274,17 +274,4 @@ class CliBuildTest < CliTestCase
|
|||||||
SSHKit::Backend::Abstract.any_instance.stubs(:execute)
|
SSHKit::Backend::Abstract.any_instance.stubs(:execute)
|
||||||
.with { |*args| args[0..1] == [ :docker, :buildx ] }
|
.with { |*args| args[0..1] == [ :docker, :buildx ] }
|
||||||
end
|
end
|
||||||
|
|
||||||
def with_build_directory
|
|
||||||
build_directory = File.join Dir.tmpdir, "kamal-clones", "app-#{pwd_sha}", "kamal"
|
|
||||||
FileUtils.mkdir_p build_directory
|
|
||||||
FileUtils.touch File.join build_directory, "Dockerfile"
|
|
||||||
yield build_directory + "/"
|
|
||||||
ensure
|
|
||||||
FileUtils.rm_rf build_directory
|
|
||||||
end
|
|
||||||
|
|
||||||
def pwd_sha
|
|
||||||
Digest::SHA256.hexdigest(Dir.pwd)[0..12]
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -51,4 +51,17 @@ class CliTestCase < ActiveSupport::TestCase
|
|||||||
ensure
|
ensure
|
||||||
ARGV.replace(old_argv)
|
ARGV.replace(old_argv)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def with_build_directory
|
||||||
|
build_directory = File.join Dir.tmpdir, "kamal-clones", "app-#{pwd_sha}", "kamal"
|
||||||
|
FileUtils.mkdir_p build_directory
|
||||||
|
FileUtils.touch File.join build_directory, "Dockerfile"
|
||||||
|
yield build_directory + "/"
|
||||||
|
ensure
|
||||||
|
FileUtils.rm_rf build_directory
|
||||||
|
end
|
||||||
|
|
||||||
|
def pwd_sha
|
||||||
|
Digest::SHA256.hexdigest(Dir.pwd)[0..12]
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -460,6 +460,7 @@ class CliMainTest < CliTestCase
|
|||||||
|
|
||||||
test "run an alias for a console" do
|
test "run an alias for a console" do
|
||||||
run_command("console", config_file: "deploy_with_aliases").tap do |output|
|
run_command("console", config_file: "deploy_with_aliases").tap do |output|
|
||||||
|
assert_no_match "App Host: 1.1.1.4", output
|
||||||
assert_match "docker exec app-console-999 bin/console on 1.1.1.5", output
|
assert_match "docker exec app-console-999 bin/console on 1.1.1.5", output
|
||||||
assert_match "App Host: 1.1.1.5", output
|
assert_match "App Host: 1.1.1.5", output
|
||||||
end
|
end
|
||||||
@@ -486,6 +487,33 @@ class CliMainTest < CliTestCase
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "switch config file with an alias" do
|
||||||
|
with_config_files do
|
||||||
|
with_argv([ "other_config" ]) do
|
||||||
|
stdouted { Kamal::Cli::Main.start }.tap do |output|
|
||||||
|
assert_match ":service_with_version: app2-999", output
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
test "switch destination with an alias" do
|
||||||
|
with_config_files do
|
||||||
|
with_argv([ "other_destination_config" ]) do
|
||||||
|
stdouted { Kamal::Cli::Main.start }.tap do |output|
|
||||||
|
assert_match ":service_with_version: app3-999", output
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
test "run on primary via alias" do
|
||||||
|
run_command("primary_details", config_file: "deploy_with_aliases").tap do |output|
|
||||||
|
assert_match "App Host: 1.1.1.1", output
|
||||||
|
assert_no_match "App Host: 1.1.1.2", output
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
test "upgrade" do
|
test "upgrade" do
|
||||||
invoke_options = { "config_file" => "test/fixtures/deploy_with_accessories.yml", "skip_hooks" => false, "confirmed" => true, "rolling" => false }
|
invoke_options = { "config_file" => "test/fixtures/deploy_with_accessories.yml", "skip_hooks" => false, "confirmed" => true, "rolling" => false }
|
||||||
Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:proxy:upgrade", [], invoke_options)
|
Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:proxy:upgrade", [], invoke_options)
|
||||||
@@ -530,6 +558,20 @@ class CliMainTest < CliTestCase
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def with_config_files
|
||||||
|
Dir.mktmpdir do |tmpdir|
|
||||||
|
config_dir = File.join(tmpdir, "config")
|
||||||
|
FileUtils.mkdir_p(config_dir)
|
||||||
|
FileUtils.cp "test/fixtures/deploy.yml", config_dir
|
||||||
|
FileUtils.cp "test/fixtures/deploy2.yml", config_dir
|
||||||
|
FileUtils.cp "test/fixtures/deploy.elsewhere.yml", config_dir
|
||||||
|
|
||||||
|
Dir.chdir(tmpdir) do
|
||||||
|
yield
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def assert_file(file, content)
|
def assert_file(file, content)
|
||||||
assert_match content, File.read(file)
|
assert_match content, File.read(file)
|
||||||
end
|
end
|
||||||
|
|||||||
12
test/fixtures/deploy.elsewhere.yml
vendored
Normal file
12
test/fixtures/deploy.elsewhere.yml
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
service: app3
|
||||||
|
image: dhh/app3
|
||||||
|
servers:
|
||||||
|
- "1.1.1.3"
|
||||||
|
- "1.1.1.4"
|
||||||
|
registry:
|
||||||
|
username: user
|
||||||
|
password: pw
|
||||||
|
builder:
|
||||||
|
arch: amd64
|
||||||
|
aliases:
|
||||||
|
other_config: config -c config/deploy2.yml
|
||||||
13
test/fixtures/deploy.yml
vendored
Normal file
13
test/fixtures/deploy.yml
vendored
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
service: app
|
||||||
|
image: dhh/app
|
||||||
|
servers:
|
||||||
|
- "1.1.1.1"
|
||||||
|
- "1.1.1.2"
|
||||||
|
registry:
|
||||||
|
username: user
|
||||||
|
password: pw
|
||||||
|
builder:
|
||||||
|
arch: amd64
|
||||||
|
aliases:
|
||||||
|
other_config: config -c config/deploy2.yml
|
||||||
|
other_destination_config: config -d elsewhere
|
||||||
12
test/fixtures/deploy2.yml
vendored
Normal file
12
test/fixtures/deploy2.yml
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
service: app2
|
||||||
|
image: dhh/app2
|
||||||
|
servers:
|
||||||
|
- "1.1.1.1"
|
||||||
|
- "1.1.1.2"
|
||||||
|
registry:
|
||||||
|
username: user2
|
||||||
|
password: pw2
|
||||||
|
builder:
|
||||||
|
arch: amd64
|
||||||
|
aliases:
|
||||||
|
other_config: config -c config/deploy2.yml
|
||||||
3
test/fixtures/deploy_with_aliases.yml
vendored
3
test/fixtures/deploy_with_aliases.yml
vendored
@@ -21,3 +21,6 @@ aliases:
|
|||||||
console: app exec --reuse -p -r console "bin/console"
|
console: app exec --reuse -p -r console "bin/console"
|
||||||
exec: app exec --reuse -p -r console
|
exec: app exec --reuse -p -r console
|
||||||
rails: app exec --reuse -p -r console rails
|
rails: app exec --reuse -p -r console rails
|
||||||
|
primary_details: details -p
|
||||||
|
deploy_secondary: deploy -d secondary
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user