lib/beaker/options/hosts_file_parser.rb in beaker-1.16.0 vs lib/beaker/options/hosts_file_parser.rb in beaker-1.17.0

- old
+ new

@@ -10,23 +10,26 @@ # 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) + def self.parse_hosts_file(hosts_file_path = nil) + host_options = Beaker::Options::OptionsHash.new + host_options['HOSTS'] ||= {} + unless hosts_file_path + return host_options + end 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!" + raise ArgumentError, "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'))