puppet 0.24.9 → 0.25.0
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 +18680 -1241
- data/CHANGELOG.old +1705 -0
- data/LICENSE +2 -2
- data/README +1 -1
- data/README.queueing +126 -0
- data/README.rst +4 -4
- data/Rakefile +62 -216
- data/bin/filebucket +6 -117
- data/bin/pi +50 -0
- data/bin/puppet +7 -188
- data/bin/puppetdoc +7 -198
- data/bin/ralsh +4 -191
- data/conf/auth.conf +94 -0
- data/conf/gentoo/init.d/puppetmaster +30 -30
- data/conf/osx/PackageInfo.plist +30 -30
- data/conf/osx/createpackage.sh +23 -18
- data/conf/osx/preflight +8 -0
- data/conf/puppet-queue.conf +10 -0
- data/conf/redhat/client.init +52 -41
- data/conf/redhat/logrotate +1 -0
- data/conf/redhat/puppet.spec +74 -36
- data/conf/redhat/rundir-perms.patch +28 -0
- data/conf/redhat/server.init +48 -43
- data/conf/redhat/server.sysconfig +4 -4
- data/conf/solaris/smf/puppetd.xml +53 -53
- data/conf/solaris/smf/puppetmasterd.xml +53 -53
- data/conf/solaris/smf/svc-puppetd +4 -4
- data/conf/solaris/smf/svc-puppetmasterd +3 -3
- data/conf/suse/client.init +4 -4
- data/conf/suse/puppet.spec +14 -14
- data/conf/suse/server.init +17 -17
- data/examples/etc/init.d/sleeper +8 -8
- data/examples/mac_dscl.pp +2 -2
- data/examples/mac_dscl_revert.pp +1 -1
- data/examples/mcx_dock_default.pp +108 -108
- data/examples/mcx_dock_full.pp +108 -108
- data/examples/mcx_nogroup.pp +108 -108
- data/examples/modules/sample-module/lib/puppet/parser/functions/hostname_to_dn.rb +5 -5
- data/examples/modules/sample-module/manifests/init.pp +2 -2
- data/examples/relationships +1 -1
- data/ext/autotest/config +6 -6
- data/ext/bin/sleeper +12 -12
- data/ext/dbfix.sql +21 -21
- data/ext/emacs/puppet-mode.el +42 -41
- data/ext/extlookup.rb +183 -0
- data/ext/ldap/puppet.schema +2 -1
- data/ext/logcheck/puppet +1 -1
- data/ext/module_puppet +7 -7
- data/ext/nagios/check_puppet.rb +83 -83
- data/ext/nagios/naggen +302 -0
- data/ext/puppet-test +61 -18
- data/ext/puppetlisten/puppetlisten.rb +76 -0
- data/ext/puppetlisten/puppetrun.rb +39 -0
- data/ext/puppetstoredconfigclean.rb +29 -29
- data/ext/rack/README +73 -0
- data/ext/rack/files/apache2.conf +38 -0
- data/ext/rack/files/config.ru +18 -0
- data/ext/rack/manifest.pp +59 -0
- data/ext/vim/syntax/puppet.vim +54 -35
- data/install.rb +37 -26
- data/lib/puppet.rb +15 -227
- data/lib/puppet/agent.rb +134 -0
- data/lib/puppet/agent/locker.rb +42 -0
- data/lib/puppet/agent/runner.rb +65 -0
- data/lib/puppet/application.rb +313 -0
- data/lib/puppet/application/filebucket.rb +87 -0
- data/lib/puppet/application/pi.rb +214 -0
- data/lib/puppet/application/puppet.rb +177 -0
- data/lib/puppet/application/puppetca.rb +71 -0
- data/lib/puppet/application/puppetd.rb +256 -0
- data/lib/puppet/application/puppetdoc.rb +222 -0
- data/lib/puppet/application/puppetmasterd.rb +168 -0
- data/lib/puppet/application/puppetqd.rb +96 -0
- data/lib/puppet/application/puppetrun.rb +219 -0
- data/lib/puppet/application/ralsh.rb +168 -0
- data/lib/puppet/configurer.rb +177 -0
- data/lib/puppet/configurer/downloader.rb +79 -0
- data/lib/puppet/configurer/fact_handler.rb +68 -0
- data/lib/puppet/configurer/plugin_handler.rb +26 -0
- data/lib/puppet/daemon.rb +78 -28
- data/lib/puppet/defaults.rb +239 -166
- data/lib/puppet/dsl.rb +7 -7
- data/lib/puppet/external/dot.rb +271 -271
- data/lib/puppet/external/event-loop/better-definers.rb +298 -298
- data/lib/puppet/external/event-loop/event-loop.rb +274 -274
- data/lib/puppet/external/event-loop/signal-system.rb +163 -163
- data/lib/puppet/external/lock.rb +1 -1
- data/lib/puppet/external/nagios.rb +20 -20
- data/lib/puppet/external/nagios/base.rb +3 -3
- data/lib/puppet/external/nagios/grammar.ry +185 -0
- data/lib/puppet/external/nagios/makefile +9 -0
- data/lib/puppet/external/nagios/parser.rb +1 -1
- data/lib/puppet/feature/json.rb +2 -0
- data/lib/puppet/feature/rack.rb +24 -0
- data/lib/puppet/feature/rails.rb +23 -33
- data/lib/puppet/feature/rubygems.rb +6 -0
- data/lib/puppet/feature/stomp.rb +6 -0
- data/lib/puppet/file_serving/{file_base.rb → base.rb} +10 -9
- data/lib/puppet/file_serving/configuration.rb +61 -61
- data/lib/puppet/file_serving/configuration/parser.rb +24 -29
- data/lib/puppet/file_serving/content.rb +26 -11
- data/lib/puppet/file_serving/fileset.rb +54 -19
- data/lib/puppet/file_serving/indirection_hooks.rb +12 -24
- data/lib/puppet/file_serving/metadata.rb +8 -8
- data/lib/puppet/file_serving/mount.rb +9 -151
- data/lib/puppet/file_serving/mount/file.rb +126 -0
- data/lib/puppet/file_serving/mount/modules.rb +25 -0
- data/lib/puppet/file_serving/mount/plugins.rb +27 -0
- data/lib/puppet/file_serving/terminus_helper.rb +9 -4
- data/lib/puppet/indirector.rb +6 -4
- data/lib/puppet/indirector/active_record.rb +28 -0
- data/lib/puppet/indirector/catalog/active_record.rb +36 -0
- data/lib/puppet/indirector/catalog/compiler.rb +50 -24
- data/lib/puppet/indirector/catalog/queue.rb +5 -0
- data/lib/puppet/indirector/catalog/rest.rb +6 -0
- data/lib/puppet/indirector/catalog/yaml.rb +2 -4
- data/lib/puppet/indirector/certificate/ca.rb +9 -0
- data/lib/puppet/indirector/certificate/file.rb +9 -0
- data/lib/puppet/indirector/certificate/rest.rb +9 -0
- data/lib/puppet/indirector/certificate_request/ca.rb +14 -0
- data/lib/puppet/indirector/certificate_request/file.rb +8 -0
- data/lib/puppet/indirector/certificate_request/rest.rb +9 -0
- data/lib/puppet/indirector/certificate_revocation_list/ca.rb +8 -0
- data/lib/puppet/indirector/certificate_revocation_list/file.rb +8 -0
- data/lib/puppet/indirector/certificate_revocation_list/rest.rb +9 -0
- data/lib/puppet/indirector/direct_file_server.rb +4 -8
- data/lib/puppet/indirector/exec.rb +2 -6
- data/lib/puppet/indirector/facts/active_record.rb +36 -0
- data/lib/puppet/indirector/facts/facter.rb +30 -22
- data/lib/puppet/indirector/facts/rest.rb +6 -0
- data/lib/puppet/indirector/file.rb +1 -0
- data/lib/puppet/indirector/file_content/rest.rb +0 -1
- data/lib/puppet/indirector/file_metadata/file.rb +2 -2
- data/lib/puppet/indirector/file_metadata/rest.rb +0 -1
- data/lib/puppet/indirector/file_server.rb +31 -18
- data/lib/puppet/indirector/indirection.rb +46 -33
- data/lib/puppet/indirector/key/ca.rb +12 -0
- data/lib/puppet/indirector/key/file.rb +42 -0
- data/lib/puppet/indirector/node/active_record.rb +13 -0
- data/lib/puppet/indirector/node/ldap.rb +1 -1
- data/lib/puppet/indirector/queue.rb +83 -0
- data/lib/puppet/indirector/report/processor.rb +1 -1
- data/lib/puppet/indirector/report/rest.rb +7 -0
- data/lib/puppet/indirector/request.rb +158 -15
- data/lib/puppet/indirector/rest.rb +74 -36
- data/lib/puppet/indirector/runner/rest.rb +7 -0
- data/lib/puppet/indirector/ssl_file.rb +174 -0
- data/lib/puppet/indirector/terminus.rb +4 -4
- data/lib/puppet/indirector/yaml.rb +1 -1
- data/lib/puppet/metatype/manager.rb +3 -3
- data/lib/puppet/module.rb +99 -124
- data/lib/puppet/network/authconfig.rb +57 -42
- data/lib/puppet/network/authstore.rb +58 -10
- data/lib/puppet/network/client.rb +0 -2
- data/lib/puppet/network/client/ca.rb +1 -1
- data/lib/puppet/network/client/dipper.rb +7 -2
- data/lib/puppet/network/format.rb +123 -0
- data/lib/puppet/network/format_handler.rb +156 -0
- data/lib/puppet/network/formats.rb +123 -0
- data/lib/puppet/network/handler/filebucket.rb +1 -1
- data/lib/puppet/network/handler/fileserver.rb +43 -35
- data/lib/puppet/network/handler/master.rb +4 -4
- data/lib/puppet/network/handler/report.rb +1 -1
- data/lib/puppet/network/handler/resource.rb +16 -20
- data/lib/puppet/network/handler/runner.rb +9 -42
- data/lib/puppet/network/http.rb +4 -4
- data/lib/puppet/network/http/api.rb +4 -0
- data/lib/puppet/network/http/api/v1.rb +65 -0
- data/lib/puppet/network/http/handler.rb +163 -56
- data/lib/puppet/network/http/mongrel.rb +19 -15
- data/lib/puppet/network/http/mongrel/rest.rb +35 -17
- data/lib/puppet/network/http/rack.rb +62 -0
- data/lib/puppet/network/http/rack/httphandler.rb +34 -0
- data/lib/puppet/network/http/rack/rest.rb +79 -0
- data/lib/puppet/network/http/rack/xmlrpc.rb +65 -0
- data/lib/puppet/network/http/webrick.rb +89 -16
- data/lib/puppet/network/http/webrick/rest.rb +24 -11
- data/lib/puppet/network/http_pool.rb +28 -29
- data/lib/puppet/network/http_server/mongrel.rb +8 -10
- data/lib/puppet/network/http_server/webrick.rb +1 -3
- data/lib/puppet/network/rest_authconfig.rb +89 -0
- data/lib/puppet/network/rest_authorization.rb +25 -0
- data/lib/puppet/network/rights.rb +230 -27
- data/lib/puppet/network/server.rb +133 -31
- data/lib/puppet/network/xmlrpc/client.rb +5 -5
- data/lib/puppet/network/xmlrpc/webrick_servlet.rb +6 -6
- data/lib/puppet/node.rb +28 -21
- data/lib/puppet/node/environment.rb +48 -0
- data/lib/puppet/node/facts.rb +21 -0
- data/lib/puppet/parameter.rb +291 -219
- data/lib/puppet/parser/ast.rb +1 -0
- data/lib/puppet/parser/ast/astarray.rb +5 -1
- data/lib/puppet/parser/ast/boolean_operator.rb +3 -3
- data/lib/puppet/parser/ast/caseopt.rb +10 -0
- data/lib/puppet/parser/ast/casestatement.rb +12 -27
- data/lib/puppet/parser/ast/collection.rb +31 -0
- data/lib/puppet/parser/ast/collexpr.rb +18 -11
- data/lib/puppet/parser/ast/comparison_operator.rb +1 -1
- data/lib/puppet/parser/ast/definition.rb +6 -2
- data/lib/puppet/parser/ast/function.rb +7 -2
- data/lib/puppet/parser/ast/ifstatement.rb +11 -6
- data/lib/puppet/parser/ast/leaf.rb +106 -3
- data/lib/puppet/parser/ast/match_operator.rb +31 -0
- data/lib/puppet/parser/ast/node.rb +10 -6
- data/lib/puppet/parser/ast/resource_defaults.rb +2 -2
- data/lib/puppet/parser/ast/resource_override.rb +1 -1
- data/lib/puppet/parser/ast/resource_reference.rb +11 -3
- data/lib/puppet/parser/ast/selector.rb +14 -32
- data/lib/puppet/parser/ast/vardef.rb +1 -1
- data/lib/puppet/parser/collector.rb +67 -15
- data/lib/puppet/parser/compiler.rb +21 -53
- data/lib/puppet/parser/files.rb +92 -0
- data/lib/puppet/parser/functions.rb +3 -3
- data/lib/puppet/parser/functions/defined.rb +3 -3
- data/lib/puppet/parser/functions/fqdn_rand.rb +3 -3
- data/lib/puppet/parser/functions/inline_template.rb +4 -4
- data/lib/puppet/parser/functions/regsubst.rb +37 -35
- data/lib/puppet/parser/functions/require.rb +34 -0
- data/lib/puppet/parser/functions/shellquote.rb +41 -0
- data/lib/puppet/parser/functions/split.rb +29 -0
- data/lib/puppet/parser/functions/sprintf.rb +6 -6
- data/lib/puppet/parser/functions/template.rb +4 -4
- data/lib/puppet/parser/functions/versioncmp.rb +22 -1
- data/lib/puppet/parser/grammar.ra +812 -0
- data/lib/puppet/parser/interpreter.rb +4 -4
- data/lib/puppet/parser/lexer.rb +44 -15
- data/lib/puppet/parser/loaded_code.rb +115 -0
- data/lib/puppet/parser/makefile +8 -0
- data/lib/puppet/parser/parser.rb +1080 -928
- data/lib/puppet/parser/parser_support.rb +118 -96
- data/lib/puppet/parser/resource.rb +56 -126
- data/lib/puppet/parser/resource/param.rb +2 -76
- data/lib/puppet/parser/resource/reference.rb +15 -8
- data/lib/puppet/parser/scope.rb +68 -35
- data/lib/puppet/parser/templatewrapper.rb +8 -8
- data/lib/puppet/parser/yaml_trimmer.rb +11 -0
- data/lib/puppet/property.rb +69 -124
- data/lib/puppet/property/list.rb +3 -3
- data/lib/puppet/provider.rb +5 -5
- data/lib/puppet/provider/augeas/augeas.rb +119 -118
- data/lib/puppet/provider/computer/computer.rb +3 -3
- data/lib/puppet/provider/confine/variable.rb +1 -1
- data/lib/puppet/provider/cron/crontab.rb +8 -7
- data/lib/puppet/provider/group/directoryservice.rb +2 -2
- 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/host/parsed.rb +3 -3
- data/lib/puppet/provider/ldap.rb +1 -3
- data/lib/puppet/provider/macauthorization/macauthorization.rb +62 -55
- data/lib/puppet/provider/mailalias/aliases.rb +9 -1
- data/lib/puppet/provider/maillist/mailman.rb +8 -4
- data/lib/puppet/provider/mcx/mcxcontent.rb +11 -11
- data/lib/puppet/provider/mount/parsed.rb +2 -2
- data/lib/puppet/provider/nameservice.rb +6 -6
- data/lib/puppet/provider/nameservice/directoryservice.rb +83 -87
- data/lib/puppet/provider/package/appdmg.rb +10 -9
- data/lib/puppet/provider/package/apple.rb +1 -3
- data/lib/puppet/provider/package/apt.rb +5 -5
- data/lib/puppet/provider/package/aptitude.rb +1 -1
- data/lib/puppet/provider/package/aptrpm.rb +1 -1
- data/lib/puppet/provider/package/darwinport.rb +1 -1
- data/lib/puppet/provider/package/dpkg.rb +2 -2
- data/lib/puppet/provider/package/fink.rb +6 -6
- data/lib/puppet/provider/package/freebsd.rb +1 -1
- data/lib/puppet/provider/package/gem.rb +2 -2
- data/lib/puppet/provider/package/hpux.rb +5 -5
- data/lib/puppet/provider/package/pkgdmg.rb +30 -22
- data/lib/puppet/provider/package/portage.rb +1 -1
- data/lib/puppet/provider/package/ports.rb +1 -1
- data/lib/puppet/provider/package/rpm.rb +5 -5
- data/lib/puppet/provider/package/rug.rb +1 -1
- data/lib/puppet/provider/package/sun.rb +7 -7
- data/lib/puppet/provider/package/up2date.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +2 -2
- data/lib/puppet/provider/package/yumhelper.py +2 -2
- data/lib/puppet/provider/port/parsed.rb +1 -1
- data/lib/puppet/provider/selmodule/semodule.rb +3 -3
- data/lib/puppet/provider/service/base.rb +21 -12
- data/lib/puppet/provider/service/daemontools.rb +86 -49
- data/lib/puppet/provider/service/debian.rb +20 -12
- data/lib/puppet/provider/service/freebsd.rb +5 -5
- data/lib/puppet/provider/service/gentoo.rb +2 -2
- data/lib/puppet/provider/service/init.rb +21 -33
- data/lib/puppet/provider/service/launchd.rb +120 -48
- data/lib/puppet/provider/service/redhat.rb +12 -21
- data/lib/puppet/provider/service/runit.rb +19 -9
- data/lib/puppet/provider/service/smf.rb +49 -34
- data/lib/puppet/provider/ssh_authorized_key/parsed.rb +34 -0
- data/lib/puppet/provider/sshkey/parsed.rb +2 -2
- data/lib/puppet/provider/user/directoryservice.rb +12 -29
- data/lib/puppet/provider/user/hpux.rb +3 -3
- data/lib/puppet/provider/user/ldap.rb +2 -2
- data/lib/puppet/provider/zfs/solaris.rb +1 -1
- data/lib/puppet/provider/zone/solaris.rb +4 -4
- data/lib/puppet/provider/zpool/solaris.rb +3 -3
- data/lib/puppet/rails.rb +9 -9
- data/lib/puppet/rails/benchmark.rb +69 -0
- data/lib/puppet/rails/database/001_add_created_at_to_all_tables.rb +5 -5
- data/lib/puppet/rails/database/002_remove_duplicated_index_on_all_tables.rb +2 -2
- data/lib/puppet/rails/database/003_add_environment_to_host.rb +1 -1
- data/lib/puppet/rails/database/schema.rb +8 -8
- data/lib/puppet/rails/fact_value.rb +1 -1
- data/lib/puppet/rails/host.rb +211 -93
- data/lib/puppet/rails/param_name.rb +5 -1
- data/lib/puppet/rails/param_value.rb +29 -2
- data/lib/puppet/rails/puppet_tag.rb +5 -0
- data/lib/puppet/rails/resource.rb +120 -20
- data/lib/puppet/rails/resource_tag.rb +1 -1
- data/lib/puppet/rails/source_file.rb +1 -1
- data/lib/puppet/reference/configuration.rb +14 -14
- data/lib/puppet/reference/function.rb +1 -1
- data/lib/puppet/reference/metaparameter.rb +48 -0
- data/lib/puppet/reference/providers.rb +6 -6
- data/lib/puppet/reference/type.rb +1 -37
- data/lib/puppet/relationship.rb +57 -30
- data/lib/puppet/reports/rrdgraph.rb +4 -4
- data/lib/puppet/reports/store.rb +3 -3
- data/lib/puppet/reports/tagmail.rb +15 -15
- data/lib/puppet/resource.rb +265 -0
- data/lib/puppet/{node → resource}/catalog.rb +188 -112
- data/lib/puppet/{resource_reference.rb → resource/reference.rb} +46 -24
- data/lib/puppet/simple_graph.rb +165 -27
- data/lib/puppet/ssl.rb +7 -0
- data/lib/puppet/ssl/base.rb +62 -0
- data/lib/puppet/ssl/certificate.rb +34 -0
- data/lib/puppet/ssl/certificate_authority.rb +298 -0
- data/lib/puppet/ssl/certificate_authority/interface.rb +118 -0
- data/lib/puppet/ssl/certificate_factory.rb +145 -0
- data/lib/puppet/ssl/certificate_request.rb +51 -0
- data/lib/puppet/ssl/certificate_revocation_list.rb +86 -0
- data/lib/puppet/ssl/host.rb +271 -0
- data/lib/puppet/ssl/inventory.rb +52 -0
- data/lib/puppet/ssl/key.rb +56 -0
- data/lib/puppet/sslcertificates.rb +6 -6
- data/lib/puppet/sslcertificates/ca.rb +15 -15
- data/lib/puppet/sslcertificates/certificate.rb +4 -4
- data/lib/puppet/sslcertificates/inventory.rb +3 -3
- data/lib/puppet/transaction.rb +113 -139
- data/lib/puppet/transaction/change.rb +6 -6
- data/lib/puppet/transaction/event.rb +1 -1
- data/lib/puppet/transaction/report.rb +7 -1
- data/lib/puppet/transportable.rb +28 -28
- data/lib/puppet/type.rb +263 -688
- data/lib/puppet/type/augeas.rb +3 -2
- data/lib/puppet/type/component.rb +28 -95
- data/lib/puppet/type/computer.rb +10 -10
- data/lib/puppet/type/cron.rb +19 -14
- data/lib/puppet/type/exec.rb +21 -20
- data/lib/puppet/type/file.rb +306 -633
- data/lib/puppet/type/file/checksum.rb +10 -11
- data/lib/puppet/type/file/content.rb +83 -22
- data/lib/puppet/type/file/ensure.rb +15 -9
- data/lib/puppet/type/file/group.rb +7 -1
- data/lib/puppet/type/file/mode.rb +1 -1
- data/lib/puppet/type/file/owner.rb +9 -3
- data/lib/puppet/type/file/selcontext.rb +4 -4
- data/lib/puppet/type/file/source.rb +78 -179
- data/lib/puppet/type/file/target.rb +3 -3
- data/lib/puppet/type/file/type.rb +2 -2
- data/lib/puppet/type/filebucket.rb +33 -54
- data/lib/puppet/type/group.rb +8 -8
- data/lib/puppet/type/host.rb +7 -7
- data/lib/puppet/type/k5login.rb +2 -2
- data/lib/puppet/type/macauthorization.rb +77 -52
- data/lib/puppet/type/mailalias.rb +2 -2
- data/lib/puppet/type/maillist.rb +2 -2
- data/lib/puppet/type/mcx.rb +3 -3
- data/lib/puppet/type/mount.rb +16 -11
- data/lib/puppet/type/notify.rb +4 -4
- data/lib/puppet/type/package.rb +6 -28
- data/lib/puppet/type/port.rb +1 -1
- data/lib/puppet/type/resources.rb +19 -19
- data/lib/puppet/type/schedule.rb +18 -20
- data/lib/puppet/type/selmodule.rb +1 -1
- data/lib/puppet/type/service.rb +11 -7
- data/lib/puppet/type/ssh_authorized_key.rb +26 -9
- data/lib/puppet/type/sshkey.rb +2 -2
- data/lib/puppet/type/tidy.rb +285 -289
- data/lib/puppet/type/user.rb +9 -7
- data/lib/puppet/type/yumrepo.rb +17 -16
- data/lib/puppet/type/zone.rb +8 -7
- data/lib/puppet/util.rb +11 -36
- data/lib/puppet/util/autoload.rb +31 -19
- data/lib/puppet/util/autoload/file_cache.rb +115 -0
- data/lib/puppet/util/backups.rb +86 -0
- data/lib/puppet/util/cacher.rb +135 -0
- data/lib/puppet/util/checksums.rb +11 -1
- data/lib/puppet/util/classgen.rb +1 -1
- data/lib/puppet/util/config_store.rb +2 -2
- data/lib/puppet/util/constant_inflector.rb +1 -1
- data/lib/puppet/util/diff.rb +2 -2
- data/lib/puppet/util/docs.rb +9 -3
- data/lib/puppet/util/execution.rb +1 -1
- data/lib/puppet/util/feature.rb +27 -20
- data/lib/puppet/util/fileparsing.rb +3 -3
- data/lib/puppet/util/filetype.rb +8 -6
- data/lib/puppet/util/graph.rb +5 -5
- data/lib/puppet/util/inifile.rb +5 -5
- data/lib/puppet/util/json.rb +13 -0
- data/lib/puppet/util/ldap/connection.rb +2 -2
- data/lib/puppet/util/log.rb +48 -31
- data/lib/puppet/util/metric.rb +4 -4
- data/lib/puppet/util/monkey_patches.rb +43 -0
- data/lib/puppet/util/nagios_maker.rb +1 -1
- data/lib/puppet/util/package.rb +4 -4
- data/lib/puppet/util/pidlock.rb +59 -59
- data/lib/puppet/util/posix.rb +13 -52
- data/lib/puppet/util/provider_features.rb +3 -3
- data/lib/puppet/util/queue.rb +96 -0
- data/lib/puppet/util/queue/stomp.rb +47 -0
- data/lib/puppet/util/rails/cache_accumulator.rb +65 -0
- data/lib/puppet/util/rails/collection_merger.rb +0 -39
- data/lib/puppet/util/rails/reference_serializer.rb +17 -3
- data/lib/puppet/util/rdoc.rb +1 -0
- data/lib/puppet/util/rdoc/code_objects.rb +5 -1
- data/lib/puppet/util/rdoc/generators/puppet_generator.rb +5 -5
- data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +13 -13
- data/lib/puppet/util/rdoc/parser.rb +28 -32
- data/lib/puppet/util/reference.rb +29 -8
- data/lib/puppet/util/resource_template.rb +1 -1
- data/lib/puppet/util/selinux.rb +12 -6
- data/lib/puppet/util/settings.rb +203 -578
- data/lib/puppet/util/settings/boolean_setting.rb +33 -0
- data/lib/puppet/util/settings/file_setting.rb +119 -0
- data/lib/puppet/util/settings/setting.rb +110 -0
- data/lib/puppet/util/subclass_loader.rb +1 -1
- data/lib/puppet/util/suidmanager.rb +2 -2
- data/lib/puppet/util/tagging.rb +1 -1
- data/lib/puppet/util/warnings.rb +17 -9
- data/man/man8/filebucket.8 +2 -2
- data/man/man8/pi.8 +2 -2
- data/man/man8/puppet.8 +3 -4
- data/man/man8/puppet.conf.8 +63 -63
- data/man/man8/puppetca.8 +2 -2
- data/man/man8/puppetd.8 +2 -2
- data/man/man8/puppetdoc.8 +2 -2
- data/man/man8/puppetmasterd.8 +2 -2
- data/man/man8/puppetrun.8 +2 -2
- data/man/man8/ralsh.8 +3 -3
- data/sbin/puppetca +102 -0
- data/sbin/puppetd +159 -0
- data/sbin/puppetmasterd +66 -0
- data/sbin/puppetqd +53 -0
- data/sbin/puppetrun +130 -0
- data/spec/Rakefile +2 -2
- data/spec/integration/application/puppet.rb +33 -0
- data/spec/integration/bin/puppetmasterd.rb +110 -0
- data/spec/integration/configurer.rb +18 -0
- data/spec/integration/defaults.rb +158 -7
- data/spec/integration/file_serving/content.rb +2 -0
- data/spec/integration/file_serving/fileset.rb +14 -0
- data/spec/integration/file_serving/metadata.rb +2 -0
- data/spec/integration/file_serving/terminus_helper.rb +22 -0
- data/spec/integration/indirector/catalog/compiler.rb +67 -0
- data/spec/integration/indirector/catalog/queue.rb +61 -0
- data/spec/integration/indirector/certificate/rest.rb +69 -0
- data/spec/integration/indirector/certificate_request/rest.rb +89 -0
- data/spec/integration/indirector/certificate_revocation_list/rest.rb +77 -0
- data/spec/integration/indirector/direct_file_server.rb +16 -23
- data/spec/integration/indirector/file_content/file_server.rb +75 -0
- data/spec/integration/indirector/report/rest.rb +95 -0
- data/spec/integration/indirector/rest.rb +207 -147
- data/spec/integration/network/client.rb +19 -0
- data/spec/integration/network/formats.rb +110 -0
- data/spec/integration/network/handler.rb +25 -0
- data/spec/integration/network/server/mongrel.rb +26 -8
- data/spec/integration/network/server/webrick.rb +49 -11
- data/spec/integration/node/environment.rb +58 -0
- data/spec/integration/node/facts.rb +4 -2
- data/spec/integration/parser/compiler.rb +29 -0
- data/spec/integration/parser/functions/require.rb +67 -0
- data/spec/integration/provider/mailalias/aliases.rb +25 -0
- data/spec/integration/{node → resource}/catalog.rb +17 -10
- data/spec/integration/ssl/certificate_authority.rb +135 -0
- data/spec/integration/ssl/certificate_request.rb +59 -0
- data/spec/integration/ssl/certificate_revocation_list.rb +42 -0
- data/spec/integration/ssl/host.rb +90 -0
- data/spec/integration/transaction.rb +66 -0
- data/spec/integration/transaction/report.rb +2 -5
- data/spec/integration/type.rb +22 -0
- data/spec/integration/type/file.rb +458 -0
- data/spec/integration/type/package.rb +1 -1
- data/spec/integration/type/tidy.rb +27 -0
- data/spec/integration/util/autoload.rb +114 -0
- data/spec/integration/util/feature.rb +54 -0
- data/spec/integration/util/file_locking.rb +2 -1
- data/spec/integration/util/settings.rb +27 -0
- data/spec/lib/puppet_spec/files.rb +9 -0
- data/spec/monkey_patches/add_confine_and_runnable_to_rspec_dsl.rb +1 -0
- data/spec/monkey_patches/alias_should_to_must.rb +1 -0
- data/spec/shared_behaviours/file_server_terminus.rb +14 -11
- data/spec/shared_behaviours/file_serving.rb +13 -17
- data/spec/spec_helper.rb +22 -5
- data/spec/unit/agent.rb +259 -0
- data/spec/unit/agent/locker.rb +100 -0
- data/spec/unit/agent/runner.rb +118 -0
- data/spec/unit/application.rb +420 -0
- data/spec/unit/application/filebucket.rb +220 -0
- data/spec/unit/application/pi.rb +84 -0
- data/spec/unit/application/puppet.rb +404 -0
- data/spec/unit/application/puppetca.rb +142 -0
- data/spec/unit/application/puppetd.rb +502 -0
- data/spec/unit/application/puppetdoc.rb +345 -0
- data/spec/unit/application/puppetmasterd.rb +456 -0
- data/spec/unit/application/puppetqd.rb +186 -0
- data/spec/unit/application/puppetrun.rb +279 -0
- data/spec/unit/application/ralsh.rb +237 -0
- data/spec/unit/configurer.rb +232 -0
- data/spec/unit/configurer/downloader.rb +188 -0
- data/spec/unit/configurer/fact_handler.rb +150 -0
- data/spec/unit/configurer/plugin_handler.rb +112 -0
- data/spec/unit/daemon.rb +287 -0
- data/spec/unit/file_serving/{file_base.rb → base.rb} +39 -31
- data/spec/unit/file_serving/configuration.rb +104 -93
- data/spec/unit/file_serving/configuration/parser.rb +64 -18
- data/spec/unit/file_serving/content.rb +65 -26
- data/spec/unit/file_serving/fileset.rb +116 -14
- data/spec/unit/file_serving/indirection_hooks.rb +34 -95
- data/spec/unit/file_serving/metadata.rb +27 -40
- data/spec/unit/file_serving/mount.rb +7 -118
- data/spec/unit/file_serving/mount/file.rb +188 -0
- data/spec/unit/file_serving/mount/modules.rb +63 -0
- data/spec/unit/file_serving/mount/plugins.rb +61 -0
- data/spec/unit/file_serving/terminus_helper.rb +39 -27
- data/spec/unit/indirector.rb +6 -1
- data/spec/unit/indirector/active_record.rb +76 -0
- data/spec/unit/indirector/catalog/active_record.rb +122 -0
- data/spec/unit/indirector/catalog/compiler.rb +222 -118
- data/spec/unit/indirector/catalog/queue.rb +20 -0
- data/spec/unit/indirector/catalog/rest.rb +11 -0
- data/spec/unit/indirector/catalog/yaml.rb +6 -6
- data/spec/unit/indirector/certificate/ca.rb +28 -0
- data/spec/unit/indirector/certificate/file.rb +28 -0
- data/spec/unit/indirector/certificate/rest.rb +23 -0
- data/spec/unit/indirector/certificate_request/ca.rb +19 -0
- data/spec/unit/indirector/certificate_request/file.rb +19 -0
- data/spec/unit/indirector/certificate_request/rest.rb +23 -0
- data/spec/unit/indirector/certificate_revocation_list/ca.rb +21 -0
- data/spec/unit/indirector/certificate_revocation_list/file.rb +20 -0
- data/spec/unit/indirector/certificate_revocation_list/rest.rb +23 -0
- data/spec/unit/indirector/direct_file_server.rb +3 -8
- data/spec/unit/indirector/exec.rb +6 -1
- data/spec/unit/indirector/facts/active_record.rb +104 -0
- data/spec/unit/indirector/facts/facter.rb +53 -12
- data/spec/unit/indirector/facts/rest.rb +11 -0
- data/spec/unit/indirector/file.rb +8 -1
- data/spec/unit/indirector/file_metadata/file.rb +5 -5
- data/spec/unit/indirector/file_server.rb +181 -98
- data/spec/unit/indirector/indirection.rb +102 -38
- data/spec/unit/indirector/key/ca.rb +28 -0
- data/spec/unit/indirector/key/file.rb +104 -0
- data/spec/unit/indirector/node/active_record.rb +34 -0
- data/spec/unit/indirector/node/ldap.rb +1 -1
- data/spec/unit/indirector/node/rest.rb +2 -2
- data/spec/unit/indirector/queue.rb +123 -0
- data/spec/unit/indirector/report/rest.rb +28 -0
- data/spec/unit/indirector/request.rb +221 -0
- data/spec/unit/indirector/rest.rb +343 -334
- data/spec/unit/indirector/runner/rest.rb +11 -0
- data/spec/unit/indirector/ssl_file.rb +280 -0
- data/spec/unit/module.rb +180 -180
- data/spec/unit/network/authconfig.rb +292 -0
- data/spec/unit/network/authstore.rb +94 -0
- data/spec/unit/network/client.rb +2 -2
- data/spec/unit/network/client/dipper.rb +16 -0
- data/spec/unit/network/format.rb +191 -0
- data/spec/unit/network/format_handler.rb +306 -0
- data/spec/unit/network/formats.rb +249 -0
- data/spec/unit/network/handler/fileserver.rb +2 -5
- data/spec/unit/network/http.rb +3 -3
- data/spec/unit/network/http/api/v1.rb +122 -0
- data/spec/unit/network/http/handler.rb +448 -0
- data/spec/unit/network/http/mongrel.rb +46 -32
- data/spec/unit/network/http/mongrel/rest.rb +174 -319
- data/spec/unit/network/http/rack.rb +102 -0
- data/spec/unit/network/http/rack/rest.rb +199 -0
- data/spec/unit/network/http/rack/xmlrpc.rb +157 -0
- data/spec/unit/network/http/webrick.rb +249 -37
- data/spec/unit/network/http/webrick/rest.rb +113 -279
- data/spec/unit/network/http_pool.rb +86 -110
- data/spec/unit/network/rest_authconfig.rb +146 -0
- data/spec/unit/network/rest_authorization.rb +43 -0
- data/spec/unit/network/rights.rb +519 -0
- data/spec/unit/network/server.rb +475 -257
- data/spec/unit/node.rb +43 -10
- data/spec/unit/node/environment.rb +143 -9
- data/spec/unit/node/facts.rb +77 -24
- data/spec/unit/other/selinux.rb +85 -0
- data/spec/unit/other/transbucket.rb +29 -13
- data/spec/unit/other/transobject.rb +35 -15
- data/spec/unit/parameter.rb +378 -5
- data/spec/unit/parser/ast.rb +1 -1
- data/spec/unit/parser/ast/arithmetic_operator.rb +17 -17
- data/spec/unit/parser/ast/astarray.rb +16 -10
- data/spec/unit/parser/ast/boolean_operator.rb +2 -2
- data/spec/unit/parser/ast/casestatement.rb +143 -0
- data/spec/unit/parser/ast/collection.rb +63 -0
- data/spec/unit/parser/ast/collexpr.rb +31 -8
- data/spec/unit/parser/ast/comparison_operator.rb +9 -9
- data/spec/unit/parser/ast/definition.rb +18 -0
- data/spec/unit/parser/ast/function.rb +6 -0
- data/spec/unit/parser/ast/ifstatement.rb +75 -0
- data/spec/unit/parser/ast/leaf.rb +261 -0
- data/spec/unit/parser/ast/match_operator.rb +50 -0
- data/spec/unit/parser/ast/minus.rb +1 -1
- data/spec/unit/parser/ast/node.rb +20 -0
- data/spec/unit/parser/ast/not.rb +1 -1
- data/spec/unit/parser/ast/resource_override.rb +5 -5
- data/spec/unit/parser/ast/resource_reference.rb +11 -5
- data/spec/unit/parser/ast/selector.rb +156 -0
- data/spec/unit/parser/ast/vardef.rb +11 -11
- data/spec/unit/parser/collector.rb +167 -48
- data/spec/unit/parser/compiler.rb +128 -104
- data/spec/unit/parser/files.rb +190 -0
- data/spec/unit/parser/functions/inline_template.rb +0 -0
- data/spec/unit/parser/functions/regsubst.rb +42 -42
- data/spec/unit/parser/functions/require.rb +36 -0
- data/spec/unit/parser/functions/shellquote.rb +92 -0
- data/spec/unit/parser/functions/split.rb +51 -0
- data/spec/unit/parser/functions/sprintf.rb +11 -11
- data/spec/unit/parser/functions/template.rb +0 -0
- data/spec/unit/parser/functions/versioncmp.rb +2 -2
- data/spec/unit/parser/interpreter.rb +16 -7
- data/spec/unit/parser/lexer.rb +72 -12
- data/spec/unit/parser/loaded_code.rb +198 -0
- data/spec/unit/parser/parser.rb +215 -28
- data/spec/unit/parser/resource.rb +131 -22
- data/spec/unit/parser/scope.rb +207 -12
- data/spec/unit/parser/templatewrapper.rb +8 -3
- data/spec/unit/property.rb +270 -16
- data/spec/unit/property/list.rb +12 -6
- data/spec/unit/provider.rb +31 -0
- data/spec/unit/provider/augeas/augeas.rb +61 -33
- data/spec/unit/provider/macauthorization.rb +29 -29
- data/spec/unit/provider/mcx/mcxcontent.rb +4 -4
- data/spec/unit/provider/mount/parsed.rb +5 -8
- data/spec/unit/provider/naginator.rb +0 -0
- data/spec/unit/provider/package/apt.rb +6 -6
- data/spec/unit/provider/package/pkgdmg.rb +73 -0
- data/spec/unit/provider/selboolean.rb +1 -1
- data/spec/unit/provider/selmodule.rb +2 -2
- data/spec/unit/provider/service/daemontools.rb +40 -15
- data/spec/unit/provider/service/debian.rb +89 -0
- data/spec/unit/provider/service/init.rb +106 -0
- data/spec/unit/provider/service/launchd.rb +71 -13
- data/spec/unit/provider/service/redhat.rb +94 -0
- data/spec/unit/provider/service/runit.rb +14 -2
- data/spec/unit/provider/ssh_authorized_key/parsed.rb +66 -2
- data/spec/unit/provider/user/ldap.rb +1 -1
- data/spec/unit/provider/user/user_role_add.rb +1 -1
- data/spec/unit/provider/zfs/solaris.rb +18 -6
- data/spec/unit/provider/zone/solaris.rb +1 -1
- data/spec/unit/rails.rb +16 -22
- data/spec/unit/rails/host.rb +163 -0
- data/spec/unit/rails/param_value.rb +49 -0
- data/spec/unit/rails/resource.rb +87 -0
- data/spec/unit/relationship.rb +141 -29
- data/spec/unit/resource.rb +504 -0
- data/spec/unit/resource/catalog.rb +1061 -0
- data/spec/unit/resource/reference.rb +111 -0
- data/spec/unit/simple_graph.rb +448 -191
- data/spec/unit/ssl/certificate.rb +124 -0
- data/spec/unit/ssl/certificate_authority.rb +741 -0
- data/spec/unit/ssl/certificate_authority/interface.rb +269 -0
- data/spec/unit/ssl/certificate_factory.rb +107 -0
- data/spec/unit/ssl/certificate_request.rb +193 -0
- data/spec/unit/ssl/certificate_revocation_list.rb +180 -0
- data/spec/unit/ssl/host.rb +704 -0
- data/spec/unit/ssl/inventory.rb +180 -0
- data/spec/unit/ssl/key.rb +198 -0
- data/spec/unit/transaction.rb +65 -2
- data/spec/unit/transaction/change.rb +1 -1
- data/spec/unit/transaction/report.rb +1 -1
- data/spec/unit/type.rb +361 -8
- data/spec/unit/type/augeas.rb +30 -37
- data/spec/unit/type/component.rb +63 -0
- data/spec/unit/type/computer.rb +17 -21
- data/spec/unit/type/exec.rb +27 -2
- data/spec/unit/type/file.rb +704 -83
- data/spec/unit/type/file/content.rb +253 -15
- data/spec/unit/type/file/ensure.rb +65 -2
- data/spec/unit/type/file/group.rb +5 -0
- data/spec/unit/type/file/owner.rb +5 -0
- data/spec/unit/type/file/selinux.rb +12 -16
- data/spec/unit/type/file/source.rb +264 -0
- data/spec/unit/type/filebucket.rb +74 -0
- data/spec/unit/type/group.rb +1 -5
- data/spec/unit/type/macauthorization.rb +59 -26
- data/spec/unit/type/mcx.rb +8 -16
- data/spec/unit/type/mount.rb +8 -16
- data/spec/unit/type/noop_metaparam.rb +0 -2
- data/spec/unit/type/package.rb +13 -23
- data/spec/unit/type/resources.rb +4 -7
- data/spec/unit/type/schedule.rb +1 -7
- data/spec/unit/type/selboolean.rb +4 -6
- data/spec/unit/type/service.rb +23 -33
- data/spec/unit/type/ssh_authorized_key.rb +25 -14
- data/spec/unit/type/tidy.rb +329 -21
- data/spec/unit/type/user.rb +18 -10
- data/spec/unit/type/zfs.rb +6 -6
- data/spec/unit/util/autoload.rb +94 -3
- data/spec/unit/util/autoload/file_cache.rb +183 -0
- data/spec/unit/util/backups.rb +159 -0
- data/spec/unit/util/cache_accumulator.rb +69 -0
- data/spec/unit/util/cacher.rb +185 -0
- data/spec/unit/util/checksums.rb +9 -1
- data/spec/unit/util/feature.rb +72 -0
- data/spec/unit/util/filetype.rb +1 -11
- data/spec/unit/util/json.rb +21 -0
- data/spec/unit/util/log.rb +45 -0
- data/spec/unit/util/package.rb +2 -2
- data/spec/unit/util/queue.rb +88 -0
- data/spec/unit/util/queue/stomp.rb +140 -0
- data/spec/unit/util/reference_serializer.rb +52 -0
- data/spec/unit/util/selinux.rb +5 -3
- data/spec/unit/util/settings.rb +413 -264
- data/spec/unit/util/settings/file_setting.rb +223 -0
- data/spec/unit/util/storage.rb +11 -11
- data/spec/unit/util/warnings.rb +21 -17
- data/test/Rakefile +6 -5
- data/test/certmgr/ca.rb +5 -5
- data/test/certmgr/certmgr.rb +4 -4
- data/test/data/providers/cron/crontab.allthree +2 -2
- data/test/data/providers/cron/crontab.envNcomment +1 -1
- data/test/data/providers/cron/crontab.envNname +1 -1
- data/test/data/providers/cron/crontab.multirecords +1 -1
- data/test/data/providers/cron/crontab_collections.yaml +14 -14
- data/test/data/providers/cron/crontab_multiple_with_env.yaml +6 -6
- data/test/data/providers/cron/crontab_sample_records.yaml +102 -102
- data/test/data/providers/mailalias/aliases/test1 +28 -0
- data/test/data/providers/package/testpackages.yaml +6 -6
- data/test/data/reports/1.yaml +17 -17
- data/test/data/reports/tagmail_passers.conf +2 -2
- data/test/data/snippets/append.pp +5 -5
- data/test/data/snippets/casestatement.pp +9 -2
- data/test/data/snippets/classincludes.pp +1 -1
- data/test/data/snippets/collection_override.pp +8 -0
- data/test/data/snippets/fqparents.pp +2 -2
- data/test/data/snippets/ifexpression.pp +12 -0
- data/test/data/snippets/multilinecomments.pp +5 -1
- data/test/data/snippets/selectorvalues.pp +7 -0
- data/test/data/types/hosts/1 +1 -1
- data/test/data/types/hosts/2 +3 -3
- data/test/data/types/hosts/solaris +2 -2
- data/test/data/types/mount/freebsd.fstab +7 -7
- data/test/data/types/mount/solaris.fstab +10 -10
- data/test/data/types/port/1 +472 -472
- data/test/data/types/port/darwin +4347 -4347
- data/test/language/ast.rb +3 -2
- data/test/language/ast/casestatement.rb +12 -12
- data/test/language/ast/resource.rb +4 -4
- data/test/language/ast/resource_reference.rb +5 -5
- data/test/language/ast/selector.rb +11 -11
- data/test/language/ast/variable.rb +4 -4
- data/test/language/functions.rb +16 -16
- data/test/language/parser.rb +89 -111
- data/test/language/resource.rb +3 -88
- data/test/language/scope.rb +14 -55
- data/test/language/snippets.rb +31 -31
- data/test/lib/puppettest.rb +12 -12
- data/test/lib/puppettest/certificates.rb +2 -2
- data/test/lib/puppettest/exetest.rb +0 -1
- data/test/lib/puppettest/fakes.rb +1 -1
- data/test/lib/puppettest/parsertesting.rb +9 -4
- data/test/lib/puppettest/railstesting.rb +3 -3
- data/test/lib/puppettest/servertest.rb +1 -1
- data/test/lib/puppettest/support/assertions.rb +2 -2
- data/test/lib/puppettest/support/collection.rb +1 -1
- data/test/lib/puppettest/support/resources.rb +7 -7
- data/test/lib/puppettest/support/utils.rb +10 -16
- data/test/lib/puppettest/testcase.rb +2 -1
- data/test/network/authconfig.rb +1 -1
- data/test/network/authorization.rb +1 -1
- data/test/network/authstore.rb +57 -14
- data/test/network/client/ca.rb +1 -0
- data/test/network/client/resource.rb +12 -50
- data/test/network/client_request.rb +1 -1
- data/test/network/handler/bucket.rb +2 -2
- data/test/network/handler/fileserver.rb +17 -21
- data/test/network/handler/master.rb +5 -5
- data/test/network/handler/report.rb +3 -3
- data/test/network/handler/resource.rb +29 -75
- data/test/network/handler/runner.rb +8 -58
- data/test/network/rights.rb +1 -1
- data/test/network/server/mongrel_test.rb +15 -1
- data/test/network/server/webrick.rb +0 -36
- data/test/network/xmlrpc/webrick_servlet.rb +5 -5
- data/test/other/dsl.rb +3 -3
- data/test/other/events.rb +15 -15
- data/test/other/puppet.rb +2 -32
- data/test/other/relationships.rb +21 -148
- data/test/other/report.rb +20 -23
- data/test/other/transactions.rb +110 -298
- data/test/puppet/defaults.rb +1 -1
- data/test/puppet/tc_suidmanager.rb +1 -1
- data/test/rails/railsparameter.rb +4 -4
- data/test/ral/manager/attributes.rb +12 -68
- data/test/ral/manager/instances.rb +3 -19
- data/test/ral/manager/manager.rb +7 -7
- data/test/ral/manager/provider.rb +7 -7
- data/test/ral/manager/type.rb +54 -349
- data/test/ral/providers/cron/crontab.rb +14 -14
- data/test/ral/providers/group.rb +5 -6
- data/test/ral/providers/host/parsed.rb +3 -3
- data/test/ral/providers/mailalias/aliases.rb +4 -4
- data/test/ral/providers/package.rb +3 -3
- data/test/ral/providers/package/aptitude.rb +55 -55
- data/test/ral/providers/package/aptrpm.rb +7 -7
- data/test/ral/providers/parsedfile.rb +10 -14
- data/test/ral/providers/port/parsed.rb +6 -6
- data/test/ral/providers/provider.rb +10 -10
- data/test/ral/providers/service/base.rb +32 -32
- data/test/ral/providers/sshkey/parsed.rb +14 -14
- data/test/ral/providers/user.rb +16 -17
- data/test/ral/providers/user/useradd.rb +19 -22
- data/test/ral/type/cron.rb +21 -28
- data/test/ral/type/exec.rb +57 -60
- data/test/ral/type/file.rb +88 -862
- data/test/ral/type/file/target.rb +21 -70
- data/test/ral/type/fileignoresource.rb +37 -44
- data/test/ral/type/filesources.rb +43 -473
- data/test/ral/type/group.rb +6 -7
- data/test/ral/type/host.rb +14 -30
- data/test/ral/type/mailalias.rb +3 -3
- data/test/ral/type/port.rb +5 -5
- data/test/ral/type/resources.rb +37 -37
- data/test/ral/type/service.rb +3 -3
- data/test/ral/type/sshkey.rb +34 -39
- data/test/ral/type/user.rb +15 -14
- data/test/ral/type/yumrepo.rb +18 -17
- data/test/ral/type/zone.rb +4 -6
- data/test/test +9 -9
- data/test/util/fileparsing.rb +10 -10
- data/test/util/inifile.rb +6 -6
- data/test/util/instance_loader.rb +1 -1
- data/test/util/log.rb +2 -2
- data/test/util/metrics.rb +1 -6
- data/test/util/package.rb +1 -1
- data/test/util/pidlock.rb +116 -116
- data/test/util/settings.rb +40 -429
- data/test/util/storage.rb +5 -5
- data/test/util/subclass_loader.rb +0 -7
- data/test/util/utiltest.rb +10 -29
- metadata +1369 -941
- data/bin/puppetca +0 -363
- data/bin/puppetd +0 -439
- data/bin/puppetmasterd +0 -289
- data/bin/puppetrun +0 -369
- data/conf/redhat/lsb-config.patch +0 -51
- data/conf/redhat/no-chuser-0.15.1.patch +0 -38
- data/conf/redhat/no-lockdir.patch +0 -13
- data/examples/mac_netinfo.pp +0 -5
- data/ext/passenger/README +0 -63
- data/ext/passenger/apache2.conf +0 -29
- data/ext/passenger/config.ru +0 -40
- data/lib/puppet/config_stores/rest.rb +0 -60
- data/lib/puppet/executables/client/certhandler.rb +0 -82
- data/lib/puppet/indirector/file_content/modules.rb +0 -11
- data/lib/puppet/indirector/file_metadata/modules.rb +0 -17
- data/lib/puppet/indirector/module_files.rb +0 -82
- data/lib/puppet/indirector/ssl_rsa.rb +0 -5
- data/lib/puppet/indirector/ssl_rsa/file.rb +0 -33
- data/lib/puppet/network/client/master.rb +0 -524
- data/lib/puppet/network/http_server/rack.rb +0 -148
- data/lib/puppet/pgraph.rb +0 -121
- data/lib/puppet/provider/group/netinfo.rb +0 -15
- data/lib/puppet/provider/host/netinfo.rb +0 -19
- data/lib/puppet/provider/mount/netinfo.rb +0 -37
- data/lib/puppet/provider/nameservice/netinfo.rb +0 -224
- data/lib/puppet/provider/user/netinfo.rb +0 -111
- data/lib/puppet/util/fact_store.rb +0 -59
- data/lib/puppet/util/uri_helper.rb +0 -22
- data/spec/integration/file_serving/configuration.rb +0 -43
- data/spec/integration/indirector/module_files.rb +0 -57
- data/spec/unit/executables/client/certhandler.rb +0 -135
- data/spec/unit/indirector/file_content/modules.rb +0 -18
- data/spec/unit/indirector/file_metadata/modules.rb +0 -42
- data/spec/unit/indirector/module_files.rb +0 -259
- data/spec/unit/indirector/ssl_rsa/file.rb +0 -121
- data/spec/unit/network/client/master.rb +0 -442
- data/spec/unit/node/catalog.rb +0 -865
- data/spec/unit/other/pgraph.rb +0 -210
- data/spec/unit/resource_reference.rb +0 -73
- data/spec/unit/util/uri_helper.rb +0 -41
- data/test/data/snippets/ifexpression.rb +0 -6
- data/test/executables/filebucket.rb +0 -51
- data/test/executables/puppetbin.rb +0 -104
- data/test/executables/puppetca.rb +0 -115
- data/test/executables/puppetd.rb +0 -55
- data/test/executables/puppetmasterd.rb +0 -147
- data/test/network/client/client.rb +0 -195
- data/test/network/client/master.rb +0 -490
- data/test/network/daemon.rb +0 -70
- data/test/network/handler/handler.rb +0 -63
- data/test/other/overrides.rb +0 -107
- data/test/puppet/conffiles.rb +0 -107
- data/test/rails/ast.rb +0 -73
- data/test/rails/configuration.rb +0 -71
- data/test/rails/host.rb +0 -154
- data/test/rails/railsresource.rb +0 -251
- data/test/ral/providers/host/netinfo.rb +0 -56
- data/test/ral/providers/mount/netinfo.rb +0 -79
- data/test/ral/type/basic.rb +0 -85
- data/test/ral/type/filebucket.rb +0 -157
- data/test/ral/type/parameter.rb +0 -174
- data/test/ral/type/property.rb +0 -388
- data/test/ral/type/tidy.rb +0 -291
- data/test/util/autoload.rb +0 -145
- data/test/util/features.rb +0 -95
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'puppet/module'
|
2
|
+
require 'puppet/parser/parser'
|
3
|
+
|
4
|
+
# This is a silly central module for finding
|
5
|
+
# different kinds of files while parsing. This code
|
6
|
+
# doesn't really belong in the Puppet::Module class,
|
7
|
+
# but it doesn't really belong anywhere else, either.
|
8
|
+
module Puppet::Parser::Files
|
9
|
+
module_function
|
10
|
+
|
11
|
+
# Return a list of manifests (as absolute filenames) that match +pat+
|
12
|
+
# with the current directory set to +cwd+. If the first component of
|
13
|
+
# +pat+ does not contain any wildcards and is an existing module, return
|
14
|
+
# a list of manifests in that module matching the rest of +pat+
|
15
|
+
# Otherwise, try to find manifests matching +pat+ relative to +cwd+
|
16
|
+
def find_manifests(start, options = {})
|
17
|
+
cwd = options[:cwd] || Dir.getwd
|
18
|
+
module_name, pattern = split_file_path(start)
|
19
|
+
begin
|
20
|
+
if mod = Puppet::Module.find(module_name, options[:environment])
|
21
|
+
return mod.match_manifests(pattern)
|
22
|
+
end
|
23
|
+
rescue Puppet::Module::InvalidName
|
24
|
+
# Than that would be a "no."
|
25
|
+
end
|
26
|
+
abspat = File::expand_path(start, cwd)
|
27
|
+
files = Dir.glob(abspat).reject { |f| FileTest.directory?(f) }
|
28
|
+
if files.size == 0
|
29
|
+
files = Dir.glob(abspat + ".pp").reject { |f| FileTest.directory?(f) }
|
30
|
+
end
|
31
|
+
return files
|
32
|
+
end
|
33
|
+
|
34
|
+
# Find the concrete file denoted by +file+. If +file+ is absolute,
|
35
|
+
# return it directly. Otherwise try to find it as a template in a
|
36
|
+
# module. If that fails, return it relative to the +templatedir+ config
|
37
|
+
# param.
|
38
|
+
# In all cases, an absolute path is returned, which does not
|
39
|
+
# necessarily refer to an existing file
|
40
|
+
def find_template(template, environment = nil)
|
41
|
+
if template =~ /^#{File::SEPARATOR}/
|
42
|
+
return template
|
43
|
+
end
|
44
|
+
|
45
|
+
if template_paths = templatepath(environment)
|
46
|
+
# If we can find the template in :templatedir, we return that.
|
47
|
+
template_paths.collect { |path|
|
48
|
+
File::join(path, template)
|
49
|
+
}.each do |f|
|
50
|
+
return f if FileTest.exist?(f)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# check in the default template dir, if there is one
|
55
|
+
if td_file = find_template_in_module(template, environment)
|
56
|
+
return td_file
|
57
|
+
end
|
58
|
+
|
59
|
+
return nil
|
60
|
+
end
|
61
|
+
|
62
|
+
def find_template_in_module(template, environment = nil)
|
63
|
+
path, file = split_file_path(template)
|
64
|
+
|
65
|
+
# Because templates don't have an assumed template name, like manifests do,
|
66
|
+
# we treat templates with no name as being templates in the main template
|
67
|
+
# directory.
|
68
|
+
return nil unless file
|
69
|
+
|
70
|
+
if mod = Puppet::Module.find(path, environment) and t = mod.template(file)
|
71
|
+
return t
|
72
|
+
end
|
73
|
+
nil
|
74
|
+
end
|
75
|
+
|
76
|
+
# Return an array of paths by splitting the +templatedir+ config
|
77
|
+
# parameter.
|
78
|
+
def templatepath(environment = nil)
|
79
|
+
dirs = Puppet.settings.value(:templatedir, environment).split(":")
|
80
|
+
dirs.select do |p|
|
81
|
+
File::directory?(p)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
# Split the path into the module and the rest of the path, or return
|
86
|
+
# nil if the path is empty or absolute (starts with a /).
|
87
|
+
# This method can return nil & anyone calling it needs to handle that.
|
88
|
+
def split_file_path(path)
|
89
|
+
path.split(File::SEPARATOR, 2) unless path =~ /^(#{File::SEPARATOR}|$)/
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
@@ -113,14 +113,14 @@ module Functions
|
|
113
113
|
|
114
114
|
if @functions.include? name
|
115
115
|
case @functions[name][:type]
|
116
|
-
when :statement
|
117
|
-
when :rvalue
|
116
|
+
when :statement; return false
|
117
|
+
when :rvalue; return true
|
118
118
|
end
|
119
119
|
else
|
120
120
|
return false
|
121
121
|
end
|
122
122
|
end
|
123
|
-
|
123
|
+
|
124
124
|
# Runs a newfunction to create a function for each of the log levels
|
125
125
|
|
126
126
|
Puppet::Util::Log.levels.each do |level|
|
@@ -8,13 +8,13 @@ Puppet::Parser::Functions::newfunction(:defined, :type => :rvalue, :doc => "Dete
|
|
8
8
|
result = false
|
9
9
|
vals.each do |val|
|
10
10
|
case val
|
11
|
-
when String
|
11
|
+
when String
|
12
12
|
# For some reason, it doesn't want me to return from here.
|
13
|
-
if Puppet::Type.type(val) or
|
13
|
+
if Puppet::Type.type(val) or find_definition(val) or find_hostclass(val)
|
14
14
|
result = true
|
15
15
|
break
|
16
16
|
end
|
17
|
-
when Puppet::Parser::Resource::Reference
|
17
|
+
when Puppet::Parser::Resource::Reference
|
18
18
|
if findresource(val.to_s)
|
19
19
|
result = true
|
20
20
|
break
|
@@ -1,6 +1,6 @@
|
|
1
|
-
Puppet::Parser::Functions::newfunction(:fqdn_rand, :type => :rvalue, :doc =>
|
2
|
-
"Generates random numbers based on the node's fqdn. The first argument
|
3
|
-
sets the range. The second argument specifies a number to add to the
|
1
|
+
Puppet::Parser::Functions::newfunction(:fqdn_rand, :type => :rvalue, :doc =>
|
2
|
+
"Generates random numbers based on the node's fqdn. The first argument
|
3
|
+
sets the range. The second argument specifies a number to add to the
|
4
4
|
seed and is optional.") do |args|
|
5
5
|
require 'md5'
|
6
6
|
max = args[0]
|
@@ -1,7 +1,7 @@
|
|
1
|
-
Puppet::Parser::Functions::newfunction(:inline_template, :type => :rvalue, :doc =>
|
2
|
-
"Evaluate a template string and return its value. See `the templating docs
|
3
|
-
</trac/puppet/wiki/PuppetTemplating>`_ for more information. Note that
|
4
|
-
if multiple template strings are specified, their output is all concatenated
|
1
|
+
Puppet::Parser::Functions::newfunction(:inline_template, :type => :rvalue, :doc =>
|
2
|
+
"Evaluate a template string and return its value. See `the templating docs
|
3
|
+
</trac/puppet/wiki/PuppetTemplating>`_ for more information. Note that
|
4
|
+
if multiple template strings are specified, their output is all concatenated
|
5
5
|
and returned as the output of the function.") do |vals|
|
6
6
|
require 'erb'
|
7
7
|
|
@@ -1,7 +1,9 @@
|
|
1
1
|
module Puppet::Parser::Functions
|
2
2
|
newfunction(:regsubst, :type => :rvalue,
|
3
|
-
|
4
|
-
Perform regexp replacement on a string.
|
3
|
+
:doc => "
|
4
|
+
Perform regexp replacement on a string.
|
5
|
+
|
6
|
+
- **Parameters** (in order):
|
5
7
|
|
6
8
|
:str: The string to operate on.
|
7
9
|
|
@@ -17,13 +19,13 @@ module Puppet::Parser::Functions
|
|
17
19
|
- **G** Global replacement; all occurrences of the regexp in the string will be replaced. Without this, only the first occurrence will be replaced.
|
18
20
|
|
19
21
|
:lang: Optional. How to handle multibyte characters. A single-character string with the following values:
|
20
|
-
|
22
|
+
|
21
23
|
- **N** None
|
22
24
|
- **E** EUC
|
23
25
|
- **S** SJIS
|
24
26
|
- **U** UTF-8
|
25
27
|
|
26
|
-
**Examples**
|
28
|
+
- **Examples**
|
27
29
|
|
28
30
|
Get the third octet from the node's IP address::
|
29
31
|
|
@@ -34,36 +36,36 @@ Put angle brackets around each octet in the node's IP address::
|
|
34
36
|
$x = regsubst($ipaddress, '([0-9]+)', '<\\1>', 'G')
|
35
37
|
") \
|
36
38
|
do |args|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
39
|
+
flag_mapping = {
|
40
|
+
"E" => Regexp::EXTENDED,
|
41
|
+
"I" => Regexp::IGNORECASE,
|
42
|
+
"M" => Regexp::MULTILINE,
|
43
|
+
}
|
44
|
+
if args.length < 3 or args.length > 5
|
45
|
+
raise Puppet::ParseError, ("regsub(): wrong number of arguments" +
|
46
|
+
" (#{args.length}; min 3, max 5)")
|
47
|
+
end
|
48
|
+
str, regexp, replacement, flags, lang = args
|
49
|
+
reflags = 0
|
50
|
+
global = false
|
51
|
+
(flags or "").each_byte do |f|
|
52
|
+
f = f.chr
|
53
|
+
if f == "G"
|
54
|
+
global = true
|
55
|
+
else
|
56
|
+
fvalue = flag_mapping[f]
|
57
|
+
if !fvalue
|
58
|
+
raise Puppet::ParseError, "regsub(): bad flag `#{f}'"
|
59
|
+
end
|
60
|
+
reflags |= fvalue
|
61
|
+
end
|
62
|
+
end
|
63
|
+
re = Regexp.compile(regexp, reflags, lang)
|
64
|
+
if global
|
65
|
+
result = str.gsub(re, replacement)
|
66
|
+
else
|
67
|
+
result = str.sub(re, replacement)
|
68
|
+
end
|
69
|
+
return result
|
68
70
|
end
|
69
71
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# Requires the specified classes
|
2
|
+
Puppet::Parser::Functions::newfunction(:require,
|
3
|
+
:doc =>"Evaluate one or more classes, adding the required class as a dependency.
|
4
|
+
|
5
|
+
The relationship metaparameters work well for specifying relationships
|
6
|
+
between individual resources, but they can be clumsy for specifying
|
7
|
+
relationships between classes. This function is a superset of the
|
8
|
+
'include' function, adding a class relationship so that the requiring
|
9
|
+
class depends on the required class.
|
10
|
+
|
11
|
+
.. Warning::
|
12
|
+
using require in place of include can lead to unwanted dependency cycles.
|
13
|
+
For instance the following manifest, with 'require' instead of 'include'
|
14
|
+
would produce a nasty dependence cycle, because notify imposes a before
|
15
|
+
between File[/foo] and Service[foo]::
|
16
|
+
|
17
|
+
class myservice {
|
18
|
+
service { foo: ensure => running }
|
19
|
+
}
|
20
|
+
|
21
|
+
class otherstuff {
|
22
|
+
include myservice
|
23
|
+
file { '/foo': notify => Service[foo] }
|
24
|
+
}
|
25
|
+
|
26
|
+
") do |vals|
|
27
|
+
send(:function_include, vals)
|
28
|
+
vals = [vals] unless vals.is_a?(Array)
|
29
|
+
|
30
|
+
# add a relation from ourselves to each required klass
|
31
|
+
vals.each do |klass|
|
32
|
+
compiler.catalog.add_edge(resource, findresource(:class, klass))
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Puppet::Parser::Functions
|
2
|
+
|
3
|
+
Safe = 'a-zA-Z0-9@%_+=:,./-' # Safe unquoted
|
4
|
+
Dangerous = '!"`$\\' # Unsafe inside double quotes
|
5
|
+
|
6
|
+
newfunction(:shellquote, :type => :rvalue, :doc => "\
|
7
|
+
Quote and concatenate arguments for use in Bourne shell.
|
8
|
+
|
9
|
+
Each argument is quoted separately, and then all are concatenated
|
10
|
+
with spaces. If an argument is an array, the elements of that
|
11
|
+
array is interpolated within the rest of the arguments; this makes
|
12
|
+
it possible to have an array of arguments and pass that array to
|
13
|
+
shellquote() instead of having to specify specify each argument
|
14
|
+
individually in the call.
|
15
|
+
") \
|
16
|
+
do |args|
|
17
|
+
|
18
|
+
result = []
|
19
|
+
args.flatten.each do |word|
|
20
|
+
if word.length != 0 and word.count(Safe) == word.length
|
21
|
+
result << word
|
22
|
+
elsif word.count(Dangerous) == 0
|
23
|
+
result << ('"' + word + '"')
|
24
|
+
elsif word.count("'") == 0
|
25
|
+
result << ("'" + word + "'")
|
26
|
+
else
|
27
|
+
r = '"'
|
28
|
+
word.each_byte() do |c|
|
29
|
+
if Dangerous.include?(c)
|
30
|
+
r += "\\"
|
31
|
+
end
|
32
|
+
r += c.chr()
|
33
|
+
end
|
34
|
+
r += '"'
|
35
|
+
result << r
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
return result.join(" ")
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Puppet::Parser::Functions
|
2
|
+
newfunction(:split, :type => :rvalue,
|
3
|
+
:doc => "\
|
4
|
+
Split a string variable into an array using the specified split regexp.
|
5
|
+
|
6
|
+
Usage::
|
7
|
+
|
8
|
+
$string = 'v1.v2:v3.v4'
|
9
|
+
$array_var1 = split($string, ':')
|
10
|
+
$array_var2 = split($string, '[.]')
|
11
|
+
$array_var3 = split($string, '[.:]')
|
12
|
+
|
13
|
+
$array_var1 now holds the result ['v1.v2', 'v3.v4'],
|
14
|
+
while $array_var2 holds ['v1', 'v2:v3', 'v4'], and
|
15
|
+
$array_var3 holds ['v1', 'v2', 'v3', 'v4'].
|
16
|
+
|
17
|
+
Note that in the second example, we split on a string that contains
|
18
|
+
a regexp meta-character (.), and that needs protection. A simple
|
19
|
+
way to do that for a single character is to enclose it in square
|
20
|
+
brackets.") do |args|
|
21
|
+
|
22
|
+
if args.length != 2
|
23
|
+
raise Puppet::ParseError, ("split(): wrong number of arguments" +
|
24
|
+
" (#{args.length}; must be 2)")
|
25
|
+
end
|
26
|
+
|
27
|
+
return args[0].split(Regexp.compile(args[1]))
|
28
|
+
end
|
29
|
+
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
module Puppet::Parser::Functions
|
2
2
|
newfunction(:sprintf, :type => :rvalue,
|
3
|
-
|
3
|
+
:doc => "Perform printf-style formatting of text.
|
4
4
|
|
5
5
|
The first parameter is format string describing how the rest of the parameters should be formatted. See the documentation for the ``Kernel::sprintf()`` function in Ruby for all the details.") do |args|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
6
|
+
if args.length < 1
|
7
|
+
raise Puppet::ParseError, 'sprintf() needs at least one argument'
|
8
|
+
end
|
9
|
+
fmt = args.shift()
|
10
|
+
return sprintf(fmt, *args)
|
11
11
|
end
|
12
12
|
end
|
@@ -1,7 +1,7 @@
|
|
1
|
-
Puppet::Parser::Functions::newfunction(:template, :type => :rvalue, :doc =>
|
2
|
-
"Evaluate a template and return its value. See `the templating docs
|
3
|
-
</trac/puppet/wiki/PuppetTemplating>`_ for more information. Note that
|
4
|
-
if multiple templates are specified, their output is all concatenated
|
1
|
+
Puppet::Parser::Functions::newfunction(:template, :type => :rvalue, :doc =>
|
2
|
+
"Evaluate a template and return its value. See `the templating docs
|
3
|
+
</trac/puppet/wiki/PuppetTemplating>`_ for more information. Note that
|
4
|
+
if multiple templates are specified, their output is all concatenated
|
5
5
|
and returned as the output of the function.") do |vals|
|
6
6
|
require 'erb'
|
7
7
|
|
@@ -1,6 +1,27 @@
|
|
1
1
|
require 'puppet/util/package'
|
2
2
|
|
3
|
-
Puppet::Parser::Functions::newfunction(:versioncmp,
|
3
|
+
Puppet::Parser::Functions::newfunction(:versioncmp, :type => :rvalue,
|
4
|
+
:doc => "Compares two versions
|
5
|
+
|
6
|
+
Prototype::
|
7
|
+
|
8
|
+
\$result = versioncmp(a, b)
|
9
|
+
|
10
|
+
where a and b are arbitrary version strings
|
11
|
+
|
12
|
+
This functions returns a number::
|
13
|
+
|
14
|
+
* > 0 if version a is greater than version b
|
15
|
+
* == 0 if both version are equals
|
16
|
+
* < 0 if version a is less than version b
|
17
|
+
|
18
|
+
Example::
|
19
|
+
|
20
|
+
if versioncmp('2.6-1', '2.4.5') > 0 {
|
21
|
+
notify('2.6-1 is > than 2.4.5')
|
22
|
+
}
|
23
|
+
|
24
|
+
") do |args|
|
4
25
|
|
5
26
|
unless args.length == 2
|
6
27
|
raise Puppet::ParseError, "versioncmp should have 2 arguments"
|
@@ -0,0 +1,812 @@
|
|
1
|
+
# vim: syntax=ruby
|
2
|
+
|
3
|
+
# the parser
|
4
|
+
|
5
|
+
class Puppet::Parser::Parser
|
6
|
+
|
7
|
+
token LBRACK DQTEXT SQTEXT RBRACK LBRACE RBRACE SYMBOL FARROW COMMA TRUE
|
8
|
+
token FALSE EQUALS APPENDS LESSEQUAL NOTEQUAL DOT COLON LLCOLLECT RRCOLLECT
|
9
|
+
token QMARK LPAREN RPAREN ISEQUAL GREATEREQUAL GREATERTHAN LESSTHAN
|
10
|
+
token IF ELSE IMPORT DEFINE ELSIF VARIABLE CLASS INHERITS NODE BOOLEAN
|
11
|
+
token NAME SEMIC CASE DEFAULT AT LCOLLECT RCOLLECT CLASSNAME CLASSREF
|
12
|
+
token NOT OR AND UNDEF PARROW PLUS MINUS TIMES DIV LSHIFT RSHIFT UMINUS
|
13
|
+
token MATCH NOMATCH REGEX
|
14
|
+
|
15
|
+
prechigh
|
16
|
+
right NOT
|
17
|
+
nonassoc UMINUS
|
18
|
+
left MATCH NOMATCH
|
19
|
+
left TIMES DIV
|
20
|
+
left MINUS PLUS
|
21
|
+
left LSHIFT RSHIFT
|
22
|
+
left NOTEQUAL ISEQUAL
|
23
|
+
left GREATEREQUAL GREATERTHAN LESSTHAN LESSEQUAL
|
24
|
+
left AND
|
25
|
+
left OR
|
26
|
+
preclow
|
27
|
+
|
28
|
+
rule
|
29
|
+
program: statements {
|
30
|
+
if val[0]
|
31
|
+
# Make sure we always return an array.
|
32
|
+
if val[0].is_a?(AST::ASTArray)
|
33
|
+
if val[0].children.empty?
|
34
|
+
result = nil
|
35
|
+
else
|
36
|
+
result = val[0]
|
37
|
+
end
|
38
|
+
else
|
39
|
+
result = aryfy(val[0])
|
40
|
+
end
|
41
|
+
else
|
42
|
+
result = nil
|
43
|
+
end
|
44
|
+
}
|
45
|
+
| nil
|
46
|
+
|
47
|
+
statements: statement
|
48
|
+
| statements statement {
|
49
|
+
if val[0] and val[1]
|
50
|
+
if val[0].instance_of?(AST::ASTArray)
|
51
|
+
val[0].push(val[1])
|
52
|
+
result = val[0]
|
53
|
+
else
|
54
|
+
result = ast AST::ASTArray, :children => [val[0],val[1]]
|
55
|
+
end
|
56
|
+
elsif obj = (val[0] || val[1])
|
57
|
+
result = obj
|
58
|
+
else result = nil
|
59
|
+
end
|
60
|
+
}
|
61
|
+
|
62
|
+
# The main list of valid statements
|
63
|
+
statement: resource
|
64
|
+
| virtualresource
|
65
|
+
| collection
|
66
|
+
| assignment
|
67
|
+
| casestatement
|
68
|
+
| ifstatement
|
69
|
+
| import
|
70
|
+
| fstatement
|
71
|
+
| definition
|
72
|
+
| hostclass
|
73
|
+
| nodedef
|
74
|
+
| resourceoverride
|
75
|
+
| append
|
76
|
+
|
77
|
+
fstatement: NAME LPAREN funcvalues RPAREN {
|
78
|
+
args = aryfy(val[2])
|
79
|
+
result = ast AST::Function,
|
80
|
+
:name => val[0][:value],
|
81
|
+
:line => val[0][:line],
|
82
|
+
:arguments => args,
|
83
|
+
:ftype => :statement
|
84
|
+
}
|
85
|
+
| NAME LPAREN funcvalues COMMA RPAREN {
|
86
|
+
args = aryfy(val[2])
|
87
|
+
result = ast AST::Function,
|
88
|
+
:name => val[0][:value],
|
89
|
+
:line => val[0][:line],
|
90
|
+
:arguments => args,
|
91
|
+
:ftype => :statement
|
92
|
+
} | NAME LPAREN RPAREN {
|
93
|
+
result = ast AST::Function,
|
94
|
+
:name => val[0][:value],
|
95
|
+
:line => val[0][:line],
|
96
|
+
:arguments => AST::ASTArray.new({}),
|
97
|
+
:ftype => :statement
|
98
|
+
}
|
99
|
+
| NAME funcvalues {
|
100
|
+
args = aryfy(val[1])
|
101
|
+
result = ast AST::Function,
|
102
|
+
:name => val[0][:value],
|
103
|
+
:line => val[0][:line],
|
104
|
+
:arguments => args,
|
105
|
+
:ftype => :statement
|
106
|
+
}
|
107
|
+
|
108
|
+
funcvalues: namestring
|
109
|
+
| resourceref
|
110
|
+
| funcvalues COMMA namestring {
|
111
|
+
result = aryfy(val[0], val[2])
|
112
|
+
result.line = @lexer.line
|
113
|
+
result.file = @lexer.file
|
114
|
+
}
|
115
|
+
| funcvalues COMMA resourceref {
|
116
|
+
unless val[0].is_a?(AST::ASTArray)
|
117
|
+
val[0] = aryfy(val[0])
|
118
|
+
end
|
119
|
+
|
120
|
+
val[0].push(val[2])
|
121
|
+
|
122
|
+
result = val[0]
|
123
|
+
}
|
124
|
+
|
125
|
+
# This is *almost* an rvalue, but I couldn't get a full
|
126
|
+
# rvalue to work without scads of shift/reduce conflicts.
|
127
|
+
namestring: name
|
128
|
+
| variable
|
129
|
+
| type
|
130
|
+
| boolean
|
131
|
+
| funcrvalue
|
132
|
+
| selector
|
133
|
+
| quotedtext
|
134
|
+
| CLASSNAME {
|
135
|
+
result = ast AST::Name, :value => val[0][:value]
|
136
|
+
}
|
137
|
+
|
138
|
+
resource: classname LBRACE resourceinstances endsemi RBRACE {
|
139
|
+
@lexer.commentpop
|
140
|
+
array = val[2]
|
141
|
+
if array.instance_of?(AST::ResourceInstance)
|
142
|
+
array = [array]
|
143
|
+
end
|
144
|
+
result = ast AST::ASTArray
|
145
|
+
|
146
|
+
# this iterates across each specified resourceinstance
|
147
|
+
array.each { |instance|
|
148
|
+
unless instance.instance_of?(AST::ResourceInstance)
|
149
|
+
raise Puppet::Dev, "Got something that isn't an instance"
|
150
|
+
end
|
151
|
+
# now, i need to somehow differentiate between those things with
|
152
|
+
# arrays in their names, and normal things
|
153
|
+
result.push ast(AST::Resource,
|
154
|
+
:type => val[0],
|
155
|
+
:title => instance[0],
|
156
|
+
:params => instance[1])
|
157
|
+
}
|
158
|
+
} | classname LBRACE params endcomma RBRACE {
|
159
|
+
# This is a deprecated syntax.
|
160
|
+
error "All resource specifications require names"
|
161
|
+
} | classref LBRACE params endcomma RBRACE {
|
162
|
+
# a defaults setting for a type
|
163
|
+
result = ast(AST::ResourceDefaults, :type => val[0], :params => val[2])
|
164
|
+
}
|
165
|
+
|
166
|
+
# Override a value set elsewhere in the configuration.
|
167
|
+
resourceoverride: resourceref LBRACE anyparams endcomma RBRACE {
|
168
|
+
@lexer.commentpop
|
169
|
+
result = ast AST::ResourceOverride, :object => val[0], :params => val[2]
|
170
|
+
}
|
171
|
+
|
172
|
+
# Exported and virtual resources; these don't get sent to the client
|
173
|
+
# unless they get collected elsewhere in the db.
|
174
|
+
virtualresource: at resource {
|
175
|
+
type = val[0]
|
176
|
+
|
177
|
+
if (type == :exported and ! Puppet[:storeconfigs]) and ! Puppet[:parseonly]
|
178
|
+
Puppet.warning addcontext("You cannot collect without storeconfigs being set")
|
179
|
+
end
|
180
|
+
|
181
|
+
if val[1].is_a? AST::ResourceDefaults
|
182
|
+
error "Defaults are not virtualizable"
|
183
|
+
end
|
184
|
+
|
185
|
+
method = type.to_s + "="
|
186
|
+
|
187
|
+
# Just mark our resources as exported and pass them through.
|
188
|
+
if val[1].instance_of?(AST::ASTArray)
|
189
|
+
val[1].each do |obj|
|
190
|
+
obj.send(method, true)
|
191
|
+
end
|
192
|
+
else
|
193
|
+
val[1].send(method, true)
|
194
|
+
end
|
195
|
+
|
196
|
+
result = val[1]
|
197
|
+
}
|
198
|
+
|
199
|
+
at: AT { result = :virtual }
|
200
|
+
| AT AT { result = :exported }
|
201
|
+
|
202
|
+
# A collection statement. Currently supports no arguments at all, but eventually
|
203
|
+
# will, I assume.
|
204
|
+
collection: classref collectrhand LBRACE anyparams endcomma RBRACE {
|
205
|
+
if val[0] =~ /^[a-z]/
|
206
|
+
Puppet.warning addcontext("Collection names must now be capitalized")
|
207
|
+
end
|
208
|
+
type = val[0].downcase
|
209
|
+
args = {:type => type}
|
210
|
+
|
211
|
+
if val[1].is_a?(AST::CollExpr)
|
212
|
+
args[:query] = val[1]
|
213
|
+
args[:query].type = type
|
214
|
+
args[:form] = args[:query].form
|
215
|
+
else
|
216
|
+
args[:form] = val[1]
|
217
|
+
end
|
218
|
+
if args[:form] == :exported and ! Puppet[:storeconfigs] and ! Puppet[:parseonly]
|
219
|
+
Puppet.warning addcontext("You cannot collect exported resources without storeconfigs being set; the collection will be ignored")
|
220
|
+
end
|
221
|
+
args[:override] = val[3]
|
222
|
+
result = ast AST::Collection, args
|
223
|
+
}
|
224
|
+
| classref collectrhand {
|
225
|
+
if val[0] =~ /^[a-z]/
|
226
|
+
Puppet.warning addcontext("Collection names must now be capitalized")
|
227
|
+
end
|
228
|
+
type = val[0].downcase
|
229
|
+
args = {:type => type }
|
230
|
+
|
231
|
+
if val[1].is_a?(AST::CollExpr)
|
232
|
+
args[:query] = val[1]
|
233
|
+
args[:query].type = type
|
234
|
+
args[:form] = args[:query].form
|
235
|
+
else
|
236
|
+
args[:form] = val[1]
|
237
|
+
end
|
238
|
+
if args[:form] == :exported and ! Puppet[:storeconfigs] and ! Puppet[:parseonly]
|
239
|
+
Puppet.warning addcontext("You cannot collect exported resources without storeconfigs being set; the collection will be ignored")
|
240
|
+
end
|
241
|
+
result = ast AST::Collection, args
|
242
|
+
}
|
243
|
+
|
244
|
+
|
245
|
+
collectrhand: LCOLLECT collstatements RCOLLECT {
|
246
|
+
if val[1]
|
247
|
+
result = val[1]
|
248
|
+
result.form = :virtual
|
249
|
+
else
|
250
|
+
result = :virtual
|
251
|
+
end
|
252
|
+
}
|
253
|
+
| LLCOLLECT collstatements RRCOLLECT {
|
254
|
+
if val[1]
|
255
|
+
result = val[1]
|
256
|
+
result.form = :exported
|
257
|
+
else
|
258
|
+
result = :exported
|
259
|
+
end
|
260
|
+
}
|
261
|
+
|
262
|
+
# A mini-language for handling collection comparisons. This is organized
|
263
|
+
# to avoid the need for precedence indications.
|
264
|
+
collstatements: nil
|
265
|
+
| collstatement
|
266
|
+
| collstatements colljoin collstatement {
|
267
|
+
result = ast AST::CollExpr, :test1 => val[0], :oper => val[1], :test2 => val[2]
|
268
|
+
}
|
269
|
+
|
270
|
+
collstatement: collexpr
|
271
|
+
| LPAREN collstatements RPAREN {
|
272
|
+
result = val[1]
|
273
|
+
result.parens = true
|
274
|
+
}
|
275
|
+
|
276
|
+
colljoin: AND { result=val[0][:value] }
|
277
|
+
| OR { result=val[0][:value] }
|
278
|
+
|
279
|
+
collexpr: colllval ISEQUAL simplervalue {
|
280
|
+
result = ast AST::CollExpr, :test1 => val[0], :oper => val[1][:value], :test2 => val[2]
|
281
|
+
#result = ast AST::CollExpr
|
282
|
+
#result.push *val
|
283
|
+
}
|
284
|
+
| colllval NOTEQUAL simplervalue {
|
285
|
+
result = ast AST::CollExpr, :test1 => val[0], :oper => val[1][:value], :test2 => val[2]
|
286
|
+
#result = ast AST::CollExpr
|
287
|
+
#result.push *val
|
288
|
+
}
|
289
|
+
|
290
|
+
colllval: variable
|
291
|
+
| name
|
292
|
+
|
293
|
+
resourceinst: resourcename COLON params endcomma {
|
294
|
+
result = ast AST::ResourceInstance, :children => [val[0],val[2]]
|
295
|
+
}
|
296
|
+
|
297
|
+
resourceinstances: resourceinst
|
298
|
+
| resourceinstances SEMIC resourceinst {
|
299
|
+
if val[0].instance_of?(AST::ResourceInstance)
|
300
|
+
result = ast AST::ASTArray, :children => [val[0],val[2]]
|
301
|
+
else
|
302
|
+
val[0].push val[2]
|
303
|
+
result = val[0]
|
304
|
+
end
|
305
|
+
}
|
306
|
+
|
307
|
+
endsemi: # nothing
|
308
|
+
| SEMIC
|
309
|
+
|
310
|
+
undef: UNDEF {
|
311
|
+
result = ast AST::Undef, :value => :undef
|
312
|
+
}
|
313
|
+
|
314
|
+
name: NAME {
|
315
|
+
result = ast AST::Name, :value => val[0][:value], :line => val[0][:line]
|
316
|
+
}
|
317
|
+
|
318
|
+
type: CLASSREF {
|
319
|
+
result = ast AST::Type, :value => val[0][:value], :line => val[0][:line]
|
320
|
+
}
|
321
|
+
|
322
|
+
resourcename: quotedtext
|
323
|
+
| name
|
324
|
+
| type
|
325
|
+
| selector
|
326
|
+
| variable
|
327
|
+
| array
|
328
|
+
|
329
|
+
assignment: VARIABLE EQUALS expression {
|
330
|
+
if val[0][:value] =~ /::/
|
331
|
+
raise Puppet::ParseError, "Cannot assign to variables in other namespaces"
|
332
|
+
end
|
333
|
+
# this is distinct from referencing a variable
|
334
|
+
variable = ast AST::Name, :value => val[0][:value], :line => val[0][:line]
|
335
|
+
result = ast AST::VarDef, :name => variable, :value => val[2], :line => val[0][:line]
|
336
|
+
}
|
337
|
+
|
338
|
+
append: VARIABLE APPENDS expression {
|
339
|
+
variable = ast AST::Name, :value => val[0][:value], :line => val[0][:line]
|
340
|
+
result = ast AST::VarDef, :name => variable, :value => val[2], :append => true, :line => val[0][:line]
|
341
|
+
}
|
342
|
+
|
343
|
+
params: # nothing
|
344
|
+
{
|
345
|
+
result = ast AST::ASTArray
|
346
|
+
}
|
347
|
+
| param { result = val[0] }
|
348
|
+
| params COMMA param {
|
349
|
+
if val[0].instance_of?(AST::ASTArray)
|
350
|
+
val[0].push(val[2])
|
351
|
+
result = val[0]
|
352
|
+
else
|
353
|
+
result = ast AST::ASTArray, :children => [val[0],val[2]]
|
354
|
+
end
|
355
|
+
}
|
356
|
+
|
357
|
+
param: NAME FARROW rvalue {
|
358
|
+
result = ast AST::ResourceParam, :param => val[0][:value], :line => val[0][:line], :value => val[2]
|
359
|
+
}
|
360
|
+
|
361
|
+
addparam: NAME PARROW rvalue {
|
362
|
+
result = ast AST::ResourceParam, :param => val[0][:value], :line => val[0][:line], :value => val[2],
|
363
|
+
:add => true
|
364
|
+
}
|
365
|
+
|
366
|
+
anyparam: param
|
367
|
+
| addparam
|
368
|
+
|
369
|
+
anyparams: # nothing
|
370
|
+
{
|
371
|
+
result = ast AST::ASTArray
|
372
|
+
}
|
373
|
+
| anyparam { result = val[0] }
|
374
|
+
| anyparams COMMA anyparam {
|
375
|
+
if val[0].instance_of?(AST::ASTArray)
|
376
|
+
val[0].push(val[2])
|
377
|
+
result = val[0]
|
378
|
+
else
|
379
|
+
result = ast AST::ASTArray, :children => [val[0],val[2]]
|
380
|
+
end
|
381
|
+
}
|
382
|
+
|
383
|
+
rvalues: rvalue
|
384
|
+
| rvalues comma rvalue {
|
385
|
+
if val[0].instance_of?(AST::ASTArray)
|
386
|
+
result = val[0].push(val[2])
|
387
|
+
else
|
388
|
+
result = ast AST::ASTArray, :children => [val[0],val[2]]
|
389
|
+
end
|
390
|
+
}
|
391
|
+
|
392
|
+
simplervalue: quotedtext
|
393
|
+
| name
|
394
|
+
| type
|
395
|
+
| boolean
|
396
|
+
| selector
|
397
|
+
| variable
|
398
|
+
|
399
|
+
rvalue: quotedtext
|
400
|
+
| name
|
401
|
+
| type
|
402
|
+
| boolean
|
403
|
+
| selector
|
404
|
+
| variable
|
405
|
+
| array
|
406
|
+
| resourceref
|
407
|
+
| funcrvalue
|
408
|
+
| undef
|
409
|
+
|
410
|
+
# We currently require arguments in these functions.
|
411
|
+
funcrvalue: NAME LPAREN funcvalues RPAREN {
|
412
|
+
args = aryfy(val[2])
|
413
|
+
result = ast AST::Function,
|
414
|
+
:name => val[0][:value], :line => val[0][:line],
|
415
|
+
:arguments => args,
|
416
|
+
:ftype => :rvalue
|
417
|
+
} | NAME LPAREN RPAREN {
|
418
|
+
result = ast AST::Function,
|
419
|
+
:name => val[0][:value], :line => val[0][:line],
|
420
|
+
:arguments => AST::ASTArray.new({}),
|
421
|
+
:ftype => :rvalue
|
422
|
+
}
|
423
|
+
|
424
|
+
quotedtext: DQTEXT {
|
425
|
+
result = ast AST::String, :value => val[0][:value], :line => val[0][:line]
|
426
|
+
} | SQTEXT {
|
427
|
+
result = ast AST::FlatString, :value => val[0][:value], :line => val[0][:line]
|
428
|
+
}
|
429
|
+
|
430
|
+
boolean: BOOLEAN {
|
431
|
+
result = ast AST::Boolean, :value => val[0][:value], :line => val[0][:line]
|
432
|
+
}
|
433
|
+
|
434
|
+
resourceref: NAME LBRACK rvalues RBRACK {
|
435
|
+
Puppet.warning addcontext("Deprecation notice: Resource references should now be capitalized")
|
436
|
+
result = ast AST::ResourceReference, :type => val[0][:value], :line => val[0][:line], :title => val[2]
|
437
|
+
} | classref LBRACK rvalues RBRACK {
|
438
|
+
result = ast AST::ResourceReference, :type => val[0], :title => val[2]
|
439
|
+
}
|
440
|
+
|
441
|
+
ifstatement: IF expression LBRACE statements RBRACE else {
|
442
|
+
@lexer.commentpop
|
443
|
+
args = {
|
444
|
+
:test => val[1],
|
445
|
+
:statements => val[3]
|
446
|
+
}
|
447
|
+
|
448
|
+
if val[5]
|
449
|
+
args[:else] = val[5]
|
450
|
+
end
|
451
|
+
|
452
|
+
result = ast AST::IfStatement, args
|
453
|
+
}
|
454
|
+
| IF expression LBRACE RBRACE else {
|
455
|
+
@lexer.commentpop
|
456
|
+
args = {
|
457
|
+
:test => val[1],
|
458
|
+
:statements => ast(AST::Nop)
|
459
|
+
}
|
460
|
+
|
461
|
+
if val[4]
|
462
|
+
args[:else] = val[4]
|
463
|
+
end
|
464
|
+
|
465
|
+
result = ast AST::IfStatement, args
|
466
|
+
}
|
467
|
+
|
468
|
+
else: # nothing
|
469
|
+
| ELSE LBRACE statements RBRACE {
|
470
|
+
@lexer.commentpop
|
471
|
+
result = ast AST::Else, :statements => val[2]
|
472
|
+
}
|
473
|
+
| ELSE LBRACE RBRACE {
|
474
|
+
@lexer.commentpop
|
475
|
+
result = ast AST::Else, :statements => ast(AST::Nop)
|
476
|
+
}
|
477
|
+
|
478
|
+
# Unlike yacc/bison, it seems racc
|
479
|
+
# gives tons of shift/reduce warnings
|
480
|
+
# with the following syntax:
|
481
|
+
#
|
482
|
+
# expression: ...
|
483
|
+
# | expression arithop expressio { ... }
|
484
|
+
#
|
485
|
+
# arithop: PLUS | MINUS | DIVIDE | TIMES ...
|
486
|
+
#
|
487
|
+
# So I had to develop the expression by adding one rule
|
488
|
+
# per operator :-(
|
489
|
+
|
490
|
+
expression: rvalue
|
491
|
+
| expression MATCH regex {
|
492
|
+
result = ast AST::MatchOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
|
493
|
+
}
|
494
|
+
| expression NOMATCH regex {
|
495
|
+
result = ast AST::MatchOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
|
496
|
+
}
|
497
|
+
| expression PLUS expression {
|
498
|
+
result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
|
499
|
+
}
|
500
|
+
| expression MINUS expression {
|
501
|
+
result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
|
502
|
+
}
|
503
|
+
| expression DIV expression {
|
504
|
+
result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
|
505
|
+
}
|
506
|
+
| expression TIMES expression {
|
507
|
+
result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
|
508
|
+
}
|
509
|
+
| expression LSHIFT expression {
|
510
|
+
result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
|
511
|
+
}
|
512
|
+
| expression RSHIFT expression {
|
513
|
+
result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
|
514
|
+
}
|
515
|
+
| MINUS expression =UMINUS {
|
516
|
+
result = ast AST::Minus, :value => val[1]
|
517
|
+
}
|
518
|
+
| expression NOTEQUAL expression {
|
519
|
+
result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
|
520
|
+
}
|
521
|
+
| expression ISEQUAL expression {
|
522
|
+
result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
|
523
|
+
}
|
524
|
+
| expression GREATERTHAN expression {
|
525
|
+
result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
|
526
|
+
}
|
527
|
+
| expression GREATEREQUAL expression {
|
528
|
+
result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
|
529
|
+
}
|
530
|
+
| expression LESSTHAN expression {
|
531
|
+
result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
|
532
|
+
}
|
533
|
+
| expression LESSEQUAL expression {
|
534
|
+
result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
|
535
|
+
}
|
536
|
+
| NOT expression {
|
537
|
+
result = ast AST::Not, :value => val[1]
|
538
|
+
}
|
539
|
+
| expression AND expression {
|
540
|
+
result = ast AST::BooleanOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
|
541
|
+
}
|
542
|
+
| expression OR expression {
|
543
|
+
result = ast AST::BooleanOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
|
544
|
+
}
|
545
|
+
| LPAREN expression RPAREN {
|
546
|
+
result = val[1]
|
547
|
+
}
|
548
|
+
|
549
|
+
casestatement: CASE rvalue LBRACE caseopts RBRACE {
|
550
|
+
@lexer.commentpop
|
551
|
+
options = val[3]
|
552
|
+
unless options.instance_of?(AST::ASTArray)
|
553
|
+
options = ast AST::ASTArray, :children => [val[3]]
|
554
|
+
end
|
555
|
+
result = ast AST::CaseStatement, :test => val[1], :options => options
|
556
|
+
}
|
557
|
+
|
558
|
+
caseopts: caseopt
|
559
|
+
| caseopts caseopt {
|
560
|
+
if val[0].instance_of?(AST::ASTArray)
|
561
|
+
val[0].push val[1]
|
562
|
+
result = val[0]
|
563
|
+
else
|
564
|
+
result = ast AST::ASTArray, :children => [val[0], val[1]]
|
565
|
+
end
|
566
|
+
}
|
567
|
+
|
568
|
+
caseopt: casevalues COLON LBRACE statements RBRACE {
|
569
|
+
@lexer.commentpop
|
570
|
+
result = ast AST::CaseOpt, :value => val[0], :statements => val[3]
|
571
|
+
} | casevalues COLON LBRACE RBRACE {
|
572
|
+
@lexer.commentpop
|
573
|
+
result = ast(AST::CaseOpt,
|
574
|
+
:value => val[0],
|
575
|
+
:statements => ast(AST::ASTArray)
|
576
|
+
)
|
577
|
+
}
|
578
|
+
|
579
|
+
casevalues: selectlhand
|
580
|
+
| casevalues COMMA selectlhand {
|
581
|
+
if val[0].instance_of?(AST::ASTArray)
|
582
|
+
val[0].push(val[2])
|
583
|
+
result = val[0]
|
584
|
+
else
|
585
|
+
result = ast AST::ASTArray, :children => [val[0],val[2]]
|
586
|
+
end
|
587
|
+
}
|
588
|
+
|
589
|
+
selector: selectlhand QMARK svalues {
|
590
|
+
result = ast AST::Selector, :param => val[0], :values => val[2]
|
591
|
+
}
|
592
|
+
|
593
|
+
svalues: selectval
|
594
|
+
| LBRACE sintvalues endcomma RBRACE {
|
595
|
+
@lexer.commentpop
|
596
|
+
result = val[1]
|
597
|
+
}
|
598
|
+
|
599
|
+
sintvalues: selectval
|
600
|
+
| sintvalues comma selectval {
|
601
|
+
if val[0].instance_of?(AST::ASTArray)
|
602
|
+
val[0].push(val[2])
|
603
|
+
result = val[0]
|
604
|
+
else
|
605
|
+
result = ast AST::ASTArray, :children => [val[0],val[2]]
|
606
|
+
end
|
607
|
+
}
|
608
|
+
|
609
|
+
selectval: selectlhand FARROW rvalue {
|
610
|
+
result = ast AST::ResourceParam, :param => val[0], :value => val[2]
|
611
|
+
}
|
612
|
+
|
613
|
+
selectlhand: name
|
614
|
+
| type
|
615
|
+
| quotedtext
|
616
|
+
| variable
|
617
|
+
| funcrvalue
|
618
|
+
| boolean
|
619
|
+
| undef
|
620
|
+
| DEFAULT {
|
621
|
+
result = ast AST::Default, :value => val[0][:value], :line => val[0][:line]
|
622
|
+
}
|
623
|
+
| regex
|
624
|
+
|
625
|
+
# These are only used for importing, and we don't interpolate there.
|
626
|
+
qtexts: quotedtext { result = [val[0].value] }
|
627
|
+
| qtexts COMMA quotedtext {
|
628
|
+
results = val[0] << val[2].value
|
629
|
+
}
|
630
|
+
|
631
|
+
import: IMPORT qtexts {
|
632
|
+
val[1].each do |file|
|
633
|
+
import(file)
|
634
|
+
end
|
635
|
+
|
636
|
+
result = AST::ASTArray.new(:children => [])
|
637
|
+
}
|
638
|
+
|
639
|
+
# Disable definition inheritance for now. 8/27/06, luke
|
640
|
+
#definition: DEFINE NAME argumentlist parent LBRACE statements RBRACE {
|
641
|
+
definition: DEFINE classname argumentlist LBRACE statements RBRACE {
|
642
|
+
@lexer.commentpop
|
643
|
+
newdefine classname(val[1]), :arguments => val[2], :code => val[4], :line => val[0][:line]
|
644
|
+
@lexer.indefine = false
|
645
|
+
result = nil
|
646
|
+
|
647
|
+
#} | DEFINE NAME argumentlist parent LBRACE RBRACE {
|
648
|
+
} | DEFINE classname argumentlist LBRACE RBRACE {
|
649
|
+
@lexer.commentpop
|
650
|
+
newdefine classname(val[1]), :arguments => val[2], :line => val[0][:line]
|
651
|
+
@lexer.indefine = false
|
652
|
+
result = nil
|
653
|
+
}
|
654
|
+
|
655
|
+
#hostclass: CLASS NAME argumentlist parent LBRACE statements RBRACE {
|
656
|
+
hostclass: CLASS classname classparent LBRACE statements RBRACE {
|
657
|
+
@lexer.commentpop
|
658
|
+
# Our class gets defined in the parent namespace, not our own.
|
659
|
+
@lexer.namepop
|
660
|
+
newclass classname(val[1]), :code => val[4], :parent => val[2], :line => val[0][:line]
|
661
|
+
result = nil
|
662
|
+
} | CLASS classname classparent LBRACE RBRACE {
|
663
|
+
@lexer.commentpop
|
664
|
+
# Our class gets defined in the parent namespace, not our own.
|
665
|
+
@lexer.namepop
|
666
|
+
newclass classname(val[1]), :parent => val[2], :line => val[0][:line]
|
667
|
+
result = nil
|
668
|
+
}
|
669
|
+
|
670
|
+
nodedef: NODE hostnames nodeparent LBRACE statements RBRACE {
|
671
|
+
@lexer.commentpop
|
672
|
+
newnode val[1], :parent => val[2], :code => val[4], :line => val[0][:line]
|
673
|
+
result = nil
|
674
|
+
} | NODE hostnames nodeparent LBRACE RBRACE {
|
675
|
+
@lexer.commentpop
|
676
|
+
newnode val[1], :parent => val[2], :line => val[0][:line]
|
677
|
+
result = nil
|
678
|
+
}
|
679
|
+
|
680
|
+
classref: CLASSREF { result = val[0][:value] }
|
681
|
+
|
682
|
+
classname: NAME { result = val[0][:value] }
|
683
|
+
| CLASSNAME { result = val[0][:value] }
|
684
|
+
|
685
|
+
# Multiple hostnames, as used for node names. These are all literal
|
686
|
+
# strings, not AST objects.
|
687
|
+
hostnames: nodename
|
688
|
+
| hostnames COMMA nodename {
|
689
|
+
result = val[0]
|
690
|
+
result = [result] unless result.is_a?(Array)
|
691
|
+
result << val[2]
|
692
|
+
}
|
693
|
+
|
694
|
+
nodename: hostname {
|
695
|
+
result = ast AST::HostName, :value => val[0]
|
696
|
+
}
|
697
|
+
|
698
|
+
hostname: NAME { result = val[0][:value] }
|
699
|
+
| SQTEXT { result = val[0][:value] }
|
700
|
+
| DQTEXT { result = val[0][:value] }
|
701
|
+
| DEFAULT { result = val[0][:value] }
|
702
|
+
| regex
|
703
|
+
|
704
|
+
nil: {
|
705
|
+
result = nil
|
706
|
+
}
|
707
|
+
|
708
|
+
nothing: {
|
709
|
+
result = ast AST::ASTArray, :children => []
|
710
|
+
}
|
711
|
+
|
712
|
+
argumentlist: nil
|
713
|
+
| LPAREN nothing RPAREN {
|
714
|
+
result = nil
|
715
|
+
}
|
716
|
+
| LPAREN arguments RPAREN {
|
717
|
+
result = val[1]
|
718
|
+
result = [result] unless result[0].is_a?(Array)
|
719
|
+
}
|
720
|
+
|
721
|
+
arguments: argument
|
722
|
+
| arguments COMMA argument {
|
723
|
+
result = val[0]
|
724
|
+
result = [result] unless result[0].is_a?(Array)
|
725
|
+
result << val[2]
|
726
|
+
}
|
727
|
+
|
728
|
+
argument: NAME EQUALS rvalue {
|
729
|
+
Puppet.warning addcontext("Deprecation notice: must now include '$' in prototype")
|
730
|
+
result = [val[0][:value], val[2]]
|
731
|
+
}
|
732
|
+
| NAME {
|
733
|
+
Puppet.warning addcontext("Deprecation notice: must now include '$' in prototype")
|
734
|
+
result = [val[0][:value]]
|
735
|
+
} | VARIABLE EQUALS rvalue {
|
736
|
+
result = [val[0][:value], val[2]]
|
737
|
+
} | VARIABLE {
|
738
|
+
result = [val[0][:value]]
|
739
|
+
}
|
740
|
+
|
741
|
+
nodeparent: nil
|
742
|
+
| INHERITS hostname {
|
743
|
+
result = val[1]
|
744
|
+
}
|
745
|
+
|
746
|
+
classparent: nil
|
747
|
+
| INHERITS classnameordefault {
|
748
|
+
result = val[1]
|
749
|
+
}
|
750
|
+
|
751
|
+
classnameordefault: classname | DEFAULT
|
752
|
+
|
753
|
+
variable: VARIABLE {
|
754
|
+
result = ast AST::Variable, :value => val[0][:value], :line => val[0][:line]
|
755
|
+
}
|
756
|
+
|
757
|
+
array: LBRACK rvalues RBRACK {
|
758
|
+
if val[1].instance_of?(AST::ASTArray)
|
759
|
+
result = val[1]
|
760
|
+
else
|
761
|
+
result = ast AST::ASTArray, :children => [val[1]]
|
762
|
+
end
|
763
|
+
}
|
764
|
+
| LBRACK rvalues COMMA RBRACK {
|
765
|
+
if val[1].instance_of?(AST::ASTArray)
|
766
|
+
result = val[1]
|
767
|
+
else
|
768
|
+
result = ast AST::ASTArray, :children => [val[1]]
|
769
|
+
end
|
770
|
+
} | LBRACK RBRACK {
|
771
|
+
result = ast AST::ASTArray
|
772
|
+
}
|
773
|
+
|
774
|
+
comma: FARROW
|
775
|
+
| COMMA
|
776
|
+
|
777
|
+
endcomma: # nothing
|
778
|
+
| COMMA { result = nil }
|
779
|
+
|
780
|
+
regex: REGEX {
|
781
|
+
result = ast AST::Regex, :value => val[0][:value]
|
782
|
+
}
|
783
|
+
|
784
|
+
end
|
785
|
+
---- header ----
|
786
|
+
require 'puppet'
|
787
|
+
require 'puppet/util/loadedfile'
|
788
|
+
require 'puppet/parser/lexer'
|
789
|
+
require 'puppet/parser/ast'
|
790
|
+
#require 'puppet/parser/interpreter'
|
791
|
+
|
792
|
+
module Puppet
|
793
|
+
class ParseError < Puppet::Error; end
|
794
|
+
class ImportError < Racc::ParseError; end
|
795
|
+
class AlreadyImportedError < ImportError; end
|
796
|
+
end
|
797
|
+
|
798
|
+
Puppet[:typecheck] = true
|
799
|
+
Puppet[:paramcheck] = true
|
800
|
+
|
801
|
+
---- inner ----
|
802
|
+
|
803
|
+
# It got too annoying having code in a file that needs to be compiled.
|
804
|
+
require 'puppet/parser/parser_support'
|
805
|
+
|
806
|
+
# Make emacs happy
|
807
|
+
# Local Variables:
|
808
|
+
# mode: ruby
|
809
|
+
# End:
|
810
|
+
|
811
|
+
# $Id$
|
812
|
+
|