ManageIQ/manageiq-content

View on GitHub
content/automate/ManageIQ/AutomationManagement/AnsibleTower/Operations/Methods.class/__methods__/available_credentials.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
#
# Description: provide the dynamic list content from available credentials
# for Ansible Provider
#
module ManageIQ
  module Automate
    module AutomationManagement
      module AnsibleTower
        module Operations
          class AvailableCredentials
            AUTH_CLASS = "ManageIQ_Providers_AutomationManager_Authentication".freeze
            EMBEDDED_ANSIBLE_CLASS = "ManageIQ_Providers_EmbeddedAnsible_AutomationManager".freeze
            def initialize(handle = $evm)
              @handle = handle
            end

            def main
              fill_dialog_field(fetch_list_data)
            end

            private

            def provider
              # for provisioning we use     service_template
              # for reconfig and retire use service
              # Or use the embedded_ansible_provider
              service = @handle.root['service_template'] || @handle.root['service']
              service.try(:playbook, 'Provision').try(:manager) || embedded_ansible_provider
            end

            def embedded_ansible_provider
              @handle.vmdb(EMBEDDED_ANSIBLE_CLASS).first if @handle.inputs.fetch('embedded_ansible', false)
            end

            def credentials
              @handle.vmdb(AUTH_CLASS).where("resource_id = ? AND type = ?",
                                             provider.try(:id),
                                             @handle.inputs['credential_type'])
            end

            def fetch_list_data
              credential_list = Hash[*credentials.pluck(:id, :name).flatten]
              @handle.log(:debug, "Number of credentials found #{credential_list.count}")
              {nil => '<Default>'}.merge(credential_list)
            end

            def fill_dialog_field(list)
              dialog_hash = {
                'sort_by'       => "description",
                'data_type'     => "string",
                'required'      => false,
                'sort_order'    => "ascending",
                'values'        => list,
                'default_value' => nil
              }

              dialog_hash.each { |key, value| @handle.object[key] = value }
            end
          end
        end
      end
    end
  end
end

ManageIQ::Automate::AutomationManagement::AnsibleTower::Operations::AvailableCredentials.new.main