From 78c9d610cf61e2dbe45d1899a7f47a3b6e879a96 Mon Sep 17 00:00:00 2001 From: Krzysztof Duda Date: Mon, 12 May 2025 10:55:15 +0200 Subject: [PATCH] Add a singular role --- lib/kamal/configuration/accessory.rb | 6 +++++- lib/kamal/configuration/docs/accessory.yml | 3 ++- lib/kamal/configuration/validator/accessory.rb | 4 ++-- test/configuration/accessory_test.rb | 4 ++-- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/lib/kamal/configuration/accessory.rb b/lib/kamal/configuration/accessory.rb index c15501a9..c1dbad57 100644 --- a/lib/kamal/configuration/accessory.rb +++ b/lib/kamal/configuration/accessory.rb @@ -201,7 +201,9 @@ class Kamal::Configuration::Accessory end def hosts_from_roles - if accessory_config.key?("roles") + if accessory_config.key?("role") + config.role(accessory_config["role"])&.hosts + elsif accessory_config.key?("roles") accessory_config["roles"].flat_map { |role| config.role(role)&.hosts } end end @@ -231,6 +233,8 @@ class Kamal::Configuration::Accessory def ensure_valid_roles if accessory_config["roles"] && (missing_roles = accessory_config["roles"] - config.roles.map(&:name)).any? raise Kamal::ConfigurationError, "accessories/#{name}: unknown roles #{missing_roles.join(", ")}" + elsif accessory_config["role"] && !config.role(accessory_config["role"]) + raise Kamal::ConfigurationError, "accessories/#{name}: unknown role #{accessory_config["role"]}" end end end diff --git a/lib/kamal/configuration/docs/accessory.yml b/lib/kamal/configuration/docs/accessory.yml index 1033edaa..3983211a 100644 --- a/lib/kamal/configuration/docs/accessory.yml +++ b/lib/kamal/configuration/docs/accessory.yml @@ -46,11 +46,12 @@ accessories: # Accessory hosts # - # Specify one of `host`, `hosts`, `roles`, or `tags`: + # Specify one of `host`, `hosts`, `role`, `roles`, `tag` or `tags`: host: mysql-db1 hosts: - mysql-db1 - mysql-db2 + role: mysql roles: - mysql tag: writer diff --git a/lib/kamal/configuration/validator/accessory.rb b/lib/kamal/configuration/validator/accessory.rb index 96c5aafc..564cfc7e 100644 --- a/lib/kamal/configuration/validator/accessory.rb +++ b/lib/kamal/configuration/validator/accessory.rb @@ -2,8 +2,8 @@ class Kamal::Configuration::Validator::Accessory < Kamal::Configuration::Validat def validate! super - if (config.keys & [ "host", "hosts", "roles", "tag", "tags" ]).size != 1 - error "specify one of `host`, `hosts`, `roles`, `tag` or `tags`" + if (config.keys & [ "host", "hosts", "role", "roles", "tag", "tags" ]).size != 1 + error "specify one of `host`, `hosts`, `role`, `roles`, `tag` or `tags`" end validate_docker_options!(config["options"]) diff --git a/test/configuration/accessory_test.rb b/test/configuration/accessory_test.rb index 179a5f5d..0f13b33e 100644 --- a/test/configuration/accessory_test.rb +++ b/test/configuration/accessory_test.rb @@ -55,7 +55,7 @@ class ConfigurationAccessoryTest < ActiveSupport::TestCase "service" => "custom-monitoring", "image" => "monitoring:latest", "registry" => { "server" => "other.registry", "username" => "user", "password" => "pw" }, - "roles" => [ "web" ], + "role" => "web", "port" => "4321:4321", "labels" => { "cache" => "true" @@ -134,7 +134,7 @@ class ConfigurationAccessoryTest < ActiveSupport::TestCase exception = assert_raises(Kamal::ConfigurationError) do Kamal::Configuration.new(@deploy) end - assert_equal "accessories/mysql: specify one of `host`, `hosts`, `roles`, `tag` or `tags`", exception.message + assert_equal "accessories/mysql: specify one of `host`, `hosts`, `role`, `roles`, `tag` or `tags`", exception.message end test "all hosts" do