Class MCollective::Config
In: lib/mcollective/config.rb
Parent: Object

A pretty sucky config class, ripe for refactoring/improving

Methods

Included Modules

Singleton

Attributes

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] 
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] 

Public Class methods

[Source]

    # File lib/mcollective/config.rb, line 17
17:     def initialize
18:       @configured = false
19:     end

Public Instance methods

[Source]

     # File lib/mcollective/config.rb, line 21
 21:     def loadconfig(configfile)
 22:       set_config_defaults(configfile)
 23: 
 24:       if File.exists?(configfile)
 25:         File.open(configfile, "r").each do |line|
 26: 
 27:           # strip blank spaces, tabs etc off the end of all lines
 28:           line.gsub!(/\s*$/, "")
 29: 
 30:           unless line =~ /^#|^$/
 31:             if (line =~ /(.+?)\s*=\s*(.+)/)
 32:               key = $1
 33:               val = $2
 34: 
 35:               case key
 36:                 when "topicsep"
 37:                   @topicsep = val
 38:                 when "registration"
 39:                   @registration = val.capitalize
 40:                 when "registration_collective"
 41:                   @registration_collective = val
 42:                 when "registerinterval"
 43:                   @registerinterval = val.to_i
 44:                 when "collectives"
 45:                   @collectives = val.split(",").map {|c| c.strip}
 46:                 when "main_collective"
 47:                   @main_collective = val
 48:                 when "topicprefix"
 49:                   @topicprefix = val
 50:                 when "queueprefix"
 51:                   @queueprefix = val
 52:                 when "logfile"
 53:                   @logfile = val
 54:                 when "keeplogs"
 55:                   @keeplogs = val.to_i
 56:                 when "max_log_size"
 57:                   @max_log_size = val.to_i
 58:                 when "loglevel"
 59:                   @loglevel = val
 60:                 when "logfacility"
 61:                   @logfacility = val
 62:                 when "libdir"
 63:                   paths = val.split(File::PATH_SEPARATOR)
 64:                   paths.each do |path|
 65:                     @libdir << path
 66:                     unless $LOAD_PATH.include?(path)
 67:                       $LOAD_PATH << path
 68:                     end
 69:                   end
 70:                 when "identity"
 71:                   @identity = val
 72:                 when "direct_addressing"
 73:                   val =~ /^1|y/i ? @direct_addressing = true : @direct_addressing = false
 74:                 when "direct_addressing_threshold"
 75:                   @direct_addressing_threshold = val.to_i
 76:                 when "color"
 77:                   val =~ /^1|y/i ? @color = true : @color = false
 78:                 when "daemonize"
 79:                   val =~ /^1|y/i ? @daemonize = true : @daemonize = false
 80:                 when "securityprovider"
 81:                   @securityprovider = val.capitalize
 82:                 when "factsource"
 83:                   @factsource = val.capitalize
 84:                 when "connector"
 85:                   @connector = val.capitalize
 86:                 when "classesfile"
 87:                   @classesfile = val
 88:                 when /^plugin.(.+)$/
 89:                   @pluginconf[$1] = val
 90:                 when "rpcaudit"
 91:                   val =~ /^1|y/i ? @rpcaudit = true : @rpcaudit = false
 92:                 when "rpcauditprovider"
 93:                   @rpcauditprovider = val.capitalize
 94:                 when "rpcauthorization"
 95:                   val =~ /^1|y/i ? @rpcauthorization = true : @rpcauthorization = false
 96:                 when "rpcauthprovider"
 97:                   @rpcauthprovider = val.capitalize
 98:                 when "rpchelptemplate"
 99:                   @rpchelptemplate = val
