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/util/rdoc.rb
CHANGED
@@ -5,44 +5,42 @@ module Puppet::Util::RDoc
|
|
5
5
|
# launch a rdoc documenation process
|
6
6
|
# with the files/dir passed in +files+
|
7
7
|
def rdoc(outputdir, files, charset = nil)
|
8
|
-
|
9
|
-
raise "the version of RDoc included in Ruby #{::RUBY_VERSION} is not supported"
|
10
|
-
end
|
11
|
-
|
12
|
-
begin
|
13
|
-
Puppet[:ignoreimport] = true
|
8
|
+
Puppet[:ignoreimport] = true
|
14
9
|
|
15
|
-
|
16
|
-
|
17
|
-
|
10
|
+
# then rdoc
|
11
|
+
require 'rdoc/rdoc'
|
12
|
+
require 'rdoc/options'
|
18
13
|
|
19
|
-
|
20
|
-
|
14
|
+
# load our parser
|
15
|
+
require 'puppet/util/rdoc/parser'
|
21
16
|
|
22
|
-
|
17
|
+
r = RDoc::RDoc.new
|
23
18
|
|
19
|
+
if Puppet.features.rdoc1?
|
24
20
|
RDoc::RDoc::GENERATORS["puppet"] = RDoc::RDoc::Generator.new(
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
# specify our own format & where to output
|
31
|
-
options = [ "--fmt", "puppet",
|
32
|
-
"--quiet",
|
33
|
-
"--exclude", "/modules/[^/]*/files/.*$",
|
34
|
-
"--exclude", "/modules/[^/]*/templates/.*$",
|
35
|
-
"--op", outputdir ]
|
21
|
+
"puppet/util/rdoc/generators/puppet_generator.rb",
|
22
|
+
:PuppetGenerator,
|
23
|
+
"puppet"
|
24
|
+
)
|
25
|
+
end
|
36
26
|
|
37
|
-
|
38
|
-
|
39
|
-
|
27
|
+
# specify our own format & where to output
|
28
|
+
options = [ "--fmt", "puppet",
|
29
|
+
"--quiet",
|
30
|
+
"--exclude", "/modules/[^/]*/spec/.*$",
|
31
|
+
"--exclude", "/modules/[^/]*/files/.*$",
|
32
|
+
"--exclude", "/modules/[^/]*/tests/.*$",
|
33
|
+
"--exclude", "/modules/[^/]*/templates/.*$",
|
34
|
+
"--op", outputdir ]
|
40
35
|
|
41
|
-
|
42
|
-
|
43
|
-
rescue RDoc::RDocError => e
|
44
|
-
raise Puppet::ParseError.new("RDoc error #{e}")
|
36
|
+
if !Puppet.features.rdoc1? || ::Options::OptionList.options.any? { |o| o[0] == "--force-update" } # Options is a root object in the rdoc1 namespace...
|
37
|
+
options << "--force-update"
|
45
38
|
end
|
39
|
+
options += [ "--charset", charset] if charset
|
40
|
+
options += files
|
41
|
+
|
42
|
+
# launch the documentation process
|
43
|
+
r.document(options)
|
46
44
|
end
|
47
45
|
|
48
46
|
# launch an output to console manifest doc
|
@@ -9,25 +9,20 @@ module RDoc
|
|
9
9
|
# PuppetGenerator.
|
10
10
|
|
11
11
|
# PuppetTopLevel is a top level (usually a .pp/.rb file)
|
12
|
-
|
12
|
+
module PuppetTopLevel
|
13
13
|
attr_accessor :module_name, :global
|
14
|
+
end
|
14
15
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
def self.all_plugins
|
26
|
-
@@all_plugins.values
|
27
|
-
end
|
28
|
-
|
29
|
-
def self.all_facts
|
30
|
-
@@all_facts.values
|
16
|
+
# Add top level comments to a class or module regardless of whether we are
|
17
|
+
# using rdoc1 or rdoc2+
|
18
|
+
# @api private
|
19
|
+
module AddClassModuleComment
|
20
|
+
def add_comment(comment, location = nil)
|
21
|
+
if PUPPET_RDOC_VERSION == 1
|
22
|
+
self.comment = comment
|
23
|
+
else
|
24
|
+
super
|
25
|
+
end
|
31
26
|
end
|
32
27
|
end
|
33
28
|
|
@@ -35,28 +30,67 @@ module RDoc
|
|
35
30
|
# This is mapped to an HTMLPuppetModule
|
36
31
|
# it leverage the RDoc (ruby) module infrastructure
|
37
32
|
class PuppetModule < NormalModule
|
33
|
+
include AddClassModuleComment
|
34
|
+
|
38
35
|
attr_accessor :facts, :plugins
|
39
36
|
|
40
37
|
def initialize(name,superclass=nil)
|
41
38
|
@facts = []
|
42
39
|
@plugins = []
|
40
|
+
@nodes = {}
|
43
41
|
super(name,superclass)
|
44
42
|
end
|
45
43
|
|
46
|
-
def
|
47
|
-
|
48
|
-
|
44
|
+
def add_plugin(plugin)
|
45
|
+
if PUPPET_RDOC_VERSION == 1
|
46
|
+
add_to(@plugins, plugin)
|
47
|
+
else
|
48
|
+
add_plugin_rdoc2(plugin)
|
49
|
+
end
|
49
50
|
end
|
50
51
|
|
51
|
-
def
|
52
|
-
|
52
|
+
def add_plugin_rdoc2(plugin)
|
53
|
+
name = plugin.name
|
54
|
+
type = plugin.type
|
55
|
+
meth = AnyMethod.new("*args", name)
|
56
|
+
meth.params = "(*args)"
|
57
|
+
meth.visibility = :public
|
58
|
+
meth.document_self = true
|
59
|
+
meth.singleton = false
|
60
|
+
meth.comment = plugin.comment
|
61
|
+
if type == 'function'
|
62
|
+
@function_container ||= add_module(NormalModule, "__functions__")
|
63
|
+
@function_container.add_method(meth)
|
64
|
+
elsif type == 'type'
|
65
|
+
@type_container ||= add_module(NormalModule, "__types__")
|
66
|
+
@type_container.add_method(meth)
|
67
|
+
end
|
53
68
|
end
|
54
69
|
|
55
70
|
def add_fact(fact)
|
56
|
-
|
71
|
+
if PUPPET_RDOC_VERSION == 1
|
72
|
+
add_to(@facts, fact)
|
73
|
+
else
|
74
|
+
add_fact_rdoc2(fact)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def add_fact_rdoc2(fact)
|
79
|
+
@fact_container ||= add_module(NormalModule, "__facts__")
|
80
|
+
confine_str = fact.confine.empty? ? '' : fact.confine.to_s
|
81
|
+
const = Constant.new(fact.name, confine_str, fact.comment)
|
82
|
+
@fact_container.add_constant(const)
|
83
|
+
end
|
84
|
+
|
85
|
+
def add_node(name, superclass)
|
86
|
+
if PUPPET_RDOC_VERSION == 1
|
87
|
+
add_node_rdoc1(name, superclass)
|
88
|
+
else
|
89
|
+
add_node_rdoc2(name, superclass)
|
90
|
+
end
|
57
91
|
end
|
58
92
|
|
59
|
-
def
|
93
|
+
def add_node_rdoc1(name, superclass)
|
60
94
|
cls = @nodes[name]
|
61
95
|
unless cls
|
62
96
|
cls = PuppetNode.new(name, superclass)
|
@@ -67,6 +101,18 @@ module RDoc
|
|
67
101
|
cls
|
68
102
|
end
|
69
103
|
|
104
|
+
# Adds a module called __nodes__ and adds nodes to it as classes
|
105
|
+
#
|
106
|
+
def add_node_rdoc2(name,superclass)
|
107
|
+
if cls = @nodes[name]
|
108
|
+
return cls
|
109
|
+
end
|
110
|
+
@node_container ||= add_module(NormalModule, "__nodes__")
|
111
|
+
cls = @node_container.add_class(PuppetNode, name, superclass)
|
112
|
+
@nodes[name] = cls if !@done_documenting
|
113
|
+
cls
|
114
|
+
end
|
115
|
+
|
70
116
|
def each_fact
|
71
117
|
@facts.each {|c| yield c}
|
72
118
|
end
|
@@ -88,6 +134,8 @@ module RDoc
|
|
88
134
|
# It is mapped to a HTMLPuppetClass for display
|
89
135
|
# It leverages RDoc (ruby) Class
|
90
136
|
class PuppetClass < ClassModule
|
137
|
+
include AddClassModuleComment
|
138
|
+
|
91
139
|
attr_accessor :resource_list, :requires, :childs, :realizes
|
92
140
|
|
93
141
|
def initialize(name, superclass)
|
@@ -130,7 +178,7 @@ module RDoc
|
|
130
178
|
# but are written class1::class2::define we need to perform the lookup by
|
131
179
|
# ourselves.
|
132
180
|
def find_symbol(symbol, method=nil)
|
133
|
-
result = super
|
181
|
+
result = super(symbol)
|
134
182
|
if not result and symbol =~ /::/
|
135
183
|
modules = symbol.split(/::/)
|
136
184
|
unless modules.empty?
|
@@ -169,6 +217,8 @@ module RDoc
|
|
169
217
|
# It is mapped to a HTMLPuppetNode for display
|
170
218
|
# A node is just a variation of a class
|
171
219
|
class PuppetNode < PuppetClass
|
220
|
+
include AddClassModuleComment
|
221
|
+
|
172
222
|
def initialize(name, superclass)
|
173
223
|
super(name,superclass)
|
174
224
|
end
|
@@ -246,7 +246,7 @@ module Generators
|
|
246
246
|
end
|
247
247
|
|
248
248
|
def gen_composite_index(collection, template, filename)\
|
249
|
-
return if
|
249
|
+
return if Puppet::FileSystem::File.exist?(filename)
|
250
250
|
|
251
251
|
template = TemplatePage.new(RDoc::Page::FR_INDEX_BODY, template)
|
252
252
|
res1 = []
|
@@ -6,492 +6,17 @@
|
|
6
6
|
# rdoc mandatory includes
|
7
7
|
require "rdoc/code_objects"
|
8
8
|
require "puppet/util/rdoc/code_objects"
|
9
|
-
require "rdoc/tokenstream"
|
10
9
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
SITE = "__site__"
|
25
|
-
|
26
|
-
attr_accessor :input_file_name, :top_level
|
27
|
-
|
28
|
-
# parser registration into RDoc
|
29
|
-
parse_files_matching(/\.(rb|pp)$/)
|
30
|
-
|
31
|
-
# called with the top level file
|
32
|
-
def initialize(top_level, file_name, content, options, stats)
|
33
|
-
@options = options
|
34
|
-
@stats = stats
|
35
|
-
@input_file_name = file_name
|
36
|
-
@top_level = PuppetTopLevel.new(top_level)
|
37
|
-
@progress = $stderr unless options.quiet
|
38
|
-
end
|
39
|
-
|
40
|
-
# main entry point
|
41
|
-
def scan
|
42
|
-
environment = Puppet::Node::Environment.new
|
43
|
-
@known_resource_types = environment.known_resource_types
|
44
|
-
unless environment.known_resource_types.watching_file?(@input_file_name)
|
45
|
-
Puppet.info "rdoc: scanning #{@input_file_name}"
|
46
|
-
if @input_file_name =~ /\.pp$/
|
47
|
-
@parser = Puppet::Parser::Parser.new(environment)
|
48
|
-
@parser.file = @input_file_name
|
49
|
-
@parser.parse.instantiate('').each do |type|
|
50
|
-
@known_resource_types.add type
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
scan_top_level(@top_level)
|
56
|
-
@top_level
|
57
|
-
end
|
58
|
-
|
59
|
-
# Due to a bug in RDoc, we need to roll our own find_module_named
|
60
|
-
# The issue is that RDoc tries harder by asking the parent for a class/module
|
61
|
-
# of the name. But by doing so, it can mistakenly use a module of same name
|
62
|
-
# but from which we are not descendant.
|
63
|
-
def find_object_named(container, name)
|
64
|
-
return container if container.name == name
|
65
|
-
container.each_classmodule do |m|
|
66
|
-
return m if m.name == name
|
67
|
-
end
|
68
|
-
nil
|
69
|
-
end
|
70
|
-
|
71
|
-
# walk down the namespace and lookup/create container as needed
|
72
|
-
def get_class_or_module(container, name)
|
73
|
-
|
74
|
-
# class ::A -> A is in the top level
|
75
|
-
if name =~ /^::/
|
76
|
-
container = @top_level
|
77
|
-
end
|
78
|
-
|
79
|
-
names = name.split('::')
|
80
|
-
|
81
|
-
final_name = names.pop
|
82
|
-
names.each do |name|
|
83
|
-
prev_container = container
|
84
|
-
container = find_object_named(container, name)
|
85
|
-
container ||= prev_container.add_class(PuppetClass, name, nil)
|
86
|
-
end
|
87
|
-
[container, final_name]
|
88
|
-
end
|
89
|
-
|
90
|
-
# split_module tries to find if +path+ belongs to the module path
|
91
|
-
# if it does, it returns the module name, otherwise if we are sure
|
92
|
-
# it is part of the global manifest path, "__site__" is returned.
|
93
|
-
# And finally if this path couldn't be mapped anywhere, nil is returned.
|
94
|
-
def split_module(path)
|
95
|
-
# find a module
|
96
|
-
fullpath = File.expand_path(path)
|
97
|
-
Puppet.debug "rdoc: testing #{fullpath}"
|
98
|
-
if fullpath =~ /(.*)\/([^\/]+)\/(?:manifests|plugins|lib)\/.+\.(pp|rb)$/
|
99
|
-
modpath = $1
|
100
|
-
name = $2
|
101
|
-
Puppet.debug "rdoc: module #{name} into #{modpath} ?"
|
102
|
-
Puppet::Node::Environment.new.modulepath.each do |mp|
|
103
|
-
if File.identical?(modpath,mp)
|
104
|
-
Puppet.debug "rdoc: found module #{name}"
|
105
|
-
return name
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
109
|
-
if fullpath =~ /\.(pp|rb)$/
|
110
|
-
# there can be paths we don't want to scan under modules
|
111
|
-
# imagine a ruby or manifest that would be distributed as part as a module
|
112
|
-
# but we don't want those to be hosted under <site>
|
113
|
-
Puppet::Node::Environment.new.modulepath.each do |mp|
|
114
|
-
# check that fullpath is a descendant of mp
|
115
|
-
dirname = fullpath
|
116
|
-
previous = dirname
|
117
|
-
while (dirname = File.dirname(previous)) != previous
|
118
|
-
previous = dirname
|
119
|
-
return nil if File.identical?(dirname,mp)
|
120
|
-
end
|
121
|
-
end
|
122
|
-
end
|
123
|
-
# we are under a global manifests
|
124
|
-
Puppet.debug "rdoc: global manifests"
|
125
|
-
SITE
|
126
|
-
end
|
127
|
-
|
128
|
-
# create documentation for the top level +container+
|
129
|
-
def scan_top_level(container)
|
130
|
-
# use the module README as documentation for the module
|
131
|
-
comment = ""
|
132
|
-
%w{README README.rdoc}.each do |rfile|
|
133
|
-
readme = File.join(File.dirname(File.dirname(@input_file_name)), rfile)
|
134
|
-
comment = File.open(readme,"r") { |f| f.read } if FileTest.readable?(readme)
|
135
|
-
end
|
136
|
-
look_for_directives_in(container, comment) unless comment.empty?
|
137
|
-
|
138
|
-
# infer module name from directory
|
139
|
-
name = split_module(@input_file_name)
|
140
|
-
if name.nil?
|
141
|
-
# skip .pp files that are not in manifests directories as we can't guarantee they're part
|
142
|
-
# of a module or the global configuration.
|
143
|
-
container.document_self = false
|
144
|
-
return
|
145
|
-
end
|
146
|
-
|
147
|
-
Puppet.debug "rdoc: scanning for #{name}"
|
148
|
-
|
149
|
-
container.module_name = name
|
150
|
-
container.global=true if name == SITE
|
151
|
-
|
152
|
-
@stats.num_modules += 1
|
153
|
-
container, name = get_class_or_module(container,name)
|
154
|
-
mod = container.add_module(PuppetModule, name)
|
155
|
-
mod.record_location(@top_level)
|
156
|
-
mod.comment = comment
|
157
|
-
|
158
|
-
if @input_file_name =~ /\.pp$/
|
159
|
-
parse_elements(mod)
|
160
|
-
elsif @input_file_name =~ /\.rb$/
|
161
|
-
parse_plugins(mod)
|
162
|
-
end
|
163
|
-
end
|
164
|
-
|
165
|
-
# create documentation for include statements we can find in +code+
|
166
|
-
# and associate it with +container+
|
167
|
-
def scan_for_include_or_require(container, code)
|
168
|
-
code = [code] unless code.is_a?(Array)
|
169
|
-
code.each do |stmt|
|
170
|
-
scan_for_include_or_require(container,stmt.children) if stmt.is_a?(Puppet::Parser::AST::ASTArray)
|
171
|
-
|
172
|
-
if stmt.is_a?(Puppet::Parser::AST::Function) and ['include','require'].include?(stmt.name)
|
173
|
-
stmt.arguments.each do |included|
|
174
|
-
Puppet.debug "found #{stmt.name}: #{included}"
|
175
|
-
container.send("add_#{stmt.name}",Include.new(included.to_s, stmt.doc))
|
176
|
-
end
|
177
|
-
end
|
178
|
-
end
|
179
|
-
end
|
180
|
-
|
181
|
-
# create documentation for realize statements we can find in +code+
|
182
|
-
# and associate it with +container+
|
183
|
-
def scan_for_realize(container, code)
|
184
|
-
code = [code] unless code.is_a?(Array)
|
185
|
-
code.each do |stmt|
|
186
|
-
scan_for_realize(container,stmt.children) if stmt.is_a?(Puppet::Parser::AST::ASTArray)
|
187
|
-
|
188
|
-
if stmt.is_a?(Puppet::Parser::AST::Function) and stmt.name == 'realize'
|
189
|
-
stmt.arguments.each do |realized|
|
190
|
-
Puppet.debug "found #{stmt.name}: #{realized}"
|
191
|
-
container.add_realize(Include.new(realized.to_s, stmt.doc))
|
192
|
-
end
|
193
|
-
end
|
194
|
-
end
|
195
|
-
end
|
196
|
-
|
197
|
-
# create documentation for global variables assignements we can find in +code+
|
198
|
-
# and associate it with +container+
|
199
|
-
def scan_for_vardef(container, code)
|
200
|
-
code = [code] unless code.is_a?(Array)
|
201
|
-
code.each do |stmt|
|
202
|
-
scan_for_vardef(container,stmt.children) if stmt.is_a?(Puppet::Parser::AST::ASTArray)
|
203
|
-
|
204
|
-
if stmt.is_a?(Puppet::Parser::AST::VarDef)
|
205
|
-
Puppet.debug "rdoc: found constant: #{stmt.name} = #{stmt.value}"
|
206
|
-
container.add_constant(Constant.new(stmt.name.to_s, stmt.value.to_s, stmt.doc))
|
207
|
-
end
|
208
|
-
end
|
209
|
-
end
|
210
|
-
|
211
|
-
# create documentation for resources we can find in +code+
|
212
|
-
# and associate it with +container+
|
213
|
-
def scan_for_resource(container, code)
|
214
|
-
code = [code] unless code.is_a?(Array)
|
215
|
-
code.each do |stmt|
|
216
|
-
scan_for_resource(container,stmt.children) if stmt.is_a?(Puppet::Parser::AST::ASTArray)
|
217
|
-
|
218
|
-
if stmt.is_a?(Puppet::Parser::AST::Resource) and !stmt.type.nil?
|
219
|
-
begin
|
220
|
-
type = stmt.type.split("::").collect { |s| s.capitalize }.join("::")
|
221
|
-
stmt.instances.each do |inst|
|
222
|
-
title = inst.title.is_a?(Puppet::Parser::AST::ASTArray) ? inst.title.to_s.gsub(/\[(.*)\]/,'\1') : inst.title.to_s
|
223
|
-
Puppet.debug "rdoc: found resource: #{type}[#{title}]"
|
224
|
-
|
225
|
-
param = []
|
226
|
-
inst.parameters.children.each do |p|
|
227
|
-
res = {}
|
228
|
-
res["name"] = p.param
|
229
|
-
res["value"] = "#{p.value.to_s}" unless p.value.nil?
|
230
|
-
|
231
|
-
param << res
|
232
|
-
end
|
233
|
-
|
234
|
-
container.add_resource(PuppetResource.new(type, title, stmt.doc, param))
|
235
|
-
end
|
236
|
-
rescue => detail
|
237
|
-
raise Puppet::ParseError, "impossible to parse resource in #{stmt.file} at line #{stmt.line}: #{detail}"
|
238
|
-
end
|
239
|
-
end
|
240
|
-
end
|
241
|
-
end
|
242
|
-
|
243
|
-
def resource_stmt_to_ref(stmt)
|
244
|
-
type = stmt.type.split("::").collect { |s| s.capitalize }.join("::")
|
245
|
-
title = stmt.title.is_a?(Puppet::Parser::AST::ASTArray) ? stmt.title.to_s.gsub(/\[(.*)\]/,'\1') : stmt.title.to_s
|
246
|
-
|
247
|
-
param = stmt.params.children.collect do |p|
|
248
|
-
{"name" => p.param, "value" => p.value.to_s}
|
249
|
-
end
|
250
|
-
PuppetResource.new(type, title, stmt.doc, param)
|
251
|
-
end
|
252
|
-
|
253
|
-
# create documentation for a class named +name+
|
254
|
-
def document_class(name, klass, container)
|
255
|
-
Puppet.debug "rdoc: found new class #{name}"
|
256
|
-
container, name = get_class_or_module(container, name)
|
257
|
-
|
258
|
-
superclass = klass.parent
|
259
|
-
superclass = "" if superclass.nil? or superclass.empty?
|
260
|
-
|
261
|
-
@stats.num_classes += 1
|
262
|
-
comment = klass.doc
|
263
|
-
look_for_directives_in(container, comment) unless comment.empty?
|
264
|
-
cls = container.add_class(PuppetClass, name, superclass)
|
265
|
-
# it is possible we already encountered this class, while parsing some namespaces
|
266
|
-
# from other classes of other files. But at that time we couldn't know this class superclass
|
267
|
-
# so, now we know it and force it.
|
268
|
-
cls.superclass = superclass
|
269
|
-
cls.record_location(@top_level)
|
270
|
-
|
271
|
-
# scan class code for include
|
272
|
-
code = klass.code.children if klass.code.is_a?(Puppet::Parser::AST::ASTArray)
|
273
|
-
code ||= klass.code
|
274
|
-
unless code.nil?
|
275
|
-
scan_for_include_or_require(cls, code)
|
276
|
-
scan_for_realize(cls, code)
|
277
|
-
scan_for_resource(cls, code) if Puppet.settings[:document_all]
|
278
|
-
end
|
279
|
-
|
280
|
-
cls.comment = comment
|
281
|
-
rescue => detail
|
282
|
-
raise Puppet::ParseError, "impossible to parse class '#{name}' in #{klass.file} at line #{klass.line}: #{detail}"
|
283
|
-
end
|
284
|
-
|
285
|
-
# create documentation for a node
|
286
|
-
def document_node(name, node, container)
|
287
|
-
Puppet.debug "rdoc: found new node #{name}"
|
288
|
-
superclass = node.parent
|
289
|
-
superclass = "" if superclass.nil? or superclass.empty?
|
290
|
-
|
291
|
-
comment = node.doc
|
292
|
-
look_for_directives_in(container, comment) unless comment.empty?
|
293
|
-
n = container.add_node(name, superclass)
|
294
|
-
n.record_location(@top_level)
|
295
|
-
|
296
|
-
code = node.code.children if node.code.is_a?(Puppet::Parser::AST::ASTArray)
|
297
|
-
code ||= node.code
|
298
|
-
unless code.nil?
|
299
|
-
scan_for_include_or_require(n, code)
|
300
|
-
scan_for_realize(n, code)
|
301
|
-
scan_for_vardef(n, code)
|
302
|
-
scan_for_resource(n, code) if Puppet.settings[:document_all]
|
303
|
-
end
|
304
|
-
|
305
|
-
n.comment = comment
|
306
|
-
rescue => detail
|
307
|
-
raise Puppet::ParseError, "impossible to parse node '#{name}' in #{node.file} at line #{node.line}: #{detail}"
|
308
|
-
end
|
309
|
-
|
310
|
-
# create documentation for a define
|
311
|
-
def document_define(name, define, container)
|
312
|
-
Puppet.debug "rdoc: found new definition #{name}"
|
313
|
-
# find superclas if any
|
314
|
-
@stats.num_methods += 1
|
315
|
-
|
316
|
-
# find the parent
|
317
|
-
# split define name by :: to find the complete module hierarchy
|
318
|
-
container, name = get_class_or_module(container,name)
|
319
|
-
|
320
|
-
# build up declaration
|
321
|
-
declaration = ""
|
322
|
-
define.arguments.each do |arg,value|
|
323
|
-
declaration << "\$#{arg}"
|
324
|
-
unless value.nil?
|
325
|
-
declaration << " => "
|
326
|
-
case value
|
327
|
-
when Puppet::Parser::AST::Leaf
|
328
|
-
declaration << "'#{value.value}'"
|
329
|
-
when Puppet::Parser::AST::ASTArray
|
330
|
-
declaration << "[#{value.children.collect { |v| "'#{v}'" }.join(", ")}]"
|
331
|
-
else
|
332
|
-
declaration << "#{value.to_s}"
|
333
|
-
end
|
334
|
-
end
|
335
|
-
declaration << ", "
|
336
|
-
end
|
337
|
-
declaration.chop!.chop! if declaration.size > 1
|
338
|
-
|
339
|
-
# register method into the container
|
340
|
-
meth = AnyMethod.new(declaration, name)
|
341
|
-
meth.comment = define.doc
|
342
|
-
container.add_method(meth)
|
343
|
-
look_for_directives_in(container, meth.comment) unless meth.comment.empty?
|
344
|
-
meth.params = "( #{declaration} )"
|
345
|
-
meth.visibility = :public
|
346
|
-
meth.document_self = true
|
347
|
-
meth.singleton = false
|
348
|
-
rescue => detail
|
349
|
-
raise Puppet::ParseError, "impossible to parse definition '#{name}' in #{define.file} at line #{define.line}: #{detail}"
|
350
|
-
end
|
351
|
-
|
352
|
-
# Traverse the AST tree and produce code-objects node
|
353
|
-
# that contains the documentation
|
354
|
-
def parse_elements(container)
|
355
|
-
Puppet.debug "rdoc: scanning manifest"
|
356
|
-
|
357
|
-
@known_resource_types.hostclasses.values.sort { |a,b| a.name <=> b.name }.each do |klass|
|
358
|
-
name = klass.name
|
359
|
-
if klass.file == @input_file_name
|
360
|
-
unless name.empty?
|
361
|
-
document_class(name,klass,container)
|
362
|
-
else # on main class document vardefs
|
363
|
-
code = klass.code.children if klass.code.is_a?(Puppet::Parser::AST::ASTArray)
|
364
|
-
code ||= klass.code
|
365
|
-
scan_for_vardef(container, code) unless code.nil?
|
366
|
-
end
|
367
|
-
end
|
368
|
-
end
|
369
|
-
|
370
|
-
@known_resource_types.definitions.each do |name, define|
|
371
|
-
if define.file == @input_file_name
|
372
|
-
document_define(name,define,container)
|
373
|
-
end
|
374
|
-
end
|
375
|
-
|
376
|
-
@known_resource_types.nodes.each do |name, node|
|
377
|
-
if node.file == @input_file_name
|
378
|
-
document_node(name.to_s,node,container)
|
379
|
-
end
|
380
|
-
end
|
381
|
-
end
|
382
|
-
|
383
|
-
# create documentation for plugins
|
384
|
-
def parse_plugins(container)
|
385
|
-
Puppet.debug "rdoc: scanning plugin or fact"
|
386
|
-
if @input_file_name =~ /\/facter\/[^\/]+\.rb$/
|
387
|
-
parse_fact(container)
|
388
|
-
else
|
389
|
-
parse_puppet_plugin(container)
|
390
|
-
end
|
391
|
-
end
|
392
|
-
|
393
|
-
# this is a poor man custom fact parser :-)
|
394
|
-
def parse_fact(container)
|
395
|
-
comments = ""
|
396
|
-
current_fact = nil
|
397
|
-
File.open(@input_file_name) do |of|
|
398
|
-
of.each do |line|
|
399
|
-
# fetch comments
|
400
|
-
if line =~ /^[ \t]*# ?(.*)$/
|
401
|
-
comments += $1 + "\n"
|
402
|
-
elsif line =~ /^[ \t]*Facter.add\(['"](.*?)['"]\)/
|
403
|
-
current_fact = Fact.new($1,{})
|
404
|
-
look_for_directives_in(container, comments) unless comments.empty?
|
405
|
-
current_fact.comment = comments
|
406
|
-
container.add_fact(current_fact)
|
407
|
-
current_fact.record_location(@top_level)
|
408
|
-
comments = ""
|
409
|
-
Puppet.debug "rdoc: found custom fact #{current_fact.name}"
|
410
|
-
elsif line =~ /^[ \t]*confine[ \t]*:(.*?)[ \t]*=>[ \t]*(.*)$/
|
411
|
-
current_fact.confine = { :type => $1, :value => $2 } unless current_fact.nil?
|
412
|
-
else # unknown line type
|
413
|
-
comments =""
|
414
|
-
end
|
415
|
-
end
|
416
|
-
end
|
417
|
-
end
|
418
|
-
|
419
|
-
# this is a poor man puppet plugin parser :-)
|
420
|
-
# it doesn't extract doc nor desc :-(
|
421
|
-
def parse_puppet_plugin(container)
|
422
|
-
comments = ""
|
423
|
-
current_plugin = nil
|
424
|
-
|
425
|
-
File.open(@input_file_name) do |of|
|
426
|
-
of.each do |line|
|
427
|
-
# fetch comments
|
428
|
-
if line =~ /^[ \t]*# ?(.*)$/
|
429
|
-
comments += $1 + "\n"
|
430
|
-
elsif line =~ /^[ \t]*newfunction[ \t]*\([ \t]*:(.*?)[ \t]*,[ \t]*:type[ \t]*=>[ \t]*(:rvalue|:lvalue)\)/
|
431
|
-
current_plugin = Plugin.new($1, "function")
|
432
|
-
container.add_plugin(current_plugin)
|
433
|
-
look_for_directives_in(container, comments) unless comments.empty?
|
434
|
-
current_plugin.comment = comments
|
435
|
-
current_plugin.record_location(@top_level)
|
436
|
-
comments = ""
|
437
|
-
Puppet.debug "rdoc: found new function plugins #{current_plugin.name}"
|
438
|
-
elsif line =~ /^[ \t]*Puppet::Type.newtype[ \t]*\([ \t]*:(.*?)\)/
|
439
|
-
current_plugin = Plugin.new($1, "type")
|
440
|
-
container.add_plugin(current_plugin)
|
441
|
-
look_for_directives_in(container, comments) unless comments.empty?
|
442
|
-
current_plugin.comment = comments
|
443
|
-
current_plugin.record_location(@top_level)
|
444
|
-
comments = ""
|
445
|
-
Puppet.debug "rdoc: found new type plugins #{current_plugin.name}"
|
446
|
-
elsif line =~ /module Puppet::Parser::Functions/
|
447
|
-
# skip
|
448
|
-
else # unknown line type
|
449
|
-
comments =""
|
450
|
-
end
|
451
|
-
end
|
452
|
-
end
|
453
|
-
end
|
454
|
-
|
455
|
-
# look_for_directives_in scans the current +comment+ for RDoc directives
|
456
|
-
def look_for_directives_in(context, comment)
|
457
|
-
preprocess = SM::PreProcess.new(@input_file_name, @options.rdoc_include)
|
458
|
-
|
459
|
-
preprocess.handle(comment) do |directive, param|
|
460
|
-
case directive
|
461
|
-
when "stopdoc"
|
462
|
-
context.stop_doc
|
463
|
-
""
|
464
|
-
when "startdoc"
|
465
|
-
context.start_doc
|
466
|
-
context.force_documentation = true
|
467
|
-
""
|
468
|
-
when "enddoc"
|
469
|
-
#context.done_documenting = true
|
470
|
-
#""
|
471
|
-
throw :enddoc
|
472
|
-
when "main"
|
473
|
-
options = Options.instance
|
474
|
-
options.main_page = param
|
475
|
-
""
|
476
|
-
when "title"
|
477
|
-
options = Options.instance
|
478
|
-
options.title = param
|
479
|
-
""
|
480
|
-
when "section"
|
481
|
-
context.set_current_section(param, comment)
|
482
|
-
comment.replace("") # 1.8 doesn't support #clear
|
483
|
-
break
|
484
|
-
else
|
485
|
-
warn "Unrecognized directive '#{directive}'"
|
486
|
-
break
|
487
|
-
end
|
488
|
-
end
|
489
|
-
remove_private_comments(comment)
|
490
|
-
end
|
491
|
-
|
492
|
-
def remove_private_comments(comment)
|
493
|
-
comment.gsub!(/^#--.*?^#\+\+/m, '')
|
494
|
-
comment.sub!(/^#--.*/m, '')
|
495
|
-
end
|
496
|
-
end
|
10
|
+
begin
|
11
|
+
# Rdoc 1 imports
|
12
|
+
require "rdoc/tokenstream"
|
13
|
+
require "rdoc/markup/simple_markup/preprocess"
|
14
|
+
require "rdoc/parsers/parserfactory"
|
15
|
+
require "puppet/util/rdoc/parser/puppet_parser_rdoc1.rb"
|
16
|
+
rescue LoadError
|
17
|
+
# Current version imports
|
18
|
+
require "rdoc/token_stream"
|
19
|
+
require "rdoc/markup/pre_process"
|
20
|
+
require "rdoc/parser"
|
21
|
+
require "puppet/util/rdoc/parser/puppet_parser_rdoc2.rb"
|
497
22
|
end
|