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] 
direct_addressing  [R] 
direct_addressing_threshold  [R] 
fact_cache_time  [R] 
factsource  [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 15
15:     def initialize
16:       @configured = false
17:     end

Public Instance methods

[Source]

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

[Source]

     # File lib/mcollective/config.rb, line 182
182:     def read_plugin_config_dir(dir)
183:       return unless File.directory?(dir)
184: 
185:       Dir.new(dir).each do |pluginconfigfile|
186:         next unless pluginconfigfile =~ /^([\w]+).cfg$/
187: 
188:         plugin = $1
189:         File.open("#{dir}/#{pluginconfigfile}", "r").each do |line|
190:           # strip blank lines
191:           line.gsub!(/\s*$/, "")
192:           next if line =~ /^#|^$/
193:           if (line =~ /(.+?)\s*=\s*(.+)/)
194:             key = $1
195:             val = $2
196:             @pluginconf["#{plugin}.#{key}"] = val
197:           end
198:         end
199:       end
200:     end

[Source]

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

[Validate]