Class: Puppet::Resource::TypeCollection

Inherits:
Object
  • Object
show all
Includes:
Util::Warnings
Defined in:
lib/puppet/resource/type_collection.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Util::Warnings

clear_warnings, debug_once, notice_once, warnonce

Constructor Details

#initialize(env) ⇒ TypeCollection

Returns a new instance of TypeCollection.



21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/puppet/resource/type_collection.rb', line 21

def initialize(env)
  @environment = env
  @hostclasses = {}
  @definitions = {}
  @capability_mappings = {}
  @applications = {}
  @nodes = {}
  @notfound = {}
  @sites = []

  # So we can keep a list and match the first-defined regex
  @node_list = []
end

Instance Attribute Details

#environmentObject (readonly)



6
7
8
# File 'lib/puppet/resource/type_collection.rb', line 6

def environment
  @environment
end

#parse_failedObject



7
8
9
# File 'lib/puppet/resource/type_collection.rb', line 7

def parse_failed
  @parse_failed
end

Instance Method Details

#<<(thing) ⇒ Object



52
53
54
55
# File 'lib/puppet/resource/type_collection.rb', line 52

def <<(thing)
  add(thing)
  self
end

#add(instance) ⇒ Object



57
58
59
60
61
62
63
64
65
66
# File 'lib/puppet/resource/type_collection.rb', line 57

def add(instance)
  if instance.type == :hostclass and other = @hostclasses[instance.name] and other.type == :hostclass
    other.merge(instance)
    return other
  end
  method = "add_#{instance.type}"
  send(method, instance)
  instance.resource_type_collection = self
  instance
end

#add_application(instance) ⇒ Object



141
142
143
144
145
146
# File 'lib/puppet/resource/type_collection.rb', line 141

def add_application(instance)
  dupe_check(instance, @hostclasses) { |dupe| "'#{instance.name}' is already defined#{dupe.error_context} as a class; cannot redefine as an application" }
  dupe_check(instance, @definitions) { |dupe| "'#{instance.name}' is already defined#{dupe.error_context} as a definition; cannot redefine as an application" }
  dupe_check(instance, @applications) { |dupe| "'#{instance.name}' is already defined#{dupe.error_context} as an application; cannot be redefined" }
  @applications[instance.name] = instance
end

#add_capability_mapping(instance) ⇒ Object



132
133
134
135
# File 'lib/puppet/resource/type_collection.rb', line 132

def add_capability_mapping(instance)
  dupe_check(instance, @capability_mappings) { |dupe| "'#{instance.name}' is already defined#{dupe.error_context} as a class; cannot redefine as a mapping" }
  @capability_mappings[instance.name] = instance
end

#add_definition(instance) ⇒ Object



125
126
127
128
129
130
# File 'lib/puppet/resource/type_collection.rb', line 125

def add_definition(instance)
  dupe_check(instance, @hostclasses) { |dupe| "'#{instance.name}' is already defined#{dupe.error_context} as a class; cannot redefine as a definition" }
  dupe_check(instance, @definitions) { |dupe| "Definition '#{instance.name}' is already defined#{dupe.error_context}; cannot be redefined" }
  dupe_check(instance, @applications) { |dupe| "'#{instance.name}' is already defined#{dupe.error_context} as an application; cannot be redefined" }
  @definitions[instance.name] = instance
end

#add_hostclass(instance) ⇒ Object



68
69
70
71
72
73
74
75
# File 'lib/puppet/resource/type_collection.rb', line 68

def add_hostclass(instance)
  dupe_check(instance, @hostclasses) { |dupe| "Class '#{instance.name}' is already defined#{dupe.error_context}; cannot redefine" }
  dupe_check(instance, @definitions) { |dupe| "Definition '#{instance.name}' is already defined#{dupe.error_context}; cannot be redefined as a class" }
  dupe_check(instance, @applications) { |dupe| "Application '#{instance.name}' is already defined#{dupe.error_context}; cannot be redefined as a class" }

  @hostclasses[instance.name] = instance
  instance
end

#add_node(instance) ⇒ Object



81
82
83
84
85
86
87
# File 'lib/puppet/resource/type_collection.rb', line 81

