Class: Mrsk::Commands::App
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) ⇒ Object
- #current_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
- #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
- #stop(version: nil) ⇒ 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) ⇒ Object
89 90 91 |
# File 'lib/mrsk/commands/app.rb', line 89 def container_id_for_version(version) container_id_for(container_name: container_name(version)) end |
#current_container_id ⇒ Object
85 86 87 |
# File 'lib/mrsk/commands/app.rb', line 85 def current_container_id docker :ps, "--quiet", *filter_args end |
#current_running_version ⇒ Object
93 94 95 96 97 98 99 |
# File 'lib/mrsk/commands/app.rb', line 93 def current_running_version # FIXME: Find more graceful way to extract the version from "app-version" than using sed and tail! pipe \ docker(:ps, *filter_args, "--format", '"{{.Names}}"'), %(sed 's/-/\\n/g'), "tail -n 1" end |
#execute_in_existing_container(*command, interactive: false) ⇒ Object
59 60 61 62 63 64 |
# File 'lib/mrsk/commands/app.rb', line 59 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
76 77 78 |
# File 'lib/mrsk/commands/app.rb', line 76 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
66 67 68 69 70 71 72 73 74 |
# File 'lib/mrsk/commands/app.rb', line 66 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
80 81 82 |
# File 'lib/mrsk/commands/app.rb', line 80 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
48 49 50 51 52 53 54 55 56 |
# File 'lib/mrsk/commands/app.rb', line 48 def follow_logs(host:, grep: nil) run_over_ssh \ pipe( current_container_id, "xargs docker logs --timestamps --tail 10 --follow 2>&1", (%(grep "#{grep}") if grep) ), host: host end |
#info ⇒ Object
36 37 38 |
# File 'lib/mrsk/commands/app.rb', line 36 def info docker :ps, *filter_args end |
#list_container_names ⇒ Object
105 106 107 |
# File 'lib/mrsk/commands/app.rb', line 105 def list_container_names [ *list_containers, "--format", "'{{ .Names }}'" ] end |
#list_containers ⇒ Object
101 102 103 |
# File 'lib/mrsk/commands/app.rb', line 101 def list_containers docker :container, :ls, "--all", *filter_args end |
#list_images ⇒ Object
123 124 125 |
# File 'lib/mrsk/commands/app.rb', line 123 def list_images docker :image, :ls, config.repository end |
#logs(since: nil, lines: nil, grep: nil) ⇒ Object
41 42 43 44 45 46 |
# File 'lib/mrsk/commands/app.rb', line 41 def logs(since: nil, lines: nil, grep: nil) pipe \ current_container_id, "xargs docker logs#{" --since #{since}" if since}#{" --tail #{lines}" if lines} 2>&1", ("grep '#{grep}'" if grep) end |
#remove_container(version:) ⇒ Object
109 110 111 112 113 |
# File 'lib/mrsk/commands/app.rb', line 109 def remove_container(version:) pipe \ container_id_for(container_name: container_name(version)), xargs(docker(:container, :rm)) end |
#remove_containers ⇒ Object
119 120 121 |
# File 'lib/mrsk/commands/app.rb', line 119 def remove_containers docker :container, :prune, "--force", *filter_args end |
#remove_images ⇒ Object
127 128 129 |
# File 'lib/mrsk/commands/app.rb', line 127 def remove_images docker :image, :prune, "--all", "--force", *filter_args end |
#rename_container(version:, new_version:) ⇒ Object
115 116 117 |
# File 'lib/mrsk/commands/app.rb', line 115 def rename_container(version:, new_version:) docker :rename, container_name(version), container_name(new_version) end |
#run ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/mrsk/commands/app.rb', line 9 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, *config.logging_args, *config.volume_args, *role.label_args, *role.option_args, config.absolute_image, role.cmd end |
#start ⇒ Object
26 27 28 |
# File 'lib/mrsk/commands/app.rb', line 26 def start docker :start, container_name end |
#stop(version: nil) ⇒ Object
30 31 32 33 34 |
# File 'lib/mrsk/commands/app.rb', line 30 def stop(version: nil) pipe \ version ? container_id_for_version(version) : current_container_id, xargs(config.stop_wait_time ? docker(:stop, "-t", config.stop_wait_time) : docker(:stop)) end |