From cbd180205dcfc1d86b6a0ce3b5fe4c0c20c5e41c Mon Sep 17 00:00:00 2001 From: Bruno Prieto Date: Sat, 15 Jul 2023 23:59:49 +0200 Subject: [PATCH] Include role options when executing commands --- lib/mrsk/commands/app.rb | 3 +++ test/commands/app_test.rb | 13 +++++++++++++ 2 files changed, 16 insertions(+) diff --git a/lib/mrsk/commands/app.rb b/lib/mrsk/commands/app.rb index 339aa2fc..c9e28774 100644 --- a/lib/mrsk/commands/app.rb +++ b/lib/mrsk/commands/app.rb @@ -76,11 +76,14 @@ def execute_in_existing_container(*command, interactive: false) end def execute_in_new_container(*command, interactive: false) + role = config.role(self.role) + docker :run, ("-it" if interactive), "--rm", *config.env_args, *config.volume_args, + *role&.option_args, config.absolute_image, *command end diff --git a/test/commands/app_test.rb b/test/commands/app_test.rb index 1bac2370..57db2eaa 100644 --- a/test/commands/app_test.rb +++ b/test/commands/app_test.rb @@ -171,6 +171,13 @@ class CommandsAppTest < ActiveSupport::TestCase new_command.execute_in_new_container("bin/rails", "db:setup").join(" ") end + test "execute in new container with custom options" do + @config[:servers] = { "web" => { "hosts" => [ "1.1.1.1" ], "options" => { "mount" => "somewhere", "cap-add" => true } } } + assert_equal \ + "docker run --rm -e RAILS_MASTER_KEY=\"456\" --mount \"somewhere\" --cap-add dhh/app:999 bin/rails db:setup", + new_command.execute_in_new_container("bin/rails", "db:setup").join(" ") + end + test "execute in existing container" do assert_equal \ "docker exec app-web-999 bin/rails db:setup", @@ -182,6 +189,12 @@ class CommandsAppTest < ActiveSupport::TestCase new_command.execute_in_new_container_over_ssh("bin/rails", "c", host: "app-1") end + test "execute in new container with custom options over ssh" do + @config[:servers] = { "web" => { "hosts" => [ "1.1.1.1" ], "options" => { "mount" => "somewhere", "cap-add" => true } } } + assert_match %r|docker run -it --rm -e RAILS_MASTER_KEY=\"456\" --mount \"somewhere\" --cap-add dhh/app:999 bin/rails c|, + new_command.execute_in_new_container_over_ssh("bin/rails", "c", host: "app-1") + end + test "execute in existing container over ssh" do assert_match %r|docker exec -it app-web-999 bin/rails c|, new_command.execute_in_existing_container_over_ssh("bin/rails", "c", host: "app-1")