diff --git a/plugins/providers/docker/command/logs.rb b/plugins/providers/docker/command/logs.rb index 6757a1bbb..0a60184ad 100644 --- a/plugins/providers/docker/command/logs.rb +++ b/plugins/providers/docker/command/logs.rb @@ -30,58 +30,66 @@ module VagrantPlugins argv = parse_options(opts) return if !argv - output_options = {} - output_options[:prefix] = false if !options[:prefix] - # TODO: exit with exit status != 0 if all machines are unknown # or not created. # Go through each machine and execute the client on it - with_target_vms(argv) do |machine| - if machine.provider_name != :docker - machine.ui.output(I18n.t("docker_provider.not_docker_provder")) - next - end + @env.batch do |batch| + with_target_vms(argv) do |machine| + if machine.provider_name != :docker + machine.ui.output(I18n.t("docker_provider.not_docker_provder")) + next + end - state = machine.state - if state == :host_state_unknown - machine.ui.output(I18n.t("docker_provider.logs_host_state_unknown")) - next - elsif state == :not_created - machine.ui.output(I18n.t("docker_provider.not_created_skip")) - next - end + state = machine.state + if state == :host_state_unknown + machine.ui.output(I18n.t("docker_provider.logs_host_state_unknown")) + next + elsif state == :not_created + machine.ui.output(I18n.t("docker_provider.not_created_skip")) + next + end - command = ["docker", "logs"] - command << "--follow" if options[:follow] - command << machine.id - - data_acc = "" - machine.provider.driver.execute(*command) do |type, data| - # Accumulate the data so we only output lines at a time - data_acc << data - - # If we have a newline, then output all the lines we have so far - if data_acc.include?("\n") - lines = data_acc.split("\n") - - if !data_acc.end_with?("\n") - data_acc = lines.pop.chomp - else - data_acc = "" - end - - lines.each do |line| - line = " " if line == "" - machine.ui.output(line, **output_options) - end + batch.custom(machine) do |m| + execute_single(m, options) end end - - # Output any remaining data - machine.ui.output(data_acc, **output_options) if !data_acc.empty? end end + + def execute_single(machine, options) + command = ["docker", "logs"] + command << "--follow" if options[:follow] + command << machine.id + + output_options = {} + output_options[:prefix] = false if !options[:prefix] + + data_acc = "" + machine.provider.driver.execute(*command) do |type, data| + # Accumulate the data so we only output lines at a time + data_acc << data + + # If we have a newline, then output all the lines we have so far + if data_acc.include?("\n") + lines = data_acc.split("\n") + + if !data_acc.end_with?("\n") + data_acc = lines.pop.chomp + else + data_acc = "" + end + + lines.each do |line| + line = " " if line == "" + machine.ui.output(line, **output_options) + end + end + end + + # Output any remaining data + machine.ui.output(data_acc, **output_options) if !data_acc.empty? + end end end end