puppet 0.24.6 → 0.24.7
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 +115 -0
- data/Rakefile +43 -14
- data/bin/puppetca +6 -5
- data/bin/puppetdoc +109 -15
- data/bin/ralsh +3 -1
- data/conf/redhat/puppet.spec +74 -48
- data/examples/mcx_dock_absent.pp +4 -0
- data/examples/mcx_dock_default.pp +118 -0
- data/examples/mcx_dock_full.pp +125 -0
- data/examples/mcx_dock_invalid.pp +9 -0
- data/examples/mcx_nogroup.pp +118 -0
- data/examples/mcx_notexists_absent.pp +4 -0
- data/ext/emacs/puppet-mode.el +1 -1
- data/lib/puppet.rb +1 -1
- data/lib/puppet/external/nagios/base.rb +114 -71
- data/lib/puppet/feature/base.rb +6 -0
- data/lib/puppet/indirector/yaml.rb +12 -3
- data/lib/puppet/module.rb +1 -1
- data/lib/puppet/network/client/master.rb +1 -1
- data/lib/puppet/network/xmlrpc/client.rb +3 -1
- data/lib/puppet/parameter.rb +1 -1
- data/lib/puppet/parser/ast.rb +15 -0
- data/lib/puppet/parser/ast/astarray.rb +1 -2
- data/lib/puppet/parser/ast/casestatement.rb +2 -0
- data/lib/puppet/parser/ast/collection.rb +2 -0
- data/lib/puppet/parser/ast/comparison_operator.rb +4 -0
- data/lib/puppet/parser/ast/definition.rb +2 -0
- data/lib/puppet/parser/ast/else.rb +3 -0
- data/lib/puppet/parser/ast/function.rb +19 -12
- data/lib/puppet/parser/ast/hostclass.rb +9 -1
- data/lib/puppet/parser/ast/ifstatement.rb +3 -0
- data/lib/puppet/parser/ast/node.rb +3 -0
- data/lib/puppet/parser/ast/resource.rb +3 -0
- data/lib/puppet/parser/ast/resource_defaults.rb +2 -0
- data/lib/puppet/parser/ast/resource_override.rb +3 -0
- data/lib/puppet/parser/ast/vardef.rb +3 -0
- data/lib/puppet/parser/functions.rb +14 -0
- data/lib/puppet/parser/functions/inline_template.rb +21 -0
- data/lib/puppet/parser/functions/template.rb +3 -2
- data/lib/puppet/parser/lexer.rb +56 -7
- data/lib/puppet/parser/parser.rb +114 -98
- data/lib/puppet/parser/parser_support.rb +24 -4
- data/lib/puppet/parser/resource/reference.rb +4 -3
- data/lib/puppet/parser/templatewrapper.rb +30 -22
- data/lib/puppet/property.rb +1 -1
- data/lib/puppet/property/list.rb +7 -2
- data/lib/puppet/property/ordered_list.rb +22 -0
- data/lib/puppet/provider/augeas/augeas.rb +189 -0
- data/lib/puppet/provider/computer/computer.rb +22 -0
- data/lib/puppet/provider/confine.rb +4 -1
- data/lib/puppet/provider/confine/variable.rb +13 -2
- data/lib/puppet/provider/confine_collection.rb +4 -1
- data/lib/puppet/provider/confiner.rb +1 -1
- data/lib/puppet/provider/group/directoryservice.rb +6 -3
- data/lib/puppet/provider/group/groupadd.rb +5 -2
- data/lib/puppet/provider/group/ldap.rb +11 -9
- data/lib/puppet/provider/group/netinfo.rb +8 -4
- data/lib/puppet/provider/group/pw.rb +5 -1
- data/lib/puppet/provider/host/netinfo.rb +5 -2
- data/lib/puppet/provider/macauthorization/macauthorization.rb +315 -0
- data/lib/puppet/provider/mcx/mcxcontent.rb +201 -0
- data/lib/puppet/provider/nameservice/directoryservice.rb +210 -107
- data/lib/puppet/provider/nameservice/netinfo.rb +7 -2
- data/lib/puppet/provider/package/appdmg.rb +0 -3
- data/lib/puppet/provider/package/apt.rb +6 -0
- data/lib/puppet/provider/package/rpm.rb +2 -0
- data/lib/puppet/provider/package/yum.rb +5 -1
- data/lib/puppet/provider/package/yumhelper.py +9 -0
- data/lib/puppet/provider/service/base.rb +9 -6
- data/lib/puppet/provider/service/daemontools.rb +25 -15
- data/lib/puppet/provider/service/debian.rb +6 -2
- data/lib/puppet/provider/service/freebsd.rb +5 -2
- data/lib/puppet/provider/service/gentoo.rb +6 -3
- data/lib/puppet/provider/service/init.rb +31 -21
- data/lib/puppet/provider/service/launchd.rb +195 -0
- data/lib/puppet/provider/service/redhat.rb +5 -2
- data/lib/puppet/provider/service/runit.rb +30 -20
- data/lib/puppet/provider/service/smf.rb +7 -4
- data/lib/puppet/provider/ssh_authorized_key/parsed.rb +21 -1
- data/lib/puppet/provider/user/directoryservice.rb +1 -0
- data/lib/puppet/provider/user/netinfo.rb +9 -3
- data/lib/puppet/provider/user/user_role_add.rb +43 -6
- data/lib/puppet/provider/zfs/solaris.rb +45 -0
- data/lib/puppet/provider/zone/solaris.rb +8 -4
- data/lib/puppet/provider/zpool/solaris.rb +116 -0
- data/lib/puppet/rails/database/003_add_environment_to_host.rb +9 -0
- data/lib/puppet/rails/database/schema.rb +1 -0
- data/lib/puppet/rails/host.rb +4 -0
- data/lib/puppet/reference/configuration.rb +1 -1
- data/lib/puppet/reports/tagmail.rb +15 -6
- data/lib/puppet/transaction/change.rb +3 -5
- data/lib/puppet/transportable.rb +1 -0
- data/lib/puppet/type/augeas.rb +155 -0
- data/lib/puppet/type/computer.rb +62 -0
- data/lib/puppet/type/exec.rb +2 -1
- data/lib/puppet/type/file.rb +1 -1
- data/lib/puppet/type/file/ensure.rb +8 -5
- data/lib/puppet/type/file/mode.rb +0 -14
- data/lib/puppet/type/file/owner.rb +32 -64
- data/lib/puppet/type/file/selcontext.rb +3 -8
- data/lib/puppet/type/group.rb +27 -45
- data/lib/puppet/type/k5login.rb +1 -1
- data/lib/puppet/type/macauthorization.rb +141 -0
- data/lib/puppet/type/mcx.rb +115 -0
- data/lib/puppet/type/mount.rb +1 -1
- data/lib/puppet/type/nagios_hostdependency.rb +3 -0
- data/lib/puppet/type/ssh_authorized_key.rb +16 -0
- data/lib/puppet/type/tidy.rb +43 -14
- data/lib/puppet/type/user.rb +25 -1
- data/lib/puppet/type/zfs.rb +51 -0
- data/lib/puppet/type/zone.rb +8 -0
- data/lib/puppet/type/zpool.rb +93 -0
- data/lib/puppet/util.rb +17 -38
- data/lib/puppet/util/file_locking.rb +44 -0
- data/lib/puppet/util/filetype.rb +3 -3
- data/lib/puppet/util/log.rb +1 -16
- data/lib/puppet/util/metric.rb +0 -5
- data/lib/puppet/util/rdoc.rb +85 -0
- data/lib/puppet/util/rdoc/code_objects.rb +219 -0
- data/lib/puppet/util/rdoc/generators/puppet_generator.rb +829 -0
- data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +1051 -0
- data/lib/puppet/util/rdoc/parser.rb +437 -0
- data/lib/puppet/util/selinux.rb +135 -63
- data/lib/puppet/util/settings.rb +136 -126
- data/lib/puppet/util/storage.rb +4 -2
- data/spec/Rakefile +91 -0
- data/spec/integration/checksum.rb +47 -0
- data/spec/integration/defaults.rb +47 -0
- data/spec/integration/file_serving/configuration.rb +43 -0
- data/spec/integration/file_serving/content.rb +18 -0
- data/spec/integration/file_serving/metadata.rb +18 -0
- data/spec/integration/indirector/direct_file_server.rb +80 -0
- data/spec/integration/indirector/file_content/file_server.rb +18 -0
- data/spec/integration/indirector/file_metadata/file_server.rb +18 -0
- data/spec/integration/indirector/module_files.rb +57 -0
- data/spec/integration/indirector/node/ldap.rb +15 -0
- data/spec/integration/indirector/rest.rb +464 -0
- data/spec/integration/network/server/mongrel.rb +48 -0
- data/spec/integration/network/server/webrick.rb +48 -0
- data/spec/integration/node.rb +93 -0
- data/spec/integration/node/catalog.rb +54 -0
- data/spec/integration/node/facts.rb +45 -0
- data/spec/integration/provider/package.rb +26 -0
- data/spec/integration/provider/service/init.rb +32 -0
- data/spec/integration/reference/providers.rb +17 -0
- data/spec/integration/reports.rb +14 -0
- data/spec/integration/transaction/report.rb +26 -0
- data/spec/integration/type/package.rb +22 -0
- data/spec/integration/util/file_locking.rb +36 -0
- data/spec/monkey_patches/add_confine_and_runnable_to_rspec_dsl.rb +46 -0
- data/spec/monkey_patches/alias_should_to_must.rb +5 -0
- data/spec/shared_behaviours/file_server_terminus.rb +42 -0
- data/spec/shared_behaviours/file_serving.rb +64 -0
- data/spec/shared_behaviours/memory_terminus.rb +32 -0
- data/spec/spec.opts +5 -0
- data/spec/spec_helper.rb +36 -0
- data/spec/unit/executables/client/certhandler.rb +122 -0
- data/spec/unit/file_serving/configuration.rb +224 -0
- data/spec/unit/file_serving/configuration/parser.rb +135 -0
- data/spec/unit/file_serving/content.rb +71 -0
- data/spec/unit/file_serving/file_base.rb +124 -0
- data/spec/unit/file_serving/fileset.rb +239 -0
- data/spec/unit/file_serving/indirection_hooks.rb +124 -0
- data/spec/unit/file_serving/metadata.rb +187 -0
- data/spec/unit/file_serving/mount.rb +143 -0
- data/spec/unit/file_serving/terminus_helper.rb +76 -0
- data/spec/unit/indirector.rb +152 -0
- data/spec/unit/indirector/catalog/compiler.rb +156 -0
- data/spec/unit/indirector/catalog/yaml.rb +25 -0
- data/spec/unit/indirector/checksum/file.rb +139 -0
- data/spec/unit/indirector/code.rb +33 -0
- data/spec/unit/indirector/direct_file_server.rb +89 -0
- data/spec/unit/indirector/envelope.rb +47 -0
- data/spec/unit/indirector/exec.rb +51 -0
- data/spec/unit/indirector/facts/facter.rb +76 -0
- data/spec/unit/indirector/facts/yaml.rb +26 -0
- data/spec/unit/indirector/file.rb +154 -0
- data/spec/unit/indirector/file_content/file.rb +18 -0
- data/spec/unit/indirector/file_content/file_server.rb +18 -0
- data/spec/unit/indirector/file_content/modules.rb +18 -0
- data/spec/unit/indirector/file_content/rest.rb +11 -0
- data/spec/unit/indirector/file_metadata/file.rb +52 -0
- data/spec/unit/indirector/file_metadata/file_server.rb +18 -0
- data/spec/unit/indirector/file_metadata/modules.rb +42 -0
- data/spec/unit/indirector/file_metadata/rest.rb +9 -0
- data/spec/unit/indirector/file_server.rb +184 -0
- data/spec/unit/indirector/indirection.rb +731 -0
- data/spec/unit/indirector/ldap.rb +143 -0
- data/spec/unit/indirector/memory.rb +29 -0
- data/spec/unit/indirector/module_files.rb +259 -0
- data/spec/unit/indirector/node/exec.rb +69 -0
- data/spec/unit/indirector/node/ldap.rb +424 -0
- data/spec/unit/indirector/node/memory.rb +19 -0
- data/spec/unit/indirector/node/plain.rb +19 -0
- data/spec/unit/indirector/node/rest.rb +13 -0
- data/spec/unit/indirector/node/yaml.rb +25 -0
- data/spec/unit/indirector/plain.rb +29 -0
- data/spec/unit/indirector/report/processor.rb +81 -0
- data/spec/unit/indirector/request.rb +87 -0
- data/spec/unit/indirector/rest.rb +372 -0
- data/spec/unit/indirector/ssl_rsa/file.rb +116 -0
- data/spec/unit/indirector/terminus.rb +245 -0
- data/spec/unit/indirector/yaml.rb +145 -0
- data/spec/unit/module.rb +247 -0
- data/spec/unit/network/client.rb +45 -0
- data/spec/unit/network/client/master.rb +442 -0
- data/spec/unit/network/handler/fileserver.rb +179 -0
- data/spec/unit/network/http.rb +35 -0
- data/spec/unit/network/http/mongrel.rb +117 -0
- data/spec/unit/network/http/mongrel/rest.rb +377 -0
- data/spec/unit/network/http/mongrel/xmlrpc.rb +0 -0
- data/spec/unit/network/http/webrick.rb +127 -0
- data/spec/unit/network/http/webrick/rest.rb +323 -0
- data/spec/unit/network/http/webrick/xmlrpc.rb +0 -0
- data/spec/unit/network/http_pool.rb +238 -0
- data/spec/unit/network/server.rb +316 -0
- data/spec/unit/network/xmlrpc/client.rb +13 -0
- data/spec/unit/node.rb +167 -0
- data/spec/unit/node/catalog.rb +864 -0
- data/spec/unit/node/environment.rb +37 -0
- data/spec/unit/node/facts.rb +44 -0
- data/spec/unit/other/checksum.rb +92 -0
- data/spec/unit/other/pgraph.rb +210 -0
- data/spec/unit/other/transaction.rb +33 -0
- data/spec/unit/other/transbucket.rb +172 -0
- data/spec/unit/other/transobject.rb +92 -0
- data/spec/unit/parameter.rb +24 -0
- data/spec/unit/parser/ast.rb +37 -0
- data/spec/unit/parser/ast/arithmetic_operator.rb +73 -0
- data/spec/unit/parser/ast/astarray.rb +66 -0
- data/spec/unit/parser/ast/boolean_operator.rb +53 -0
- data/spec/unit/parser/ast/collexpr.rb +92 -0
- data/spec/unit/parser/ast/comparison_operator.rb +92 -0
- data/spec/unit/parser/ast/definition.rb +195 -0
- data/spec/unit/parser/ast/function.rb +77 -0
- data/spec/unit/parser/ast/hostclass.rb +148 -0
- data/spec/unit/parser/ast/minus.rb +36 -0
- data/spec/unit/parser/ast/node.rb +125 -0
- data/spec/unit/parser/ast/nop.rb +20 -0
- data/spec/unit/parser/ast/not.rb +30 -0
- data/spec/unit/parser/ast/resource_override.rb +51 -0
- data/spec/unit/parser/ast/resource_reference.rb +63 -0
- data/spec/unit/parser/ast/vardef.rb +47 -0
- data/spec/unit/parser/collector.rb +426 -0
- data/spec/unit/parser/compiler.rb +561 -0
- data/spec/unit/parser/functions.rb +83 -0
- data/spec/unit/parser/functions/inline_template.rb +59 -0
- data/spec/unit/parser/functions/template.rb +62 -0
- data/spec/unit/parser/interpreter.rb +138 -0
- data/spec/unit/parser/lexer.rb +646 -0
- data/spec/unit/parser/parser.rb +228 -0
- data/spec/unit/parser/resource.rb +336 -0
- data/spec/unit/parser/resource/reference.rb +95 -0
- data/spec/unit/parser/scope.rb +87 -0
- data/spec/unit/parser/templatewrapper.rb +129 -0
- data/spec/unit/property.rb +35 -0
- data/spec/unit/property/keyvalue.rb +168 -0
- data/spec/unit/property/list.rb +156 -0
- data/spec/unit/property/ordered_list.rb +64 -0
- data/spec/unit/provider/augeas/augeas.rb +238 -0
- data/spec/unit/provider/confine.rb +78 -0
- data/spec/unit/provider/confine/exists.rb +81 -0
- data/spec/unit/provider/confine/false.rb +53 -0
- data/spec/unit/provider/confine/feature.rb +60 -0
- data/spec/unit/provider/confine/true.rb +53 -0
- data/spec/unit/provider/confine/variable.rb +107 -0
- data/spec/unit/provider/confine_collection.rb +134 -0
- data/spec/unit/provider/confiner.rb +63 -0
- data/spec/unit/provider/group/groupadd.rb +31 -0
- data/spec/unit/provider/group/ldap.rb +105 -0
- data/spec/unit/provider/ldap.rb +248 -0
- data/spec/unit/provider/macauthorization.rb +147 -0
- data/spec/unit/provider/mcx/mcxcontent.rb +175 -0
- data/spec/unit/provider/mount.rb +130 -0
- data/spec/unit/provider/mount/parsed.rb +185 -0
- data/spec/unit/provider/package/apt.rb +138 -0
- data/spec/unit/provider/package/dpkg.rb +163 -0
- data/spec/unit/provider/package/gem.rb +87 -0
- data/spec/unit/provider/package/hpux.rb +52 -0
- data/spec/unit/provider/selboolean.rb +37 -0
- data/spec/unit/provider/selmodule-example.pp +0 -0
- data/spec/unit/provider/selmodule.rb +66 -0
- data/spec/unit/provider/service/daemontools.rb +124 -0
- data/spec/unit/provider/service/launchd.rb +134 -0
- data/spec/unit/provider/service/runit.rb +117 -0
- data/spec/unit/provider/ssh_authorized_key/parsed.rb +102 -0
- data/spec/unit/provider/user/hpux.rb +25 -0
- data/spec/unit/provider/user/ldap.rb +279 -0
- data/spec/unit/provider/user/user_role_add.rb +249 -0
- data/spec/unit/provider/user/useradd.rb +115 -0
- data/spec/unit/provider/zfs/solaris.rb +87 -0
- data/spec/unit/provider/zone/solaris.rb +42 -0
- data/spec/unit/provider/zpool/solaris.rb +179 -0
- data/spec/unit/rails.rb +125 -0
- data/spec/unit/relationship.rb +149 -0
- data/spec/unit/reports.rb +61 -0
- data/spec/unit/resource_reference.rb +73 -0
- data/spec/unit/simple_graph.rb +280 -0
- data/spec/unit/transaction/change.rb +187 -0
- data/spec/unit/transaction/event.rb +25 -0
- data/spec/unit/transaction/report.rb +40 -0
- data/spec/unit/type.rb +64 -0
- data/spec/unit/type/augeas.rb +113 -0
- data/spec/unit/type/computer.rb +82 -0
- data/spec/unit/type/exec.rb +91 -0
- data/spec/unit/type/file.rb +155 -0
- data/spec/unit/type/file/ensure.rb +21 -0
- data/spec/unit/type/file/group.rb +118 -0
- data/spec/unit/type/file/owner.rb +132 -0
- data/spec/unit/type/file/selinux.rb +82 -0
- data/spec/unit/type/group.rb +40 -0
- data/spec/unit/type/macauthorization.rb +78 -0
- data/spec/unit/type/mcx.rb +108 -0
- data/spec/unit/type/mount.rb +219 -0
- data/spec/unit/type/nagios.rb +63 -0
- data/spec/unit/type/noop_metaparam.rb +38 -0
- data/spec/unit/type/package.rb +246 -0
- data/spec/unit/type/resources.rb +27 -0
- data/spec/unit/type/schedule.rb +339 -0
- data/spec/unit/type/selboolean.rb +47 -0
- data/spec/unit/type/selmodule.rb +18 -0
- data/spec/unit/type/service.rb +254 -0
- data/spec/unit/type/ssh_authorized_key.rb +106 -0
- data/spec/unit/type/tidy.rb +68 -0
- data/spec/unit/type/user.rb +260 -0
- data/spec/unit/type/zfs.rb +45 -0
- data/spec/unit/type/zone.rb +20 -0
- data/spec/unit/type/zpool.rb +110 -0
- data/spec/unit/util/checksums.rb +99 -0
- data/spec/unit/util/constant_inflector.rb +70 -0
- data/spec/unit/util/file_locking.rb +115 -0
- data/spec/unit/util/ldap/connection.rb +169 -0
- data/spec/unit/util/ldap/generator.rb +54 -0
- data/spec/unit/util/ldap/manager.rb +654 -0
- data/spec/unit/util/loadedfile.rb +65 -0
- data/spec/unit/util/log.rb +107 -0
- data/spec/unit/util/metric.rb +95 -0
- data/spec/unit/util/nagios_maker.rb +128 -0
- data/spec/unit/util/posix.rb +256 -0
- data/spec/unit/util/resource_template.rb +58 -0
- data/spec/unit/util/selinux.rb +219 -0
- data/spec/unit/util/settings.rb +847 -0
- data/spec/unit/util/storage.rb +248 -0
- data/spec/unit/util/tagging.rb +92 -0
- data/spec/unit/util/uri_helper.rb +41 -0
- data/spec/unit/util/user_attr.rb +47 -0
- data/spec/unit/util/warnings.rb +35 -0
- data/test/certmgr/support.rb +0 -6
- data/test/data/providers/ssh_authorized_key/parsed/authorized_keys +1 -0
- data/test/data/snippets/multilinecomments.pp +6 -0
- data/test/data/snippets/multipleclass.pp +9 -0
- data/test/language/functions.rb +11 -1
- data/test/language/snippets.rb +16 -0
- data/test/lib/puppettest/runnable_test.rb +1 -1
- data/test/network/handler/fileserver.rb +5 -0
- data/test/other/report.rb +0 -4
- data/test/ral/type/resources.rb +2 -19
- data/test/util/settings.rb +4 -4
- data/test/util/storage.rb +0 -24
- data/test/util/utiltest.rb +0 -33
- metadata +319 -26
- data/conf/debian/README.source +0 -2
- data/conf/debian/TODO.Debian +0 -1
- data/conf/debian/changelog +0 -257
- data/conf/debian/compat +0 -1
- data/conf/debian/control +0 -45
- data/conf/debian/copyright +0 -17
- data/conf/debian/docs +0 -1
- data/conf/debian/fileserver.conf +0 -12
- data/conf/debian/puppet.NEWS +0 -63
- data/conf/debian/puppet.conf +0 -8
- data/conf/debian/puppet.dirs +0 -7
- data/conf/debian/puppet.files +0 -6
- data/conf/debian/puppet.init +0 -64
- data/conf/debian/puppet.logrotate +0 -11
- data/conf/debian/puppet.postinst +0 -9
- data/conf/debian/puppet.postrm +0 -21
- data/conf/debian/puppet.preinst +0 -25
- data/conf/debian/puppetmaster.files +0 -4
- data/conf/debian/puppetmaster.init +0 -58
- data/conf/debian/rules +0 -115
- data/conf/debian/watch +0 -2
- data/lib/puppet/type/nagios_hostgroupescalation.rb +0 -3
@@ -18,6 +18,7 @@ class Puppet::Parser::Parser
|
|
18
18
|
attr_reader :version, :environment
|
19
19
|
attr_accessor :files
|
20
20
|
|
21
|
+
attr_accessor :lexer
|
21
22
|
|
22
23
|
# Add context to a message; useful for error messages and such.
|
23
24
|
def addcontext(message, obj = nil)
|
@@ -56,7 +57,9 @@ class Puppet::Parser::Parser
|
|
56
57
|
end
|
57
58
|
end
|
58
59
|
|
59
|
-
|
60
|
+
k = klass.new(hash)
|
61
|
+
k.doc = lexer.getcomment if !k.nil? and k.use_docs and k.doc.empty?
|
62
|
+
return k
|
60
63
|
end
|
61
64
|
|
62
65
|
# The fully qualifed name, with the full namespace.
|
@@ -272,6 +275,7 @@ class Puppet::Parser::Parser
|
|
272
275
|
end
|
273
276
|
code = options[:code]
|
274
277
|
parent = options[:parent]
|
278
|
+
doc = options[:doc]
|
275
279
|
|
276
280
|
# If the class is already defined, then add code to it.
|
277
281
|
if other = @astset.classes[name]
|
@@ -291,15 +295,25 @@ class Puppet::Parser::Parser
|
|
291
295
|
if tmp == ""
|
292
296
|
tmp = "main"
|
293
297
|
end
|
294
|
-
|
298
|
+
|
295
299
|
Puppet.debug addcontext("Adding code to %s" % tmp)
|
296
300
|
# Else, add our code to it.
|
297
301
|
if other.code and code
|
302
|
+
# promote if neededcodes to ASTArray so that we can append code
|
303
|
+
# ASTArray knows how to evaluate its members.
|
304
|
+
other.code = ast AST::ASTArray, :children => [other.code] unless other.code.is_a?(AST::ASTArray)
|
305
|
+
code = ast AST::ASTArray, :children => [code] unless code.is_a?(AST::ASTArray)
|
298
306
|
other.code.children += code.children
|
299
307
|
else
|
300
308
|
other.code ||= code
|
301
309
|
end
|
302
310
|
end
|
311
|
+
|
312
|
+
if other.doc and doc
|
313
|
+
other.doc += doc
|
314
|
+
else
|
315
|
+
other.doc ||= doc
|
316
|
+
end
|
303
317
|
else
|
304
318
|
# Define it anew.
|
305
319
|
# Note we're doing something somewhat weird here -- we're setting
|
@@ -308,6 +322,8 @@ class Puppet::Parser::Parser
|
|
308
322
|
args = {:namespace => name, :classname => name, :parser => self}
|
309
323
|
args[:code] = code if code
|
310
324
|
args[:parentclass] = parent if parent
|
325
|
+
args[:doc] = doc
|
326
|
+
|
311
327
|
@astset.classes[name] = ast AST::HostClass, args
|
312
328
|
end
|
313
329
|
|
@@ -332,7 +348,8 @@ class Puppet::Parser::Parser
|
|
332
348
|
:arguments => options[:arguments],
|
333
349
|
:code => options[:code],
|
334
350
|
:parser => self,
|
335
|
-
:classname => name
|
351
|
+
:classname => name,
|
352
|
+
:doc => options[:doc]
|
336
353
|
}
|
337
354
|
|
338
355
|
[:code, :arguments].each do |param|
|
@@ -346,6 +363,7 @@ class Puppet::Parser::Parser
|
|
346
363
|
# table, not according to namespaces.
|
347
364
|
def newnode(names, options = {})
|
348
365
|
names = [names] unless names.instance_of?(Array)
|
366
|
+
doc = lexer.getcomment
|
349
367
|
names.collect do |name|
|
350
368
|
name = name.to_s.downcase
|
351
369
|
if other = @astset.nodes[name]
|
@@ -354,7 +372,8 @@ class Puppet::Parser::Parser
|
|
354
372
|
name = name.to_s if name.is_a?(Symbol)
|
355
373
|
args = {
|
356
374
|
:name => name,
|
357
|
-
:parser => self
|
375
|
+
:parser => self,
|
376
|
+
:doc => doc
|
358
377
|
}
|
359
378
|
if options[:code]
|
360
379
|
args[:code] = options[:code]
|
@@ -395,6 +414,7 @@ class Puppet::Parser::Parser
|
|
395
414
|
self.string = string
|
396
415
|
end
|
397
416
|
begin
|
417
|
+
@yydebug = false
|
398
418
|
main = yyparse(@lexer,:scan)
|
399
419
|
rescue Racc::ParseError => except
|
400
420
|
error = Puppet::ParseError.new(except)
|
@@ -37,7 +37,7 @@ class Puppet::Parser::Resource::Reference < Puppet::ResourceReference
|
|
37
37
|
if self.title == :main
|
38
38
|
tmp = @scope.findclass("")
|
39
39
|
else
|
40
|
-
unless tmp = @scope.
|
40
|
+
unless tmp = @scope.parser.classes[self.title]
|
41
41
|
fail Puppet::ParseError, "Could not find class '%s'" % self.title
|
42
42
|
end
|
43
43
|
end
|
@@ -46,8 +46,9 @@ class Puppet::Parser::Resource::Reference < Puppet::ResourceReference
|
|
46
46
|
fail Puppet::ParseError, "Could not find node '%s'" % self.title
|
47
47
|
end
|
48
48
|
else # normal definitions
|
49
|
-
#
|
50
|
-
|
49
|
+
# The resource type is capitalized, so we have to downcase. Really,
|
50
|
+
# we should have a better interface for finding these, but eh.
|
51
|
+
tmp = @scope.parser.definitions[self.type.downcase]
|
51
52
|
end
|
52
53
|
|
53
54
|
if tmp
|
@@ -1,33 +1,18 @@
|
|
1
1
|
# A simple wrapper for templates, so they don't have full access to
|
2
2
|
# the scope objects.
|
3
3
|
class Puppet::Parser::TemplateWrapper
|
4
|
-
attr_accessor :scope, :file
|
4
|
+
attr_accessor :scope, :file, :string
|
5
5
|
include Puppet::Util
|
6
6
|
Puppet::Util.logmethods(self)
|
7
7
|
|
8
|
-
def initialize(scope
|
8
|
+
def initialize(scope)
|
9
9
|
@__scope__ = scope
|
10
|
-
@__file__ = Puppet::Module::find_template(filename, scope.compiler.environment)
|
11
|
-
|
12
|
-
unless FileTest.exists?(file)
|
13
|
-
raise Puppet::ParseError,
|
14
|
-
"Could not find template %s" % file
|
15
|
-
end
|
16
|
-
|
17
|
-
# We'll only ever not have a parser in testing, but, eh.
|
18
|
-
if scope.parser
|
19
|
-
scope.parser.watch_file(file)
|
20
|
-
end
|
21
10
|
end
|
22
11
|
|
23
12
|
def scope
|
24
13
|
@__scope__
|
25
14
|
end
|
26
15
|
|
27
|
-
def file
|
28
|
-
@__file__
|
29
|
-
end
|
30
|
-
|
31
16
|
# Should return true if a variable is defined, false if it is not
|
32
17
|
def has_variable?(name)
|
33
18
|
if scope.lookupvar(name.to_s, false) != :undefined
|
@@ -77,11 +62,34 @@ class Puppet::Parser::TemplateWrapper
|
|
77
62
|
end
|
78
63
|
end
|
79
64
|
|
80
|
-
def
|
65
|
+
def file=(filename)
|
66
|
+
@file = Puppet::Module::find_template(filename, scope.compiler.environment)
|
67
|
+
|
68
|
+
unless FileTest.exists?(file)
|
69
|
+
raise Puppet::ParseError,
|
70
|
+
"Could not find template %s" % file
|
71
|
+
end
|
72
|
+
|
73
|
+
# We'll only ever not have a parser in testing, but, eh.
|
74
|
+
if scope.parser
|
75
|
+
scope.parser.watch_file(file)
|
76
|
+
end
|
77
|
+
|
78
|
+
@string = File.read(file)
|
79
|
+
end
|
80
|
+
|
81
|
+
def result(string = nil)
|
82
|
+
if string
|
83
|
+
self.string = string
|
84
|
+
template_source = "inline template"
|
85
|
+
else
|
86
|
+
template_source = file
|
87
|
+
end
|
88
|
+
|
81
89
|
# Expose all the variables in our scope as instance variables of the
|
82
90
|
# current object, making it possible to access them without conflict
|
83
91
|
# to the regular methods.
|
84
|
-
benchmark(:debug, "Bound template variables for #{
|
92
|
+
benchmark(:debug, "Bound template variables for #{template_source}") do
|
85
93
|
scope.to_hash.each { |name, value|
|
86
94
|
if name.kind_of?(String)
|
87
95
|
realname = name.gsub(/[^\w]/, "_")
|
@@ -93,8 +101,8 @@ class Puppet::Parser::TemplateWrapper
|
|
93
101
|
end
|
94
102
|
|
95
103
|
result = nil
|
96
|
-
benchmark(:debug, "Interpolated template #{
|
97
|
-
template = ERB.new(
|
104
|
+
benchmark(:debug, "Interpolated template #{template_source}") do
|
105
|
+
template = ERB.new(self.string, 0, "-")
|
98
106
|
result = template.result(binding)
|
99
107
|
end
|
100
108
|
|
@@ -102,7 +110,7 @@ class Puppet::Parser::TemplateWrapper
|
|
102
110
|
end
|
103
111
|
|
104
112
|
def to_s
|
105
|
-
"template[%s]" % file
|
113
|
+
"template[%s]" % (file ? file : "inline")
|
106
114
|
end
|
107
115
|
end
|
108
116
|
|
data/lib/puppet/property.rb
CHANGED
@@ -485,7 +485,7 @@ class Property < Puppet::Parameter
|
|
485
485
|
end
|
486
486
|
|
487
487
|
# This doc will probably get overridden
|
488
|
-
@doc ||= "The basic property that the
|
488
|
+
@doc ||= "The basic property that the resource should be in."
|
489
489
|
end
|
490
490
|
|
491
491
|
def self.inherited(sub)
|
data/lib/puppet/property/list.rb
CHANGED
@@ -28,6 +28,11 @@ module Puppet
|
|
28
28
|
@resource[membership] == :inclusive
|
29
29
|
end
|
30
30
|
|
31
|
+
#dearrayify was motivated because to simplify the implementation of the OrderedList property
|
32
|
+
def dearrayify(array)
|
33
|
+
array.sort.join(delimiter)
|
34
|
+
end
|
35
|
+
|
31
36
|
def should
|
32
37
|
unless defined? @should and @should
|
33
38
|
return nil
|
@@ -39,7 +44,7 @@ module Puppet
|
|
39
44
|
members = add_should_with_current(members, retrieve)
|
40
45
|
end
|
41
46
|
|
42
|
-
members
|
47
|
+
dearrayify(members)
|
43
48
|
end
|
44
49
|
|
45
50
|
def delimiter
|
@@ -57,7 +62,7 @@ module Puppet
|
|
57
62
|
|
58
63
|
def prepare_is_for_comparison(is)
|
59
64
|
if is.is_a? Array
|
60
|
-
is = is
|
65
|
+
is = dearrayify(is)
|
61
66
|
end
|
62
67
|
is
|
63
68
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'puppet/property/list'
|
2
|
+
|
3
|
+
module Puppet
|
4
|
+
class Property
|
5
|
+
class OrderedList < List
|
6
|
+
|
7
|
+
def add_should_with_current(should, current)
|
8
|
+
if current.is_a?(Array)
|
9
|
+
#tricky trick
|
10
|
+
#Preserve all the current items in the list
|
11
|
+
#but move them to the back of the line
|
12
|
+
should = should + (current - should)
|
13
|
+
end
|
14
|
+
should
|
15
|
+
end
|
16
|
+
|
17
|
+
def dearrayify(array)
|
18
|
+
array.join(delimiter)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,189 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (C) 2008 Red Hat Inc.
|
3
|
+
#
|
4
|
+
# This library is free software; you can redistribute it and/or
|
5
|
+
# modify it under the terms of the GNU General Public
|
6
|
+
# License as published by the Free Software Foundation; either
|
7
|
+
# version 2 of the License, or (at your option) any later version.
|
8
|
+
#
|
9
|
+
# This library is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
12
|
+
# General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public
|
15
|
+
# License along with this library; if not, write to the Free Software
|
16
|
+
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
17
|
+
#
|
18
|
+
# Author: Bryan Kearney <bkearney@redhat.com>
|
19
|
+
|
20
|
+
require 'augeas' if Puppet.features.augeas?
|
21
|
+
|
22
|
+
Puppet::Type.type(:augeas).provide(:augeas) do
|
23
|
+
#class Puppet::Provider::Augeas < Puppet::Provider
|
24
|
+
include Puppet::Util
|
25
|
+
|
26
|
+
confine :true => Puppet.features.augeas?
|
27
|
+
|
28
|
+
has_features :parse_commands, :need_to_run?,:execute_changes
|
29
|
+
|
30
|
+
# Extracts an 2 dimensional array of commands which are in the
|
31
|
+
# form of command path value.
|
32
|
+
# The input can be
|
33
|
+
# - A string with one command
|
34
|
+
# - A string with many commands per line
|
35
|
+
# - An array of strings.
|
36
|
+
def parse_commands(data)
|
37
|
+
commands = Array.new()
|
38
|
+
if data.is_a?(String)
|
39
|
+
data.each_line do |line|
|
40
|
+
cmd_array = Array.new()
|
41
|
+
tokens = line.split(" ")
|
42
|
+
cmd = tokens.shift()
|
43
|
+
file = tokens.shift()
|
44
|
+
other = tokens.join(" ")
|
45
|
+
cmd_array << cmd if !cmd.nil?
|
46
|
+
cmd_array << file if !file.nil?
|
47
|
+
cmd_array << other if other != ""
|
48
|
+
commands << cmd_array
|
49
|
+
end
|
50
|
+
elsif data.is_a?(Array)
|
51
|
+
data.each do |datum|
|
52
|
+
commands.concat(parse_commands(datum))
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
return commands
|
57
|
+
end
|
58
|
+
|
59
|
+
def open_augeas
|
60
|
+
flags = 0
|
61
|
+
(flags = 1 << 2 ) if self.resource[:type_check] == :true
|
62
|
+
root = self.resource[:root]
|
63
|
+
load_path = self.resource[:load_path]
|
64
|
+
debug("Opening augeas with root #{root}, lens path #{load_path}, flags #{flags}")
|
65
|
+
Augeas.open(root, load_path,flags)
|
66
|
+
end
|
67
|
+
|
68
|
+
# Used by the need_to_run? method to process get filters. Returns
|
69
|
+
# true if there is a match, false if otherwise
|
70
|
+
# Assumes a syntax of get /files/path [COMPARATOR] value
|
71
|
+
def process_get(cmd_array)
|
72
|
+
return_value = false
|
73
|
+
|
74
|
+
#validate and tear apart the command
|
75
|
+
fail ("Invalid command: #{cmd_array.join(" ")}") if cmd_array.length < 4
|
76
|
+
cmd = cmd_array.shift()
|
77
|
+
path = cmd_array.shift()
|
78
|
+
comparator = cmd_array.shift()
|
79
|
+
arg = cmd_array.join(" ")
|
80
|
+
|
81
|
+
#check the value in augeas
|
82
|
+
aug = open_augeas()
|
83
|
+
result = aug.get(path) || ''
|
84
|
+
unless result.nil?
|
85
|
+
case comparator
|
86
|
+
when "!=":
|
87
|
+
return_value = true if !(result == arg)
|
88
|
+
when "=~":
|
89
|
+
regex = Regexp.new(arg)
|
90
|
+
loc = result=~ regex
|
91
|
+
return_value = true if ! loc.nil?
|
92
|
+
else
|
93
|
+
return_value = true if (result.send(comparator, arg))
|
94
|
+
end
|
95
|
+
end
|
96
|
+
return_value
|
97
|
+
end
|
98
|
+
|
99
|
+
# Used by the need_to_run? method to process match filters. Returns
|
100
|
+
# true if there is a match, false if otherwise
|
101
|
+
def process_match(cmd_array)
|
102
|
+
return_value = false
|
103
|
+
|
104
|
+
#validate and tear apart the command
|
105
|
+
fail("Invalid command: #{cmd_array.join(" ")}") if cmd_array.length < 4
|
106
|
+
cmd = cmd_array.shift()
|
107
|
+
path = cmd_array.shift()
|
108
|
+
verb = cmd_array.shift()
|
109
|
+
|
110
|
+
#Get the values from augeas
|
111
|
+
aug = open_augeas()
|
112
|
+
result = aug.match(path) || ''
|
113
|
+
# Now do the work
|
114
|
+
if (!result.nil?)
|
115
|
+
case verb
|
116
|
+
when "size":
|
117
|
+
fail("Invalid command: #{cmd_array.join(" ")}") if cmd_array.length != 2
|
118
|
+
comparator = cmd_array.shift()
|
119
|
+
arg = cmd_array.shift().to_i
|
120
|
+
return_value = true if (result.size.send(comparator, arg))
|
121
|
+
when "include":
|
122
|
+
arg = cmd_array.join(" ")
|
123
|
+
return_value = true if result.include?(arg)
|
124
|
+
when "==":
|
125
|
+
begin
|
126
|
+
arg = cmd_array.join(" ")
|
127
|
+
new_array = eval arg
|
128
|
+
return_value = true if result == new_array
|
129
|
+
rescue
|
130
|
+
fail("Invalid array in command: #{cmd_array.join(" ")}")
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
return_value
|
135
|
+
end
|
136
|
+
|
137
|
+
# Determines if augeas acutally needs to run.
|
138
|
+
def need_to_run?
|
139
|
+
return_value = true
|
140
|
+
filter = resource[:onlyif]
|
141
|
+
unless (filter == "")
|
142
|
+
cmd_array = filter.split
|
143
|
+
command = cmd_array[0];
|
144
|
+
cmd_array[1]= File.join(resource[:context], cmd_array[1])
|
145
|
+
begin
|
146
|
+
data = nil
|
147
|
+
case command
|
148
|
+
when "get" then return_value = process_get(cmd_array)
|
149
|
+
when "match" then return_value = process_match(cmd_array)
|
150
|
+
end
|
151
|
+
rescue Exception => e
|
152
|
+
fail("Error sending command '#{command}' with params #{cmd_array[1..-1].inspect}/#{e.message}")
|
153
|
+
end
|
154
|
+
end
|
155
|
+
return_value
|
156
|
+
end
|
157
|
+
|
158
|
+
# Actually execute the augeas changes.
|
159
|
+
def execute_changes
|
160
|
+
aug = open_augeas
|
161
|
+
commands = resource[:changes]
|
162
|
+
context = resource[:context]
|
163
|
+
commands.each do |cmd_array|
|
164
|
+
fail("invalid command #{cmd_array.join[" "]}") if cmd_array.length < 2
|
165
|
+
command = cmd_array[0]
|
166
|
+
cmd_array.shift()
|
167
|
+
cmd_array[0]=File.join(context, cmd_array[0])
|
168
|
+
debug("sending command '#{command}' with params #{cmd_array.inspect}")
|
169
|
+
begin
|
170
|
+
case command
|
171
|
+
when "set": aug.set(cmd_array[0], cmd_array[1])
|
172
|
+
when "rm", "remove": aug.rm(cmd_array[0])
|
173
|
+
when "clear": aug.clear(cmd_array[0])
|
174
|
+
when "insert", "ins": aug.insert(cmd_array[0])
|
175
|
+
else fail("Command '#{command}' is not supported")
|
176
|
+
end
|
177
|
+
rescue Exception => e
|
178
|
+
fail("Error sending command '#{command}' with params #{cmd_array.inspect}/#{e.message}")
|
179
|
+
end
|
180
|
+
end
|
181
|
+
success = aug.save()
|
182
|
+
if (success != true)
|
183
|
+
fail("Save failed with return code #{success}")
|
184
|
+
end
|
185
|
+
|
186
|
+
return :executed
|
187
|
+
end
|
188
|
+
|
189
|
+
end
|