Class: Mrsk::Commands::App
Constant Summary collapse
- ACTIVE_DOCKER_STATUSES =
[ :running, :restarting ]
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, statuses: 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(hostname: nil) ⇒ Object
- #start ⇒ Object
- #start_or_run(hostname: nil) ⇒ 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.
6 7 8 9 |
# File 'lib/mrsk/commands/app.rb', line 6 def initialize(config, role: nil) super(config) @role = role end |
Instance Attribute Details
#role ⇒ Object (readonly)
Returns the value of attribute role.
4 5 6 |
# File 'lib/mrsk/commands/app.rb', line 4 def role @role end |
Instance Method Details
#container_id_for_version(version, only_running: false) ⇒ Object
101 102 103 |
# File 'lib/mrsk/commands/app.rb', line 101 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
97 98 99 |
# File 'lib/mrsk/commands/app.rb', line 97 def current_running_container_id docker :ps, "--quiet", *filter_args(statuses: ACTIVE_DOCKER_STATUSES), "--latest" end |
#current_running_version ⇒ Object
105 106 107 |
# File 'lib/mrsk/commands/app.rb', line 105 def current_running_version list_versions("--latest", statuses: ACTIVE_DOCKER_STATUSES) end |
#execute_in_existing_container(*command, interactive: false) ⇒ Object
71 72 73 74 75 76 |
# File 'lib/mrsk/commands/app.rb', line 71 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
88 89 90 |
# File 'lib/mrsk/commands/app.rb', line 88 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
78 79 80 81 82 83 84 85 86 |
# File 'lib/mrsk/commands/app.rb', line 78 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
92 93 94 |
# File 'lib/mrsk/commands/app.rb', line 92 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
60 61 62 63 64 65 66 67 68 |
# File 'lib/mrsk/commands/app.rb', line 60 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
48 49 50 |
# File 'lib/mrsk/commands/app.rb', line 48 def info docker :ps, *filter_args end |
#list_container_names ⇒ Object
120 121 122 |
# File 'lib/mrsk/commands/app.rb', line 120 def list_container_names [ *list_containers, "--format", "'{{ .Names }}'" ] end |
#list_containers ⇒ Object
116 117 118 |
# File 'lib/mrsk/commands/app.rb', line 116 def list_containers docker :container, :ls, "--all", *filter_args end |
#list_images ⇒ Object
138 139 140 |
# File 'lib/mrsk/commands/app.rb', line 138 def list_images docker :image, :ls, config.repository end |
#list_versions(*docker_args, statuses: nil) ⇒ Object
109 110 111 112 113 114 |
# File 'lib/mrsk/commands/app.rb', line 109 def list_versions(*docker_args, statuses: nil) pipe \ docker(:ps, *filter_args(statuses: statuses), *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
53 54 55 56 57 58 |
# File 'lib/mrsk/commands/app.rb', line 53 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
124 125 126 127 128 |
# File 'lib/mrsk/commands/app.rb', line 124 def remove_container(version:) pipe \ container_id_for(container_name: container_name(version)), xargs(docker(:container, :rm)) end |
#remove_containers ⇒ Object
134 135 136 |
# File 'lib/mrsk/commands/app.rb', line 134 def remove_containers docker :container, :prune, "--force", *filter_args end |
#remove_images ⇒ Object
142 143 144 |
# File 'lib/mrsk/commands/app.rb', line 142 def remove_images docker :image, :prune, "--all", "--force", *filter_args end |
#rename_container(version:, new_version:) ⇒ Object
130 131 132 |
# File 'lib/mrsk/commands/app.rb', line 130 def rename_container(version:, new_version:) docker :rename, container_name(version), container_name(new_version) end |
#run(hostname: nil) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/mrsk/commands/app.rb', line 15 def run(hostname: nil) role = config.role(self.role) docker :run, "--detach", "--restart unless-stopped", "--name", container_name, *(["--hostname", hostname] if hostname), "-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
34 35 36 |
# File 'lib/mrsk/commands/app.rb', line 34 def start docker :start, container_name end |
#start_or_run(hostname: nil) ⇒ Object
11 12 13 |
# File 'lib/mrsk/commands/app.rb', line 11 def start_or_run(hostname: nil) combine start, run(hostname: hostname), by: "||" end |
#status(version:) ⇒ Object
38 39 40 |
# File 'lib/mrsk/commands/app.rb', line 38 def status(version:) pipe container_id_for_version(version), xargs(docker(:inspect, "--format", DOCKER_HEALTH_STATUS_FORMAT)) end |
#stop(version: nil) ⇒ Object
42 43 44 45 46 |
# File 'lib/mrsk/commands/app.rb', line 42 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
146 147 148 |
# File 'lib/mrsk/commands/app.rb', line 146 def tag_current_as_latest docker :tag, config.absolute_image, config.latest_image end |