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/file_system.rb
CHANGED
@@ -0,0 +1,261 @@
|
|
1
|
+
# An abstraction over the ruby file system operations for a single file.
|
2
|
+
#
|
3
|
+
# For the time being this is being kept private so that we can evolve it for a
|
4
|
+
# while.
|
5
|
+
#
|
6
|
+
# @api private
|
7
|
+
class Puppet::FileSystem::File
|
8
|
+
attr_reader :path
|
9
|
+
|
10
|
+
IMPL = if RUBY_VERSION =~ /^1\.8/
|
11
|
+
require 'puppet/file_system/file18'
|
12
|
+
Puppet::FileSystem::File18
|
13
|
+
elsif Puppet::Util::Platform.windows?
|
14
|
+
require 'puppet/file_system/file19windows'
|
15
|
+
Puppet::FileSystem::File19Windows
|
16
|
+
else
|
17
|
+
require 'puppet/file_system/file19'
|
18
|
+
Puppet::FileSystem::File19
|
19
|
+
end
|
20
|
+
|
21
|
+
@remembered = {}
|
22
|
+
|
23
|
+
def self.new(path)
|
24
|
+
if @remembered.include?(path.to_s)
|
25
|
+
@remembered[path.to_s]
|
26
|
+
else
|
27
|
+
file = IMPL.allocate
|
28
|
+
file.send(:initialize, path)
|
29
|
+
file
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# Run a block of code with a file accessible in the filesystem.
|
34
|
+
# @note This API should only be used for testing
|
35
|
+
#
|
36
|
+
# @param file [Object] an object that conforms to the Puppet::FileSystem::File interface
|
37
|
+
# @api private
|
38
|
+
def self.overlay(file, &block)
|
39
|
+
remember(file)
|
40
|
+
yield
|
41
|
+
ensure
|
42
|
+
forget(file)
|
43
|
+
end
|
44
|
+
|
45
|
+
# Create a binding between a filename and a particular instance of a file object.
|
46
|
+
# @note This API should only be used for testing
|
47
|
+
#
|
48
|
+
# @param file [Object] an object that conforms to the Puppet::FileSystem::File interface
|
49
|
+
# @api private
|
50
|
+
def self.remember(file)
|
51
|
+
@remembered[file.path.to_s] = file
|
52
|
+
end
|
53
|
+
|
54
|
+
# Forget a remembered file
|
55
|
+
# @note This API should only be used for testing
|
56
|
+
#
|
57
|
+
# @param file [Object] an object that conforms to the Puppet::FileSystem::File interface
|
58
|
+
# @api private
|
59
|
+
def self.forget(file)
|
60
|
+
@remembered.delete(file.path.to_s)
|
61
|
+
end
|
62
|
+
|
63
|
+
def initialize(path)
|
64
|
+
if path.is_a?(Pathname)
|
65
|
+
@path = path
|
66
|
+
else
|
67
|
+
@path = Pathname.new(path)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def open(mode, options, &block)
|
72
|
+
::File.open(@path, options, mode, &block)
|
73
|
+
end
|
74
|
+
|
75
|
+
# @return [Puppet::FileSystem::File] The directory of this file
|
76
|
+
# @api public
|
77
|
+
def dir
|
78
|
+
Puppet::FileSystem::File.new(@path.dirname)
|
79
|
+
end
|
80
|
+
|
81
|
+
# @return [Num] The size of this file
|
82
|
+
# @api public
|
83
|
+
def size
|
84
|
+
@path.size
|
85
|
+
end
|
86
|
+
|
87
|
+
# Allows exclusive updates to a file to be made by excluding concurrent
|
88
|
+
# access using flock. This means that if the file is on a filesystem that
|
89
|
+
# does not support flock, this method will provide no protection.
|
90
|
+
#
|
91
|
+
# While polling to aquire the lock the process will wait ever increasing
|
92
|
+
# amounts of time in order to prevent multiple processes from wasting
|
93
|
+
# resources.
|
94
|
+
#
|
95
|
+
# @param mode [Integer] The mode to apply to the file if it is created
|
96
|
+
# @param options [Integer] Extra file operation mode information to use
|
97
|
+
# (defaults to read-only mode)
|
98
|
+
# @param timeout [Integer] Number of seconds to wait for the lock (defaults to 300)
|
99
|
+
# @yield The file handle, in read-write mode
|
100
|
+
# @return [Void]
|
101
|
+
# @raise [Timeout::Error] If the timeout is exceeded while waiting to aquire the lock
|
102
|
+
# @api public
|
103
|
+
def exclusive_open(mode, options = 'r', timeout = 300, &block)
|
104
|
+
wait = 0.001 + (Kernel.rand / 1000)
|
105
|
+
written = false
|
106
|
+
while !written
|
107
|
+
::File.open(@path, options, mode) do |rf|
|
108
|
+
if rf.flock(::File::LOCK_EX|::File::LOCK_NB)
|
109
|
+
yield rf
|
110
|
+
written = true
|
111
|
+
else
|
112
|
+
sleep wait
|
113
|
+
timeout -= wait
|
114
|
+
wait *= 2
|
115
|
+
if timeout < 0
|
116
|
+
raise Timeout::Error, "Timeout waiting for exclusive lock on #{@path}"
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
def each_line(&block)
|
124
|
+
::File.open(@path) do |f|
|
125
|
+
f.each_line do |line|
|
126
|
+
yield line
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
# @return [String] The contents of the file
|
132
|
+
def read
|
133
|
+
@path.read
|
134
|
+
end
|
135
|
+
|
136
|
+
# @return [String] The binary contents of the file
|
137
|
+
def binread
|
138
|
+
raise NotImplementedError
|
139
|
+
end
|
140
|
+
|
141
|
+
# Determine if a file exists by verifying that the file can be stat'd.
|
142
|
+
# Will follow symlinks and verify that the actual target path exists.
|
143
|
+
#
|
144
|
+
# @return [Boolean] true if the named file exists.
|
145
|
+
def self.exist?(path)
|
146
|
+
return IMPL.exist?(path) if IMPL.method(:exist?) != self.method(:exist?)
|
147
|
+
File.exist?(path)
|
148
|
+
end
|
149
|
+
|
150
|
+
# Determine if a file exists by verifying that the file can be stat'd.
|
151
|
+
# Will follow symlinks and verify that the actual target path exists.
|
152
|
+
#
|
153
|
+
# @return [Boolean] true if the path of this file is present
|
154
|
+
def exist?
|
155
|
+
self.class.exist?(@path)
|
156
|
+
end
|
157
|
+
|
158
|
+
# Determine if a file is executable.
|
159
|
+
#
|
160
|
+
# @todo Should this take into account extensions on the windows platform?
|
161
|
+
#
|
162
|
+
# @return [Boolean] true if this file can be executed
|
163
|
+
def executable?
|
164
|
+
::File.executable?(@path)
|
165
|
+
end
|
166
|
+
|
167
|
+
# @return [Boolean] Whether the file is writable by the current
|
168
|
+
# process
|
169
|
+
def writable?
|
170
|
+
@path.writable?
|
171
|
+
end
|
172
|
+
|
173
|
+
# Touches the file. On most systems this updates the mtime of the file.
|
174
|
+
def touch
|
175
|
+
::FileUtils.touch(@path)
|
176
|
+
end
|
177
|
+
|
178
|
+
# Create the entire path as directories
|
179
|
+
def mkpath
|
180
|
+
@path.mkpath
|
181
|
+
end
|
182
|
+
|
183
|
+
# Creates a symbolic link dest which points to the current file.
|
184
|
+
# If dest already exists:
|
185
|
+
#
|
186
|
+
# * and is a file, will raise Errno::EEXIST
|
187
|
+
# * and is a directory, will return 0 but perform no action
|
188
|
+
# * and is a symlink referencing a file, will raise Errno::EEXIST
|
189
|
+
# * and is a symlink referencing a directory, will return 0 but perform no action
|
190
|
+
#
|
191
|
+
# With the :force option set to true, when dest already exists:
|
192
|
+
#
|
193
|
+
# * and is a file, will replace the existing file with a symlink (DANGEROUS)
|
194
|
+
# * and is a directory, will return 0 but perform no action
|
195
|
+
# * and is a symlink referencing a file, will modify the existing symlink
|
196
|
+
# * and is a symlink referencing a directory, will return 0 but perform no action
|
197
|
+
#
|
198
|
+
# @param dest [String] The path to create the new symlink at
|
199
|
+
# @param [Hash] options the options to create the symlink with
|
200
|
+
# @option options [Boolean] :force overwrite dest
|
201
|
+
# @option options [Boolean] :noop do not perform the operation
|
202
|
+
# @option options [Boolean] :verbose verbose output
|
203
|
+
#
|
204
|
+
# @raise [Errno::EEXIST] dest already exists as a file and, :force is not set
|
205
|
+
#
|
206
|
+
# @return [Integer] 0
|
207
|
+
def symlink(dest, options = {})
|
208
|
+
FileUtils.symlink(@path, dest, options)
|
209
|
+
end
|
210
|
+
|
211
|
+
# @return [Boolean] true if the file is a symbolic link.
|
212
|
+
def symlink?
|
213
|
+
File.symlink?(@path)
|
214
|
+
end
|
215
|
+
|
216
|
+
# @return [String] the name of the file referenced by the given link.
|
217
|
+
def readlink
|
218
|
+
File.readlink(@path)
|
219
|
+
end
|
220
|
+
|
221
|
+
# Deletes the named files, returning the number of names passed as arguments.
|
222
|
+
# See also Dir::rmdir.
|
223
|
+
#
|
224
|
+
# @raise an exception on any error.
|
225
|
+
#
|
226
|
+
# @return [Integer] the number of names passed as arguments
|
227
|
+
def self.unlink(*file_names)
|
228
|
+
return IMPL.unlink(*file_names) if IMPL.method(:unlink) != self.method(:unlink)
|
229
|
+
File.unlink(*file_names)
|
230
|
+
end
|
231
|
+
|
232
|
+
# Deletes the file.
|
233
|
+
# See also Dir::rmdir.
|
234
|
+
#
|
235
|
+
# @raise an exception on any error.
|
236
|
+
#
|
237
|
+
# @return [Integer] the number of names passed as arguments, in this case 1
|
238
|
+
def unlink
|
239
|
+
self.class.unlink(@path)
|
240
|
+
end
|
241
|
+
|
242
|
+
# @return [File::Stat] object for the named file.
|
243
|
+
def stat
|
244
|
+
File.stat(@path)
|
245
|
+
end
|
246
|
+
|
247
|
+
# @return [File::Stat] Same as stat, but does not follow the last symbolic
|
248
|
+
# link. Instead, reports on the link itself.
|
249
|
+
def lstat
|
250
|
+
File.lstat(@path)
|
251
|
+
end
|
252
|
+
|
253
|
+
# Compare the contents of this file against the contents of a stream.
|
254
|
+
# @param stream [IO] The stream to compare the contents against
|
255
|
+
# @return [Boolean] Whether the contents were the same
|
256
|
+
def compare_stream(stream)
|
257
|
+
open(0, 'rb') do |this|
|
258
|
+
FileUtils.compare_stream(this, stream)
|
259
|
+
end
|
260
|
+
end
|
261
|
+
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
require 'puppet/file_system/file19'
|
2
|
+
require 'puppet/util/windows'
|
3
|
+
|
4
|
+
class Puppet::FileSystem::File19Windows < Puppet::FileSystem::File19
|
5
|
+
|
6
|
+
def self.exist?(path)
|
7
|
+
if ! Puppet.features.manages_symlinks?
|
8
|
+
return ::File.exist?(path)
|
9
|
+
end
|
10
|
+
|
11
|
+
path = path.to_str if path.respond_to?(:to_str) # support WatchedFile
|
12
|
+
path = path.to_s # support String and Pathname
|
13
|
+
|
14
|
+
begin
|
15
|
+
if Puppet::Util::Windows::File.symlink?(path)
|
16
|
+
path = Puppet::Util::Windows::File.readlink(path)
|
17
|
+
end
|
18
|
+
! Puppet::Util::Windows::File.stat(path).nil?
|
19
|
+
rescue # generally INVALID_HANDLE_VALUE which means 'file not found'
|
20
|
+
false
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def exist?
|
25
|
+
self.class.exist?(@path)
|
26
|
+
end
|
27
|
+
|
28
|
+
def symlink(dest, options = {})
|
29
|
+
raise_if_symlinks_unsupported
|
30
|
+
|
31
|
+
dest_exists = self.class.exist?(dest) # returns false on dangling symlink
|
32
|
+
dest_stat = Puppet::Util::Windows::File.stat(dest) if dest_exists
|
33
|
+
dest_symlink = Puppet::Util::Windows::File.symlink?(dest)
|
34
|
+
|
35
|
+
# silent fail to preserve semantics of original FileUtils
|
36
|
+
return 0 if dest_exists && dest_stat.ftype == 'directory'
|
37
|
+
|
38
|
+
if dest_exists && dest_stat.ftype == 'file' && options[:force] != true
|
39
|
+
raise(Errno::EEXIST, "#{dest} already exists and the :force option was not specified")
|
40
|
+
end
|
41
|
+
|
42
|
+
if options[:noop] != true
|
43
|
+
::File.delete(dest) if dest_exists # can only be file
|
44
|
+
Puppet::Util::Windows::File.symlink(@path, dest)
|
45
|
+
end
|
46
|
+
|
47
|
+
0
|
48
|
+
end
|
49
|
+
|
50
|
+
def symlink?
|
51
|
+
return false if ! Puppet.features.manages_symlinks?
|
52
|
+
Puppet::Util::Windows::File.symlink?(@path)
|
53
|
+
end
|
54
|
+
|
55
|
+
def readlink
|
56
|
+
raise_if_symlinks_unsupported
|
57
|
+
Puppet::Util::Windows::File.readlink(@path)
|
58
|
+
end
|
59
|
+
|
60
|
+
def self.unlink(*file_names)
|
61
|
+
if ! Puppet.features.manages_symlinks?
|
62
|
+
return ::File.unlink(*file_names)
|
63
|
+
end
|
64
|
+
|
65
|
+
file_names.each do |file_name|
|
66
|
+
file_name = file_name.to_s # handle PathName
|
67
|
+
stat = Puppet::Util::Windows::File.stat(file_name) rescue nil
|
68
|
+
|
69
|
+
# sigh, Ruby + Windows :(
|
70
|
+
if stat && stat.ftype == 'directory'
|
71
|
+
if Puppet::Util::Windows::File.symlink?(file_name)
|
72
|
+
Dir.rmdir(file_name)
|
73
|
+
else
|
74
|
+
raise Errno::EPERM.new(file_name)
|
75
|
+
end
|
76
|
+
else
|
77
|
+
::File.unlink(file_name)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
file_names.length
|
82
|
+
end
|
83
|
+
|
84
|
+
def unlink
|
85
|
+
self.class.unlink(@path)
|
86
|
+
end
|
87
|
+
|
88
|
+
def stat
|
89
|
+
if ! Puppet.features.manages_symlinks?
|
90
|
+
return super
|
91
|
+
end
|
92
|
+
Puppet::Util::Windows::File.stat(@path)
|
93
|
+
end
|
94
|
+
|
95
|
+
def lstat
|
96
|
+
if ! Puppet.features.manages_symlinks?
|
97
|
+
return Puppet::Util::Windows::File.stat(@path)
|
98
|
+
end
|
99
|
+
Puppet::Util::Windows::File.lstat(@path)
|
100
|
+
end
|
101
|
+
|
102
|
+
private
|
103
|
+
def raise_if_symlinks_unsupported
|
104
|
+
if ! Puppet.features.manages_symlinks?
|
105
|
+
msg = "This version of Windows does not support symlinks. Windows Vista / 2008 or higher is required."
|
106
|
+
raise Puppet::Util::Windows::Error.new(msg)
|
107
|
+
end
|
108
|
+
|
109
|
+
if ! Puppet::Util::Windows::Process.process_privilege_symlink?
|
110
|
+
Puppet.warning "The current user does not have the necessary permission to manage symlinks."
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# An in-memory file abstraction. Commonly used with Puppet::FileSystem::File#overlay
|
2
|
+
# @api private
|
3
|
+
class Puppet::FileSystem::MemoryFile
|
4
|
+
attr_reader :path
|
5
|
+
|
6
|
+
def self.a_missing_file(path)
|
7
|
+
new(path, :exist? => false, :executable? => false)
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.a_regular_file_containing(path, content)
|
11
|
+
new(path, :exist? => true, :executable? => false, :content => content)
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.an_executable(path)
|
15
|
+
new(path, :exist? => true, :executable? => true)
|
16
|
+
end
|
17
|
+
|
18
|
+
def initialize(path, options)
|
19
|
+
@path = Pathname.new(path)
|
20
|
+
@exist = options[:exist?]
|
21
|
+
@executable = options[:executable?]
|
22
|
+
@content = options[:content]
|
23
|
+
end
|
24
|
+
|
25
|
+
def exist?; @exist; end
|
26
|
+
def executable?; @executable; end
|
27
|
+
|
28
|
+
def each_line(&block)
|
29
|
+
StringIO.new(@content).each_line(&block)
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'tempfile'
|
2
|
+
|
3
|
+
class Puppet::FileSystem::Tempfile
|
4
|
+
|
5
|
+
# Variation of Tempfile.open which ensures that the tempfile is closed and
|
6
|
+
# unlinked before returning
|
7
|
+
#
|
8
|
+
# @param identifier [String] additional part of generated pathname
|
9
|
+
# @yieldparam file [File] the temporary file object
|
10
|
+
# @return result of the passed block
|
11
|
+
# @api private
|
12
|
+
def self.open(identifier)
|
13
|
+
file = ::Tempfile.new(identifier)
|
14
|
+
|
15
|
+
yield file
|
16
|
+
|
17
|
+
ensure
|
18
|
+
file.close!
|
19
|
+
end
|
20
|
+
end
|