def loadconfig(configfile)
set_config_defaults(configfile)
if File.exists?(configfile)
File.readlines(configfile).each do |line|
line.gsub!(/\s*$/, "")
unless line =~ /^#|^$/
if (line =~ /(.+?)\s*=\s*(.+)/)
key = $1
val = $2
case key
when "registration"
@registration = val.capitalize
when "registration_collective"
@registration_collective = val
when "registerinterval"
@registerinterval = val.to_i
when "collectives"
@collectives = val.split(",").map {|c| c.strip}
when "main_collective"
@main_collective = val
when "logfile"
@logfile = val
when "keeplogs"
@keeplogs = val.to_i
when "max_log_size"
@max_log_size = val.to_i
when "loglevel"
@loglevel = val
when "logfacility"
@logfacility = val
when "libdir"
paths = val.split(File::PATH_SEPARATOR)
paths.each do |path|
raise("libdir paths should be absolute paths but '%s' is relative" % path) unless Util.absolute_path?(path)
@libdir << path
unless $LOAD_PATH.include?(path)
$LOAD_PATH << path
end
end
when "identity"
@identity = val
when "direct_addressing"
@direct_addressing = false unless val =~ /^1|y/i
when "direct_addressing_threshold"
@direct_addressing_threshold = val.to_i
when "color"
val =~ /^1|y/i ? @color = true : @color = false
when "daemonize"
val =~ /^1|y/i ? @daemonize = true : @daemonize = false
when "securityprovider"
@securityprovider = val.capitalize
when "factsource"
@factsource = val.capitalize
when "connector"
@connector = val.capitalize
when "classesfile"
@classesfile = val
when /^plugin.(.+)$/
@pluginconf[$1] = val
when "rpcaudit"
val =~ /^1|y/i ? @rpcaudit = true : @rpcaudit = false
when "rpcauditprovider"
@rpcauditprovider = val.capitalize
when "rpcauthorization"
val =~ /^1|y/i ? @rpcauthorization = true : @rpcauthorization = false
when "rpcauthprovider"
@rpcauthprovider = val.capitalize
when "rpchelptemplate"
@rpchelptemplate = val
when "rpclimitmethod"
@rpclimitmethod = val.to_sym
when "logger_type"
@logger_type = val
when "fact_cache_time"
@fact_cache_time = val.to_i
when "ssl_cipher"
@ssl_cipher = val
when "ttl"
@ttl = val.to_i
when "helptemplatedir"
@helptemplatedir = val
when "default_discovery_options"
@default_discovery_options << val
when "default_discovery_method"
@default_discovery_method = val
else
raise("Unknown config parameter #{key}")
end
end
end
end
raise('The %s config file does not specify a libdir setting, cannot continue' % configfile) if @libdir.empty?
I18n.load_path = Dir[File.expand_path(File.join(File.dirname(__FILE__), "locales", "*.yml"))]
I18n.locale = :en
read_plugin_config_dir("#{@configdir}/plugin.d")
raise 'Identities can only match /\w\.\-/' unless @identity.match(/^[\w\.\-]+$/)
@configured = true
@libdir.each {|dir| Log.warn("Cannot find libdir: #{dir}") unless File.directory?(dir)}
if @logger_type == "syslog"
raise "The sylog logger is not usable on the Windows platform" if Util.windows?
end
PluginManager.loadclass("Mcollective::Facts::#{@factsource}_facts")
PluginManager.loadclass("Mcollective::Connector::#{@connector}")
PluginManager.loadclass("Mcollective::Security::#{@securityprovider}")
PluginManager.loadclass("Mcollective::Registration::#{@registration}")
PluginManager.loadclass("Mcollective::Audit::#{@rpcauditprovider}") if @rpcaudit
PluginManager << {:type => "global_stats", :class => RunnerStats.new}
Log.logmsg(:PLMC1, "The Marionette Collective version %{version} started by %{name} using config file %{config}", :info, :version => MCollective::VERSION, :name => $0, :config => configfile)
else
raise("Cannot find config file '#{configfile}'")
end
end