puppet 3.3.2 → 3.4.0.rc1
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/CONTRIBUTING.md +22 -0
- data/Gemfile +11 -2
- data/README.md +13 -17
- data/README_DEVELOPER.md +1 -1
- data/Rakefile +1 -1
- data/examples/hiera/README.md +4 -4
- data/ext/debian/puppetmaster.init +1 -0
- data/ext/debian/rules +2 -5
- data/ext/nagios/check_puppet.rb +7 -7
- data/ext/osx/file_mapping.yaml +1 -1
- data/ext/osx/preflight.erb +34 -19
- data/ext/rack/{files/config.ru → config.ru} +0 -0
- data/ext/rack/{files/apache2.conf → example-passenger-vhost.conf} +6 -0
- data/ext/redhat/puppet.spec.erb +20 -2
- data/ext/systemd/{puppetagent.service → puppet.service} +0 -0
- data/lib/hiera_puppet.rb +2 -2
- data/lib/puppet/agent.rb +1 -6
- data/lib/puppet/application.rb +15 -2
- data/lib/puppet/application/agent.rb +2 -7
- data/lib/puppet/application/apply.rb +8 -13
- data/lib/puppet/application/cert.rb +47 -7
- data/lib/puppet/application/device.rb +1 -6
- data/lib/puppet/application/face_base.rb +1 -1
- data/lib/puppet/application/filebucket.rb +1 -1
- data/lib/puppet/application/inspect.rb +3 -12
- data/lib/puppet/application/master.rb +1 -6
- data/lib/puppet/application/queue.rb +1 -6
- data/lib/puppet/application/resource.rb +2 -6
- data/lib/puppet/coercion.rb +11 -0
- data/lib/puppet/configurer.rb +5 -3
- data/lib/puppet/configurer/downloader.rb +3 -1
- data/lib/puppet/configurer/plugin_handler.rb +10 -0
- data/lib/puppet/confine.rb +80 -0
- data/lib/puppet/{provider/confine → confine}/exists.rb +3 -3
- data/lib/puppet/{provider/confine → confine}/false.rb +2 -2
- data/lib/puppet/{provider/confine → confine}/feature.rb +2 -2
- data/lib/puppet/{provider/confine → confine}/true.rb +2 -2
- data/lib/puppet/{provider/confine → confine}/variable.rb +2 -2
- data/lib/puppet/{provider/confine_collection.rb → confine_collection.rb} +4 -4
- data/lib/puppet/{provider/confiner.rb → confiner.rb} +4 -4
- data/lib/puppet/daemon.rb +2 -6
- data/lib/puppet/data_binding.rb +2 -30
- data/lib/puppet/defaults.rb +283 -174
- data/lib/puppet/error.rb +1 -0
- data/lib/puppet/external/nagios.rb +0 -2
- data/lib/puppet/external/nagios/base.rb +4 -3
- data/lib/puppet/external/nagios/grammar.ry +173 -112
- data/lib/puppet/external/nagios/parser.rb +233 -184
- data/lib/puppet/face/file/store.rb +1 -1
- data/lib/puppet/face/module/generate.rb +5 -7
- data/lib/puppet/face/parser.rb +12 -2
- data/lib/puppet/face/plugin.rb +6 -0
- data/lib/puppet/feature/base.rb +16 -0
- data/lib/puppet/feature/external_facts.rb +5 -0
- data/lib/puppet/feature/libuser.rb +1 -1
- data/lib/puppet/feature/msgpack.rb +1 -0
- data/lib/puppet/feature/rails.rb +2 -2
- data/lib/puppet/file_bucket/dipper.rb +8 -6
- data/lib/puppet/file_bucket/file.rb +17 -1
- data/lib/puppet/file_serving/base.rb +21 -10
- data/lib/puppet/file_serving/configuration.rb +5 -7
- data/lib/puppet/file_serving/configuration/parser.rb +1 -1
- data/lib/puppet/file_serving/content.rb +1 -1
- data/lib/puppet/file_serving/fileset.rb +3 -3
- data/lib/puppet/file_serving/metadata.rb +22 -18
- data/lib/puppet/file_serving/mount/file.rb +1 -1
- data/lib/puppet/file_serving/mount/pluginfacts.rb +35 -0
- data/lib/puppet/file_system.rb +3 -0
- data/lib/puppet/file_system/file.rb +261 -0
- data/lib/puppet/file_system/file18.rb +5 -0
- data/lib/puppet/file_system/file19.rb +5 -0
- data/lib/puppet/file_system/file19windows.rb +113 -0
- data/lib/puppet/file_system/memory_file.rb +31 -0
- data/lib/puppet/file_system/tempfile.rb +20 -0
- data/lib/puppet/indirector/active_record.rb +1 -0
- data/lib/puppet/indirector/catalog/compiler.rb +28 -0
- data/lib/puppet/indirector/certificate_request/memory.rb +6 -0
- data/lib/puppet/indirector/data_binding/hiera.rb +46 -2
- data/lib/puppet/indirector/direct_file_server.rb +2 -2
- data/lib/puppet/indirector/facts/facter.rb +25 -0
- data/lib/puppet/indirector/file_bucket_file/file.rb +60 -74
- data/lib/puppet/indirector/indirection.rb +5 -1
- data/lib/puppet/indirector/json.rb +1 -1
- data/lib/puppet/indirector/key/ca.rb +4 -0
- data/lib/puppet/indirector/key/file.rb +7 -3
- data/lib/puppet/indirector/key/memory.rb +6 -0
- data/lib/puppet/indirector/node/write_only_yaml.rb +2 -2
- data/lib/puppet/indirector/request.rb +17 -11
- data/lib/puppet/indirector/resource/ral.rb +5 -0
- data/lib/puppet/indirector/resource/rest.rb +1 -0
- data/lib/puppet/indirector/resource/store_configs.rb +4 -0
- data/lib/puppet/indirector/rest.rb +2 -1
- data/lib/puppet/indirector/ssl_file.rb +7 -7
- data/lib/puppet/indirector/terminus.rb +4 -0
- data/lib/puppet/indirector/yaml.rb +3 -3
- data/lib/puppet/interface/documentation.rb +4 -11
- data/lib/puppet/module.rb +19 -6
- data/lib/puppet/module_tool/applications/builder.rb +1 -1
- data/lib/puppet/module_tool/applications/installer.rb +1 -1
- data/lib/puppet/module_tool/checksums.rb +1 -1
- data/lib/puppet/module_tool/dependency.rb +7 -3
- data/lib/puppet/module_tool/metadata.rb +6 -2
- data/lib/puppet/module_tool/tar.rb +2 -1
- data/lib/puppet/module_tool/tar/gnu.rb +6 -2
- data/lib/puppet/module_tool/tar/mini.rb +2 -0
- data/lib/puppet/module_tool/tar/solaris.rb +2 -5
- data/lib/puppet/network/authconfig.rb +0 -2
- data/lib/puppet/network/authentication.rb +1 -1
- data/lib/puppet/network/authstore.rb +6 -7
- data/lib/puppet/network/format.rb +2 -3
- data/lib/puppet/network/format_handler.rb +16 -11
- data/lib/puppet/network/format_support.rb +14 -0
- data/lib/puppet/network/formats.rb +26 -0
- data/lib/puppet/network/http/connection.rb +8 -41
- data/lib/puppet/network/http/handler.rb +28 -32
- data/lib/puppet/network/http/webrick.rb +15 -22
- data/lib/puppet/network/http_pool.rb +43 -9
- data/lib/puppet/network/rights.rb +0 -0
- data/lib/puppet/node.rb +24 -8
- data/lib/puppet/node/environment.rb +18 -20
- data/lib/puppet/node/facts.rb +23 -6
- data/lib/puppet/parameter.rb +15 -2
- data/lib/puppet/parameter/boolean.rb +5 -0
- data/lib/puppet/parameter/value_collection.rb +6 -4
- data/lib/puppet/parser/ast/resourceparam.rb +2 -1
- data/lib/puppet/parser/compiler.rb +25 -9
- data/lib/puppet/parser/files.rb +1 -1
- data/lib/puppet/parser/functions.rb +12 -21
- data/lib/puppet/parser/functions/collect.rb +6 -35
- data/lib/puppet/parser/functions/contain.rb +26 -0
- data/lib/puppet/parser/functions/create_resources.rb +5 -0
- data/lib/puppet/parser/functions/extlookup.rb +2 -2
- data/lib/puppet/parser/functions/file.rb +1 -1
- data/lib/puppet/parser/functions/{reject.rb → filter.rb} +13 -12
- data/lib/puppet/parser/functions/fqdn_rand.rb +13 -5
- data/lib/puppet/parser/functions/include.rb +18 -1
- data/lib/puppet/parser/functions/map.rb +44 -0
- data/lib/puppet/parser/functions/select.rb +6 -38
- data/lib/puppet/parser/lexer.rb +1 -1
- data/lib/puppet/parser/parser_support.rb +1 -1
- data/lib/puppet/parser/resource.rb +6 -45
- data/lib/puppet/parser/scope.rb +33 -2
- data/lib/puppet/parser/type_loader.rb +4 -60
- data/lib/puppet/pops/binder/bindings_loader.rb +1 -1
- data/lib/puppet/pops/binder/config/binder_config.rb +3 -3
- data/lib/puppet/pops/binder/hiera2/bindings_provider.rb +1 -1
- data/lib/puppet/pops/binder/scheme_handler/confdir_hiera_scheme.rb +1 -1
- data/lib/puppet/pops/binder/scheme_handler/module_hiera_scheme.rb +2 -2
- data/lib/puppet/pops/issues.rb +4 -0
- data/lib/puppet/pops/model/ast_transformer.rb +4 -1
- data/lib/puppet/pops/model/model_label_provider.rb +1 -1
- data/lib/puppet/pops/parser/egrammar.ra +5 -24
- data/lib/puppet/pops/parser/eparser.rb +859 -902
- data/lib/puppet/pops/parser/lexer.rb +48 -30
- data/lib/puppet/pops/parser/parser_support.rb +1 -1
- data/lib/puppet/pops/patterns.rb +4 -4
- data/lib/puppet/pops/utils.rb +1 -1
- data/lib/puppet/pops/validation/checker3_1.rb +25 -20
- data/lib/puppet/provider.rb +23 -6
- data/lib/puppet/provider/aixobject.rb +0 -0
- data/lib/puppet/provider/augeas/augeas.rb +21 -5
- data/lib/puppet/provider/confine.rb +5 -79
- data/lib/puppet/provider/cron/crontab.rb +0 -0
- data/lib/puppet/provider/exec.rb +9 -7
- data/lib/puppet/provider/exec/posix.rb +10 -1
- data/lib/puppet/provider/exec/windows.rb +1 -1
- data/lib/puppet/provider/file/posix.rb +1 -0
- data/lib/puppet/provider/file/windows.rb +16 -5
- data/lib/puppet/provider/group/aix.rb +0 -0
- data/lib/puppet/provider/group/windows_adsi.rb +33 -1
- data/lib/puppet/provider/macauthorization/macauthorization.rb +1 -1
- data/lib/puppet/provider/mailalias/aliases.rb +0 -0
- data/lib/puppet/provider/maillist/mailman.rb +0 -0
- data/lib/puppet/provider/mount/parsed.rb +0 -0
- data/lib/puppet/provider/nameservice/directoryservice.rb +3 -3
- data/lib/puppet/provider/package/appdmg.rb +1 -1
- data/lib/puppet/provider/package/apple.rb +1 -1
- data/lib/puppet/provider/package/apt.rb +1 -1
- data/lib/puppet/provider/package/aptitude.rb +0 -0
- data/lib/puppet/provider/package/blastwave.rb +1 -1
- data/lib/puppet/provider/package/dpkg.rb +1 -1
- data/lib/puppet/provider/package/fink.rb +1 -1
- data/lib/puppet/provider/package/freebsd.rb +0 -0
- data/lib/puppet/provider/package/gem.rb +0 -0
- data/lib/puppet/provider/package/macports.rb +0 -0
- data/lib/puppet/provider/package/msi.rb +4 -10
- data/lib/puppet/provider/package/nim.rb +8 -8
- data/lib/puppet/provider/package/openbsd.rb +1 -1
- data/lib/puppet/provider/package/opkg.rb +0 -0
- data/lib/puppet/provider/package/pacman.rb +2 -2
- data/lib/puppet/provider/package/pkgdmg.rb +1 -1
- data/lib/puppet/provider/package/pkgutil.rb +1 -1
- data/lib/puppet/provider/package/ports.rb +0 -0
- data/lib/puppet/provider/package/rpm.rb +39 -3
- data/lib/puppet/provider/package/sun.rb +3 -3
- data/lib/puppet/provider/package/sunfreeware.rb +0 -0
- data/lib/puppet/provider/package/windows.rb +12 -19
- data/lib/puppet/provider/package/windows/package.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +2 -2
- data/lib/puppet/provider/parsedfile.rb +0 -0
- data/lib/puppet/provider/port/parsed.rb +0 -0
- data/lib/puppet/provider/service/base.rb +0 -0
- data/lib/puppet/provider/service/bsd.rb +3 -3
- data/lib/puppet/provider/service/daemontools.rb +8 -8
- data/lib/puppet/provider/service/debian.rb +0 -0
- data/lib/puppet/provider/service/freebsd.rb +3 -3
- data/lib/puppet/provider/service/init.rb +5 -4
- data/lib/puppet/provider/service/launchd.rb +35 -24
- data/lib/puppet/provider/service/openbsd.rb +23 -0
- data/lib/puppet/provider/service/redhat.rb +0 -0
- data/lib/puppet/provider/service/runit.rb +3 -3
- data/lib/puppet/provider/service/smf.rb +0 -0
- data/lib/puppet/provider/service/src.rb +0 -0
- data/lib/puppet/provider/service/systemd.rb +0 -0
- data/lib/puppet/provider/service/upstart.rb +3 -3
- data/lib/puppet/provider/ssh_authorized_key/parsed.rb +2 -2
- data/lib/puppet/provider/sshkey/parsed.rb +0 -0
- data/lib/puppet/provider/user/aix.rb +0 -0
- data/lib/puppet/provider/user/directoryservice.rb +1 -1
- data/lib/puppet/provider/user/useradd.rb +1 -1
- data/lib/puppet/provider/zone/solaris.rb +1 -1
- data/lib/puppet/rails/benchmark.rb +1 -1
- data/lib/puppet/reference/configuration.rb +1 -2
- data/lib/puppet/reference/indirection.rb +12 -14
- data/lib/puppet/relationship.rb +7 -4
- data/lib/puppet/reports.rb +2 -2
- data/lib/puppet/reports/rrdgraph.rb +1 -1
- data/lib/puppet/reports/store.rb +3 -3
- data/lib/puppet/reports/tagmail.rb +2 -2
- data/lib/puppet/resource.rb +66 -8
- data/lib/puppet/resource/catalog.rb +18 -25
- data/lib/puppet/resource/status.rb +10 -4
- data/lib/puppet/run.rb +6 -2
- data/lib/puppet/settings.rb +39 -119
- data/lib/puppet/settings/base_setting.rb +8 -9
- data/lib/puppet/settings/directory_setting.rb +8 -0
- data/lib/puppet/settings/file_setting.rb +35 -1
- data/lib/puppet/settings/priority_setting.rb +42 -0
- data/lib/puppet/ssl.rb +4 -0
- data/lib/puppet/ssl/certificate.rb +18 -0
- data/lib/puppet/ssl/certificate_authority.rb +101 -72
- data/lib/puppet/ssl/certificate_authority/autosign_command.rb +44 -0
- data/lib/puppet/ssl/certificate_authority/interface.rb +21 -17
- data/lib/puppet/ssl/certificate_factory.rb +38 -12
- data/lib/puppet/ssl/certificate_request.rb +201 -47
- data/lib/puppet/ssl/certificate_request_attributes.rb +34 -0
- data/lib/puppet/ssl/certificate_revocation_list.rb +2 -2
- data/lib/puppet/ssl/host.rb +21 -10
- data/lib/puppet/ssl/inventory.rb +6 -10
- data/lib/puppet/ssl/key.rb +1 -1
- data/lib/puppet/ssl/oids.rb +78 -0
- data/lib/puppet/ssl/validator.rb +41 -97
- data/lib/puppet/ssl/validator/default_validator.rb +153 -0
- data/lib/puppet/ssl/validator/no_validator.rb +17 -0
- data/lib/puppet/status.rb +4 -0
- data/lib/puppet/test/test_helper.rb +5 -0
- data/lib/puppet/transaction.rb +13 -0
- data/lib/puppet/transaction/event.rb +8 -3
- data/lib/puppet/transaction/report.rb +6 -2
- data/lib/puppet/transaction/resource_harness.rb +173 -115
- data/lib/puppet/type.rb +30 -13
- data/lib/puppet/type/augeas.rb +12 -46
- data/lib/puppet/type/component.rb +1 -7
- data/lib/puppet/type/cron.rb +0 -0
- data/lib/puppet/type/exec.rb +13 -1
- data/lib/puppet/type/file.rb +19 -10
- data/lib/puppet/type/file/checksum.rb +0 -0
- data/lib/puppet/type/file/content.rb +3 -0
- data/lib/puppet/type/file/ensure.rb +33 -15
- data/lib/puppet/type/file/group.rb +0 -0
- data/lib/puppet/type/file/mode.rb +6 -2
- data/lib/puppet/type/file/owner.rb +0 -0
- data/lib/puppet/type/file/source.rb +65 -14
- data/lib/puppet/type/file/target.rb +6 -6
- data/lib/puppet/type/file/type.rb +0 -0
- data/lib/puppet/type/filebucket.rb +0 -0
- data/lib/puppet/type/group.rb +18 -0
- data/lib/puppet/type/host.rb +0 -0
- data/lib/puppet/type/k5login.rb +4 -4
- data/lib/puppet/type/mailalias.rb +0 -0
- data/lib/puppet/type/maillist.rb +0 -0
- data/lib/puppet/type/mount.rb +15 -1
- data/lib/puppet/type/package.rb +7 -1
- data/lib/puppet/type/port.rb +0 -0
- data/lib/puppet/type/schedule.rb +9 -4
- data/lib/puppet/type/service.rb +1 -1
- data/lib/puppet/type/sshkey.rb +0 -0
- data/lib/puppet/type/tidy.rb +1 -1
- data/lib/puppet/type/user.rb +3 -0
- data/lib/puppet/type/yumrepo.rb +8 -6
- data/lib/puppet/type/zpool.rb +0 -0
- data/lib/puppet/util.rb +4 -31
- data/lib/puppet/util/adsi.rb +73 -17
- data/lib/puppet/util/autoload.rb +3 -3
- data/lib/puppet/util/backups.rb +4 -4
- data/lib/puppet/util/cacher.rb +7 -13
- data/lib/puppet/util/checksums.rb +2 -2
- data/lib/puppet/util/classgen.rb +3 -1
- data/lib/puppet/util/colors.rb +1 -0
- data/lib/puppet/util/command_line.rb +5 -0
- data/lib/puppet/util/docs.rb +33 -27
- data/lib/puppet/util/execution.rb +42 -18
- data/lib/puppet/util/filetype.rb +3 -3
- data/lib/puppet/util/instance_loader.rb +2 -2
- data/lib/puppet/util/instrumentation.rb +23 -42
- data/lib/puppet/util/instrumentation/data.rb +11 -4
- data/lib/puppet/util/instrumentation/indirection_probe.rb +11 -4
- data/lib/puppet/util/instrumentation/instrumentable.rb +7 -14
- data/lib/puppet/util/instrumentation/listener.rb +15 -8
- data/lib/puppet/util/instrumentation/listeners/log.rb +4 -10
- data/lib/puppet/util/instrumentation/listeners/performance.rb +8 -14
- data/lib/puppet/util/limits.rb +12 -0
- data/lib/puppet/util/lockfile.rb +2 -2
- data/lib/puppet/util/log.rb +14 -6
- data/lib/puppet/util/log/destinations.rb +23 -1
- data/lib/puppet/util/metric.rb +9 -3
- data/lib/puppet/util/monkey_patches.rb +7 -2
- data/lib/puppet/util/network_device/config.rb +1 -1
- data/lib/puppet/util/plugins.rb +1 -1
- data/lib/puppet/util/posix.rb +0 -0
- data/lib/puppet/util/profiler.rb +7 -2
- data/lib/puppet/util/provider_features.rb +2 -2
- data/lib/puppet/util/rdoc.rb +28 -30
- data/lib/puppet/util/rdoc/code_objects.rb +75 -25
- data/lib/puppet/util/rdoc/generators/puppet_generator.rb +1 -1
- data/lib/puppet/util/rdoc/parser.rb +12 -487
- data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +477 -0
- data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc1.rb +19 -0
- data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc2.rb +14 -0
- data/lib/puppet/util/reference.rb +1 -1
- data/lib/puppet/util/resource_template.rb +1 -1
- data/lib/puppet/util/selinux.rb +1 -1
- data/lib/puppet/util/storage.rb +2 -2
- data/lib/puppet/util/suidmanager.rb +1 -1
- data/lib/puppet/util/tag_set.rb +29 -0
- data/lib/puppet/util/tagging.rb +8 -24
- data/lib/puppet/util/watched_file.rb +1 -1
- data/lib/puppet/util/watcher.rb +1 -1
- data/lib/puppet/util/windows.rb +3 -0
- data/lib/puppet/util/windows/access_control_entry.rb +84 -0
- data/lib/puppet/util/windows/access_control_list.rb +106 -0
- data/lib/puppet/util/windows/file.rb +213 -0
- data/lib/puppet/util/windows/process.rb +199 -0
- data/lib/puppet/util/windows/root_certs.rb +52 -37
- data/lib/puppet/util/windows/security.rb +270 -245
- data/lib/puppet/util/windows/security_descriptor.rb +62 -0
- data/lib/puppet/util/windows/sid.rb +26 -4
- data/lib/puppet/version.rb +2 -2
- data/spec/fixtures/releases/jamtur01-apache/lib/puppet/provider/a2mod/debian.rb +1 -1
- data/spec/fixtures/unit/indirector/{hiera → data_binding/hiera}/global.yaml +0 -0
- data/spec/fixtures/unit/indirector/data_binding/hiera/invalid.yaml +1 -0
- data/spec/fixtures/unit/module/trailing-comma.json +24 -0
- data/spec/fixtures/unit/util/monkey_patches/x509.pem +32 -0
- data/spec/integration/application/apply_spec.rb +1 -1
- data/spec/integration/application/doc_spec.rb +1 -1
- data/spec/integration/configurer_spec.rb +4 -2
- data/spec/integration/data_binding.rb +100 -0
- data/spec/integration/indirector/catalog/compiler_spec.rb +16 -13
- data/spec/integration/indirector/direct_file_server_spec.rb +3 -5
- data/spec/integration/indirector/file_content/file_server_spec.rb +2 -2
- data/spec/integration/node/facts_spec.rb +1 -1
- data/spec/integration/node_spec.rb +1 -1
- data/spec/integration/parser/compiler_spec.rb +90 -0
- data/spec/integration/parser/parser_spec.rb +2 -2
- data/spec/integration/provider/cron/crontab_spec.rb +3 -5
- data/spec/integration/resource/catalog_spec.rb +1 -1
- data/spec/integration/ssl/autosign_spec.rb +90 -0
- data/spec/integration/ssl/certificate_authority_spec.rb +62 -69
- data/spec/integration/ssl/certificate_revocation_list_spec.rb +1 -1
- data/spec/integration/ssl/host_spec.rb +1 -1
- data/spec/integration/transaction_spec.rb +13 -13
- data/spec/integration/type/exec_spec.rb +2 -2
- data/spec/integration/type/file_spec.rb +287 -45
- data/spec/integration/type/tidy_spec.rb +3 -3
- data/spec/integration/util/rdoc/parser_spec.rb +236 -35
- data/spec/integration/util/settings_spec.rb +1 -1
- data/spec/integration/util/windows/process_spec.rb +22 -0
- data/spec/integration/util/windows/security_spec.rb +316 -106
- data/spec/lib/matchers/containment_matchers.rb +52 -0
- data/spec/lib/puppet_spec/compiler.rb +6 -0
- data/spec/lib/puppet_spec/files.rb +20 -21
- data/spec/shared_behaviours/documentation_on_faces.rb +3 -3
- data/spec/shared_behaviours/file_server_terminus.rb +2 -2
- data/spec/shared_contexts/platform.rb +1 -0
- data/spec/spec_helper.rb +13 -1
- data/spec/unit/agent_spec.rb +0 -12
- data/spec/unit/application/agent_spec.rb +4 -4
- data/spec/unit/application/apply_spec.rb +18 -2
- data/spec/unit/application/cert_spec.rb +8 -6
- data/spec/unit/application/device_spec.rb +1 -1
- data/spec/unit/application/filebucket_spec.rb +1 -1
- data/spec/unit/application/inspect_spec.rb +1 -1
- data/spec/unit/application_spec.rb +24 -0
- data/spec/unit/configurer/downloader_spec.rb +8 -7
- data/spec/unit/configurer/fact_handler_spec.rb +23 -0
- data/spec/unit/configurer/plugin_handler_spec.rb +7 -2
- data/spec/unit/configurer_spec.rb +15 -5
- data/spec/unit/{provider/confine → confine}/exists_spec.rb +12 -12
- data/spec/unit/{provider/confine → confine}/false_spec.rb +9 -9
- data/spec/unit/{provider/confine → confine}/feature_spec.rb +10 -10
- data/spec/unit/{provider/confine → confine}/true_spec.rb +7 -7
- data/spec/unit/{provider/confine → confine}/variable_spec.rb +16 -16
- data/spec/unit/{provider/confine_collection_spec.rb → confine_collection_spec.rb} +30 -30
- data/spec/unit/{provider/confine_spec.rb → confine_spec.rb} +11 -11
- data/spec/unit/{provider/confiner_spec.rb → confiner_spec.rb} +4 -4
- data/spec/unit/face/parser_spec.rb +54 -0
- data/spec/unit/file_bucket/dipper_spec.rb +2 -2
- data/spec/unit/file_serving/base_spec.rb +32 -9
- data/spec/unit/file_serving/configuration_spec.rb +7 -7
- data/spec/unit/file_serving/content_spec.rb +12 -7
- data/spec/unit/file_serving/fileset_spec.rb +57 -27
- data/spec/unit/file_serving/metadata_spec.rb +74 -12
- data/spec/unit/file_serving/mount/file_spec.rb +10 -10
- data/spec/unit/file_serving/mount/pluginfacts_spec.rb +73 -0
- data/spec/unit/file_system/file_spec.rb +486 -0
- data/spec/unit/file_system/tempfile_spec.rb +48 -0
- data/spec/unit/graph/relationship_graph_spec.rb +0 -6
- data/spec/unit/hiera_puppet_spec.rb +2 -2
- data/spec/unit/indirector/catalog/compiler_spec.rb +15 -19
- data/spec/unit/indirector/certificate_status/file_spec.rb +30 -40
- data/spec/unit/indirector/data_binding/hiera_spec.rb +95 -2
- data/spec/unit/indirector/direct_file_server_spec.rb +6 -6
- data/spec/unit/indirector/facts/facter_spec.rb +33 -0
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +61 -52
- data/spec/unit/indirector/file_metadata/file_spec.rb +2 -2
- data/spec/unit/indirector/file_server_spec.rb +4 -4
- data/spec/unit/indirector/json_spec.rb +4 -4
- data/spec/unit/indirector/key/file_spec.rb +13 -14
- data/spec/unit/indirector/resource/ral_spec.rb +7 -0
- data/spec/unit/indirector/resource/store_configs_spec.rb +11 -0
- data/spec/unit/indirector/rest_spec.rb +7 -3
- data/spec/unit/indirector/ssl_file_spec.rb +14 -17
- data/spec/unit/indirector/yaml_spec.rb +4 -4
- data/spec/unit/module_spec.rb +43 -15
- data/spec/unit/module_tool/tar/gnu_spec.rb +2 -2
- data/spec/unit/module_tool/tar/solaris_spec.rb +2 -2
- data/spec/unit/module_tool/tar_spec.rb +45 -0
- data/spec/unit/network/authconfig_spec.rb +2 -1
- data/spec/unit/network/authentication_spec.rb +2 -2
- data/spec/unit/network/format_handler_spec.rb +2 -2
- data/spec/unit/network/formats_spec.rb +24 -0
- data/spec/unit/network/http/connection_spec.rb +76 -199
- data/spec/unit/network/http/handler_spec.rb +33 -34
- data/spec/unit/network/http_pool_spec.rb +8 -5
- data/spec/unit/node/environment_spec.rb +76 -90
- data/spec/unit/node/facts_spec.rb +20 -3
- data/spec/unit/node_spec.rb +43 -0
- data/spec/unit/parameter/boolean_spec.rb +22 -12
- data/spec/unit/parser/ast/resourceparam_spec.rb +51 -0
- data/spec/unit/parser/compiler_spec.rb +103 -35
- data/spec/unit/parser/eparser_adapter_spec.rb +12 -12
- data/spec/unit/parser/files_spec.rb +11 -11
- data/spec/unit/parser/functions/contain_spec.rb +185 -0
- data/spec/unit/parser/functions/create_resources_spec.rb +13 -5
- data/spec/unit/parser/functions/generate_spec.rb +1 -1
- data/spec/unit/parser/functions_spec.rb +2 -2
- data/spec/unit/parser/lexer_spec.rb +1 -1
- data/spec/unit/parser/methods/each_spec.rb +1 -1
- data/spec/unit/parser/methods/{select_spec.rb → filter_spec.rb} +11 -11
- data/spec/unit/parser/methods/map_spec.rb +95 -0
- data/spec/unit/parser/methods/reduce_spec.rb +12 -11
- data/spec/unit/parser/methods/shared.rb +5 -5
- data/spec/unit/parser/methods/slice_spec.rb +13 -13
- data/spec/unit/parser/parser_spec.rb +1 -1
- data/spec/unit/parser/resource/param_spec.rb +44 -0
- data/spec/unit/parser/resource_spec.rb +16 -15
- data/spec/unit/pops/model/ast_transformer_spec.rb +18 -4
- data/spec/unit/pops/parser/lexer_spec.rb +22 -5
- data/spec/unit/pops/parser/parse_calls_spec.rb +5 -5
- data/spec/unit/pops/transformer/transform_calls_spec.rb +6 -6
- data/spec/unit/pops/transformer/transform_containers_spec.rb +2 -2
- data/spec/unit/pops/validator/validator_spec.rb +31 -0
- data/spec/unit/provider/augeas/augeas_spec.rb +57 -2
- data/spec/unit/provider/exec/posix_spec.rb +8 -3
- data/spec/unit/provider/file/posix_spec.rb +2 -2
- data/spec/unit/provider/group/windows_adsi_spec.rb +70 -3
- data/spec/unit/provider/nameservice/directoryservice_spec.rb +3 -3
- data/spec/unit/provider/package/apt_spec.rb +1 -1
- data/spec/unit/provider/package/msi_spec.rb +15 -42
- data/spec/unit/provider/package/openbsd_spec.rb +3 -3
- data/spec/unit/provider/package/rpm_spec.rb +56 -13
- data/spec/unit/provider/package/windows_spec.rb +15 -19
- data/spec/unit/provider/service/base_spec.rb +1 -1
- data/spec/unit/provider/service/daemontools_spec.rb +18 -8
- data/spec/unit/provider/service/freebsd_spec.rb +3 -3
- data/spec/unit/provider/service/gentoo_spec.rb +5 -2
- data/spec/unit/provider/service/init_spec.rb +17 -17
- data/spec/unit/provider/service/launchd_spec.rb +76 -23
- data/spec/unit/provider/service/openbsd_spec.rb +125 -0
- data/spec/unit/provider/service/openwrt_spec.rb +1 -1
- data/spec/unit/provider/service/runit_spec.rb +12 -5
- data/spec/unit/provider/service/upstart_spec.rb +4 -4
- data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +5 -5
- data/spec/unit/provider/user/directoryservice_spec.rb +4 -4
- data/spec/unit/provider/zone/solaris_spec.rb +1 -1
- data/spec/unit/provider_spec.rb +2 -2
- data/spec/unit/reports/http_spec.rb +19 -34
- data/spec/unit/reports/store_spec.rb +2 -2
- data/spec/unit/resource/catalog_spec.rb +81 -11
- data/spec/unit/resource/status_spec.rb +11 -1
- data/spec/unit/resource/type_spec.rb +30 -1
- data/spec/unit/resource_spec.rb +40 -4
- data/spec/unit/settings/file_setting_spec.rb +2 -2
- data/spec/unit/settings/path_setting_spec.rb +2 -2
- data/spec/unit/settings/priority_setting_spec.rb +66 -0
- data/spec/unit/settings_spec.rb +16 -31
- data/spec/unit/ssl/certificate_authority/autosign_command_spec.rb +30 -0
- data/spec/unit/ssl/certificate_authority_spec.rb +129 -134
- data/spec/unit/ssl/certificate_factory_spec.rb +18 -0
- data/spec/unit/ssl/certificate_request_attributes_spec.rb +61 -0
- data/spec/unit/ssl/certificate_request_spec.rb +103 -0
- data/spec/unit/ssl/certificate_spec.rb +31 -18
- data/spec/unit/ssl/host_spec.rb +34 -8
- data/spec/unit/ssl/inventory_spec.rb +27 -62
- data/spec/unit/ssl/key_spec.rb +4 -4
- data/spec/unit/ssl/oids_spec.rb +48 -0
- data/spec/unit/ssl/validator_spec.rb +49 -6
- data/spec/unit/status_spec.rb +9 -0
- data/spec/unit/transaction/event_spec.rb +1 -9
- data/spec/unit/transaction/report_spec.rb +20 -1
- data/spec/unit/transaction/resource_harness_spec.rb +60 -210
- data/spec/unit/transaction_spec.rb +54 -8
- data/spec/unit/type/component_spec.rb +2 -2
- data/spec/unit/type/exec_spec.rb +14 -7
- data/spec/unit/type/file/content_spec.rb +13 -2
- data/spec/unit/type/file/ctime_spec.rb +1 -1
- data/spec/unit/type/file/mode_spec.rb +48 -2
- data/spec/unit/type/file/mtime_spec.rb +1 -1
- data/spec/unit/type/file/source_spec.rb +177 -7
- data/spec/unit/type/file_spec.rb +63 -71
- data/spec/unit/type/group_spec.rb +20 -0
- data/spec/unit/type/k5login_spec.rb +3 -3
- data/spec/unit/type/mount_spec.rb +53 -0
- data/spec/unit/type/nagios_spec.rb +216 -0
- data/spec/unit/type/package_spec.rb +7 -1
- data/spec/unit/type/schedule_spec.rb +6 -0
- data/spec/unit/type/service_spec.rb +3 -3
- data/spec/unit/type/tidy_spec.rb +14 -14
- data/spec/unit/type/user_spec.rb +9 -0
- data/spec/unit/type_spec.rb +86 -4
- data/spec/unit/util/adsi_spec.rb +120 -12
- data/spec/unit/util/autoload_spec.rb +14 -14
- data/spec/unit/util/backups_spec.rb +29 -21
- data/spec/unit/util/checksums_spec.rb +2 -1
- data/spec/unit/util/command_line_spec.rb +41 -0
- data/spec/unit/util/docs_spec.rb +91 -0
- data/spec/unit/util/execution_spec.rb +26 -2
- data/spec/unit/util/filetype_spec.rb +7 -7
- data/spec/unit/util/lockfile_spec.rb +2 -2
- data/spec/unit/util/log/destinations_spec.rb +32 -0
- data/spec/unit/util/monkey_patches_spec.rb +41 -0
- data/spec/unit/util/pidlock_spec.rb +6 -6
- data/spec/unit/util/rdoc/parser_spec.rb +15 -13
- data/spec/unit/util/rdoc_spec.rb +18 -24
- data/spec/unit/util/resource_template_spec.rb +3 -3
- data/spec/unit/util/selinux_spec.rb +4 -2
- data/spec/unit/util/storage_spec.rb +4 -4
- data/spec/unit/util/suidmanager_spec.rb +7 -0
- data/spec/unit/util/tag_set_spec.rb +46 -0
- data/spec/unit/util/tagging_spec.rb +82 -45
- data/spec/unit/util/watcher_spec.rb +4 -1
- data/spec/unit/util/windows/access_control_entry_spec.rb +67 -0
- data/spec/unit/util/windows/access_control_list_spec.rb +133 -0
- data/spec/unit/util/windows/root_certs_spec.rb +10 -8
- data/spec/unit/util/windows/security_descriptor_spec.rb +117 -0
- data/spec/unit/util/windows/sid_spec.rb +69 -0
- data/spec/unit/util_spec.rb +7 -7
- data/tasks/ci.rake +17 -36
- metadata +2811 -2746
- checksums.yaml +0 -7
- data/examples/mac_automount.pp +0 -16
- data/examples/mcx_dock_absent.pp +0 -4
- data/examples/mcx_dock_default.pp +0 -118
- data/examples/mcx_dock_full.pp +0 -125
- data/examples/mcx_dock_invalid.pp +0 -9
- data/examples/mcx_nogroup.pp +0 -118
- data/examples/mcx_notexists_absent.pp +0 -4
- data/ext/rack/README +0 -58
- data/ext/rack/manifest.pp +0 -59
- data/lib/puppet/external/lock.rb +0 -63
- data/lib/puppet/indirector/hiera.rb +0 -39
- data/lib/puppet/parser/functions/foreach.rb +0 -95
- data/spec/integration/network/server/webrick_spec.rb +0 -76
- data/spec/integration/parser/functions_spec.rb +0 -16
- data/spec/unit/indirector/hiera_spec.rb +0 -154
- data/spec/unit/parser/methods/collect_spec.rb +0 -153
- data/spec/unit/parser/methods/foreach_spec.rb +0 -91
- data/spec/unit/parser/methods/reject_spec.rb +0 -73
- data/spec/unit/resource/resource_type.json +0 -34
data/lib/puppet/error.rb
CHANGED
@@ -297,12 +297,13 @@ class Nagios::Base
|
|
297
297
|
def to_s
|
298
298
|
str = "define #{self.type} {\n"
|
299
299
|
|
300
|
-
|
300
|
+
@parameters.keys.sort.each { |param|
|
301
|
+
value = @parameters[param]
|
301
302
|
str += %{\t%-30s %s\n} % [ param,
|
302
303
|
if value.is_a? Array
|
303
|
-
value.join(",")
|
304
|
+
value.join(",").sub(';', '\;')
|
304
305
|
else
|
305
|
-
value
|
306
|
+
value.sub(';', '\;')
|
306
307
|
end
|
307
308
|
]
|
308
309
|
}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# vim: syntax=ruby
|
2
2
|
class Nagios::Parser
|
3
3
|
|
4
|
-
token DEFINE NAME
|
4
|
+
token DEFINE NAME PARAM LCURLY RCURLY VALUE RETURN
|
5
5
|
|
6
6
|
rule
|
7
7
|
decls: decl { return val[0] if val[0] }
|
@@ -20,13 +20,9 @@ decls: decl { return val[0] if val[0] }
|
|
20
20
|
|
21
21
|
decl: object { result = [val[0]] }
|
22
22
|
| RETURN { result = nil }
|
23
|
-
| comment
|
24
23
|
;
|
25
24
|
|
26
|
-
|
27
|
-
;
|
28
|
-
|
29
|
-
object: DEFINE NAME LCURLY RETURN vars RCURLY {
|
25
|
+
object: DEFINE NAME LCURLY returns vars RCURLY {
|
30
26
|
result = Nagios::Base.create(val[1],val[4])
|
31
27
|
}
|
32
28
|
;
|
@@ -40,146 +36,211 @@ vars: var
|
|
40
36
|
}
|
41
37
|
;
|
42
38
|
|
43
|
-
var: PARAM VALUE
|
39
|
+
var: PARAM VALUE returns { result = {val[0] => val[1]} }
|
44
40
|
;
|
45
41
|
|
46
|
-
returns:
|
47
|
-
|
48
|
-
;
|
49
|
-
|
50
|
-
icomment: # nothing
|
51
|
-
| INLINECOMMENT
|
42
|
+
returns: RETURN
|
43
|
+
| RETURN returns
|
52
44
|
;
|
53
45
|
|
54
46
|
end
|
55
47
|
|
56
48
|
----inner
|
49
|
+
require 'strscan'
|
57
50
|
|
58
51
|
class ::Nagios::Parser::SyntaxError < RuntimeError; end
|
59
52
|
|
60
53
|
def parse(src)
|
61
|
-
|
54
|
+
if src.respond_to?("force_encoding") then
|
55
|
+
src.force_encoding("ASCII-8BIT")
|
56
|
+
end
|
57
|
+
@ss = StringScanner.new(src)
|
62
58
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
59
|
+
# state variables
|
60
|
+
@in_parameter_value = false
|
61
|
+
@in_object_definition = false
|
62
|
+
@done = false
|
67
63
|
|
68
|
-
|
69
|
-
|
64
|
+
@line = 1
|
65
|
+
@yydebug = true
|
70
66
|
|
71
|
-
|
67
|
+
do_parse
|
72
68
|
end
|
73
69
|
|
74
|
-
#
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
70
|
+
# This tokenizes the outside of object definitions,
|
71
|
+
# and detects when we start defining an object.
|
72
|
+
# We ignore whitespaces, comments and inline comments.
|
73
|
+
# We yield when finding newlines, the "define" keyword,
|
74
|
+
# the object name and the opening curly bracket.
|
75
|
+
def tokenize_outside_definitions
|
76
|
+
case
|
77
|
+
when (chars = @ss.skip(/[ \t]+/)) # ignore whitespace /\s+/
|
78
|
+
;
|
81
79
|
|
82
|
-
|
83
|
-
|
84
|
-
end
|
85
|
-
yytext = String.new
|
80
|
+
when (text = @ss.scan(/\#.*$/)) # ignore comments
|
81
|
+
;
|
86
82
|
|
83
|
+
when (text = @ss.scan(/;.*$/)) # ignore inline comments
|
84
|
+
;
|
87
85
|
|
88
|
-
|
89
|
-
|
90
|
-
if $&
|
91
|
-
return [:INLINECOMMENT, ""]
|
92
|
-
end
|
86
|
+
when (text = @ss.scan(/\n/)) # newline
|
87
|
+
[:RETURN, text]
|
93
88
|
|
94
|
-
|
95
|
-
|
96
|
-
return [:COMMENT, ""]
|
97
|
-
end
|
89
|
+
when (text = @ss.scan(/\b(define)\b/)) # the "define" keyword
|
90
|
+
[:DEFINE, text]
|
98
91
|
|
99
|
-
|
92
|
+
when (text = @ss.scan(/[^{ \t\n]+/)) # the name of the object being defined (everything not an opening curly bracket or a separator)
|
93
|
+
[:NAME, text]
|
100
94
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
end
|
95
|
+
when (text = @ss.scan(/\{/)) # the opening curly bracket - we enter object definition
|
96
|
+
@in_object_definition = true
|
97
|
+
[:LCURLY, text]
|
105
98
|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
99
|
+
else
|
100
|
+
text = @ss.string[@ss.pos .. -1]
|
101
|
+
raise ScanError, "can not match: '#{text}'"
|
102
|
+
end # case
|
103
|
+
end
|
104
|
+
|
105
|
+
# This tokenizes until we find the parameter name.
|
106
|
+
def tokenize_parameter_name
|
107
|
+
case
|
108
|
+
when (chars = @ss.skip(/[ \t]+/)) # ignore whitespace /\s+/
|
109
|
+
;
|
110
|
+
|
111
|
+
when (text = @ss.scan(/\#.*$/)) # ignore comments
|
112
|
+
;
|
113
|
+
|
114
|
+
when (text = @ss.scan(/;.*$/)) # ignore inline comments
|
115
|
+
;
|
116
|
+
|
117
|
+
when (text = @ss.scan(/\n/)) # newline
|
118
|
+
[:RETURN, text]
|
119
|
+
|
120
|
+
when (text = @ss.scan(/\}/)) # closing curly bracket : end of definition
|
121
|
+
@in_object_definition = false
|
122
|
+
[:RCURLY, text]
|
123
|
+
|
124
|
+
when (not @in_parameter_value and (text = @ss.scan(/\S+/))) # This is the name of the parameter
|
125
|
+
@in_parameter_value = true
|
126
|
+
[:PARAM, text]
|
127
|
+
|
128
|
+
else
|
129
|
+
text = @ss.string[@ss.pos .. -1]
|
130
|
+
raise ScanError, "can not match: '#{text}'"
|
131
|
+
end # case
|
132
|
+
end
|
133
|
+
|
134
|
+
# This tokenizes the parameter value.
|
135
|
+
# There is a special handling for lines containing semicolons :
|
136
|
+
# - unescaped semicolons are line comments (and should stop parsing of the line)
|
137
|
+
# - escaped (with backslash \) semicolons should be kept in the parameter value (without the backslash)
|
138
|
+
def tokenize_parameter_value
|
139
|
+
case
|
140
|
+
when (chars = @ss.skip(/[ \t]+/)) # ignore whitespace /\s+/
|
141
|
+
;
|
142
|
+
|
143
|
+
when (text = @ss.scan(/\#.*$/)) # ignore comments
|
144
|
+
;
|
145
|
+
|
146
|
+
when (text = @ss.scan(/\n/)) # newline
|
147
|
+
[:RETURN, text]
|
148
|
+
|
149
|
+
when (text = @ss.scan(/.+$/)) # Value of parameter
|
150
|
+
@in_parameter_value = false
|
151
|
+
|
152
|
+
# Special handling of inline comments (;) and escaped semicolons (\;)
|
153
|
+
|
154
|
+
# We split the string on escaped semicolons (\;),
|
155
|
+
# Then we rebuild it as long as there are no inline comments (;)
|
156
|
+
# We join the rebuilt string with unescaped semicolons (on purpose)
|
157
|
+
array = text.split('\;', 0)
|
158
|
+
|
159
|
+
text = ""
|
160
|
+
|
161
|
+
array.each do |elt|
|
162
|
+
|
163
|
+
# Now we split at inline comments. If we have more than 1 element in the array
|
164
|
+
# it means we have an inline comment, so we are able to stop parsing
|
165
|
+
# However we still want to reconstruct the string with its first part (before the comment)
|
166
|
+
linearray = elt.split(';', 0)
|
167
|
+
|
168
|
+
# Let's reconstruct the string with a (unescaped) semicolon
|
169
|
+
if text != "" then
|
170
|
+
text += ';'
|
171
|
+
end
|
172
|
+
text += linearray[0]
|
173
|
+
|
174
|
+
# Now we can stop
|
175
|
+
if linearray.length > 1 then
|
176
|
+
break
|
177
|
+
end
|
155
178
|
end
|
179
|
+
|
180
|
+
|
181
|
+
# We strip the text to remove spaces between end of string and beginning of inline comment
|
182
|
+
[:VALUE, text.strip]
|
183
|
+
|
184
|
+
else
|
185
|
+
text = @ss.string[@ss.pos .. -1]
|
186
|
+
raise ScanError, "can not match: '#{text}'"
|
187
|
+
end # case
|
188
|
+
end
|
189
|
+
|
190
|
+
# This tokenizes inside an object definition.
|
191
|
+
# Two cases : parameter name and parameter value
|
192
|
+
def tokenize_inside_definitions
|
193
|
+
if @in_parameter_value
|
194
|
+
tokenize_parameter_value
|
195
|
+
else
|
196
|
+
tokenize_parameter_name
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
# The lexer. Very simple.
|
201
|
+
def token
|
202
|
+
text = @ss.peek(1)
|
203
|
+
@line += 1 if text == "\n"
|
204
|
+
|
205
|
+
token = if @in_object_definition
|
206
|
+
tokenize_inside_definitions
|
207
|
+
else
|
208
|
+
tokenize_outside_definitions
|
209
|
+
end
|
210
|
+
token
|
156
211
|
end
|
157
212
|
|
158
213
|
def next_token
|
159
|
-
|
214
|
+
return if @ss.eos?
|
215
|
+
|
216
|
+
# skips empty actions
|
217
|
+
until _next_token = token or @ss.eos?; end
|
218
|
+
_next_token
|
160
219
|
end
|
161
220
|
|
162
221
|
def yydebug
|
163
|
-
|
222
|
+
1
|
164
223
|
end
|
165
224
|
|
166
225
|
def yywrap
|
167
|
-
|
226
|
+
0
|
168
227
|
end
|
169
228
|
|
170
229
|
def on_error(token, value, vstack )
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
230
|
+
# text = @ss.string[@ss.pos .. -1]
|
231
|
+
text = @ss.peek(20)
|
232
|
+
msg = ""
|
233
|
+
unless value.nil?
|
234
|
+
msg = "line #{@line}: syntax error at value '#{value}' : #{text}"
|
235
|
+
else
|
236
|
+
msg = "line #{@line}: syntax error at token '#{token}' : #{text}"
|
237
|
+
end
|
238
|
+
if @ss.eos?
|
239
|
+
msg = "line #{@line}: Unexpected end of file"
|
240
|
+
end
|
241
|
+
if token == '$end'.intern
|
242
|
+
puts "okay, this is silly"
|
243
|
+
else
|
244
|
+
raise ::Nagios::Parser::SyntaxError, msg
|
245
|
+
end
|
185
246
|
end
|
@@ -8,205 +8,269 @@ require 'racc/parser.rb'
|
|
8
8
|
module Nagios
|
9
9
|
class Parser < Racc::Parser
|
10
10
|
|
11
|
-
module_eval(<<'...end grammar.ry/module_eval...', 'grammar.ry',
|
11
|
+
module_eval(<<'...end grammar.ry/module_eval...', 'grammar.ry', 49)
|
12
|
+
require 'strscan'
|
12
13
|
|
13
14
|
class ::Nagios::Parser::SyntaxError < RuntimeError; end
|
14
15
|
|
15
16
|
def parse(src)
|
16
|
-
|
17
|
+
if src.respond_to?("force_encoding") then
|
18
|
+
src.force_encoding("ASCII-8BIT")
|
19
|
+
end
|
20
|
+
@ss = StringScanner.new(src)
|
17
21
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
+
# state variables
|
23
|
+
@in_parameter_value = false
|
24
|
+
@in_object_definition = false
|
25
|
+
@done = false
|
22
26
|
|
23
|
-
|
24
|
-
|
27
|
+
@line = 1
|
28
|
+
@yydebug = true
|
25
29
|
|
26
|
-
|
30
|
+
do_parse
|
27
31
|
end
|
28
32
|
|
29
|
-
#
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
33
|
+
# This tokenizes the outside of object definitions,
|
34
|
+
# and detects when we start defining an object.
|
35
|
+
# We ignore whitespaces, comments and inline comments.
|
36
|
+
# We yield when finding newlines, the "define" keyword,
|
37
|
+
# the object name and the opening curly bracket.
|
38
|
+
def tokenize_outside_definitions
|
39
|
+
case
|
40
|
+
when (chars = @ss.skip(/[ \t]+/)) # ignore whitespace /\s+/
|
41
|
+
;
|
36
42
|
|
37
|
-
|
38
|
-
|
39
|
-
end
|
40
|
-
yytext = String.new
|
43
|
+
when (text = @ss.scan(/\#.*$/)) # ignore comments
|
44
|
+
;
|
41
45
|
|
46
|
+
when (text = @ss.scan(/;.*$/)) # ignore inline comments
|
47
|
+
;
|
42
48
|
|
43
|
-
|
44
|
-
|
45
|
-
if $&
|
46
|
-
return [:INLINECOMMENT, ""]
|
47
|
-
end
|
49
|
+
when (text = @ss.scan(/\n/)) # newline
|
50
|
+
[:RETURN, text]
|
48
51
|
|
49
|
-
|
50
|
-
|
51
|
-
return [:COMMENT, ""]
|
52
|
-
end
|
52
|
+
when (text = @ss.scan(/\b(define)\b/)) # the "define" keyword
|
53
|
+
[:DEFINE, text]
|
53
54
|
|
54
|
-
|
55
|
+
when (text = @ss.scan(/[^{ \t\n]+/)) # the name of the object being defined (everything not an opening curly bracket or a separator)
|
56
|
+
[:NAME, text]
|
55
57
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
end
|
58
|
+
when (text = @ss.scan(/\{/)) # the opening curly bracket - we enter object definition
|
59
|
+
@in_object_definition = true
|
60
|
+
[:LCURLY, text]
|
60
61
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
62
|
+
else
|
63
|
+
text = @ss.string[@ss.pos .. -1]
|
64
|
+
raise ScanError, "can not match: '#{text}'"
|
65
|
+
end # case
|
66
|
+
end
|
67
|
+
|
68
|
+
# This tokenizes until we find the parameter name.
|
69
|
+
def tokenize_parameter_name
|
70
|
+
case
|
71
|
+
when (chars = @ss.skip(/[ \t]+/)) # ignore whitespace /\s+/
|
72
|
+
;
|
73
|
+
|
74
|
+
when (text = @ss.scan(/\#.*$/)) # ignore comments
|
75
|
+
;
|
76
|
+
|
77
|
+
when (text = @ss.scan(/;.*$/)) # ignore inline comments
|
78
|
+
;
|
79
|
+
|
80
|
+
when (text = @ss.scan(/\n/)) # newline
|
81
|
+
[:RETURN, text]
|
82
|
+
|
83
|
+
when (text = @ss.scan(/\}/)) # closing curly bracket : end of definition
|
84
|
+
@in_object_definition = false
|
85
|
+
[:RCURLY, text]
|
86
|
+
|
87
|
+
when (not @in_parameter_value and (text = @ss.scan(/\S+/))) # This is the name of the parameter
|
88
|
+
@in_parameter_value = true
|
89
|
+
[:PARAM, text]
|
90
|
+
|
91
|
+
else
|
92
|
+
text = @ss.string[@ss.pos .. -1]
|
93
|
+
raise ScanError, "can not match: '#{text}'"
|
94
|
+
end # case
|
95
|
+
end
|
96
|
+
|
97
|
+
# This tokenizes the parameter value.
|
98
|
+
# There is a special handling for lines containing semicolons :
|
99
|
+
# - unescaped semicolons are line comments (and should stop parsing of the line)
|
100
|
+
# - escaped (with backslash \) semicolons should be kept in the parameter value (without the backslash)
|
101
|
+
def tokenize_parameter_value
|
102
|
+
case
|
103
|
+
when (chars = @ss.skip(/[ \t]+/)) # ignore whitespace /\s+/
|
104
|
+
;
|
105
|
+
|
106
|
+
when (text = @ss.scan(/\#.*$/)) # ignore comments
|
107
|
+
;
|
108
|
+
|
109
|
+
when (text = @ss.scan(/\n/)) # newline
|
110
|
+
[:RETURN, text]
|
111
|
+
|
112
|
+
when (text = @ss.scan(/.+$/)) # Value of parameter
|
113
|
+
@in_parameter_value = false
|
114
|
+
|
115
|
+
# Special handling of inline comments (;) and escaped semicolons (\;)
|
116
|
+
|
117
|
+
# We split the string on escaped semicolons (\;),
|
118
|
+
# Then we rebuild it as long as there are no inline comments (;)
|
119
|
+
# We join the rebuilt string with unescaped semicolons (on purpose)
|
120
|
+
array = text.split('\;', 0)
|
121
|
+
|
122
|
+
text = ""
|
123
|
+
|
124
|
+
array.each do |elt|
|
125
|
+
|
126
|
+
# Now we split at inline comments. If we have more than 1 element in the array
|
127
|
+
# it means we have an inline comment, so we are able to stop parsing
|
128
|
+
# However we still want to reconstruct the string with its first part (before the comment)
|
129
|
+
linearray = elt.split(';', 0)
|
130
|
+
|
131
|
+
# Let's reconstruct the string with a (unescaped) semicolon
|
132
|
+
if text != "" then
|
133
|
+
text += ';'
|
134
|
+
end
|
135
|
+
text += linearray[0]
|
136
|
+
|
137
|
+
# Now we can stop
|
138
|
+
if linearray.length > 1 then
|
139
|
+
break
|
140
|
+
end
|
110
141
|
end
|
142
|
+
|
143
|
+
|
144
|
+
# We strip the text to remove spaces between end of string and beginning of inline comment
|
145
|
+
[:VALUE, text.strip]
|
146
|
+
|
147
|
+
else
|
148
|
+
text = @ss.string[@ss.pos .. -1]
|
149
|
+
raise ScanError, "can not match: '#{text}'"
|
150
|
+
end # case
|
151
|
+
end
|
152
|
+
|
153
|
+
# This tokenizes inside an object definition.
|
154
|
+
# Two cases : parameter name and parameter value
|
155
|
+
def tokenize_inside_definitions
|
156
|
+
if @in_parameter_value
|
157
|
+
tokenize_parameter_value
|
158
|
+
else
|
159
|
+
tokenize_parameter_name
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
# The lexer. Very simple.
|
164
|
+
def token
|
165
|
+
text = @ss.peek(1)
|
166
|
+
@line += 1 if text == "\n"
|
167
|
+
|
168
|
+
token = if @in_object_definition
|
169
|
+
tokenize_inside_definitions
|
170
|
+
else
|
171
|
+
tokenize_outside_definitions
|
172
|
+
end
|
173
|
+
token
|
111
174
|
end
|
112
175
|
|
113
176
|
def next_token
|
114
|
-
|
177
|
+
return if @ss.eos?
|
178
|
+
|
179
|
+
# skips empty actions
|
180
|
+
until _next_token = token or @ss.eos?; end
|
181
|
+
_next_token
|
115
182
|
end
|
116
183
|
|
117
184
|
def yydebug
|
118
|
-
|
185
|
+
1
|
119
186
|
end
|
120
187
|
|
121
188
|
def yywrap
|
122
|
-
|
189
|
+
0
|
123
190
|
end
|
124
191
|
|
125
192
|
def on_error(token, value, vstack )
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
193
|
+
# text = @ss.string[@ss.pos .. -1]
|
194
|
+
text = @ss.peek(20)
|
195
|
+
msg = ""
|
196
|
+
unless value.nil?
|
197
|
+
msg = "line #{@line}: syntax error at value '#{value}' : #{text}"
|
198
|
+
else
|
199
|
+
msg = "line #{@line}: syntax error at token '#{token}' : #{text}"
|
200
|
+
end
|
201
|
+
if @ss.eos?
|
202
|
+
msg = "line #{@line}: Unexpected end of file"
|
203
|
+
end
|
204
|
+
if token == '$end'.intern
|
205
|
+
puts "okay, this is silly"
|
206
|
+
else
|
207
|
+
raise ::Nagios::Parser::SyntaxError, msg
|
208
|
+
end
|
140
209
|
end
|
141
210
|
...end grammar.ry/module_eval...
|
142
211
|
##### State transition tables begin ###
|
143
212
|
|
144
213
|
racc_action_table = [
|
145
|
-
8,
|
146
|
-
|
214
|
+
8, 3, 3, 14, 12, 18, 10, 4, 4, 9,
|
215
|
+
14, 12, 6, 19, 12 ]
|
147
216
|
|
148
217
|
racc_action_check = [
|
149
|
-
|
150
|
-
|
218
|
+
5, 0, 5, 13, 9, 13, 8, 0, 5, 6,
|
219
|
+
11, 12, 3, 14, 19 ]
|
151
220
|
|
152
221
|
racc_action_pointer = [
|
153
|
-
|
154
|
-
nil,
|
155
|
-
|
222
|
+
-1, nil, nil, 9, nil, 0, 4, nil, 6, -4,
|
223
|
+
nil, 6, 3, -1, 6, nil, nil, nil, nil, 6,
|
224
|
+
nil ]
|
156
225
|
|
157
226
|
racc_action_default = [
|
158
|
-
-
|
159
|
-
|
160
|
-
|
227
|
+
-11, -1, -3, -11, -4, -11, -11, -2, -11, -11,
|
228
|
+
21, -11, -9, -11, -11, -6, -10, -7, -5, -11,
|
229
|
+
-8 ]
|
161
230
|
|
162
231
|
racc_goto_table = [
|
163
|
-
16,
|
232
|
+
11, 1, 15, 16, 17, 13, 7, 5, nil, nil,
|
233
|
+
20 ]
|
164
234
|
|
165
235
|
racc_goto_check = [
|
166
|
-
6, 6,
|
236
|
+
4, 2, 6, 4, 6, 5, 2, 1, nil, nil,
|
237
|
+
4 ]
|
167
238
|
|
168
239
|
racc_goto_pointer = [
|
169
|
-
nil,
|
240
|
+
nil, 7, 1, nil, -9, -6, -9 ]
|
170
241
|
|
171
242
|
racc_goto_default = [
|
172
|
-
nil, nil, nil,
|
243
|
+
nil, nil, nil, 2, nil, nil, nil ]
|
173
244
|
|
174
245
|
racc_reduce_table = [
|
175
246
|
0, 0, :racc_error,
|
176
|
-
1,
|
177
|
-
2,
|
178
|
-
1,
|
179
|
-
1,
|
247
|
+
1, 10, :_reduce_1,
|
248
|
+
2, 10, :_reduce_2,
|
249
|
+
1, 11, :_reduce_3,
|
250
|
+
1, 11, :_reduce_4,
|
251
|
+
6, 12, :_reduce_5,
|
180
252
|
1, 14, :_reduce_none,
|
181
|
-
2,
|
182
|
-
|
183
|
-
1,
|
184
|
-
2,
|
185
|
-
4, 18, :_reduce_10,
|
186
|
-
1, 20, :_reduce_none,
|
187
|
-
2, 20, :_reduce_none,
|
188
|
-
0, 19, :_reduce_none,
|
189
|
-
1, 19, :_reduce_none ]
|
253
|
+
2, 14, :_reduce_7,
|
254
|
+
3, 15, :_reduce_8,
|
255
|
+
1, 13, :_reduce_none,
|
256
|
+
2, 13, :_reduce_none ]
|
190
257
|
|
191
|
-
racc_reduce_n =
|
258
|
+
racc_reduce_n = 11
|
192
259
|
|
193
|
-
racc_shift_n =
|
260
|
+
racc_shift_n = 21
|
194
261
|
|
195
262
|
racc_token_table = {
|
196
263
|
false => 0,
|
197
264
|
:error => 1,
|
198
265
|
:DEFINE => 2,
|
199
266
|
:NAME => 3,
|
200
|
-
:
|
201
|
-
:
|
202
|
-
:
|
203
|
-
:
|
204
|
-
:
|
205
|
-
:RETURN => 9,
|
206
|
-
:COMMENT => 10,
|
207
|
-
:INLINECOMMENT => 11 }
|
267
|
+
:PARAM => 4,
|
268
|
+
:LCURLY => 5,
|
269
|
+
:RCURLY => 6,
|
270
|
+
:VALUE => 7,
|
271
|
+
:RETURN => 8 }
|
208
272
|
|
209
|
-
racc_nt_base =
|
273
|
+
racc_nt_base = 9
|
210
274
|
|
211
275
|
racc_use_result_var = true
|
212
276
|
|
@@ -231,23 +295,18 @@ Racc_token_to_s_table = [
|
|
231
295
|
"error",
|
232
296
|
"DEFINE",
|
233
297
|
"NAME",
|
234
|
-
"STRING",
|
235
298
|
"PARAM",
|
236
299
|
"LCURLY",
|
237
300
|
"RCURLY",
|
238
301
|
"VALUE",
|
239
302
|
"RETURN",
|
240
|
-
"COMMENT",
|
241
|
-
"INLINECOMMENT",
|
242
303
|
"$start",
|
243
304
|
"decls",
|
244
305
|
"decl",
|
245
306
|
"object",
|
246
|
-
"
|
307
|
+
"returns",
|
247
308
|
"vars",
|
248
|
-
"var"
|
249
|
-
"icomment",
|
250
|
-
"returns" ]
|
309
|
+
"var" ]
|
251
310
|
|
252
311
|
Racc_debug_parser = false
|
253
312
|
|
@@ -257,82 +316,72 @@ Racc_debug_parser = false
|
|
257
316
|
|
258
317
|
module_eval(<<'.,.,', 'grammar.ry', 6)
|
259
318
|
def _reduce_1(val, _values, result)
|
260
|
-
return val[0] if val[0]
|
319
|
+
return val[0] if val[0]
|
261
320
|
result
|
262
321
|
end
|
263
322
|
.,.,
|
264
323
|
|
265
324
|
module_eval(<<'.,.,', 'grammar.ry', 8)
|
266
325
|
def _reduce_2(val, _values, result)
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
326
|
+
if val[1].nil?
|
327
|
+
result = val[0]
|
328
|
+
else
|
329
|
+
if val[0].nil?
|
330
|
+
result = val[1]
|
331
|
+
else
|
332
|
+
result = [ val[0], val[1] ].flatten
|
333
|
+
end
|
334
|
+
end
|
335
|
+
|
276
336
|
result
|
277
337
|
end
|
278
338
|
.,.,
|
279
339
|
|
280
340
|
module_eval(<<'.,.,', 'grammar.ry', 20)
|
281
341
|
def _reduce_3(val, _values, result)
|
282
|
-
|
342
|
+
result = [val[0]]
|
283
343
|
result
|
284
344
|
end
|
285
345
|
.,.,
|
286
346
|
|
287
347
|
module_eval(<<'.,.,', 'grammar.ry', 21)
|
288
348
|
def _reduce_4(val, _values, result)
|
289
|
-
|
349
|
+
result = nil
|
290
350
|
result
|
291
351
|
end
|
292
352
|
.,.,
|
293
353
|
|
294
|
-
# reduce 5 omitted
|
295
|
-
|
296
354
|
module_eval(<<'.,.,', 'grammar.ry', 25)
|
297
|
-
def
|
298
|
-
|
355
|
+
def _reduce_5(val, _values, result)
|
356
|
+
result = Nagios::Base.create(val[1],val[4])
|
357
|
+
|
299
358
|
result
|
300
359
|
end
|
301
360
|
.,.,
|
302
361
|
|
303
|
-
|
304
|
-
def _reduce_7(val, _values, result)
|
305
|
-
result = Nagios::Base.create(val[1],val[4])
|
306
|
-
result
|
307
|
-
end
|
308
|
-
.,.,
|
362
|
+
# reduce 6 omitted
|
309
363
|
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
result = val[0]
|
364
|
+
module_eval(<<'.,.,', 'grammar.ry', 31)
|
365
|
+
def _reduce_7(val, _values, result)
|
366
|
+
val[1].each {|p,v|
|
367
|
+
val[0][p] = v
|
368
|
+
}
|
369
|
+
result = val[0]
|
370
|
+
|
318
371
|
result
|
319
372
|
end
|
320
373
|
.,.,
|
321
374
|
|
322
|
-
module_eval(<<'.,.,', 'grammar.ry',
|
323
|
-
def
|
324
|
-
|
375
|
+
module_eval(<<'.,.,', 'grammar.ry', 38)
|
376
|
+
def _reduce_8(val, _values, result)
|
377
|
+
result = {val[0] => val[1]}
|
325
378
|
result
|
326
379
|
end
|
327
380
|
.,.,
|
328
381
|
|
329
|
-
# reduce
|
330
|
-
|
331
|
-
# reduce 12 omitted
|
332
|
-
|
333
|
-
# reduce 13 omitted
|
382
|
+
# reduce 9 omitted
|
334
383
|
|
335
|
-
# reduce
|
384
|
+
# reduce 10 omitted
|
336
385
|
|
337
386
|
def _reduce_none(val, _values, result)
|
338
387
|
val[0]
|