Class: Mrsk::Commands::App
Constant Summary
Constants inherited from Base
Base::DOCKER_HEALTH_LOG_FORMAT, Base::DOCKER_HEALTH_STATUS_FORMAT
Instance Attribute Summary collapse
-
#role ⇒ Object
readonly
Returns the value of attribute role.
Attributes inherited from Base
Instance Method Summary collapse
- #container_id_for_version(version, only_running: false) ⇒ Object
- #current_running_container_id ⇒ Object
- #current_running_version ⇒ Object
- #execute_in_existing_container(*command, interactive: false) ⇒ Object
- #execute_in_existing_container_over_ssh(*command, host:) ⇒ Object
- #execute_in_new_container(*command, interactive: false) ⇒ Object
- #execute_in_new_container_over_ssh(*command, host:) ⇒ Object
- #follow_logs(host:, grep: nil) ⇒ Object
- #info ⇒ Object
-
#initialize(config, role: nil) ⇒ App
constructor
A new instance of App.
- #list_container_names ⇒ Object
- #list_containers ⇒ Object
- #list_images ⇒ Object
- #list_versions(*docker_args, status: nil) ⇒ Object
- #logs(since: nil, lines: nil, grep: nil) ⇒ Object
- #remove_container(version:) ⇒ Object
- #remove_containers ⇒ Object
- #remove_images ⇒ Object
- #rename_container(version:, new_version:) ⇒ Object
- #run ⇒ Object
- #start ⇒ Object
- #start_or_run ⇒ Object
- #status(version:) ⇒ Object
- #stop(version: nil) ⇒ Object
- #tag_current_as_latest ⇒ Object
Methods inherited from Base
#container_id_for, #run_over_ssh
Constructor Details
#initialize(config, role: nil) ⇒ App
Returns a new instance of App.
4 5 6 7 |
# File 'lib/mrsk/commands/app.rb', line 4 def initialize(config, role: nil) super(config) @role = role end |
Instance Attribute Details
#role ⇒ Object (readonly)
Returns the value of attribute role.
2 3 4 |
# File 'lib/mrsk/commands/app.rb', line 2 def role @role end |
Instance Method Details
#container_id_for_version(version, only_running: false) ⇒ Object
98 99 100 |
# File 'lib/mrsk/commands/app.rb', line 98 def container_id_for_version(version, only_running: false) container_id_for(container_name: container_name(version), only_running: only_running) end |
#current_running_container_id ⇒ Object
94 95 96 |
# File 'lib/mrsk/commands/app.rb', line 94 def current_running_container_id docker :ps, "--quiet", *filter_args(status: :running), "--latest" end |
#current_running_version ⇒ Object
102 103 104 |
# File 'lib/mrsk/commands/app.rb', line 102 def current_running_version list_versions("--latest", status: :running) end |
#execute_in_existing_container(*command, interactive: false) ⇒ Object
68 69 70 71 72 73 |
# File 'lib/mrsk/commands/app.rb', line 68 def execute_in_existing_container(*command, interactive: false) docker :exec, ("-it" if interactive), container_name, *command end |
#execute_in_existing_container_over_ssh(*command, host:) ⇒ Object
85 86 87 |
# File 'lib/mrsk/commands/app.rb', line 85 def execute_in_existing_container_over_ssh(*command, host:) run_over_ssh execute_in_existing_container(*command, interactive: true), host: host end |
#execute_in_new_container(*command, interactive: false) ⇒ Object
75 76 77 78 79 80 81 82 83 |
# File 'lib/mrsk/commands/app.rb', line 75 def execute_in_new_container(*command, interactive: false) docker :run, ("-it" if interactive), "--rm", *config.env_args, *config.volume_args, config.absolute_image, *command end |
#execute_in_new_container_over_ssh(*command, host:) ⇒ Object
89 90 91 |
# File 'lib/mrsk/commands/app.rb', line 89 def execute_in_new_container_over_ssh(*command, host:) run_over_ssh execute_in_new_container(*command, interactive: true), host: host end |
#follow_logs(host:, grep: nil) ⇒ Object
57 58 59 60 61 62 63 64 65 |
# File 'lib/mrsk/commands/app.rb', line 57 def follow_logs(host:, grep: nil) run_over_ssh \ pipe( current_running_container_id, "xargs docker logs --timestamps --tail 10 --follow 2>&1", (%(grep "#{grep}") if grep) ), host: host end |
#info ⇒ Object
45 46 47 |
# File 'lib/mrsk/commands/app.rb', line 45 def info docker :ps, *filter_args end |
#list_container_names ⇒ Object
117 118 119 |
# File 'lib/mrsk/commands/app.rb', line 117 def list_container_names [ *list_containers, "--format", "'{{ .Names }}'" ] end |
#list_containers ⇒ Object
113 114 115 |
# File 'lib/mrsk/commands/app.rb', line 113 def list_containers docker :container, :ls, "--all", *filter_args end |
#list_images ⇒ Object
135 136 137 |
# File 'lib/mrsk/commands/app.rb', line 135 def list_images docker :image, :ls, config.repository end |
#list_versions(*docker_args, status: nil) ⇒ Object
106 107 108 109 110 111 |
# File 'lib/mrsk/commands/app.rb', line 106 def list_versions(*docker_args, status: nil) pipe \ docker(:ps, *filter_args(status: status), *docker_args, "--format", '"{{.Names}}"'), %(grep -oE "\\-[^-]+$"), # Extract SHA from "service-role-dest-SHA" %(cut -c 2-) end |
#logs(since: nil, lines: nil, grep: nil) ⇒ Object
50 51 52 53 54 55 |
# File 'lib/mrsk/commands/app.rb', line 50 def logs(since: nil, lines: nil, grep: nil) pipe \ current_running_container_id, "xargs docker logs#{" --since #{since}" if since}#{" --tail #{lines}" if lines} 2>&1", ("grep '#{grep}'" if grep) end |
#remove_container(version:) ⇒ Object
121 122 123 124 125 |
# File 'lib/mrsk/commands/app.rb', line 121 def remove_container(version:) pipe \ container_id_for(container_name: container_name(version)), xargs(docker(:container, :rm)) end |
#remove_containers ⇒ Object
131 132 133 |
# File 'lib/mrsk/commands/app.rb', line 131 def remove_containers docker :container, :prune, "--force", *filter_args end |
#remove_images ⇒ Object
139 140 141 |
# File 'lib/mrsk/commands/app.rb', line 139 def remove_images docker :image, :prune, "--all", "--force", *filter_args end |
#rename_container(version:, new_version:) ⇒ Object
127 128 129 |
# File 'lib/mrsk/commands/app.rb', line 127 def rename_container(version:, new_version:) docker :rename, container_name(version), container_name(new_version) end |
#run ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/mrsk/commands/app.rb', line 13 def run role = config.role(self.role) docker :run, "--detach", "--restart unless-stopped", "--name", container_name, "-e", "MRSK_CONTAINER_NAME=\"#{container_name}\"", *role.env_args, *role.health_check_args, *config.logging_args, *config.volume_args, *role.label_args, *role.option_args, config.absolute_image, role.cmd end |
#start ⇒ Object
31 32 33 |
# File 'lib/mrsk/commands/app.rb', line 31 def start docker :start, container_name end |
#start_or_run ⇒ Object
9 10 11 |
# File 'lib/mrsk/commands/app.rb', line 9 def start_or_run combine start, run, by: "||" end |
#status(version:) ⇒ Object
35 36 37 |
# File 'lib/mrsk/commands/app.rb', line 35 def status(version:) pipe container_id_for_version(version), xargs(docker(:inspect, "--format", DOCKER_HEALTH_STATUS_FORMAT)) end |
#stop(version: nil) ⇒ Object
39 40 41 42 43 |
# File 'lib/mrsk/commands/app.rb', line 39 def stop(version: nil) pipe \ version ? container_id_for_version(version) : current_running_container_id, xargs(config.stop_wait_time ? docker(:stop, "-t", config.stop_wait_time) : docker(:stop)) end |
#tag_current_as_latest ⇒ Object
143 144 145 |
# File 'lib/mrsk/commands/app.rb', line 143 def tag_current_as_latest docker :tag, config.absolute_image, config.latest_image end |