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'))