Class: Puppet::Resource::TypeCollection Private
- Includes:
- Util::Warnings
- Defined in:
- lib/puppet/resource/type_collection.rb
This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.
Instance Attribute Summary collapse
- #environment ⇒ Object readonly private
- #parse_failed ⇒ Object private
Instance Method Summary collapse
- #<<(thing) ⇒ Object private
- #add(instance) ⇒ Object private
- #add_definition(instance) ⇒ Object private
- #add_hostclass(instance) ⇒ Object private
- #add_node(instance) ⇒ Object private
- #clear ⇒ Object private
- #definition(name) ⇒ Object private
- #find_definition(name) ⇒ Object private
- #find_hostclass(name) ⇒ Object private
- #find_node(name) ⇒ Object private
- #handle_hostclass_merge(instance) ⇒ Object private
- #hostclass(name) ⇒ Object private
- #import_ast(ast, modname) ⇒ Object private
-
#initialize(env) ⇒ TypeCollection
constructor
private
A new instance of TypeCollection.
- #inspect ⇒ Object private
- #loader ⇒ Object private
- #node(name) ⇒ Object private
- #node_exists?(name) ⇒ Boolean private
- #nodes? ⇒ Boolean private
- #parse_failed? ⇒ Boolean private
-
#replace_settings(instance) ⇒ Object
private
Replaces the known settings with a new instance (that must be named ‘settings’).
- #version ⇒ Object private
Methods included from Util::Warnings
clear_warnings, debug_once, maybe_log, notice_once, warnonce
Constructor Details
#initialize(env) ⇒ TypeCollection
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a new instance of TypeCollection.
21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/puppet/resource/type_collection.rb', line 21 def initialize(env) @environment = env @hostclasses = {} @definitions = {} @nodes = {} @notfound = {} # always lock the environment before acquiring this lock @lock = Puppet::Concurrent::Lock.new # So we can keep a list and match the first-defined regex @node_list = [] end |
Instance Attribute Details
#environment ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
9 10 11 |
# File 'lib/puppet/resource/type_collection.rb', line 9 def environment @environment end |
#parse_failed ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
10 11 12 |
# File 'lib/puppet/resource/type_collection.rb', line 10 def parse_failed @parse_failed end |
Instance Method Details
#<<(thing) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
49 50 51 52 |
# File 'lib/puppet/resource/type_collection.rb', line 49 def <<(thing) add(thing) self end |
#add(instance) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
54 55 56 57 58 59 60 61 |
# File 'lib/puppet/resource/type_collection.rb', line 54 def add(instance) # return a merged instance, or the given catch(:merged) { send("add_#{instance.type}", instance) instance.resource_type_collection = self instance } end |
#add_definition(instance) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
133 134 135 136 137 138 |
# File 'lib/puppet/resource/type_collection.rb', line 133 def add_definition(instance) dupe_check(instance, @hostclasses) { |dupe| _("'%{name}' is already defined%{error} as a class; cannot redefine as a definition") % { name: instance.name, error: dupe.error_context } } dupe_check(instance, @definitions) { |dupe| _("Definition '%{name}' is already defined%{error}; cannot be redefined") % { name: instance.name, error: dupe.error_context } } @definitions[instance.name] = instance end |
#add_hostclass(instance) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
63 64 65 66 67 68 69 70 71 |
# File 'lib/puppet/resource/type_collection.rb', line 63 def add_hostclass(instance) handle_hostclass_merge(instance) dupe_check(instance, @hostclasses) { |dupe| _("Class '%{klass}' is already defined%{error}; cannot redefine") % { klass: instance.name, error: dupe.error_context } } dupe_check(instance, @nodes) { |dupe| _("Node '%{klass}' is already defined%{error}; cannot be redefined as a class") % { klass: instance.name, error: dupe.error_context } } dupe_check(instance, @definitions) { |dupe| _("Definition '%{klass}' is already defined%{error}; cannot be redefined as a class") % { klass: instance.name, error: dupe.error_context } } @hostclasses[instance.name] = instance instance end |
#add_node(instance) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
97 98 99 100 101 102 103 104 |
# File 'lib/puppet/resource/type_collection.rb', line 97 def add_node(instance) dupe_check(instance, @nodes) { |dupe| _("Node '%{name}' is already defined%{error}; cannot redefine") % { name: instance.name, error: dupe.error_context } } dupe_check(instance, @hostclasses) { |dupe| _("Class '%{klass}' is already defined%{error}; cannot be redefined as a node") % { klass: instance.name, error: dupe.error_context } } @node_list << instance @nodes[instance.name] = instance instance end |
#clear ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
14 15 16 17 18 19 |
# File 'lib/puppet/resource/type_collection.rb', line 14 def clear @hostclasses.clear @definitions.clear @nodes.clear @notfound.clear end |
#definition(name) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
140 141 142 |
# File 'lib/puppet/resource/type_collection.rb', line 140 def definition(name) @definitions[munge_name(name)] end |
#find_definition(name) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
152 153 154 |
# File 'lib/puppet/resource/type_collection.rb', line 152 def find_definition(name) find_or_load(name, :definition) end |
#find_hostclass(name) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
148 149 150 |
# File 'lib/puppet/resource/type_collection.rb', line 148 def find_hostclass(name) find_or_load(name, :hostclass) end |
#find_node(name) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
144 145 146 |
# File 'lib/puppet/resource/type_collection.rb', line 144 def find_node(name) @nodes[munge_name(name)] end |
#handle_hostclass_merge(instance) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
73 74 75 76 77 78 79 80 81 |
# File 'lib/puppet/resource/type_collection.rb', line 73 def handle_hostclass_merge(instance) # Only main class (named '') can be merged (for purpose of merging top-scopes). return instance unless instance.name == '' if instance.type == :hostclass && (other = @hostclasses[instance.name]) && other.type == :hostclass other.merge(instance) # throw is used to signal merge - avoids dupe checks and adding it to hostclasses throw :merged, other end end |
#hostclass(name) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
93 94 95 |
# File 'lib/puppet/resource/type_collection.rb', line 93 def hostclass(name) @hostclasses[munge_name(name)] end |
#import_ast(ast, modname) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
34 35 36 37 38 |
# File 'lib/puppet/resource/type_collection.rb', line 34 def import_ast(ast, modname) ast.instantiate(modname).each do |instance| add(instance) end end |
#inspect ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
40 41 42 43 44 45 46 |
# File 'lib/puppet/resource/type_collection.rb', line 40 def inspect "TypeCollection" + { :hostclasses => @hostclasses.keys, :definitions => @definitions.keys, :nodes => @nodes.keys }.inspect end |
#loader ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
106 107 108 |
# File 'lib/puppet/resource/type_collection.rb', line 106 def loader @loader ||= Puppet::Parser::TypeLoader.new(environment) end |
#node(name) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/puppet/resource/type_collection.rb', line 110 def node(name) name = munge_name(name) node = @nodes[name] if node return node end @node_list.each do |n| next unless n.name_is_regex? return n if n.match(name) end nil end |
#node_exists?(name) ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
125 126 127 |
# File 'lib/puppet/resource/type_collection.rb', line 125 def node_exists?(name) @nodes[munge_name(name)] end |
#nodes? ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
129 130 131 |
# File 'lib/puppet/resource/type_collection.rb', line 129 def nodes? @nodes.length > 0 end |
#parse_failed? ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
164 165 166 |
# File 'lib/puppet/resource/type_collection.rb', line 164 def parse_failed? @parse_failed end |
#replace_settings(instance) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Replaces the known settings with a new instance (that must be named ‘settings’). This is primarily needed for testing purposes. Also see PUP-5954 as it makes it illegal to merge classes other than the ” (main) class. Prior to this change settings where always merged rather than being defined from scratch for many testing scenarios not having a complete side effect free setup for compilation.
89 90 91 |
# File 'lib/puppet/resource/type_collection.rb', line 89 def replace_settings(instance) @hostclasses['settings'] = instance end |
#version ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
168 169 170 171 172 173 174 175 176 177 178 179 180 |
# File 'lib/puppet/resource/type_collection.rb', line 168 def version if !defined?(@version) if environment.config_version.nil? || environment.config_version == "" @version = Time.now.to_i else @version = Puppet::Util::Execution.execute([environment.config_version]).to_s.strip end end @version rescue Puppet::ExecutionFailure => e raise Puppet::ParseError, _("Execution of config_version command `%{cmd}` failed: %{message}") % { cmd: environment.config_version, message: e. }, e.backtrace end |