Add managed accessory directories
This commit is contained in:
@@ -6,6 +6,7 @@ class Mrsk::Cli::Accessory < Mrsk::Cli::Base
|
||||
if name == "all"
|
||||
MRSK.accessory_names.each { |accessory_name| boot(accessory_name) }
|
||||
else
|
||||
directories(name)
|
||||
upload(name)
|
||||
|
||||
accessory = MRSK.accessory(name)
|
||||
@@ -19,6 +20,7 @@ class Mrsk::Cli::Accessory < Mrsk::Cli::Base
|
||||
on(accessory.host) do
|
||||
accessory.files.each do |(local, remote)|
|
||||
accessory.ensure_local_file_present(local)
|
||||
|
||||
execute *accessory.make_directory_for(remote)
|
||||
upload! local, remote
|
||||
execute :chmod, "755", remote
|
||||
@@ -26,6 +28,16 @@ class Mrsk::Cli::Accessory < Mrsk::Cli::Base
|
||||
end
|
||||
end
|
||||
|
||||
desc "directories [NAME]", "Create accessory directories on host"
|
||||
def directories(name)
|
||||
accessory = MRSK.accessory(name)
|
||||
on(accessory.host) do
|
||||
accessory.directories.keys.each do |host_path|
|
||||
execute *accessory.make_directory(host_path)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
desc "reboot [NAME]", "Reboot accessory on host (stop container, remove container, start new container)"
|
||||
def reboot(name)
|
||||
stop(name)
|
||||
@@ -114,7 +126,7 @@ class Mrsk::Cli::Accessory < Mrsk::Cli::Base
|
||||
stop(name)
|
||||
remove_container(name)
|
||||
remove_image(name)
|
||||
remove_files(name)
|
||||
remove_service_directory(name)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -130,9 +142,9 @@ class Mrsk::Cli::Accessory < Mrsk::Cli::Base
|
||||
on(accessory.host) { execute *accessory.remove_image }
|
||||
end
|
||||
|
||||
desc "remove_files [NAME]", "Remove accessory directory used for uploaded files from host"
|
||||
def remove_files(name)
|
||||
desc "remove_service_directory [NAME]", "Remove accessory directory used for uploaded files and data directories from host"
|
||||
def remove_service_directory(name)
|
||||
accessory = MRSK.accessory(name)
|
||||
on(accessory.host) { execute *accessory.remove_files }
|
||||
on(accessory.host) { execute *accessory.remove_service_directory }
|
||||
end
|
||||
end
|
||||
|
||||
@@ -2,7 +2,7 @@ require "mrsk/commands/base"
|
||||
|
||||
class Mrsk::Commands::Accessory < Mrsk::Commands::Base
|
||||
attr_reader :accessory_config
|
||||
delegate :service_name, :image, :host, :port, :files, :env_args, :volume_args, :label_args, to: :accessory_config
|
||||
delegate :service_name, :image, :host, :port, :files, :directories, :env_args, :volume_args, :label_args, to: :accessory_config
|
||||
|
||||
def initialize(config, name:)
|
||||
super(config)
|
||||
@@ -76,10 +76,14 @@ class Mrsk::Commands::Accessory < Mrsk::Commands::Base
|
||||
end
|
||||
|
||||
def make_directory_for(remote_file)
|
||||
[ :mkdir, "-p", Pathname.new(remote_file).dirname.to_s ]
|
||||
make_directory Pathname.new(remote_file).dirname.to_s
|
||||
end
|
||||
|
||||
def remove_files
|
||||
def make_directory(path)
|
||||
[ :mkdir, "-p", path ]
|
||||
end
|
||||
|
||||
def remove_service_directory
|
||||
[ :rm, "-rf", service_name ]
|
||||
end
|
||||
|
||||
|
||||
@@ -50,8 +50,15 @@ class Mrsk::Configuration::Assessory
|
||||
end || {}
|
||||
end
|
||||
|
||||
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 ]
|
||||
end || {}
|
||||
end
|
||||
|
||||
def volumes
|
||||
(specifics["volumes"] || []) + remote_files_as_volumes
|
||||
specific_volumes + remote_files_as_volumes + remote_directories_as_volumes
|
||||
end
|
||||
|
||||
def volume_args
|
||||
@@ -73,18 +80,37 @@ class Mrsk::Configuration::Assessory
|
||||
end
|
||||
end
|
||||
|
||||
def read_dynamic_file(local_file)
|
||||
StringIO.new(ERB.new(IO.read(local_file)).result)
|
||||
end
|
||||
|
||||
def expand_remote_file(remote_file)
|
||||
service_name + remote_file
|
||||
end
|
||||
|
||||
def specific_volumes
|
||||
specifics["volumes"] || []
|
||||
end
|
||||
|
||||
def remote_files_as_volumes
|
||||
specifics["files"]&.collect do |local_to_remote_mapping|
|
||||
_, remote_file = local_to_remote_mapping.split(":")
|
||||
"$PWD/#{expand_remote_file(remote_file)}:#{remote_file}"
|
||||
"#{service_data_directory + remote_file}:#{remote_file}"
|
||||
end || []
|
||||
end
|
||||
|
||||
def read_dynamic_file(local_file)
|
||||
StringIO.new(ERB.new(IO.read(local_file)).result)
|
||||
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(":")
|
||||
end || []
|
||||
end
|
||||
|
||||
def expand_host_path(host_relative_path)
|
||||
"#{service_data_directory}/#{host_relative_path}"
|
||||
end
|
||||
|
||||
def service_data_directory
|
||||
"$PWD/#{service_name}"
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user