module Inventory

Public Class Methods

inventory_to_platform(data) click to toggle source
# File lib/serverspec-runner/ansible/inventory.rb, line 2
def self.inventory_to_platform(data)
  platform = {}

  data.each do |k, v|
    v.each do |gk, gv|
      if gk == 'hosts'
        if gv.kind_of?(Hash)
          gv.each do |hk, hv|
            platform[hk.to_sym] = unless hv.nil?
                             convert_ssh_opt(v['vars']).merge(convert_ssh_opt(hv))
                           else
                             convert_ssh_opt(v['vars'])
                           end
          end
        elsif gv.kind_of?(Array)
          gv.each do |h|
            platform[h.to_sym] = convert_ssh_opt(v['vars'])
          end
        end
      end
    end
  end

  platform
end

Private Class Methods

convert_ssh_opt(src) click to toggle source
# File lib/serverspec-runner/ansible/inventory.rb, line 30
def self.convert_ssh_opt(src)
  serverspec_opt = {}
  serverspec_opt[:ssh_opts] = {}
  src.each do |k, v|
    case k
    when 'ansible_host'
      serverspec_opt[:host] = v
    when 'ansible_user'
      serverspec_opt[:ssh_opts][:user] = v
    when 'ansible_port'
      serverspec_opt[:ssh_opts][:port] = v
    when 'ansible_ssh_private_key_file'
      serverspec_opt[:ssh_opts][:keys] = Array(v)
    when 'ansible_ssh_pass'
      serverspec_opt[:ssh_opts][:password] = v
    when 'ansible_ssh_common_args'
      if v.include?('StrictHostKeyChecking=no')
        serverspec_opt[:ssh_opts][:verify_host_key] = false
      elsif v.include?('UserKnownHostsFile=/dev/null')
        serverspec_opt[:ssh_opts][:user_known_hosts_file] = '/dev/null'
      end
    end
  end

  serverspec_opt
end