puppet 2.6.0 → 2.6.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- data/CHANGELOG +123 -0
- data/conf/redhat/puppet.spec +8 -2
- data/conf/solaris/smf/svc-puppetd +1 -1
- data/conf/solaris/smf/svc-puppetmasterd +1 -1
- data/conf/suse/client.init +4 -4
- data/conf/suse/fileserver.conf +12 -0
- data/conf/suse/logrotate +10 -0
- data/conf/suse/puppet.conf +25 -0
- data/conf/suse/puppet.spec +114 -49
- data/conf/suse/ruby-env.patch +17 -0
- data/conf/suse/server.init +4 -4
- data/ext/logcheck/puppet +23 -23
- data/ext/puppet-load.rb +357 -0
- data/ext/puppetstoredconfigclean.rb +3 -3
- data/ext/rack/files/config.ru +3 -5
- data/ext/vim/syntax/puppet.vim +6 -5
- data/install.rb +12 -11
- data/lib/puppet.rb +1 -1
- data/lib/puppet/agent.rb +3 -1
- data/lib/puppet/application.rb +2 -3
- data/lib/puppet/application/agent.rb +4 -0
- data/lib/puppet/application/apply.rb +14 -6
- data/lib/puppet/application/describe.rb +1 -1
- data/lib/puppet/application/doc.rb +2 -36
- data/lib/puppet/application/master.rb +0 -3
- data/lib/puppet/application/queue.rb +1 -0
- data/lib/puppet/configurer.rb +4 -0
- data/lib/puppet/daemon.rb +1 -1
- data/lib/puppet/defaults.rb +38 -44
- data/lib/puppet/file_serving/indirection_hooks.rb +2 -2
- data/lib/puppet/indirector/facts/memory.rb +1 -1
- data/lib/puppet/indirector/node/exec.rb +1 -1
- data/lib/puppet/indirector/node/ldap.rb +9 -53
- data/lib/puppet/indirector/node/memory.rb +1 -1
- data/lib/puppet/indirector/yaml.rb +6 -9
- data/lib/puppet/network/format_handler.rb +6 -0
- data/lib/puppet/network/formats.rb +4 -4
- data/lib/puppet/network/http/handler.rb +1 -1
- data/lib/puppet/network/http/rack.rb +3 -0
- data/lib/puppet/network/http/rack/rest.rb +1 -1
- data/lib/puppet/network/rest_authconfig.rb +6 -3
- data/lib/puppet/node/environment.rb +15 -5
- data/lib/puppet/parameter/value_collection.rb +3 -3
- data/lib/puppet/parser/ast/function.rb +0 -1
- data/lib/puppet/parser/ast/leaf.rb +1 -1
- data/lib/puppet/parser/ast/resource.rb +4 -3
- data/lib/puppet/parser/ast/resource_reference.rb +9 -2
- data/lib/puppet/parser/compiler.rb +12 -14
- data/lib/puppet/parser/files.rb +1 -1
- data/lib/puppet/parser/functions.rb +2 -2
- data/lib/puppet/parser/functions/defined.rb +1 -1
- data/lib/puppet/parser/functions/extlookup.rb +157 -0
- data/lib/puppet/parser/functions/file.rb +1 -1
- data/lib/puppet/parser/functions/inline_template.rb +6 -5
- data/lib/puppet/parser/functions/md5.rb +5 -0
- data/lib/puppet/parser/functions/realize.rb +1 -1
- data/lib/puppet/parser/functions/regsubst.rb +19 -19
- data/lib/puppet/parser/functions/require.rb +2 -3
- data/lib/puppet/parser/functions/split.rb +1 -1
- data/lib/puppet/parser/functions/sprintf.rb +1 -1
- data/lib/puppet/parser/functions/template.rb +4 -2
- data/lib/puppet/parser/functions/versioncmp.rb +12 -12
- data/lib/puppet/parser/lexer.rb +13 -14
- data/lib/puppet/parser/resource.rb +2 -7
- data/lib/puppet/parser/resource/param.rb +1 -1
- data/lib/puppet/parser/scope.rb +35 -0
- data/lib/puppet/parser/type_loader.rb +1 -1
- data/lib/puppet/property.rb +5 -5
- data/lib/puppet/provider.rb +3 -3
- data/lib/puppet/provider/group/groupadd.rb +1 -1
- data/lib/puppet/provider/group/ldap.rb +3 -3
- data/lib/puppet/provider/group/pw.rb +1 -1
- data/lib/puppet/provider/package/apple.rb +1 -1
- data/lib/puppet/provider/package/apt.rb +5 -1
- data/lib/puppet/provider/package/aptitude.rb +1 -1
- data/lib/puppet/provider/package/aptrpm.rb +1 -1
- data/lib/puppet/provider/package/blastwave.rb +1 -1
- data/lib/puppet/provider/package/dpkg.rb +2 -2
- data/lib/puppet/provider/package/fink.rb +1 -1
- data/lib/puppet/provider/package/gem.rb +1 -1
- data/lib/puppet/provider/package/openbsd.rb +1 -1
- data/lib/puppet/provider/package/rpm.rb +1 -1
- data/lib/puppet/provider/package/rug.rb +1 -1
- data/lib/puppet/provider/package/sunfreeware.rb +2 -2
- data/lib/puppet/provider/package/up2date.rb +1 -1
- data/lib/puppet/provider/package/urpmi.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +1 -1
- data/lib/puppet/provider/package/zypper.rb +1 -1
- data/lib/puppet/provider/service/base.rb +1 -1
- data/lib/puppet/provider/service/bsd.rb +2 -2
- data/lib/puppet/provider/service/debian.rb +2 -2
- data/lib/puppet/provider/service/gentoo.rb +2 -2
- data/lib/puppet/provider/service/init.rb +2 -2
- data/lib/puppet/provider/service/redhat.rb +2 -2
- data/lib/puppet/provider/user/ldap.rb +3 -3
- data/lib/puppet/provider/user/pw.rb +1 -1
- data/lib/puppet/provider/user/user_role_add.rb +1 -1
- data/lib/puppet/provider/user/useradd.rb +1 -1
- data/lib/puppet/rails/host.rb +1 -0
- data/lib/puppet/reference/configuration.rb +37 -34
- data/lib/puppet/reference/indirection.rb +3 -4
- data/lib/puppet/reference/metaparameter.rb +0 -8
- data/lib/puppet/reference/network.rb +6 -4
- data/lib/puppet/reference/providers.rb +4 -4
- data/lib/puppet/reference/report.rb +5 -6
- data/lib/puppet/reference/type.rb +14 -14
- data/lib/puppet/reports/http.rb +1 -1
- data/lib/puppet/reports/rrdgraph.rb +8 -9
- data/lib/puppet/reports/store.rb +2 -2
- data/lib/puppet/reports/tagmail.rb +12 -13
- data/lib/puppet/resource.rb +15 -115
- data/lib/puppet/resource/catalog.rb +1 -1
- data/lib/puppet/resource/type.rb +26 -3
- data/lib/puppet/resource/type_collection.rb +3 -6
- data/lib/puppet/simple_graph.rb +4 -5
- data/lib/puppet/transaction/resource_harness.rb +1 -1
- data/lib/puppet/type.rb +100 -92
- data/lib/puppet/type/augeas.rb +44 -45
- data/lib/puppet/type/computer.rb +2 -2
- data/lib/puppet/type/cron.rb +29 -29
- data/lib/puppet/type/exec.rb +66 -67
- data/lib/puppet/type/file.rb +25 -25
- data/lib/puppet/type/file/content.rb +7 -1
- data/lib/puppet/type/file/ensure.rb +13 -13
- data/lib/puppet/type/file/mode.rb +6 -6
- data/lib/puppet/type/file/selcontext.rb +5 -5
- data/lib/puppet/type/file/source.rb +36 -26
- data/lib/puppet/type/filebucket.rb +5 -6
- data/lib/puppet/type/group.rb +1 -2
- data/lib/puppet/type/host.rb +3 -6
- data/lib/puppet/type/k5login.rb +3 -3
- data/lib/puppet/type/macauthorization.rb +1 -2
- data/lib/puppet/type/mailalias.rb +0 -1
- data/lib/puppet/type/maillist.rb +0 -1
- data/lib/puppet/type/mcx.rb +9 -9
- data/lib/puppet/type/mount.rb +9 -10
- data/lib/puppet/type/notify.rb +0 -1
- data/lib/puppet/type/package.rb +34 -36
- data/lib/puppet/type/resources.rb +1 -5
- data/lib/puppet/type/schedule.rb +9 -12
- data/lib/puppet/type/selboolean.rb +2 -7
- data/lib/puppet/type/selmodule.rb +3 -4
- data/lib/puppet/type/service.rb +9 -9
- data/lib/puppet/type/ssh_authorized_key.rb +2 -3
- data/lib/puppet/type/sshkey.rb +4 -7
- data/lib/puppet/type/stage.rb +5 -4
- data/lib/puppet/type/tidy.rb +3 -3
- data/lib/puppet/type/user.rb +1 -2
- data/lib/puppet/type/whit.rb +7 -0
- data/lib/puppet/type/yumrepo.rb +16 -3
- data/lib/puppet/type/zfs.rb +1 -2
- data/lib/puppet/type/zone.rb +28 -28
- data/lib/puppet/type/zpool.rb +10 -5
- data/lib/puppet/util/autoload.rb +17 -5
- data/lib/puppet/util/cacher.rb +15 -10
- data/lib/puppet/util/command_line/puppetdoc +5 -5
- data/lib/puppet/util/command_line/puppetrun +0 -2
- data/lib/puppet/util/command_line/ralsh +13 -13
- data/lib/puppet/util/docs.rb +5 -12
- data/lib/puppet/util/monkey_patches.rb +5 -2
- data/lib/puppet/util/nagios_maker.rb +4 -5
- data/lib/puppet/util/provider_features.rb +2 -2
- data/lib/puppet/util/rdoc.rb +1 -1
- data/lib/puppet/util/rdoc/parser.rb +5 -3
- data/lib/puppet/util/reference.rb +3 -52
- data/man/man5/puppet.conf.5 +2072 -1526
- data/man/man8/filebucket.8 +104 -106
- data/man/man8/pi.8 +14 -47
- data/man/man8/puppet.8 +8 -9
- data/man/man8/puppetca.8 +168 -129
- data/man/man8/puppetd.8 +282 -226
- data/man/man8/puppetdoc.8 +103 -103
- data/man/man8/puppetmasterd.8 +51 -71
- data/man/man8/puppetqd.8 +18 -53
- data/man/man8/puppetrun.8 +163 -143
- data/man/man8/ralsh.8 +77 -114
- data/spec/integration/indirector/bucket_file/rest_spec.rb +1 -0
- data/spec/integration/indirector/certificate/rest_spec.rb +1 -0
- data/spec/integration/indirector/certificate_request/rest_spec.rb +1 -0
- data/spec/integration/indirector/certificate_revocation_list/rest_spec.rb +1 -0
- data/spec/integration/indirector/report/rest_spec.rb +1 -0
- data/spec/integration/indirector/rest_spec.rb +1 -0
- data/spec/integration/network/server/webrick_spec.rb +1 -0
- data/spec/integration/parser/compiler_spec.rb +43 -0
- data/spec/integration/provider/mailalias/aliases_spec.rb +5 -5
- data/spec/integration/ssl/certificate_authority_spec.rb +1 -0
- data/spec/integration/ssl/certificate_request_spec.rb +1 -0
- data/spec/integration/ssl/certificate_revocation_list_spec.rb +1 -0
- data/spec/integration/ssl/host_spec.rb +1 -0
- data/spec/monkey_patches/add_confine_and_runnable_to_rspec_dsl.rb +0 -1
- data/spec/monkey_patches/publicize_methods.rb +11 -0
- data/spec/shared_behaviours/file_serving.rb +12 -1
- data/spec/spec_helper.rb +6 -25
- data/spec/unit/application/apply_spec.rb +22 -4
- data/spec/unit/application/cert_spec.rb +1 -1
- data/spec/unit/application/doc_spec.rb +0 -19
- data/spec/unit/application/master_spec.rb +1 -1
- data/spec/unit/application_spec.rb +2 -12
- data/spec/unit/indirector/node/ldap_spec.rb +19 -21
- data/spec/unit/indirector/yaml_spec.rb +18 -6
- data/spec/unit/network/http/rack/rest_spec.rb +3 -3
- data/spec/unit/network/http/webrick/rest_spec.rb +1 -0
- data/spec/unit/node/environment_spec.rb +32 -3
- data/spec/unit/node/facts_spec.rb +13 -2
- data/spec/unit/parameter/value_collection_spec.rb +2 -2
- data/spec/unit/parser/ast/leaf_spec.rb +4 -0
- data/spec/unit/parser/ast/resource_reference_spec.rb +0 -5
- data/spec/unit/parser/ast/resource_spec.rb +7 -0
- data/spec/unit/parser/compiler_spec.rb +12 -1
- data/spec/unit/parser/files_spec.rb +3 -3
- data/spec/unit/parser/functions/extlookup_spec.rb +95 -0
- data/spec/unit/parser/functions/include_spec.rb +33 -0
- data/spec/unit/parser/functions/require_spec.rb +1 -1
- data/spec/unit/parser/functions/tag_spec.rb +1 -0
- data/spec/unit/parser/lexer_spec.rb +10 -1
- data/spec/unit/parser/resource_spec.rb +3 -9
- data/spec/unit/parser/type_loader_spec.rb +1 -1
- data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +4 -2
- data/spec/unit/rails/resource_spec.rb +1 -1
- data/spec/unit/reports/tagmail_spec.rb +2 -2
- data/spec/unit/resource/catalog_spec.rb +1 -1
- data/spec/unit/resource/type_collection_spec.rb +35 -0
- data/spec/unit/resource/type_spec.rb +19 -1
- data/spec/unit/resource_spec.rb +0 -36
- data/spec/unit/simple_graph_spec.rb +12 -2
- data/spec/unit/transaction/resource_harness_spec.rb +1 -1
- data/spec/unit/type/file/content_spec.rb +2 -1
- data/spec/unit/type/schedule_spec.rb +1 -1
- data/spec/unit/type/service_spec.rb +8 -0
- data/spec/unit/type/user_spec.rb +5 -0
- data/spec/unit/util/backups_spec.rb +0 -1
- data/spec/unit/util/rdoc/parser_spec.rb +3 -3
- data/spec/unit/util/rdoc_spec.rb +13 -0
- data/test/certmgr/support.rb +2 -1
- data/test/language/parser.rb +6 -6
- data/test/lib/puppettest.rb +3 -23
- data/test/lib/puppettest/fakes.rb +1 -1
- data/test/lib/puppettest/support/assertions.rb +0 -2
- data/test/lib/puppettest/support/utils.rb +25 -20
- data/test/ral/manager/attributes.rb +4 -1
- metadata +15 -9
- data/conf/suse/puppet.suse.patch +0 -16
- data/ext/extlookup.rb +0 -181
- data/ext/puppetlast +0 -16
- data/tasks/rake/tracdocs.rake +0 -8
- data/test/lib/mocha_standalone.rb +0 -2
@@ -19,8 +19,8 @@ module Puppet::FileServing::IndirectionHooks
|
|
19
19
|
return PROTOCOL_MAP["file"] if request.key =~ /^#{::File::SEPARATOR}/
|
20
20
|
return PROTOCOL_MAP["file"] if request.protocol == "file"
|
21
21
|
|
22
|
-
# We're heading over the wire the protocol is 'puppet' and we've got a server name or we're not named 'puppet'
|
23
|
-
if request.protocol == "puppet" and (request.server or Puppet.settings[:name]
|
22
|
+
# We're heading over the wire the protocol is 'puppet' and we've got a server name or we're not named 'apply' or 'puppet'
|
23
|
+
if request.protocol == "puppet" and (request.server or !["puppet","apply"].include?(Puppet.settings[:name]))
|
24
24
|
return PROTOCOL_MAP["puppet"]
|
25
25
|
end
|
26
26
|
|
@@ -3,7 +3,7 @@ require 'puppet/indirector/memory'
|
|
3
3
|
|
4
4
|
class Puppet::Node::Facts::Memory < Puppet::Indirector::Memory
|
5
5
|
desc "Keep track of facts in memory but nowhere else. This is used for
|
6
|
-
one-time compiles, such as what the stand-alone
|
6
|
+
one-time compiles, such as what the stand-alone `puppet` does.
|
7
7
|
To use this terminus, you must load it with the data you want it
|
8
8
|
to contain."
|
9
9
|
end
|
@@ -3,7 +3,7 @@ require 'puppet/indirector/exec'
|
|
3
3
|
|
4
4
|
class Puppet::Node::Exec < Puppet::Indirector::Exec
|
5
5
|
desc "Call an external program to get node information. See
|
6
|
-
the
|
6
|
+
the [External Nodes](http://docs.puppetlabs.com/guides/external_nodes.html) page for more information."
|
7
7
|
include Puppet::Util
|
8
8
|
|
9
9
|
def command
|
@@ -3,9 +3,9 @@ require 'puppet/indirector/ldap'
|
|
3
3
|
|
4
4
|
class Puppet::Node::Ldap < Puppet::Indirector::Ldap
|
5
5
|
desc "Search in LDAP for node configuration information. See
|
6
|
-
the
|
6
|
+
the [LDAP Nodes](http://projects.puppetlabs.com/projects/puppet/wiki/Ldap_Nodes) page for more information. This will first
|
7
7
|
search for whatever the certificate name is, then (if that name
|
8
|
-
contains a
|
8
|
+
contains a `.`) for the short name, then `default`."
|
9
9
|
|
10
10
|
# The attributes that Puppet class information is stored in.
|
11
11
|
def class_attributes
|
@@ -19,30 +19,10 @@ class Puppet::Node::Ldap < Puppet::Indirector::Ldap
|
|
19
19
|
# LAK:NOTE Unfortunately, the ldap support is too stupid to throw anything
|
20
20
|
# but LDAP::ResultError, even on bad connections, so we are rough handed
|
21
21
|
# with our error handling.
|
22
|
-
def name2hash(name
|
22
|
+
def name2hash(name)
|
23
23
|
info = nil
|
24
|
-
ldapsearch(search_filter(name)) {
|
25
|
-
|
26
|
-
if info[:environment]
|
27
|
-
if name_env == info[:environment]
|
28
|
-
return info
|
29
|
-
else
|
30
|
-
info = nil
|
31
|
-
end
|
32
|
-
else
|
33
|
-
info_env = "production"
|
34
|
-
if name_env == info[:environment]
|
35
|
-
return info
|
36
|
-
else
|
37
|
-
info = nil
|
38
|
-
end
|
39
|
-
end
|
40
|
-
}
|
41
|
-
if node_type == 'parent'
|
42
|
-
raise Puppet::Error.new("Could not find node '#{name}' with environment '#{name_env}'")
|
43
|
-
end
|
44
|
-
|
45
|
-
info = name2hash('default',name_env,'parent')
|
24
|
+
ldapsearch(search_filter(name)) { |entry| info = entry2hash(entry) }
|
25
|
+
info
|
46
26
|
end
|
47
27
|
|
48
28
|
# Look for our node in ldap.
|
@@ -53,18 +33,9 @@ class Puppet::Node::Ldap < Puppet::Indirector::Ldap
|
|
53
33
|
|
54
34
|
node = nil
|
55
35
|
names.each do |name|
|
56
|
-
|
57
|
-
if facts.values["environment"]
|
58
|
-
name_env = facts.values["environment"]
|
59
|
-
else
|
60
|
-
name_env = "production"
|
61
|
-
end
|
62
|
-
info = name2hash(name,name_env,'child')
|
63
|
-
next if info == nil
|
36
|
+
next unless info = name2hash(name)
|
64
37
|
|
65
|
-
if info
|
66
|
-
break if node = info2node(request.key, info)
|
67
|
-
end
|
38
|
+
break if node = info2node(request.key, info)
|
68
39
|
end
|
69
40
|
|
70
41
|
node
|
@@ -200,29 +171,14 @@ class Puppet::Node::Ldap < Puppet::Indirector::Ldap
|
|
200
171
|
|
201
172
|
# Find information for our parent and merge it into the current info.
|
202
173
|
def find_and_merge_parent(parent, information)
|
203
|
-
|
204
|
-
if information[:environment]
|
205
|
-
name_env = information[:environment]
|
206
|
-
else
|
207
|
-
name_env = 'production'
|
208
|
-
end
|
209
|
-
|
210
|
-
parent_info = name2hash(parent,name_env,'parent')
|
211
|
-
if parent_info
|
174
|
+
parent_info = name2hash(parent) || raise(Puppet::Error.new("Could not find parent node '#{parent}'"))
|
212
175
|
information[:classes] += parent_info[:classes]
|
213
176
|
parent_info[:parameters].each do |param, value|
|
214
|
-
# Specifically test for whether it's set, so false values are handled
|
215
|
-
# correctly.
|
177
|
+
# Specifically test for whether it's set, so false values are handled correctly.
|
216
178
|
information[:parameters][param] = value unless information[:parameters].include?(param)
|
217
179
|
end
|
218
|
-
|
219
180
|
information[:environment] ||= parent_info[:environment]
|
220
181
|
parent_info[:parent]
|
221
|
-
else
|
222
|
-
raise Puppet::Error.new("Could not find parent node '#{parent}'")
|
223
|
-
nil
|
224
|
-
end
|
225
|
-
|
226
182
|
end
|
227
183
|
|
228
184
|
# Take a name and a hash, and return a node instance.
|
@@ -3,7 +3,7 @@ require 'puppet/indirector/memory'
|
|
3
3
|
|
4
4
|
class Puppet::Node::Memory < Puppet::Indirector::Memory
|
5
5
|
desc "Keep track of nodes in memory but nowhere else. This is used for
|
6
|
-
one-time compiles, such as what the stand-alone
|
6
|
+
one-time compiles, such as what the stand-alone `puppet` does.
|
7
7
|
To use this terminus, you must load it with the data you want it
|
8
8
|
to contain; it is only useful for developers and should generally not
|
9
9
|
be chosen by a normal user."
|
@@ -41,19 +41,16 @@ class Puppet::Indirector::Yaml < Puppet::Indirector::Terminus
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
-
# Get the yaml directory
|
45
|
-
def base
|
46
|
-
Puppet.run_mode.master? ? Puppet[:yamldir] : Puppet[:clientyamldir]
|
47
|
-
end
|
48
|
-
|
49
44
|
# Return the path to a given node's file.
|
50
|
-
def path(name)
|
51
|
-
|
45
|
+
def path(name,ext='.yaml')
|
46
|
+
base = Puppet.run_mode.master? ? Puppet[:yamldir] : Puppet[:clientyamldir]
|
47
|
+
File.join(base, self.class.indirection_name.to_s, name.to_s + ext)
|
52
48
|
end
|
53
49
|
|
54
|
-
# Do a glob on the yaml directory, loading each file found
|
55
50
|
def search(request)
|
56
|
-
Dir.glob(
|
51
|
+
Dir.glob(path(request.key,'')).collect do |file|
|
52
|
+
YAML.load_file(file)
|
53
|
+
end
|
57
54
|
end
|
58
55
|
|
59
56
|
private
|
@@ -37,6 +37,12 @@ module Puppet::Network::FormatHandler
|
|
37
37
|
instance
|
38
38
|
end
|
39
39
|
|
40
|
+
def self.create_serialized_formats(name,options = {},&block)
|
41
|
+
["application/x-#{name}", "application/#{name}", "text/x-#{name}", "text/#{name}"].each { |mime_type|
|
42
|
+
create name, {:mime => mime_type}.update(options), &block
|
43
|
+
}
|
44
|
+
end
|
45
|
+
|
40
46
|
def self.extended(klass)
|
41
47
|
klass.extend(ClassMethods)
|
42
48
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'puppet/network/format_handler'
|
2
2
|
|
3
|
-
Puppet::Network::FormatHandler.
|
3
|
+
Puppet::Network::FormatHandler.create_serialized_formats(:yaml) do
|
4
4
|
# Yaml doesn't need the class name; it's serialized.
|
5
5
|
def intern(klass, text)
|
6
6
|
YAML.load(text)
|
@@ -29,7 +29,7 @@ end
|
|
29
29
|
# This is a "special" format which is used for the moment only when sending facts
|
30
30
|
# as REST GET parameters (see Puppet::Configurer::FactHandler).
|
31
31
|
# This format combines a yaml serialization, then zlib compression and base64 encoding.
|
32
|
-
Puppet::Network::FormatHandler.
|
32
|
+
Puppet::Network::FormatHandler.create_serialized_formats(:b64_zlib_yaml) do
|
33
33
|
require 'base64'
|
34
34
|
|
35
35
|
def use_zlib?
|
@@ -127,7 +127,7 @@ Puppet::Network::FormatHandler.create(:raw, :mime => "application/x-raw", :weigh
|
|
127
127
|
end
|
128
128
|
end
|
129
129
|
|
130
|
-
Puppet::Network::FormatHandler.
|
130
|
+
Puppet::Network::FormatHandler.create_serialized_formats(:pson, :weight => 10, :required_methods => [:render_method, :intern_method]) do
|
131
131
|
confine :true => Puppet.features.pson?
|
132
132
|
|
133
133
|
def intern(klass, text)
|
@@ -159,4 +159,4 @@ Puppet::Network::FormatHandler.create(:pson, :mime => "text/pson", :weight => 10
|
|
159
159
|
end
|
160
160
|
|
161
161
|
# This is really only ever going to be used for Catalogs.
|
162
|
-
Puppet::Network::FormatHandler.
|
162
|
+
Puppet::Network::FormatHandler.create_serialized_formats(:dot, :required_methods => [:render_method])
|
@@ -117,7 +117,7 @@ module Puppet::Network::HTTP::Handler
|
|
117
117
|
result = indirection_request.model.search(indirection_request.key, indirection_request.to_hash)
|
118
118
|
|
119
119
|
if result.nil? or (result.is_a?(Array) and result.empty?)
|
120
|
-
return do_exception(response, "Could not find instances in #{indirection_request.indirection_name} with '#{indirection_request.
|
120
|
+
return do_exception(response, "Could not find instances in #{indirection_request.indirection_name} with '#{indirection_request.key}'", 404)
|
121
121
|
end
|
122
122
|
|
123
123
|
format = format_to_use(request)
|
@@ -41,7 +41,7 @@ class Puppet::Network::HTTP::RackREST < Puppet::Network::HTTP::RackHttpHandler
|
|
41
41
|
unless result.is_a?(File)
|
42
42
|
response.write result
|
43
43
|
else
|
44
|
-
response["Content-Length"] = result.stat.size
|
44
|
+
response["Content-Length"] = result.stat.size.to_s
|
45
45
|
response.body = RackFile.new(result)
|
46
46
|
end
|
47
47
|
end
|
@@ -3,6 +3,7 @@ require 'puppet/network/authconfig'
|
|
3
3
|
module Puppet
|
4
4
|
class Network::RestAuthConfig < Network::AuthConfig
|
5
5
|
|
6
|
+
extend MonitorMixin
|
6
7
|
attr_accessor :rights
|
7
8
|
|
8
9
|
DEFAULT_ACL = [
|
@@ -20,9 +21,11 @@ module Puppet
|
|
20
21
|
]
|
21
22
|
|
22
23
|
def self.main
|
23
|
-
|
24
|
-
|
25
|
-
|
24
|
+
synchronize do
|
25
|
+
add_acl = @main.nil?
|
26
|
+
super
|
27
|
+
@main.insert_default_acl if add_acl and !@main.exists?
|
28
|
+
end
|
26
29
|
@main
|
27
30
|
end
|
28
31
|
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'puppet/util/cacher'
|
2
|
+
require 'monitor'
|
2
3
|
|
3
4
|
# Just define it, so this class has fewer load dependencies.
|
4
5
|
class Puppet::Node
|
@@ -67,14 +68,23 @@ class Puppet::Node::Environment
|
|
67
68
|
|
68
69
|
def initialize(name)
|
69
70
|
@name = name
|
71
|
+
extend MonitorMixin
|
70
72
|
end
|
71
73
|
|
72
74
|
def known_resource_types
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
75
|
+
# This makes use of short circuit evaluation to get the right thread-safe
|
76
|
+
# per environment semantics with an efficient most common cases; we almost
|
77
|
+
# always just return our thread's known-resource types. Only at the start
|
78
|
+
# of a compilation (after our thread var has been set to nil) or when the
|
79
|
+
# environment has changed do we delve deeper.
|
80
|
+
Thread.current[:known_resource_types] = nil if (krt = Thread.current[:known_resource_types]) && krt.environment != self
|
81
|
+
Thread.current[:known_resource_types] ||= synchronize {
|
82
|
+
if @known_resource_types.nil? or @known_resource_types.stale?
|
83
|
+
@known_resource_types = Puppet::Resource::TypeCollection.new(self)
|
84
|
+
@known_resource_types.perform_initial_import
|
85
|
+
end
|
86
|
+
@known_resource_types
|
87
|
+
}
|
78
88
|
end
|
79
89
|
|
80
90
|
def module(name)
|
@@ -21,14 +21,14 @@ class Puppet::Parameter::ValueCollection
|
|
21
21
|
@doc += " Valid values are "
|
22
22
|
@doc += @strings.collect do |value|
|
23
23
|
if aliases = value.aliases and ! aliases.empty?
|
24
|
-
"
|
24
|
+
"`#{value.name}` (also called `#{aliases.join(", ")}`)"
|
25
25
|
else
|
26
|
-
"
|
26
|
+
"`#{value.name}`"
|
27
27
|
end
|
28
28
|
end.join(", ") + "."
|
29
29
|
end
|
30
30
|
|
31
|
-
@doc += " Values can match
|
31
|
+
@doc += " Values can match `" + regexes.join("`, `") + "`." unless regexes.empty?
|
32
32
|
end
|
33
33
|
|
34
34
|
@doc
|
@@ -33,11 +33,12 @@ class Resource < AST::ResourceReference
|
|
33
33
|
# This is where our implicit iteration takes place; if someone
|
34
34
|
# passed an array as the name, then we act just like the called us
|
35
35
|
# many times.
|
36
|
+
fully_qualified_type, resource_titles = scope.resolve_type_and_titles(type, resource_titles)
|
37
|
+
|
36
38
|
resource_titles.flatten.collect { |resource_title|
|
37
39
|
exceptwrap :type => Puppet::ParseError do
|
38
|
-
|
39
|
-
|
40
|
-
type, resource_title,
|
40
|
+
resource = Puppet::Parser::Resource.new(
|
41
|
+
fully_qualified_type, resource_title,
|
41
42
|
:parameters => paramobjects,
|
42
43
|
:file => self.file,
|
43
44
|
:line => self.line,
|
@@ -7,8 +7,15 @@ class Puppet::Parser::AST::ResourceReference < Puppet::Parser::AST::Branch
|
|
7
7
|
# Evaluate our object, but just return a simple array of the type
|
8
8
|
# and name.
|
9
9
|
def evaluate(scope)
|
10
|
-
titles = Array(title.safeevaluate(scope))
|
11
|
-
|
10
|
+
titles = Array(title.safeevaluate(scope))
|
11
|
+
|
12
|
+
a_type, titles = scope.resolve_type_and_titles(type, titles)
|
13
|
+
|
14
|
+
resources = titles.collect{ |a_title|
|
15
|
+
Puppet::Resource.new(a_type, a_title)
|
16
|
+
}
|
17
|
+
|
18
|
+
return(resources.length == 1 ? resources.pop : resources)
|
12
19
|
end
|
13
20
|
|
14
21
|
def to_s
|
@@ -19,7 +19,12 @@ class Puppet::Parser::Compiler
|
|
19
19
|
rescue => detail
|
20
20
|
puts detail.backtrace if Puppet[:trace]
|
21
21
|
raise Puppet::Error, "#{detail} on node #{node.name}"
|
22
|
-
|
22
|
+
ensure
|
23
|
+
# We get these from the environment and only cache them in a thread
|
24
|
+
# variable for the duration of the compilation.
|
25
|
+
Thread.current[:known_resource_types] = nil
|
26
|
+
Thread.current[:env_module_directories] = nil
|
27
|
+
end
|
23
28
|
|
24
29
|
attr_reader :node, :facts, :collections, :catalog, :node_scope, :resources, :relationships
|
25
30
|
|
@@ -51,13 +56,10 @@ class Puppet::Parser::Compiler
|
|
51
56
|
# Note that this will fail if the resource is not unique.
|
52
57
|
@catalog.add_resource(resource)
|
53
58
|
|
54
|
-
set_container_resource(scope, resource)
|
55
|
-
end
|
56
59
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
def set_container_resource(scope, resource)
|
60
|
+
# Add our container edge. If we're a class, then we get treated specially - we can
|
61
|
+
# control the stage that the class is applied in. Otherwise, we just
|
62
|
+
# get added to our parent container.
|
61
63
|
return if resource.type.to_s.downcase == "stage"
|
62
64
|
|
63
65
|
if resource.type.to_s.downcase != "class"
|
@@ -65,15 +67,14 @@ class Puppet::Parser::Compiler
|
|
65
67
|
return @catalog.add_edge(scope.resource, resource)
|
66
68
|
end
|
67
69
|
|
68
|
-
unless stage = @catalog.resource(:stage, resource[:stage] || :main)
|
70
|
+
unless stage = @catalog.resource(:stage, resource[:stage] || (scope && scope.resource && scope.resource[:stage]) || :main)
|
69
71
|
raise ArgumentError, "Could not find stage #{resource[:stage] || :main} specified by #{resource}"
|
70
72
|
end
|
71
73
|
|
74
|
+
resource[:stage] ||= stage.title unless stage.title == :main
|
72
75
|
@catalog.add_edge(stage, resource)
|
73
76
|
end
|
74
77
|
|
75
|
-
private :set_container_resource
|
76
|
-
|
77
78
|
# Do we use nodes found in the code, vs. the external node sources?
|
78
79
|
def ast_nodes?
|
79
80
|
known_resource_types.nodes?
|
@@ -284,10 +285,7 @@ class Puppet::Parser::Compiler
|
|
284
285
|
@main_resource = Puppet::Parser::Resource.new("class", :main, :scope => @topscope, :source => @main)
|
285
286
|
@topscope.resource = @main_resource
|
286
287
|
|
287
|
-
@
|
288
|
-
@catalog.add_resource(@main_resource)
|
289
|
-
|
290
|
-
set_container_resource(@topscope, @main_resource)
|
288
|
+
add_resource(@topscope, @main_resource)
|
291
289
|
|
292
290
|
@main_resource.evaluate
|
293
291
|
end
|
data/lib/puppet/parser/files.rb
CHANGED
@@ -24,7 +24,7 @@ module Puppet::Parser::Files
|
|
24
24
|
# Than that would be a "no."
|
25
25
|
end
|
26
26
|
abspat = File::expand_path(start, cwd)
|
27
|
-
[nil, Dir.glob(abspat + (File.extname(abspat).empty? ? '{
|
27
|
+
[nil, Dir.glob(abspat + (File.extname(abspat).empty? ? '{.pp,.rb}' : '' )).uniq.reject { |f| FileTest.directory?(f) }]
|
28
28
|
end
|
29
29
|
|
30
30
|
# Find the concrete file denoted by +file+. If +file+ is absolute,
|
@@ -20,7 +20,7 @@ module Puppet::Parser::Functions
|
|
20
20
|
@autoloader = Puppet::Util::Autoload.new(
|
21
21
|
self,
|
22
22
|
"puppet/parser/functions",
|
23
|
-
|
23
|
+
|
24
24
|
:wrap => false
|
25
25
|
)
|
26
26
|
end
|
@@ -94,7 +94,7 @@ module Puppet::Parser::Functions
|
|
94
94
|
ret += "Undocumented.\n"
|
95
95
|
end
|
96
96
|
|
97
|
-
ret += "\n\n-
|
97
|
+
ret += "\n\n- *Type*: #{hash[:type]}\n\n"
|
98
98
|
end
|
99
99
|
|
100
100
|
ret
|