diff --git a/README.md b/README.md index 24fd2328..dda97d44 100644 --- a/README.md +++ b/README.md @@ -521,6 +521,9 @@ accessories: - MYSQL_ROOT_PASSWORD volumes: - /var/lib/mysql:/var/lib/mysql + options: + cpus: 4 + memory: "2GB" redis: image: redis:latest host: 1.1.1.4 diff --git a/lib/mrsk/commands/accessory.rb b/lib/mrsk/commands/accessory.rb index 2f745267..b30db2fe 100644 --- a/lib/mrsk/commands/accessory.rb +++ b/lib/mrsk/commands/accessory.rb @@ -1,6 +1,7 @@ class Mrsk::Commands::Accessory < Mrsk::Commands::Base attr_reader :accessory_config - delegate :service_name, :image, :host, :port, :files, :directories, :publish_args, :env_args, :volume_args, :label_args, to: :accessory_config + delegate :service_name, :image, :host, :port, :files, :directories, :publish_args, :env_args, :volume_args, + :label_args, :option_args, to: :accessory_config def initialize(config, name:) super(config) @@ -17,6 +18,7 @@ class Mrsk::Commands::Accessory < Mrsk::Commands::Base *env_args, *volume_args, *label_args, + *option_args, image end diff --git a/lib/mrsk/commands/app.rb b/lib/mrsk/commands/app.rb index 5fc8dda7..df015e33 100644 --- a/lib/mrsk/commands/app.rb +++ b/lib/mrsk/commands/app.rb @@ -13,8 +13,8 @@ class Mrsk::Commands::App < Mrsk::Commands::Base "--detach", "--restart unless-stopped", "--log-opt", "max-size=#{MAX_LOG_SIZE}", - "--name", service_with_version_and_destination_and_role, - "-e", "MRSK_CONTAINER_NAME=\"#{service_with_version_and_destination_and_role}\"", + "--name", container_name, + "-e", "MRSK_CONTAINER_NAME=\"#{container_name}\"", *role.env_args, *config.volume_args, *role.label_args, @@ -24,7 +24,7 @@ class Mrsk::Commands::App < Mrsk::Commands::Base end def start - docker :start, service_with_version_and_destination_and_role + docker :start, container_name end def stop(version: nil) @@ -59,7 +59,7 @@ class Mrsk::Commands::App < Mrsk::Commands::Base def execute_in_existing_container(*command, interactive: false) docker :exec, ("-it" if interactive), - service_with_version_and_destination_and_role, + container_name, *command end @@ -104,7 +104,7 @@ class Mrsk::Commands::App < Mrsk::Commands::Base def remove_container(version:) pipe \ - container_id_for(container_name: service_with_version_and_destination_and_role(version)), + container_id_for(container_name: container_name(version)), xargs(docker(:container, :rm)) end @@ -122,12 +122,12 @@ class Mrsk::Commands::App < Mrsk::Commands::Base private - def service_with_version_and_destination_and_role(version = nil) + def container_name(version = nil) [ config.service, role, config.destination, version || config.version ].compact.join("-") end def container_id_for_version(version) - container_id_for(container_name: service_with_version_and_destination_and_role(version)) + container_id_for(container_name: container_name(version)) end def filter_args diff --git a/lib/mrsk/commands/auditor.rb b/lib/mrsk/commands/auditor.rb index 9d6cf414..6915a521 100644 --- a/lib/mrsk/commands/auditor.rb +++ b/lib/mrsk/commands/auditor.rb @@ -32,26 +32,26 @@ class Mrsk::Commands::Auditor < Mrsk::Commands::Base end def tagged_record_line(line) - quote [recorded_at_tag, performer_tag, role_tag, line].compact.join(" ") + tagged_line recorded_at_tag, performer_tag, role_tag, line end def tagged_broadcast_line(line) - quote [performer_tag, role_tag, line].compact.join(" ") + tagged_line performer_tag, role_tag, line end - def role_tag - "[#{role}]" if role - end - - def performer_tag - "[#{`whoami`.strip}]" + def tagged_line(*tags_and_line) + "'#{tags_and_line.compact.join(" ")}'" end def recorded_at_tag "[#{Time.now.to_fs(:db)}]" end - def quote(tagged_line) - "'#{tagged_line}'" + def performer_tag + "[#{`whoami`.strip}]" + end + + def role_tag + "[#{role}]" if role end end diff --git a/lib/mrsk/configuration/accessory.rb b/lib/mrsk/configuration/accessory.rb index f1051423..73c8a7dc 100644 --- a/lib/mrsk/configuration/accessory.rb +++ b/lib/mrsk/configuration/accessory.rb @@ -1,5 +1,5 @@ class Mrsk::Configuration::Accessory - delegate :argumentize, :argumentize_env_with_secrets, to: Mrsk::Utils + delegate :argumentize, :argumentize_env_with_secrets, :optionize, to: Mrsk::Utils attr_accessor :name, :specifics @@ -67,6 +67,14 @@ class Mrsk::Configuration::Accessory argumentize "--volume", volumes end + def option_args + if args = specifics["options"] + optionize args + else + [] + end + end + private attr_accessor :config diff --git a/test/configuration/accessory_test.rb b/test/configuration/accessory_test.rb index 7062de37..fd070949 100644 --- a/test/configuration/accessory_test.rb +++ b/test/configuration/accessory_test.rb @@ -39,7 +39,11 @@ class ConfigurationAccessoryTest < ActiveSupport::TestCase }, "volumes" => [ "/var/lib/redis:/data" - ] + ], + "options" => { + "cpus" => 4, + "memory" => "2GB" + } } } } @@ -104,4 +108,8 @@ class ConfigurationAccessoryTest < ActiveSupport::TestCase test "directories" do assert_equal({"$PWD/app-mysql/data"=>"/var/lib/mysql"}, @config.accessory(:mysql).directories) end + + test "options" do + assert_equal ["--cpus", "\"4\"", "--memory", "\"2GB\""], @config.accessory(:redis).option_args + end end