Sha256: 38776e43ff6f56ea279b49f0704e969c3c2a4fc9bea76b54d0e6304cfa22fde2

Contents?: true

Size: 1.61 KB

Versions: 11

Compression:

Stored size: 1.61 KB

Contents

module Beaker
  module Options
    #A set of functions to parse hosts files
    module HostsFileParser

      # Read the contents of the hosts.cfg into an OptionsHash, merge the 'CONFIG' section into the OptionsHash, return OptionsHash
      # @param [String] hosts_file_path The path to the hosts file
      #
      # @example
      #     hosts_hash = HostsFileParser.parse_hosts_file('sample.cfg')
      #     hosts_hash == {:HOSTS=>{:"pe-ubuntu-lucid"=>{:roles=>["agent", "dashboard", "database", "master"], ... }
      #
      # @return [OptionsHash] The contents of the hosts file as an OptionsHash
      # @raise [ArgumentError] Raises if hosts_file_path is not a path to a file, or is not a valid YAML file
      def self.parse_hosts_file(hosts_file_path)
        hosts_file_path = File.expand_path(hosts_file_path)
        unless File.exists?(hosts_file_path)
          raise ArgumentError, "Required host file '#{hosts_file_path}' does not exist!"
        end
        host_options = Beaker::Options::OptionsHash.new
        begin
          host_options = host_options.merge(YAML.load_file(hosts_file_path))
        rescue Psych::SyntaxError => e
          raise ArgumentError, "#{hosts_file_path} is not a valid YAML file\n\t#{e}"
        end

        # Make sure the roles array is present for all hosts
        host_options['HOSTS'] ||= {}
        host_options['HOSTS'].each_key do |host|
          host_options['HOSTS'][host]['roles'] ||= []
        end
        if host_options.has_key?('CONFIG')
          host_options = host_options.merge(host_options.delete('CONFIG'))
        end
        host_options
      end

    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
beaker-1.16.0 lib/beaker/options/hosts_file_parser.rb
beaker-1.15.0 lib/beaker/options/hosts_file_parser.rb
beaker-1.14.1 lib/beaker/options/hosts_file_parser.rb
beaker-1.14.0 lib/beaker/options/hosts_file_parser.rb
beaker-1.13.1 lib/beaker/options/hosts_file_parser.rb
beaker-1.13.0 lib/beaker/options/hosts_file_parser.rb
beaker-1.12.2 lib/beaker/options/hosts_file_parser.rb
beaker-1.12.1 lib/beaker/options/hosts_file_parser.rb
beaker-1.12.0 lib/beaker/options/hosts_file_parser.rb
beaker-1.11.2 lib/beaker/options/hosts_file_parser.rb
beaker-1.11.1 lib/beaker/options/hosts_file_parser.rb