From 135fcdd9d3b26e1d4a56f3d35056706c053050ad Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 20 Jan 2023 13:26:27 +0100 Subject: [PATCH] Allow role to set env --- lib/mrsk/commands/app.rb | 2 +- lib/mrsk/configuration/role.rb | 8 ++++++++ test/configuration_role_test.rb | 14 ++++++++++++-- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/lib/mrsk/commands/app.rb b/lib/mrsk/commands/app.rb index b75d7c56..c79f26db 100644 --- a/lib/mrsk/commands/app.rb +++ b/lib/mrsk/commands/app.rb @@ -9,7 +9,7 @@ class Mrsk::Commands::App < Mrsk::Commands::Base "--restart unless-stopped", "--name", config.service_with_version, *rails_master_key_arg, - *config.env_args, + *role.env_args, *role.label_args, config.absolute_image, role.cmd diff --git a/lib/mrsk/configuration/role.rb b/lib/mrsk/configuration/role.rb index 6372372f..ae1550e0 100644 --- a/lib/mrsk/configuration/role.rb +++ b/lib/mrsk/configuration/role.rb @@ -23,6 +23,14 @@ class Mrsk::Configuration::Role argumentize "--label", labels end + def env + (config.env || {}).merge(specializations["env"] || {}) + end + + def env_args + argumentize "-e", env + end + def cmd specializations["cmd"] end diff --git a/test/configuration_role_test.rb b/test/configuration_role_test.rb index a0b00c75..6cbb0ee9 100644 --- a/test/configuration_role_test.rb +++ b/test/configuration_role_test.rb @@ -7,7 +7,8 @@ class ConfigurationRoleTest < ActiveSupport::TestCase setup do @deploy = { service: "app", image: "dhh/app", registry: { "username" => "dhh", "password" => "secret" }, - servers: [ "1.1.1.1", "1.1.1.2" ] + servers: [ "1.1.1.1", "1.1.1.2" ], + env: { "REDIS_URL" => "redis://x/y" } } @config = Mrsk::Configuration.new(@deploy) @@ -17,7 +18,11 @@ class ConfigurationRoleTest < ActiveSupport::TestCase "web" => [ "1.1.1.1", "1.1.1.2" ], "workers" => { "hosts" => [ "1.1.1.3", "1.1.1.4" ], - "cmd" => "bin/jobs" + "cmd" => "bin/jobs", + "env" => { + "REDIS_URL" => "redis://a/b", + "WEB_CONCURRENCY" => 4 + } } } }) @@ -58,4 +63,9 @@ class ConfigurationRoleTest < ActiveSupport::TestCase @deploy[:labels] = { "traefik.http.routers.app.rule" => "'Host(`example.com`) || (Host(`example.org`) && Path(`/traefik`))'" } assert_equal "'Host(`example.com`) || (Host(`example.org`) && Path(`/traefik`))'", @config.role(:web).labels["traefik.http.routers.app.rule"] end + + test "env overwritten by role" do + assert_equal "redis://a/b", @config_with_roles.role(:workers).env["REDIS_URL"] + assert_equal ["-e", "REDIS_URL=redis://a/b", "-e", "WEB_CONCURRENCY=4"], @config_with_roles.role(:workers).env_args + end end