Class: Gitlab::QA::Docker::Shellout

Inherits:
Object
  • Object
show all
Defined in:
lib/gitlab/qa/docker/shellout.rb

Constant Summary collapse

StatusError =
Class.new(StandardError)

Instance Method Summary collapse

Constructor Details

#initialize(command) ⇒ Shellout

Returns a new instance of Shellout.



9
10
11
12
13
14
# File 'lib/gitlab/qa/docker/shellout.rb', line 9

def initialize(command)
  @command = command
  @output = []

  puts "Docker shell command: `#{@command.mask_secrets}`"
end

Instance Method Details

#execute!Object

Raises:



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/gitlab/qa/docker/shellout.rb', line 16

def execute!
  raise StatusError, 'Command already executed' if @output.any?

  Open3.popen2e(@command.to_s) do |_in, out, wait|
    out.each do |line|
      @output.push(line)

      if block_given?
        yield line, wait
      else
        puts line
      end
    end

    if wait.value.exited? && wait.value.exitstatus.nonzero? # rubocop:disable Style/IfUnlessModifier
      raise StatusError, "Docker command `#{@command.mask_secrets}` failed!"
    end
  end

  @output.join.chomp
end