class Kontena::Cli::Services::ExecCommand

Public Instance Methods

execute() click to toggle source
# File lib/kontena/cli/services/exec_command.rb, line 39
def execute
  exit_with_error "the input device is not a TTY" if tty? && !STDIN.tty?
  exit_with_error "--interactive cannot be used with --all" if all? && interactive?

  service_containers = client.get("services/#{parse_service_id(name)}/containers")['containers']
  service_containers.sort_by! { |container| container['instance_number'] }
  running_containers = service_containers.select{|container| container['status'] == 'running' }

  exit_with_error "Service #{name} does not have any running containers" if running_containers.empty?

  if all?
    ret = true
    service_containers.each do |container|
      if container['status'] == 'running'
        if !execute_container(container)
          ret = false
        end
      else
        warning "Service #{name} container #{container['name']} is #{container['status']}, skipping"
      end
    end
    return ret
  elsif instance
    if !(container = service_containers.find{|c| c['instance_number'] == instance})
      exit_with_error "Service #{name} does not have container instance #{instance}"
    elsif container['status'] != 'running'
      exit_with_error "Service #{name} container #{container['name']} is not running, it is #{container['status']}"
    else
      execute_container(container)
    end
  else
    execute_container(running_containers.first)
  end
end
execute_container(container) click to toggle source

@param [Hash] container @raise [SystemExit] if exec exits with non-zero status, and not –skip @return [true] exit exit status zero @return [false] exit exit status non-zero and –skip

# File lib/kontena/cli/services/exec_command.rb, line 88
def execute_container(container)
  maybe_spinner "Executing command on #{container['name']}" do
    exit_status = container_exec(container['id'], self.cmd_list,
      interactive: interactive?,
      shell: shell?,
      tty: tty?,
    )
    raise ExecExit.new(exit_status) unless exit_status.zero?
  end
rescue ExecExit => exc
  if skip?
    return false
  else
    exit exc.exit_status
  end
else
  return true
end
maybe_spinner(msg) { || ... } click to toggle source

Run block with spinner by default if –all, or when using –verbose. Do not use spinner if –silent.

# File lib/kontena/cli/services/exec_command.rb, line 76
def maybe_spinner(msg, &block)
  if (all? || verbose?) && !silent?
    spinner(msg, &block)
  else
    yield
  end
end