Sha256: ec47e5dc69f07824f9b2ea0e297e5f4a210c6dc214b57299d73c66ff6a29a452

Contents?: true

Size: 1.3 KB

Versions: 30

Compression:

Stored size: 1.3 KB

Contents

# frozen_string_literal: true

require 'bolt/task'
require 'bolt/transport/base'

module Bolt
  module Transport
    class Remote < Base
      # TODO: this should have access to inventory so target doesn't have to
      def initialize(executor)
        super()

        @executor = executor
      end

      def get_proxy(target)
        inventory = target.inventory
        raise "Target was created without inventory? Not get_targets?" unless inventory
        proxy = inventory.get_targets(target.options['run-on'] || 'localhost').first

        if proxy.transport == 'remote'
          msg = "#{proxy.name} is not a valid run-on target for #{target.name} since is also remote."
          raise Bolt::Error.new(msg, 'bolt/invalid-remote-target')
        end
        proxy
      end

      # Cannot batch because arugments differ
      def run_task(target, task, arguments, options = {})
        proxy_target = get_proxy(target)
        transport = @executor.transport(proxy_target.transport)
        arguments = arguments.merge('_target' => target.to_h.reject { |_, v| v.nil? })

        remote_task = task.remote_instance

        result = transport.run_task(proxy_target, remote_task, arguments, options)
        Bolt::Result.new(target, value: result.value, action: 'task', object: task.name)
      end
    end
  end
end

Version data entries

30 entries across 30 versions & 1 rubygems

Version Path
bolt-2.32.0 lib/bolt/transport/remote.rb
bolt-2.31.0 lib/bolt/transport/remote.rb
bolt-2.30.0 lib/bolt/transport/remote.rb
bolt-2.29.0 lib/bolt/transport/remote.rb
bolt-2.28.0 lib/bolt/transport/remote.rb
bolt-2.27.0 lib/bolt/transport/remote.rb
bolt-2.26.0 lib/bolt/transport/remote.rb
bolt-2.25.0 lib/bolt/transport/remote.rb
bolt-2.24.1 lib/bolt/transport/remote.rb
bolt-2.24.0 lib/bolt/transport/remote.rb
bolt-2.23.0 lib/bolt/transport/remote.rb
bolt-2.22.0 lib/bolt/transport/remote.rb
bolt-2.21.0 lib/bolt/transport/remote.rb
bolt-2.20.0 lib/bolt/transport/remote.rb
bolt-2.19.0 lib/bolt/transport/remote.rb
bolt-2.18.0 lib/bolt/transport/remote.rb
bolt-2.17.0 lib/bolt/transport/remote.rb
bolt-2.16.0 lib/bolt/transport/remote.rb
bolt-2.15.0 lib/bolt/transport/remote.rb
bolt-2.14.0 lib/bolt/transport/remote.rb