Module MCollective::Util
In: lib/mcollective/util.rb

Some basic utility helper methods useful to clients, agents, runner etc.

Methods

Public Class methods

Creates an empty filter

[Source]

    # File lib/mcollective/util.rb, line 91
91:         def self.empty_filter
92:             {"fact" => [],
93:              "cf_class" => [],
94:              "agent" => [],
95:              "identity" => []}
96:         end

Checks if the passed in filter is an empty one

[Source]

    # File lib/mcollective/util.rb, line 86
86:         def self.empty_filter?(filter)
87:             filter == empty_filter || filter == {}
88:         end

Gets the value of a specific fact, mostly just a duplicate of MCollective::Facts.get_fact but it kind of goes with the other classes here

[Source]

    # File lib/mcollective/util.rb, line 49
49:         def self.get_fact(fact)
50:             Facts.get_fact(fact)
51:         end

Finds out if this MCollective has an agent by the name passed

If the passed name starts with a / it‘s assumed to be regex and will use regex to match

[Source]

    # File lib/mcollective/util.rb, line 8
 8:         def self.has_agent?(agent)
 9:             agent = Regexp.new(agent.gsub("\/", "")) if agent.match("^/")
10: 
11:             if agent.is_a?(Regexp)
12:                 if Agents.agentlist.grep(agent).size > 0
13:                     return true
14:                 else
15:                     return false
16:                 end
17:             else
18:                 return Agents.agentlist.include?(agent)
19:             end
20: 
21:             false
22:         end

Checks if this node has a configuration management class by parsing the a text file with just a list of classes, recipes, roles etc. This is ala the classes.txt from puppet.

If the passed name starts with a / it‘s assumed to be regex and will use regex to match

[Source]

    # File lib/mcollective/util.rb, line 30
30:         def self.has_cf_class?(klass)
31:             klass = Regexp.new(klass.gsub("\/", "")) if klass.match("^/")
32:             cfile = Config.instance.classesfile
33: 
34:             Log.instance.debug("Looking for configuration management classes in #{cfile}")
35: 
36:             File.readlines(cfile).each do |k|
37:                 if klass.is_a?(Regexp)
38:                     return true if k.chomp.match(klass)
39:                 else
40:                     return true if k.chomp == klass
41:                 end
42:             end
43: 
44:             false
45:         end

Compares fact == value,

If the passed value starts with a / it‘s assumed to be regex and will use regex to match

[Source]

    # File lib/mcollective/util.rb, line 57
57:         def self.has_fact?(fact, value)
58:             value = Regexp.new(value.gsub("\/", "")) if value.match("^/")
59: 
60:             if value.is_a?(Regexp)
61:                 return true if Facts.get_fact(fact).match(value)
62:             else
63:                 return true if Facts.get_fact(fact) == value
64:             end
65: 
66:             false
67:         end

Checks if the configured identity matches the one supplied

If the passed name starts with a / it‘s assumed to be regex and will use regex to match

[Source]

    # File lib/mcollective/util.rb, line 73
73:         def self.has_identity?(identity)
74:             identity = Regexp.new(identity.gsub("\/", "")) if identity.match("^/")
75: 
76:             if identity.is_a?(Regexp)
77:                 return Config.instance.identity.match(identity)
78:             else
79:                 return true if Config.instance.identity == identity
80:             end
81:             
82:             false
83:         end

Wrapper around PluginManager.loadclass

[Source]

     # File lib/mcollective/util.rb, line 108
108:         def self.loadclass(klass)
109:             PluginManager.loadclass(klass)
110:         end

Constructs the full target name based on topicprefix and topicsep config options

[Source]

     # File lib/mcollective/util.rb, line 99
 99:         def self.make_target(agent, type)
100:             config = Config.instance
101: 
102:             raise("Uknown target type #{type}") unless type == :command || type == :reply
103: 
104:             [config.topicprefix, agent, type].join(config.topicsep)
105:         end

[Validate]