Sha256: 075df47a15ac05e864bf4e2b87e22c14ada2326fabecf899ea802402087efb6e

Contents?: true

Size: 1.81 KB

Versions: 5

Compression:

Stored size: 1.81 KB

Contents

module Actions
  module ForemanAnsible
    # Actions that initiaztes the playbook run for roles assigned to
    # the host. It doest that either locally or via a proxy when available.
    class PlayHostRoles < Actions::EntryAction
      include ::Actions::Helpers::WithContinuousOutput
      include ::Actions::Helpers::WithDelegatedAction

      def plan(host, proxy_selector = ::ForemanAnsible::ProxySelector.new)
        input[:host] = { :id => host.id, :name => host.fqdn }
        proxy = proxy_selector.determine_proxy(host)
        inventory_creator = ::ForemanAnsible::InventoryCreator.new([host])
        role_names = host.all_ansible_roles.map(&:name)
        playbook_creator = ::ForemanAnsible::PlaybookCreator.new(role_names)
        plan_delegated_action(proxy, ::ForemanAnsibleCore::Actions::RunPlaybook,
                              :inventory => inventory_creator.to_hash.to_json,
                              :playbook => playbook_creator.roles_playbook)
        plan_self
      end

      def finalize
        if delegated_output[:exit_status].to_s != '0'
          error! _('Playbook execution failed')
        end
      end

      def rescue_strategy
        ::Dynflow::Action::Rescue::Fail
      end

      def humanized_input
        _('on host %{name}') % { :name => input.fetch(:host, {})[:name] }
      end

      def humanized_name
        _('Play Ansible roles')
      end

      def humanized_output
        continuous_output.humanize
      end

      def continuous_output_providers
        super << self
      end

      def fill_continuous_output(continuous_output)
        delegated_output.fetch('result', []).each do |raw_output|
          continuous_output.add_raw_output(raw_output)
        end
      rescue => e
        continuous_output.add_exception(_('Error loading data from proxy'), e)
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
foreman_ansible-1.3.1 app/lib/actions/foreman_ansible/play_host_roles.rb
foreman_ansible-1.3.0 app/lib/actions/foreman_ansible/play_host_roles.rb
foreman_ansible-1.2.1 app/lib/actions/foreman_ansible/play_host_roles.rb
foreman_ansible-1.2 app/lib/actions/foreman_ansible/play_host_roles.rb
foreman_ansible-1.1 app/lib/actions/foreman_ansible/play_host_roles.rb