Module: Dory::DockerService
Instance Method Summary collapse
- #container_exists?(container_name = self.container_name) ⇒ Boolean
- #delete(container_name = self.container_name) ⇒ Object
- #handle_error(command_output) ⇒ Object
- #has_docker_client? ⇒ Boolean
- #ps(all: false) ⇒ Object
- #run_preconditions ⇒ Object
- #running?(container_name = self.container_name) ⇒ Boolean
- #start(handle_error: true) ⇒ Object
- #start_cmd ⇒ Object
- #stop(container_name = self.container_name) ⇒ Object
Instance Method Details
#container_exists?(container_name = self.container_name) ⇒ Boolean
46 47 48 |
# File 'lib/dory/docker_service.rb', line 46 def container_exists?(container_name = self.container_name) !!(self.ps(all: true) =~ /#{container_name}/) end |
#delete(container_name = self.container_name) ⇒ Object
69 70 71 72 73 74 75 |
# File 'lib/dory/docker_service.rb', line 69 def delete(container_name = self.container_name) if self.container_exists? self.stop if self.running? Sh.run_command("docker rm #{Shellwords.escape(container_name)}") end !self.container_exists? end |
#handle_error(command_output) ⇒ Object
10 11 12 13 |
# File 'lib/dory/docker_service.rb', line 10 def handle_error(command_output) # Override to provide error handling return false end |
#has_docker_client? ⇒ Boolean
60 61 62 |
# File 'lib/dory/docker_service.rb', line 60 def has_docker_client? Sh.run_command('which docker').success? end |
#ps(all: false) ⇒ Object
50 51 52 53 54 55 56 57 58 |
# File 'lib/dory/docker_service.rb', line 50 def ps(all: false) cmd = "docker ps#{all ? ' -a' : ''}" ret = Sh.run_command(cmd) if ret.success? return ret.stdout else raise RuntimeError.new("Failure running command '#{cmd}'") end end |
#run_preconditions ⇒ Object
5 6 7 8 |
# File 'lib/dory/docker_service.rb', line 5 def run_preconditions # Override if preconditions are needed return true end |
#running?(container_name = self.container_name) ⇒ Boolean
42 43 44 |
# File 'lib/dory/docker_service.rb', line 42 def running?(container_name = self.container_name) !!(self.ps =~ /#{container_name}/) end |
#start(handle_error: true) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/dory/docker_service.rb', line 15 def start(handle_error: true) if self.running? if Dory::Config.debug? puts "[DEBUG] Container '#{self.container_name}' is already running. Doing nothing" end else self.run_preconditions if self.container_exists? puts "[DEBUG] Container '#{self.container_name}' exists. Deleting" if Dory::Config.debug? self.delete end if Dory::Config.debug? puts "[DEBUG] '#{self.container_name} does not exist. Creating/starting " \ "'#{self.container_name}' with '#{self.run_command}'" end status = Sh.run_command(self.run_command) unless status.success? if !handle_error || !self.handle_error(status) raise RuntimeError.new( "Failed to run #{self.container_name}. Command #{self.run_command} failed" ) end end end self.running? end |
#start_cmd ⇒ Object
77 78 79 |
# File 'lib/dory/docker_service.rb', line 77 def start_cmd "docker start #{Shellwords.escape(self.container_name)}" end |
#stop(container_name = self.container_name) ⇒ Object
64 65 66 67 |
# File 'lib/dory/docker_service.rb', line 64 def stop(container_name = self.container_name) Sh.run_command("docker kill #{Shellwords.escape(container_name)}") if self.running? !self.running? end |