def add_node(instance)
  dupe_check(instance, @nodes) { |dupe| "Node '#{instance.name}' is already defined#{dupe.error_context}; cannot redefine" }

  @node_list << instance
  @nodes[instance.name] = instance
  instance
end

#add_site(instance) ⇒ Object



89
90
91
92
93
# File 'lib/puppet/resource/type_collection.rb', line 89

def add_site(instance)
  dupe_check_singleton(instance, @sites) { |dupe| "Site is already defined#{dupe.error_context}; cannot redefine" }
  @sites << instance
  instance
end

#application(name) ⇒ Object



148
149
150
# File 'lib/puppet/resource/type_collection.rb', line 148

def application(name)
  @applications[munge_name(name)]
end

#clearObject



11
12
13
14
15
16
17
18
19
# File 'lib/puppet/resource/type_collection.rb', line 11

def clear
  @hostclasses.clear
  @definitions.clear
  @applications.clear
  @nodes.clear
  @notfound.clear
  @capability_mappings.clear
  @sites.clear
end

#definition(name) ⇒ Object



137
138
139
# File 'lib/puppet/resource/type_collection.rb', line 137

def definition(name)
  @definitions[munge_name(name)]
end

#find_application(name) ⇒ Object



168
169
170
# File 'lib/puppet/resource/type_collection.rb', line 168

def find_application(name)
  find_or_load(name, :application)
end

#find_definition(name) ⇒ Object



164
165
166
# File 'lib/puppet/resource/type_collection.rb', line 164

def find_definition(name)
  find_or_load(name, :definition)
end

#find_hostclass(name) ⇒ Object



160
161
162
# File 'lib/puppet/resource/type_collection.rb', line 160

def find_hostclass(name)
  find_or_load(name, :hostclass)
end

#find_node(name) ⇒ Object



152
153
154
# File 'lib/puppet/resource/type_collection.rb', line 152

def find_node(name)
  @nodes[munge_name(name)]
end

#find_siteObject



156
157
158
# File 'lib/puppet/resource/type_collection.rb', line 156

def find_site()
  @sites[0]
end

#hostclass(name) ⇒ Object



77
78
79
# File 'lib/puppet/resource/type_collection.rb', line 77

def hostclass(name)
  @hostclasses[munge_name(name)]
end

#import_ast(ast, modname) ⇒ Object



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

#inspectObject



41
42
43
44
45
46
47
48
49
50
# File 'lib/puppet/resource/type_collection.rb', line 41

def inspect
  "TypeCollection" + {
    :hostclasses => @hostclasses.keys,
    :definitions => @definitions.keys,
    :nodes => @nodes.keys,
    :capability_mappings => @capability_mappings.keys,
    :applications => @applications.keys,
    :site => @sites[0] # todo, could be just a binary, this dumps the entire body (good while developing)
  }.inspect
end

#loaderObject



99
100
101
# File 'lib/puppet/resource/type_collection.rb', line 99

def loader
  @loader ||= Puppet::Parser::TypeLoader.new(environment)
end

#node(name) ⇒ Object



103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/puppet/resource/type_collection.rb', line 103

def node(name)
  name = munge_name(name)

  if node = @nodes[name]
    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

Returns:

  • (Boolean)


117
118
119
# File 'lib/puppet/resource/type_collection.rb', line 117

def node_exists?(name)
  @nodes[munge_name(name)]
end

#nodes?Boolean

Returns:

  • (Boolean)


121
122
123
# File 'lib/puppet/resource/type_collection.rb', line 121

def nodes?
  @nodes.length > 0
end

#parse_failed?Boolean

Returns:

  • (Boolean)


181
182
183
# File 'lib/puppet/resource/type_collection.rb', line 181

def parse_failed?
  @parse_failed
end

#site(_) ⇒ Object



95
96
97
# File 'lib/puppet/resource/type_collection.rb', line 95

def site(_)
  @sites[0]
end

#versionObject



185
186
187
188
189
190
191
192
193
194
195
196
197
# File 'lib/puppet/resource/type_collection.rb', line 185

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]).strip
    end
  end

  @version
rescue Puppet::ExecutionFailure => e
  raise Puppet::ParseError, "Execution of config_version command `#{environment.config_version}` failed: #{e.message}", e.backtrace
end