From 299c741c1b872a96fbce90815522c8b8e5e69658 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 9 May 2025 21:47:26 +0200 Subject: [PATCH] More natural api when you are just applying accessory to a single tag --- lib/kamal/configuration/accessory.rb | 4 +++- lib/kamal/configuration/docs/accessory.yml | 2 ++ lib/kamal/configuration/validator/accessory.rb | 4 ++-- test/configuration/accessory_test.rb | 10 +++++++--- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/lib/kamal/configuration/accessory.rb b/lib/kamal/configuration/accessory.rb index a510acba..c15501a9 100644 --- a/lib/kamal/configuration/accessory.rb +++ b/lib/kamal/configuration/accessory.rb @@ -207,7 +207,9 @@ class Kamal::Configuration::Accessory end def hosts_from_tags - if accessory_config.key?("tags") + if accessory_config.key?("tag") + extract_hosts_from_config_with_tag(accessory_config["tag"]) + elsif accessory_config.key?("tags") accessory_config["tags"].flat_map { |tag| extract_hosts_from_config_with_tag(tag) } end end diff --git a/lib/kamal/configuration/docs/accessory.yml b/lib/kamal/configuration/docs/accessory.yml index 7a77fd46..1033edaa 100644 --- a/lib/kamal/configuration/docs/accessory.yml +++ b/lib/kamal/configuration/docs/accessory.yml @@ -53,8 +53,10 @@ accessories: - mysql-db2 roles: - mysql + tag: writer tags: - writer + - reader # Custom command # diff --git a/lib/kamal/configuration/validator/accessory.rb b/lib/kamal/configuration/validator/accessory.rb index f870a27f..96c5aafc 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", "tags" ]).size != 1 - error "specify one of `host`, `hosts`, `roles` or `tags`" + if (config.keys & [ "host", "hosts", "roles", "tag", "tags" ]).size != 1 + error "specify one of `host`, `hosts`, `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 fa3a8005..e8af6556 100644 --- a/test/configuration/accessory_test.rb +++ b/test/configuration/accessory_test.rb @@ -73,7 +73,11 @@ class ConfigurationAccessoryTest < ActiveSupport::TestCase }, "proxy" => { "image" => "proxy:latest", - "tags" => [ "writer" ] + "tags" => [ "writer", "reader" ] + }, + "logger" => { + "image" => "logger:latest", + "tag" => "writer" } } } @@ -111,7 +115,7 @@ class ConfigurationAccessoryTest < ActiveSupport::TestCase assert_equal [ "1.1.1.5" ], @config.accessory(:mysql).hosts assert_equal [ "1.1.1.6", "1.1.1.7" ], @config.accessory(:redis).hosts assert_equal [ "1.1.1.1", "1.1.1.2" ], @config.accessory(:monitoring).hosts - assert_equal [ "1.1.1.1", "1.1.1.3" ], @config.accessory(:proxy).hosts + assert_equal [ "1.1.1.1", "1.1.1.3", "1.1.1.2" ], @config.accessory(:proxy).hosts end test "missing host" do @@ -129,7 +133,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` or `tags`", exception.message + assert_equal "accessories/mysql: specify one of `host`, `hosts`, `roles`, `tag` or `tags`", exception.message end test "all hosts" do