| Class | MCollective::Config |
| In: |
lib/mcollective/config.rb
|
| Parent: | Object |
A pretty sucky config class, ripe for refactoring/improving
| classesfile | [R] | |
| collectives | [R] | |
| color | [R] | |
| configdir | [R] | |
| configfile | [R] | |
| configured | [R] | |
| connector | [R] | |
| daemonize | [R] | |
| daemonize | [R] | |
| default_discovery_method | [R] | |
| default_discovery_options | [R] | |
| direct_addressing | [R] | |
| direct_addressing_threshold | [R] | |
| fact_cache_time | [R] | |
| factsource | [R] | |
| helptemplatedir | [R] | |
| identity | [R] | |
| keeplogs | [R] | |
| libdir | [R] | |
| logfacility | [R] | |
| logfile | [R] | |
| logger_type | [R] | |
| loglevel | [R] | |
| main_collective | [R] | |
| max_log_size | [R] | |
| mode | [RW] | |
| pluginconf | [R] | |
| queueprefix | [R] | |
| registerinterval | [R] | |
| registration | [R] | |
| registration_collective | [R] | |
| rpcaudit | [R] | |
| rpcauditprovider | [R] | |
| rpcauthorization | [R] | |
| rpcauthprovider | [R] | |
| rpchelptemplate | [R] | |
| rpclimitmethod | [R] | |
| securityprovider | [R] | |
| ssl_cipher | [R] | |
| topicprefix | [R] | |
| topicsep | [R] | |
| ttl | [R] |
# File lib/mcollective/config.rb, line 23
23: def loadconfig(configfile)
24: set_config_defaults(configfile)
25:
26: if File.exists?(configfile)
27: File.open(configfile, "r").each do |line|
28:
29: # strip blank spaces, tabs etc off the end of all lines
30: line.gsub!(/\s*$/, "")
31:
32: unless line =~ /^#|^$/
33: if (line =~ /(.+?)\s*=\s*(.+)/)
34: key = $1
35: val = $2
36:
37: case key
38: when "topicsep"
39: @topicsep = val
40: when "registration"
41: @registration = val.capitalize
42: when "registration_collective"
43: @registration_collective = val
44: when "registerinterval"
45: @registerinterval = val.to_i
46: when "collectives"
47: @collectives = val.split(",").map {|c| c.strip}
48: when "main_collective"
49: @main_collective = val
50: when "topicprefix"
51: @topicprefix = val
52: when "queueprefix"
53: @queueprefix = val
54: when "logfile"
55: @logfile = val
56: when "keeplogs"
57: @keeplogs = val.to_i
58: when "max_log_size"
59: @max_log_size = val.to_i
60: when "loglevel"
61: @loglevel = val
62: when "logfacility"
63: @logfacility = val
64: when "libdir"
65: paths = val.split(File::PATH_SEPARATOR)
66: paths.each do |path|
67: raise("libdir paths should be absolute paths but '%s' is relative" % path) unless Util.absolute_path?(path)
68:
69: @libdir << path
70: unless $LOAD_PATH.include?(path)
71: $LOAD_PATH << path
72: end
73: end
74: when "identity"
75: @identity = val
76: when "direct_addressing"
77: val =~ /^1|y/i ? @direct_addressing = true : @direct_addressing = false
78: when "direct_addressing_threshold"
79: @direct_addressing_threshold = val.to_i
80: when "color"
81: val =~ /^1|y/i ? @color = true : @color = false
82: when "daemonize"
83: val =~ /^1|y/i ? @daemonize = true : @daemonize = false
84: when "securityprovider"
85: @securityprovider = val.capitalize
86: when "factsource"
87: @factsource = val.capitalize
88: when "connector"
89: @connector = val.capitalize
90: when "classesfile"
91: @classesfile = val
92: when /^plugin.(.+)$/
93: @pluginconf[$1] = val
94: when "rpcaudit"
95: val =~ /^1|y/i ? @rpcaudit = true : @rpcaudit = false
96: when "rpcauditprovider"
97: @rpcauditprovider = val.capitalize
98: when "rpcauthorization"
99: val =~ /^1|y/i ? @rpcauthorization = true : @rpcauthorization = false
100: when "rpcauthprovider"
101: @rpcauthprovider = val.capitalize
102: when "rpchelptemplate"
103: @rpchelptemplate = val
104: when "rpclimitmethod"
105: @rpclimitmethod = val.to_sym
106: when "logger_type"
107: @logger_type = val
108: when "fact_cache_time"
109: @fact_cache_time = val.to_i
110: when "ssl_cipher"
111: @ssl_cipher = val
112: when "ttl"
113: @ttl = val.to_i
114: when "helptemplatedir"
115: @helptemplatedir = val
116: when "default_discovery_options"
117: @default_discovery_options << val
118: when "default_discovery_method"
119: @default_discovery_method = val
120: else
121: raise("Unknown config parameter #{key}")
122: end
123: end
124: end
125: end
126:
127: I18n.load_path = Dir[File.expand_path(File.join(File.dirname(__FILE__), "locales", "*.yml"))]
128: I18n.locale = :en
129:
130: read_plugin_config_dir("#{@configdir}/plugin.d")
131:
132: raise 'Identities can only match /\w\.\-/' unless @identity.match(/^[\w\.\-]+$/)
133:
134: @configured = true
135:
136: @libdir.each {|dir| Log.warn("Cannot find libdir: #{dir}") unless File.directory?(dir)}
137:
138: if @logger_type == "syslog"
139: raise "The sylog logger is not usable on the Windows platform" if Util.windows?
140: end
141:
142: PluginManager.loadclass("Mcollective::Facts::#{@factsource}_facts")
143: PluginManager.loadclass("Mcollective::Connector::#{@connector}")
144: PluginManager.loadclass("Mcollective::Security::#{@securityprovider}")
145: PluginManager.loadclass("Mcollective::Registration::#{@registration}")
146: PluginManager.loadclass("Mcollective::Audit::#{@rpcauditprovider}") if @rpcaudit
147: PluginManager << {:type => "global_stats", :class => RunnerStats.new}
148:
149: Log.logmsg(:PLMC1, "The Marionette Collective version %{version} started by %{name} using config file %{config}", :info, :version => MCollective::VERSION, :name => $0, :config => configfile)
150: else
151: raise("Cannot find config file '#{configfile}'")
152: end
153: end
# File lib/mcollective/config.rb, line 203
203: def read_plugin_config_dir(dir)
204: return unless File.directory?(dir)
205:
206: Dir.new(dir).each do |pluginconfigfile|
207: next unless pluginconfigfile =~ /^([\w]+).cfg$/
208:
209: plugin = $1
210: File.open("#{dir}/#{pluginconfigfile}", "r").each do |line|
211: # strip blank lines
212: line.gsub!(/\s*$/, "")
213: next if line =~ /^#|^$/
214: if (line =~ /(.+?)\s*=\s*(.+)/)
215: key = $1
216: val = $2
217: @pluginconf["#{plugin}.#{key}"] = val
218: end
219: end
220: end
221: end
# File lib/mcollective/config.rb, line 155
155: def set_config_defaults(configfile)
156: @stomp = Hash.new
157: @subscribe = Array.new
158: @pluginconf = Hash.new
159: @connector = "activemq"
160: @securityprovider = "Psk"
161: @factsource = "Yaml"
162: @identity = Socket.gethostname
163: @registration = "Agentlist"
164: @registerinterval = 0
165: @registration_collective = nil
166: @topicsep = "."
167: @topicprefix = "/topic/"
168: @queueprefix = "/queue/"
169: @classesfile = "/var/lib/puppet/state/classes.txt"
170: @rpcaudit = false
171: @rpcauditprovider = ""
172: @rpcauthorization = false
173: @rpcauthprovider = ""
174: @configdir = File.dirname(configfile)
175: @color = !Util.windows?
176: @configfile = configfile
177: @logger_type = "file"
178: @keeplogs = 5
179: @max_log_size = 2097152
180: @rpclimitmethod = :first
181: @libdir = Array.new
182: @fact_cache_time = 300
183: @loglevel = "info"
184: @logfacility = "user"
185: @collectives = ["mcollective"]
186: @main_collective = @collectives.first
187: @ssl_cipher = "aes-256-cbc"
188: @direct_addressing = false
189: @direct_addressing_threshold = 10
190: @default_discovery_method = "mc"
191: @default_discovery_options = []
192: @ttl = 60
193: @mode = :client
194:
195: # look in the config dir for the template so users can provide their own and windows
196: # with odd paths will just work more often, but fall back to old behavior if it does
197: # not exist
198: @rpchelptemplate = File.join(File.dirname(configfile), "rpc-help.erb")
199: @rpchelptemplate = "/etc/mcollective/rpc-help.erb" unless File.exists?(@rpchelptemplate)
200: @helptemplatedir = File.dirname(@rpchelptemplate)
201: end