Add option for two-part configs with the destination option
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
require "mrsk"
|
||||
|
||||
MRSK = Mrsk::Commander.new \
|
||||
config_file: Pathname.new(File.expand_path("config/deploy.yml"))
|
||||
|
||||
module Mrsk::Cli
|
||||
end
|
||||
|
||||
# SSHKit uses instance eval, so we need a global const for ergonomics
|
||||
MRSK = Mrsk::Commander.new
|
||||
|
||||
require "mrsk/cli/main"
|
||||
|
||||
@@ -10,12 +10,23 @@ module Mrsk::Cli
|
||||
|
||||
class_option :verbose, type: :boolean, aliases: "-v", desc: "Detailed logging"
|
||||
|
||||
class_option :config_file, aliases: "-c", default: "config/deploy.yml", desc: "Path to config file (default: config/deploy.yml)"
|
||||
class_option :destination, aliases: "-d", desc: "Specify destination to be used for config file (west -> deploy.west.yml)"
|
||||
|
||||
def initialize(*)
|
||||
super
|
||||
MRSK.verbose = options[:verbose]
|
||||
initialize_commander(options)
|
||||
end
|
||||
|
||||
private
|
||||
def initialize_commander(options)
|
||||
MRSK.tap do |commander|
|
||||
commander.config_file = Pathname.new(File.expand_path(options[:config_file]))
|
||||
commander.destination = options[:destination]
|
||||
commander.verbose = options[:verbose]
|
||||
end
|
||||
end
|
||||
|
||||
def print_runtime
|
||||
started_at = Time.now
|
||||
yield
|
||||
|
||||
@@ -6,15 +6,14 @@ require "mrsk/commands/traefik"
|
||||
require "mrsk/commands/registry"
|
||||
|
||||
class Mrsk::Commander
|
||||
attr_reader :config
|
||||
attr_accessor :verbose
|
||||
attr_accessor :config_file, :destination, :verbose
|
||||
|
||||
def initialize(config_file:)
|
||||
@config_file = config_file
|
||||
def initialize(config_file: nil, destination: nil, verbose: false)
|
||||
@config_file, @destination, @verbose = config_file, destination, verbose
|
||||
end
|
||||
|
||||
def config
|
||||
@config ||= Mrsk::Configuration.load_file(@config_file).tap { |config| setup_with(config) }
|
||||
@config ||= Mrsk::Configuration.create_from(config_file, destination: destination).tap { |config| setup_with(config) }
|
||||
end
|
||||
|
||||
|
||||
|
||||
@@ -9,17 +9,32 @@ class Mrsk::Configuration
|
||||
delegate :service, :image, :servers, :env, :labels, :registry, :builder, to: :config, allow_nil: true
|
||||
|
||||
class << self
|
||||
def load_file(file)
|
||||
if file.exist?
|
||||
new YAML.load(ERB.new(IO.read(file)).result).symbolize_keys
|
||||
else
|
||||
raise "Configuration file not found in #{file}"
|
||||
end
|
||||
def create_from(base_config_file, destination: nil)
|
||||
new(load_config_file(base_config_file).tap do |config|
|
||||
if destination
|
||||
config.merge! \
|
||||
load_config_file destination_config_file(base_config_file, destination)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
def argumentize(argument, attributes, redacted: false)
|
||||
attributes.flat_map { |k, v| [ argument, redacted ? Mrsk::Utils.redact("#{k}=#{v}") : "#{k}=#{v}" ] }
|
||||
end
|
||||
|
||||
private
|
||||
def load_config_file(file)
|
||||
if file.exist?
|
||||
YAML.load(ERB.new(IO.read(file)).result).symbolize_keys
|
||||
else
|
||||
raise "Configuration file not found in #{file}"
|
||||
end
|
||||
end
|
||||
|
||||
def destination_config_file(base_config_file, destination)
|
||||
dir, basename = base_config_file.split
|
||||
dir.join basename.to_s.remove(".yml") + ".#{destination}.yml"
|
||||
end
|
||||
end
|
||||
|
||||
def initialize(config, validate: true)
|
||||
|
||||
Reference in New Issue
Block a user