100:                 when "rpclimitmethod"
101:                   @rpclimitmethod = val.to_sym
102:                 when "logger_type"
103:                   @logger_type = val
104:                 when "fact_cache_time"
105:                   @fact_cache_time = val.to_i
106:                 when "ssl_cipher"
107:                   @ssl_cipher = val
108:                 when "ttl"
109:                   @ttl = val.to_i
110:                 when "helptemplatedir"
111:                   @helptemplatedir = val
112:                 when "default_discovery_options"
113:                   @default_discovery_options << val
114:                 when "default_discovery_method"
115:                   @default_discovery_method = val
116:                 else
117:                   raise("Unknown config parameter #{key}")
118:               end
119:             end
120:           end
121:         end
122: 
123:         read_plugin_config_dir("#{@configdir}/plugin.d")
124: 
125:         raise 'Identities can only match /\w\.\-/' unless @identity.match(/^[\w\.\-]+$/)
126: 
127:         @configured = true
128: 
129:         @libdir.each {|dir| Log.warn("Cannot find libdir: #{dir}") unless File.directory?(dir)}
130: 
131:         if @logger_type == "syslog"
132:           raise "The sylog logger is not usable on the Windows platform" if Util.windows?
133:         end
134: 
135:         PluginManager.loadclass("Mcollective::Facts::#{@factsource}_facts")
136:         PluginManager.loadclass("Mcollective::Connector::#{@connector}")
137:         PluginManager.loadclass("Mcollective::Security::#{@securityprovider}")
138:         PluginManager.loadclass("Mcollective::Registration::#{@registration}")
139:         PluginManager.loadclass("Mcollective::Audit::#{@rpcauditprovider}") if @rpcaudit
140:         PluginManager << {:type => "global_stats", :class => RunnerStats.new}
141:       else
142:         raise("Cannot find config file '#{configfile}'")
143:       end
144:     end

[Source]

     # File lib/mcollective/config.rb, line 193
193:     def read_plugin_config_dir(dir)
194:       return unless File.directory?(dir)
195: 
196:       Dir.new(dir).each do |pluginconfigfile|
197:         next unless pluginconfigfile =~ /^([\w]+).cfg$/
198: 
199:         plugin = $1
200:         File.open("#{dir}/#{pluginconfigfile}", "r").each do |line|
201:           # strip blank lines
202:           line.gsub!(/\s*$/, "")
203:           next if line =~ /^#|^$/
204:           if (line =~ /(.+?)\s*=\s*(.+)/)
205:             key = $1
206:             val = $2
207:             @pluginconf["#{plugin}.#{key}"] = val
208:           end
209:         end
210:       end
211:     end

[Source]

     # File lib/mcollective/config.rb, line 146
146:     def set_config_defaults(configfile)
147:       @stomp = Hash.new
148:       @subscribe = Array.new
149:       @pluginconf = Hash.new
150:       @connector = "Stomp"
151:       @securityprovider = "Psk"
152:       @factsource = "Yaml"
153:       @identity = Socket.gethostname
154:       @registration = "Agentlist"
155:       @registerinterval = 0
156:       @registration_collective = nil
157:       @topicsep = "."
158:       @topicprefix = "/topic/"
159:       @queueprefix = "/queue/"
160:       @classesfile = "/var/lib/puppet/state/classes.txt"
161:       @rpcaudit = false
162:       @rpcauditprovider = ""
163:       @rpcauthorization = false
164:       @rpcauthprovider = ""
165:       @configdir = File.dirname(configfile)
166:       @color = !Util.windows?
167:       @configfile = configfile
168:       @logger_type = "file"
169:       @keeplogs = 5
170:       @max_log_size = 2097152
171:       @rpclimitmethod = :first
172:       @libdir = Array.new
173:       @fact_cache_time = 300
174:       @loglevel = "info"
175:       @logfacility = "user"
176:       @collectives = ["mcollective"]
177:       @main_collective = @collectives.first
178:       @ssl_cipher = "aes-256-cbc"
179:       @direct_addressing = false
180:       @direct_addressing_threshold = 10
181:       @default_discovery_method = "mc"
182:       @default_discovery_options = []
183:       @ttl = 60
184: 
185:       # look in the config dir for the template so users can provide their own and windows
186:       # with odd paths will just work more often, but fall back to old behavior if it does
187:       # not exist
188:       @rpchelptemplate = File.join(File.dirname(configfile), "rpc-help.erb")
189:       @rpchelptemplate = "/etc/mcollective/rpc-help.erb" unless File.exists?(@rpchelptemplate)
190:       @helptemplatedir = File.dirname(@rpchelptemplate)
191:     end

[Validate]