From 862b4d88947a262779276757d9e849fd361f4d60 Mon Sep 17 00:00:00 2001 From: Leon Date: Sat, 21 Oct 2023 17:00:10 +0200 Subject: [PATCH] Add option to set absolute directory path --- lib/kamal/configuration/accessory.rb | 16 ++++++++++------ test/configuration/accessory_test.rb | 8 +++++++- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/lib/kamal/configuration/accessory.rb b/lib/kamal/configuration/accessory.rb index 50592b316..c33dfb851 100644 --- a/lib/kamal/configuration/accessory.rb +++ b/lib/kamal/configuration/accessory.rb @@ -70,8 +70,8 @@ def files def directories specifics["directories"]&.to_h do |host_to_container_mapping| - host_relative_path, container_path = host_to_container_mapping.split(":") - [ expand_host_path(host_relative_path), container_path ] + host_path, container_path = host_to_container_mapping.split(":") + [ expand_host_path(host_path), container_path ] end || {} end @@ -138,13 +138,17 @@ def remote_files_as_volumes def remote_directories_as_volumes specifics["directories"]&.collect do |host_to_container_mapping| - host_relative_path, container_path = host_to_container_mapping.split(":") - [ expand_host_path(host_relative_path), container_path ].join(":") + host_path, container_path = host_to_container_mapping.split(":") + [ expand_host_path(host_path), container_path ].join(":") end || [] end - def expand_host_path(host_relative_path) - "#{service_data_directory}/#{host_relative_path}" + def expand_host_path(host_path) + absolute_path?(host_path) ? host_path : "#{service_data_directory}/#{host_path}" + end + + def absolute_path?(path) + path.slice(0) == "/" end def service_data_directory diff --git a/test/configuration/accessory_test.rb b/test/configuration/accessory_test.rb index 6a250b176..522dc6311 100644 --- a/test/configuration/accessory_test.rb +++ b/test/configuration/accessory_test.rb @@ -149,10 +149,16 @@ class ConfigurationAccessoryTest < ActiveSupport::TestCase assert_match "%", @config.accessory(:mysql).files.keys[2].read end - test "directories" do + test "directory with a relative path" do + @deploy[:accessories]["mysql"]["directories"] = [ "data:/var/lib/mysql" ] assert_equal({"$PWD/app-mysql/data"=>"/var/lib/mysql"}, @config.accessory(:mysql).directories) end + test "directory with an absolute path" do + @deploy[:accessories]["mysql"]["directories"] = [ "/var/data/mysql:/var/lib/mysql" ] + assert_equal({"/var/data/mysql"=>"/var/lib/mysql"}, @config.accessory(:mysql).directories) + end + test "options" do assert_equal ["--cpus", "\"4\"", "--memory", "\"2GB\""], @config.accessory(:redis).option_args end