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.
22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/puppet/resource/type_collection.rb', line 22 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.
10 11 12 |
# File 'lib/puppet/resource/type_collection.rb', line 10 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.
11 12 13 |
# File 'lib/puppet/resource/type_collection.rb', line 11 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.
50 51 52 53 |
# File 'lib/puppet/resource/type_collection.rb', line 50 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.
55 56 57 58 59 60 61 62 |
# File 'lib/puppet/resource/type_collection.rb', line 55 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.
135 136 137 138 139 140 |
# File 'lib/puppet/resource/type_collection.rb', line 135 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.
64 65 66 67 68 69 70 71 72 |
# File 'lib/puppet/resource/type_collection.rb', line 64 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.
99 100 101 102 103 104 105 106 |
# File 'lib/puppet/resource/type_collection.rb', line 99 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.
15 16 17 18 19 20 |
# File 'lib/puppet/resource/type_collection.rb', line 15 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.
142 143 144 |
# File 'lib/puppet/resource/type_collection.rb', line 142 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.
154 155 156 |
# File 'lib/puppet/resource/type_collection.rb', line 154 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.
150 151 152 |
# File 'lib/puppet/resource/type_collection.rb', line 150 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.
146 147 148 |
# File 'lib/puppet/resource/type_collection.rb', line 146 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.
74 75 76 77 78 79 80 81 82 83 |
# File 'lib/puppet/resource/type_collection.rb', line 74 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.
95 96 97 |
# File 'lib/puppet/resource/type_collection.rb', line 95 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.
35 36 37 38 39 |
# File 'lib/puppet/resource/type_collection.rb', line 35 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.
41 42 43 44 45 46 47 |
# File 'lib/puppet/resource/type_collection.rb', line 41 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.
108 109 110 |
# File 'lib/puppet/resource/type_collection.rb', line 108 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.
112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/puppet/resource/type_collection.rb', line 112 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.
127 128 129 |
# File 'lib/puppet/resource/type_collection.rb', line 127 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.
131 132 133 |
# File 'lib/puppet/resource/type_collection.rb', line 131 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.
166 167 168 |
# File 'lib/puppet/resource/type_collection.rb', line 166 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.
91 92 93 |
# File 'lib/puppet/resource/type_collection.rb', line 91 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.
170 171 172 173 174 175 176 177 178 179 180 181 182 |
# File 'lib/puppet/resource/type_collection.rb', line 170 def version unless 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 |