bolt 0.0.1 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of bolt might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.gitignore +33 -0
- data/.gitmodules +12 -0
- data/.rspec +2 -0
- data/.rubocop.yml +61 -0
- data/.travis.yml +18 -0
- data/Gemfile +9 -0
- data/INSTALL.md +70 -0
- data/LICENSE +201 -0
- data/README.md +372 -0
- data/Rakefile +27 -0
- data/Vagrantfile +13 -0
- data/appveyor.yml +29 -0
- data/bolt.gemspec +50 -0
- data/docs/writing_tasks_and_plans.pdf +0 -0
- data/exe/bolt +15 -0
- data/lib/bolt.rb +13 -0
- data/lib/bolt/cli.rb +409 -0
- data/lib/bolt/executor.rb +71 -0
- data/lib/bolt/node.rb +79 -0
- data/lib/bolt/node/formatter.rb +15 -0
- data/lib/bolt/node/orch.rb +118 -0
- data/lib/bolt/node/result.rb +110 -0
- data/lib/bolt/node/ssh.rb +145 -0
- data/lib/bolt/node/winrm.rb +237 -0
- data/lib/bolt/node_uri.rb +42 -0
- data/lib/bolt/result.rb +139 -0
- data/lib/bolt/version.rb +3 -0
- data/metadata.json +13 -0
- data/tasks/init.json +3 -0
- data/tasks/init.rb +44 -0
- data/ux/bolt-CLI-spec.md +186 -0
- data/vendored/facter/lib/facter.rb +261 -0
- data/vendored/facter/lib/facter/Cfkey.rb +42 -0
- data/vendored/facter/lib/facter/application.rb +206 -0
- data/vendored/facter/lib/facter/architecture.rb +50 -0
- data/vendored/facter/lib/facter/augeasversion.rb +28 -0
- data/vendored/facter/lib/facter/blockdevices.rb +105 -0
- data/vendored/facter/lib/facter/core/aggregate.rb +220 -0
- data/vendored/facter/lib/facter/core/directed_graph.rb +46 -0
- data/vendored/facter/lib/facter/core/execution.rb +123 -0
- data/vendored/facter/lib/facter/core/execution/base.rb +81 -0
- data/vendored/facter/lib/facter/core/execution/posix.rb +50 -0
- data/vendored/facter/lib/facter/core/execution/windows.rb +57 -0
- data/vendored/facter/lib/facter/core/logging.rb +197 -0
- data/vendored/facter/lib/facter/core/resolvable.rb +94 -0
- data/vendored/facter/lib/facter/core/suitable.rb +113 -0
- data/vendored/facter/lib/facter/dhcp_servers.rb +45 -0
- data/vendored/facter/lib/facter/domain.rb +99 -0
- data/vendored/facter/lib/facter/ec2.rb +68 -0
- data/vendored/facter/lib/facter/ec2/rest.rb +137 -0
- data/vendored/facter/lib/facter/facterversion.rb +15 -0
- data/vendored/facter/lib/facter/filesystems.rb +45 -0
- data/vendored/facter/lib/facter/fqdn.rb +24 -0
- data/vendored/facter/lib/facter/gce.rb +16 -0
- data/vendored/facter/lib/facter/gce/metadata.rb +87 -0
- data/vendored/facter/lib/facter/gid.rb +25 -0
- data/vendored/facter/lib/facter/hardwareisa.rb +20 -0
- data/vendored/facter/lib/facter/hardwaremodel.rb +67 -0
- data/vendored/facter/lib/facter/hostname.rb +31 -0
- data/vendored/facter/lib/facter/id.rb +21 -0
- data/vendored/facter/lib/facter/interfaces.rb +58 -0
- data/vendored/facter/lib/facter/ipaddress.rb +169 -0
- data/vendored/facter/lib/facter/ipaddress6.rb +82 -0
- data/vendored/facter/lib/facter/iphostnumber.rb +29 -0
- data/vendored/facter/lib/facter/kernel.rb +22 -0
- data/vendored/facter/lib/facter/kernelmajversion.rb +23 -0
- data/vendored/facter/lib/facter/kernelrelease.rb +45 -0
- data/vendored/facter/lib/facter/kernelversion.rb +22 -0
- data/vendored/facter/lib/facter/ldom.rb +51 -0
- data/vendored/facter/lib/facter/lsbdistcodename.rb +20 -0
- data/vendored/facter/lib/facter/lsbdistdescription.rb +21 -0
- data/vendored/facter/lib/facter/lsbdistid.rb +20 -0
- data/vendored/facter/lib/facter/lsbdistrelease.rb +20 -0
- data/vendored/facter/lib/facter/lsbmajdistrelease.rb +22 -0
- data/vendored/facter/lib/facter/lsbminordistrelease.rb +22 -0
- data/vendored/facter/lib/facter/lsbrelease.rb +20 -0
- data/vendored/facter/lib/facter/macaddress.rb +99 -0
- data/vendored/facter/lib/facter/macosx.rb +56 -0
- data/vendored/facter/lib/facter/manufacturer.rb +68 -0
- data/vendored/facter/lib/facter/memory.rb +168 -0
- data/vendored/facter/lib/facter/netmask.rb +43 -0
- data/vendored/facter/lib/facter/network.rb +20 -0
- data/vendored/facter/lib/facter/operatingsystem.rb +24 -0
- data/vendored/facter/lib/facter/operatingsystem/base.rb +61 -0
- data/vendored/facter/lib/facter/operatingsystem/cumuluslinux.rb +27 -0
- data/vendored/facter/lib/facter/operatingsystem/implementation.rb +33 -0
- data/vendored/facter/lib/facter/operatingsystem/linux.rb +484 -0
- data/vendored/facter/lib/facter/operatingsystem/osreleaselinux.rb +28 -0
- data/vendored/facter/lib/facter/operatingsystem/sunos.rb +54 -0
- data/vendored/facter/lib/facter/operatingsystem/vmkernel.rb +11 -0
- data/vendored/facter/lib/facter/operatingsystem/windows.rb +43 -0
- data/vendored/facter/lib/facter/operatingsystemmajrelease.rb +31 -0
- data/vendored/facter/lib/facter/operatingsystemrelease.rb +29 -0
- data/vendored/facter/lib/facter/os.rb +98 -0
- data/vendored/facter/lib/facter/osfamily.rb +18 -0
- data/vendored/facter/lib/facter/partitions.rb +39 -0
- data/vendored/facter/lib/facter/path.rb +14 -0
- data/vendored/facter/lib/facter/physicalprocessorcount.rb +27 -0
- data/vendored/facter/lib/facter/processor.rb +52 -0
- data/vendored/facter/lib/facter/processors.rb +66 -0
- data/vendored/facter/lib/facter/processors/os.rb +244 -0
- data/vendored/facter/lib/facter/ps.rb +31 -0
- data/vendored/facter/lib/facter/puppetversion.rb +20 -0
- data/vendored/facter/lib/facter/rackspace.rb +37 -0
- data/vendored/facter/lib/facter/rubyplatform.rb +12 -0
- data/vendored/facter/lib/facter/rubysitedir.rb +15 -0
- data/vendored/facter/lib/facter/rubyversion.rb +12 -0
- data/vendored/facter/lib/facter/selinux.rb +154 -0
- data/vendored/facter/lib/facter/ssh.rb +73 -0
- data/vendored/facter/lib/facter/system32.rb +21 -0
- data/vendored/facter/lib/facter/system_uptime.rb +44 -0
- data/vendored/facter/lib/facter/timezone.rb +14 -0
- data/vendored/facter/lib/facter/uniqueid.rb +4 -0
- data/vendored/facter/lib/facter/uptime.rb +16 -0
- data/vendored/facter/lib/facter/uptime_days.rb +13 -0
- data/vendored/facter/lib/facter/uptime_hours.rb +13 -0
- data/vendored/facter/lib/facter/uptime_seconds.rb +20 -0
- data/vendored/facter/lib/facter/util/architecture.rb +19 -0
- data/vendored/facter/lib/facter/util/collection.rb +161 -0
- data/vendored/facter/lib/facter/util/composite_loader.rb +12 -0
- data/vendored/facter/lib/facter/util/config.rb +88 -0
- data/vendored/facter/lib/facter/util/confine.rb +66 -0
- data/vendored/facter/lib/facter/util/dhcp_servers.rb +58 -0
- data/vendored/facter/lib/facter/util/directory_loader.rb +88 -0
- data/vendored/facter/lib/facter/util/ec2.rb +106 -0
- data/vendored/facter/lib/facter/util/fact.rb +204 -0
- data/vendored/facter/lib/facter/util/file_read.rb +37 -0
- data/vendored/facter/lib/facter/util/formatter.rb +39 -0
- data/vendored/facter/lib/facter/util/ip.rb +340 -0
- data/vendored/facter/lib/facter/util/ip/windows.rb +215 -0
- data/vendored/facter/lib/facter/util/loader.rb +155 -0
- data/vendored/facter/lib/facter/util/macaddress.rb +43 -0
- data/vendored/facter/lib/facter/util/macosx.rb +73 -0
- data/vendored/facter/lib/facter/util/manufacturer.rb +99 -0
- data/vendored/facter/lib/facter/util/memory.rb +228 -0
- data/vendored/facter/lib/facter/util/netmask.rb +40 -0
- data/vendored/facter/lib/facter/util/normalization.rb +94 -0
- data/vendored/facter/lib/facter/util/nothing_loader.rb +12 -0
- data/vendored/facter/lib/facter/util/operatingsystem.rb +21 -0
- data/vendored/facter/lib/facter/util/parser.rb +168 -0
- data/vendored/facter/lib/facter/util/partitions.rb +47 -0
- data/vendored/facter/lib/facter/util/partitions/linux.rb +71 -0
- data/vendored/facter/lib/facter/util/partitions/openbsd.rb +40 -0
- data/vendored/facter/lib/facter/util/plist.rb +24 -0
- data/vendored/facter/lib/facter/util/plist/generator.rb +228 -0
- data/vendored/facter/lib/facter/util/plist/parser.rb +226 -0
- data/vendored/facter/lib/facter/util/posix.rb +16 -0
- data/vendored/facter/lib/facter/util/processor.rb +289 -0
- data/vendored/facter/lib/facter/util/registry.rb +11 -0
- data/vendored/facter/lib/facter/util/resolution.rb +160 -0
- data/vendored/facter/lib/facter/util/solaris_zones.rb +158 -0
- data/vendored/facter/lib/facter/util/unix_root.rb +5 -0
- data/vendored/facter/lib/facter/util/uptime.rb +83 -0
- data/vendored/facter/lib/facter/util/values.rb +109 -0
- data/vendored/facter/lib/facter/util/virtual.rb +212 -0
- data/vendored/facter/lib/facter/util/vlans.rb +21 -0
- data/vendored/facter/lib/facter/util/windows.rb +10 -0
- data/vendored/facter/lib/facter/util/windows/api_types.rb +135 -0
- data/vendored/facter/lib/facter/util/windows/dir.rb +43 -0
- data/vendored/facter/lib/facter/util/windows/error.rb +87 -0
- data/vendored/facter/lib/facter/util/windows/process.rb +294 -0
- data/vendored/facter/lib/facter/util/windows/user.rb +186 -0
- data/vendored/facter/lib/facter/util/windows_root.rb +7 -0
- data/vendored/facter/lib/facter/util/wmi.rb +49 -0
- data/vendored/facter/lib/facter/util/xendomains.rb +28 -0
- data/vendored/facter/lib/facter/version.rb +86 -0
- data/vendored/facter/lib/facter/virtual.rb +328 -0
- data/vendored/facter/lib/facter/vlans.rb +17 -0
- data/vendored/facter/lib/facter/xendomains.rb +20 -0
- data/vendored/facter/lib/facter/zfs_version.rb +14 -0
- data/vendored/facter/lib/facter/zonename.rb +6 -0
- data/vendored/facter/lib/facter/zones.rb +18 -0
- data/vendored/facter/lib/facter/zpool_version.rb +10 -0
- data/vendored/hiera/lib/hiera.rb +119 -0
- data/vendored/hiera/lib/hiera/backend.rb +360 -0
- data/vendored/hiera/lib/hiera/backend/json_backend.rb +58 -0
- data/vendored/hiera/lib/hiera/backend/yaml_backend.rb +63 -0
- data/vendored/hiera/lib/hiera/config.rb +97 -0
- data/vendored/hiera/lib/hiera/console_logger.rb +13 -0
- data/vendored/hiera/lib/hiera/error.rb +4 -0
- data/vendored/hiera/lib/hiera/fallback_logger.rb +41 -0
- data/vendored/hiera/lib/hiera/filecache.rb +86 -0
- data/vendored/hiera/lib/hiera/interpolate.rb +121 -0
- data/vendored/hiera/lib/hiera/noop_logger.rb +8 -0
- data/vendored/hiera/lib/hiera/puppet_logger.rb +17 -0
- data/vendored/hiera/lib/hiera/recursive_guard.rb +20 -0
- data/vendored/hiera/lib/hiera/util.rb +65 -0
- data/vendored/hiera/lib/hiera/util/win32.rb +40 -0
- data/vendored/hiera/lib/hiera/version.rb +89 -0
- data/vendored/puppet/lib/hiera/puppet_function.rb +81 -0
- data/vendored/puppet/lib/hiera/scope.rb +61 -0
- data/vendored/puppet/lib/hiera_puppet.rb +79 -0
- data/vendored/puppet/lib/puppet.rb +311 -0
- data/vendored/puppet/lib/puppet/agent.rb +114 -0
- data/vendored/puppet/lib/puppet/agent/disabler.rb +53 -0
- data/vendored/puppet/lib/puppet/agent/locker.rb +52 -0
- data/vendored/puppet/lib/puppet/application.rb +485 -0
- data/vendored/puppet/lib/puppet/application/agent.rb +468 -0
- data/vendored/puppet/lib/puppet/application/apply.rb +358 -0
- data/vendored/puppet/lib/puppet/application/ca.rb +11 -0
- data/vendored/puppet/lib/puppet/application/catalog.rb +4 -0
- data/vendored/puppet/lib/puppet/application/cert.rb +334 -0
- data/vendored/puppet/lib/puppet/application/certificate.rb +17 -0
- data/vendored/puppet/lib/puppet/application/certificate_request.rb +7 -0
- data/vendored/puppet/lib/puppet/application/certificate_revocation_list.rb +7 -0
- data/vendored/puppet/lib/puppet/application/config.rb +4 -0
- data/vendored/puppet/lib/puppet/application/describe.rb +258 -0
- data/vendored/puppet/lib/puppet/application/device.rb +292 -0
- data/vendored/puppet/lib/puppet/application/doc.rb +230 -0
- data/vendored/puppet/lib/puppet/application/epp.rb +5 -0
- data/vendored/puppet/lib/puppet/application/face_base.rb +268 -0
- data/vendored/puppet/lib/puppet/application/facts.rb +4 -0
- data/vendored/puppet/lib/puppet/application/filebucket.rb +262 -0
- data/vendored/puppet/lib/puppet/application/generate.rb +5 -0
- data/vendored/puppet/lib/puppet/application/help.rb +4 -0
- data/vendored/puppet/lib/puppet/application/indirection_base.rb +4 -0
- data/vendored/puppet/lib/puppet/application/key.rb +4 -0
- data/vendored/puppet/lib/puppet/application/lookup.rb +361 -0
- data/vendored/puppet/lib/puppet/application/man.rb +4 -0
- data/vendored/puppet/lib/puppet/application/master.rb +317 -0
- data/vendored/puppet/lib/puppet/application/module.rb +4 -0
- data/vendored/puppet/lib/puppet/application/node.rb +4 -0
- data/vendored/puppet/lib/puppet/application/parser.rb +5 -0
- data/vendored/puppet/lib/puppet/application/plugin.rb +3 -0
- data/vendored/puppet/lib/puppet/application/report.rb +4 -0
- data/vendored/puppet/lib/puppet/application/resource.rb +231 -0
- data/vendored/puppet/lib/puppet/application/script.rb +255 -0
- data/vendored/puppet/lib/puppet/application/status.rb +4 -0
- data/vendored/puppet/lib/puppet/application_support.rb +57 -0
- data/vendored/puppet/lib/puppet/bindings.rb +147 -0
- data/vendored/puppet/lib/puppet/coercion.rb +40 -0
- data/vendored/puppet/lib/puppet/compilable_resource_type.rb +15 -0
- data/vendored/puppet/lib/puppet/configurer.rb +447 -0
- data/vendored/puppet/lib/puppet/configurer/downloader.rb +67 -0
- data/vendored/puppet/lib/puppet/configurer/downloader_factory.rb +34 -0
- data/vendored/puppet/lib/puppet/configurer/fact_handler.rb +46 -0
- data/vendored/puppet/lib/puppet/configurer/plugin_handler.rb +25 -0
- data/vendored/puppet/lib/puppet/confine.rb +80 -0
- data/vendored/puppet/lib/puppet/confine/any.rb +26 -0
- data/vendored/puppet/lib/puppet/confine/exists.rb +19 -0
- data/vendored/puppet/lib/puppet/confine/false.rb +19 -0
- data/vendored/puppet/lib/puppet/confine/feature.rb +17 -0
- data/vendored/puppet/lib/puppet/confine/true.rb +20 -0
- data/vendored/puppet/lib/puppet/confine/variable.rb +59 -0
- data/vendored/puppet/lib/puppet/confine_collection.rb +50 -0
- data/vendored/puppet/lib/puppet/confiner.rb +46 -0
- data/vendored/puppet/lib/puppet/context.rb +116 -0
- data/vendored/puppet/lib/puppet/context/trusted_information.rb +76 -0
- data/vendored/puppet/lib/puppet/daemon.rb +195 -0
- data/vendored/puppet/lib/puppet/data_binding.rb +14 -0
- data/vendored/puppet/lib/puppet/defaults.rb +1957 -0
- data/vendored/puppet/lib/puppet/environments.rb +509 -0
- data/vendored/puppet/lib/puppet/error.rb +117 -0
- data/vendored/puppet/lib/puppet/etc.rb +161 -0
- data/vendored/puppet/lib/puppet/external/dot.rb +326 -0
- data/vendored/puppet/lib/puppet/external/nagios.rb +46 -0
- data/vendored/puppet/lib/puppet/external/nagios/base.rb +472 -0
- data/vendored/puppet/lib/puppet/external/nagios/grammar.ry +248 -0
- data/vendored/puppet/lib/puppet/external/nagios/makefile +9 -0
- data/vendored/puppet/lib/puppet/external/nagios/parser.rb +400 -0
- data/vendored/puppet/lib/puppet/external/pson/common.rb +374 -0
- data/vendored/puppet/lib/puppet/external/pson/pure.rb +15 -0
- data/vendored/puppet/lib/puppet/external/pson/pure/generator.rb +395 -0
- data/vendored/puppet/lib/puppet/external/pson/pure/parser.rb +307 -0
- data/vendored/puppet/lib/puppet/external/pson/version.rb +8 -0
- data/vendored/puppet/lib/puppet/face.rb +12 -0
- data/vendored/puppet/lib/puppet/face/ca.rb +266 -0
- data/vendored/puppet/lib/puppet/face/catalog.rb +130 -0
- data/vendored/puppet/lib/puppet/face/catalog/select.rb +49 -0
- data/vendored/puppet/lib/puppet/face/certificate.rb +165 -0
- data/vendored/puppet/lib/puppet/face/certificate_request.rb +56 -0
- data/vendored/puppet/lib/puppet/face/certificate_revocation_list.rb +56 -0
- data/vendored/puppet/lib/puppet/face/config.rb +119 -0
- data/vendored/puppet/lib/puppet/face/epp.rb +527 -0
- data/vendored/puppet/lib/puppet/face/facts.rb +38 -0
- data/vendored/puppet/lib/puppet/face/generate.rb +64 -0
- data/vendored/puppet/lib/puppet/face/help.rb +205 -0
- data/vendored/puppet/lib/puppet/face/help/action.erb +86 -0
- data/vendored/puppet/lib/puppet/face/help/face.erb +114 -0
- data/vendored/puppet/lib/puppet/face/help/global.erb +16 -0
- data/vendored/puppet/lib/puppet/face/help/man.erb +152 -0
- data/vendored/puppet/lib/puppet/face/key.rb +16 -0
- data/vendored/puppet/lib/puppet/face/man.rb +101 -0
- data/vendored/puppet/lib/puppet/face/module.rb +19 -0
- data/vendored/puppet/lib/puppet/face/module/build.rb +63 -0
- data/vendored/puppet/lib/puppet/face/module/changes.rb +42 -0
- data/vendored/puppet/lib/puppet/face/module/generate.rb +251 -0
- data/vendored/puppet/lib/puppet/face/module/install.rb +149 -0
- data/vendored/puppet/lib/puppet/face/module/list.rb +279 -0
- data/vendored/puppet/lib/puppet/face/module/search.rb +94 -0
- data/vendored/puppet/lib/puppet/face/module/uninstall.rb +81 -0
- data/vendored/puppet/lib/puppet/face/module/upgrade.rb +90 -0
- data/vendored/puppet/lib/puppet/face/node.rb +42 -0
- data/vendored/puppet/lib/puppet/face/node/clean.rb +96 -0
- data/vendored/puppet/lib/puppet/face/parser.rb +161 -0
- data/vendored/puppet/lib/puppet/face/plugin.rb +58 -0
- data/vendored/puppet/lib/puppet/face/report.rb +54 -0
- data/vendored/puppet/lib/puppet/face/resource.rb +53 -0
- data/vendored/puppet/lib/puppet/face/status.rb +50 -0
- data/vendored/puppet/lib/puppet/feature/base.rb +95 -0
- data/vendored/puppet/lib/puppet/feature/bolt.rb +3 -0
- data/vendored/puppet/lib/puppet/feature/cfpropertylist.rb +3 -0
- data/vendored/puppet/lib/puppet/feature/eventlog.rb +5 -0
- data/vendored/puppet/lib/puppet/feature/hiera_eyaml.rb +3 -0
- data/vendored/puppet/lib/puppet/feature/hocon.rb +3 -0
- data/vendored/puppet/lib/puppet/feature/libuser.rb +8 -0
- data/vendored/puppet/lib/puppet/feature/msgpack.rb +3 -0
- data/vendored/puppet/lib/puppet/feature/pe_license.rb +4 -0
- data/vendored/puppet/lib/puppet/feature/rack.rb +19 -0
- data/vendored/puppet/lib/puppet/feature/selinux.rb +3 -0
- data/vendored/puppet/lib/puppet/feature/ssh.rb +3 -0
- data/vendored/puppet/lib/puppet/feature/telnet.rb +9 -0
- data/vendored/puppet/lib/puppet/feature/zlib.rb +5 -0
- data/vendored/puppet/lib/puppet/file_bucket.rb +4 -0
- data/vendored/puppet/lib/puppet/file_bucket/dipper.rb +174 -0
- data/vendored/puppet/lib/puppet/file_bucket/file.rb +131 -0
- data/vendored/puppet/lib/puppet/file_serving.rb +3 -0
- data/vendored/puppet/lib/puppet/file_serving/base.rb +85 -0
- data/vendored/puppet/lib/puppet/file_serving/configuration.rb +112 -0
- data/vendored/puppet/lib/puppet/file_serving/configuration/parser.rb +123 -0
- data/vendored/puppet/lib/puppet/file_serving/content.rb +43 -0
- data/vendored/puppet/lib/puppet/file_serving/fileset.rb +174 -0
- data/vendored/puppet/lib/puppet/file_serving/http_metadata.rb +46 -0
- data/vendored/puppet/lib/puppet/file_serving/metadata.rb +163 -0
- data/vendored/puppet/lib/puppet/file_serving/mount.rb +39 -0
- data/vendored/puppet/lib/puppet/file_serving/mount/file.rb +121 -0
- data/vendored/puppet/lib/puppet/file_serving/mount/modules.rb +24 -0
- data/vendored/puppet/lib/puppet/file_serving/mount/pluginfacts.rb +35 -0
- data/vendored/puppet/lib/puppet/file_serving/mount/plugins.rb +35 -0
- data/vendored/puppet/lib/puppet/file_serving/mount/tasks.rb +21 -0
- data/vendored/puppet/lib/puppet/file_serving/terminus_helper.rb +31 -0
- data/vendored/puppet/lib/puppet/file_serving/terminus_selector.rb +32 -0
- data/vendored/puppet/lib/puppet/file_system.rb +404 -0
- data/vendored/puppet/lib/puppet/file_system/file_impl.rb +154 -0
- data/vendored/puppet/lib/puppet/file_system/memory_file.rb +66 -0
- data/vendored/puppet/lib/puppet/file_system/memory_impl.rb +86 -0
- data/vendored/puppet/lib/puppet/file_system/path_pattern.rb +98 -0
- data/vendored/puppet/lib/puppet/file_system/posix.rb +46 -0
- data/vendored/puppet/lib/puppet/file_system/uniquefile.rb +190 -0
- data/vendored/puppet/lib/puppet/file_system/windows.rb +130 -0
- data/vendored/puppet/lib/puppet/forge.rb +229 -0
- data/vendored/puppet/lib/puppet/forge/cache.rb +60 -0
- data/vendored/puppet/lib/puppet/forge/errors.rb +112 -0
- data/vendored/puppet/lib/puppet/forge/repository.rb +155 -0
- data/vendored/puppet/lib/puppet/functions.rb +745 -0
- data/vendored/puppet/lib/puppet/functions/alert.rb +14 -0
- data/vendored/puppet/lib/puppet/functions/all.rb +104 -0
- data/vendored/puppet/lib/puppet/functions/annotate.rb +108 -0
- data/vendored/puppet/lib/puppet/functions/any.rb +109 -0
- data/vendored/puppet/lib/puppet/functions/assert_type.rb +93 -0
- data/vendored/puppet/lib/puppet/functions/binary_file.rb +19 -0
- data/vendored/puppet/lib/puppet/functions/break.rb +22 -0
- data/vendored/puppet/lib/puppet/functions/call.rb +42 -0
- data/vendored/puppet/lib/puppet/functions/contain.rb +39 -0
- data/vendored/puppet/lib/puppet/functions/crit.rb +14 -0
- data/vendored/puppet/lib/puppet/functions/debug.rb +14 -0
- data/vendored/puppet/lib/puppet/functions/defined.rb +160 -0
- data/vendored/puppet/lib/puppet/functions/dig.rb +23 -0
- data/vendored/puppet/lib/puppet/functions/each.rb +163 -0
- data/vendored/puppet/lib/puppet/functions/emerg.rb +14 -0
- data/vendored/puppet/lib/puppet/functions/epp.rb +48 -0
- data/vendored/puppet/lib/puppet/functions/err.rb +14 -0
- data/vendored/puppet/lib/puppet/functions/eyaml_lookup_key.rb +94 -0
- data/vendored/puppet/lib/puppet/functions/file_upload.rb +48 -0
- data/vendored/puppet/lib/puppet/functions/filter.rb +143 -0
- data/vendored/puppet/lib/puppet/functions/find_file.rb +31 -0
- data/vendored/puppet/lib/puppet/functions/hiera.rb +88 -0
- data/vendored/puppet/lib/puppet/functions/hiera_array.rb +81 -0
- data/vendored/puppet/lib/puppet/functions/hiera_hash.rb +92 -0
- data/vendored/puppet/lib/puppet/functions/hiera_include.rb +104 -0
- data/vendored/puppet/lib/puppet/functions/hocon_data.rb +41 -0
- data/vendored/puppet/lib/puppet/functions/import.rb +7 -0
- data/vendored/puppet/lib/puppet/functions/include.rb +27 -0
- data/vendored/puppet/lib/puppet/functions/info.rb +14 -0
- data/vendored/puppet/lib/puppet/functions/inline_epp.rb +59 -0
- data/vendored/puppet/lib/puppet/functions/json_data.rb +33 -0
- data/vendored/puppet/lib/puppet/functions/lest.rb +17 -0
- data/vendored/puppet/lib/puppet/functions/lookup.rb +223 -0
- data/vendored/puppet/lib/puppet/functions/map.rb +126 -0
- data/vendored/puppet/lib/puppet/functions/match.rb +120 -0
- data/vendored/puppet/lib/puppet/functions/new.rb +32 -0
- data/vendored/puppet/lib/puppet/functions/next.rb +23 -0
- data/vendored/puppet/lib/puppet/functions/notice.rb +14 -0
- data/vendored/puppet/lib/puppet/functions/reduce.rb +164 -0
- data/vendored/puppet/lib/puppet/functions/regsubst.rb +76 -0
- data/vendored/puppet/lib/puppet/functions/require.rb +43 -0
- data/vendored/puppet/lib/puppet/functions/return.rb +22 -0
- data/vendored/puppet/lib/puppet/functions/reverse_each.rb +25 -0
- data/vendored/puppet/lib/puppet/functions/run_command.rb +41 -0
- data/vendored/puppet/lib/puppet/functions/run_plan.rb +40 -0
- data/vendored/puppet/lib/puppet/functions/run_script.rb +50 -0
- data/vendored/puppet/lib/puppet/functions/run_task.rb +73 -0
- data/vendored/puppet/lib/puppet/functions/scanf.rb +44 -0
- data/vendored/puppet/lib/puppet/functions/slice.rb +111 -0
- data/vendored/puppet/lib/puppet/functions/split.rb +47 -0
- data/vendored/puppet/lib/puppet/functions/step.rb +26 -0
- data/vendored/puppet/lib/puppet/functions/strftime.rb +43 -0
- data/vendored/puppet/lib/puppet/functions/then.rb +14 -0
- data/vendored/puppet/lib/puppet/functions/tree_each.rb +200 -0
- data/vendored/puppet/lib/puppet/functions/type.rb +31 -0
- data/vendored/puppet/lib/puppet/functions/unique.rb +132 -0
- data/vendored/puppet/lib/puppet/functions/unwrap.rb +40 -0
- data/vendored/puppet/lib/puppet/functions/versioncmp.rb +36 -0
- data/vendored/puppet/lib/puppet/functions/warning.rb +14 -0
- data/vendored/puppet/lib/puppet/functions/with.rb +30 -0
- data/vendored/puppet/lib/puppet/functions/yaml_data.rb +42 -0
- data/vendored/puppet/lib/puppet/generate/models/type/property.rb +70 -0
- data/vendored/puppet/lib/puppet/generate/models/type/type.rb +62 -0
- data/vendored/puppet/lib/puppet/generate/templates/type/pcore.erb +42 -0
- data/vendored/puppet/lib/puppet/generate/type.rb +239 -0
- data/vendored/puppet/lib/puppet/gettext/config.rb +70 -0
- data/vendored/puppet/lib/puppet/gettext/stubs.rb +11 -0
- data/vendored/puppet/lib/puppet/graph.rb +11 -0
- data/vendored/puppet/lib/puppet/graph/key.rb +26 -0
- data/vendored/puppet/lib/puppet/graph/prioritizer.rb +29 -0
- data/vendored/puppet/lib/puppet/graph/random_prioritizer.rb +16 -0
- data/vendored/puppet/lib/puppet/graph/rb_tree_map.rb +388 -0
- data/vendored/puppet/lib/puppet/graph/relationship_graph.rb +277 -0
- data/vendored/puppet/lib/puppet/graph/sequential_prioritizer.rb +31 -0
- data/vendored/puppet/lib/puppet/graph/simple_graph.rb +539 -0
- data/vendored/puppet/lib/puppet/graph/title_hash_prioritizer.rb +16 -0
- data/vendored/puppet/lib/puppet/indirector.rb +61 -0
- data/vendored/puppet/lib/puppet/indirector/catalog/compiler.rb +384 -0
- data/vendored/puppet/lib/puppet/indirector/catalog/json.rb +24 -0
- data/vendored/puppet/lib/puppet/indirector/catalog/msgpack.rb +6 -0
- data/vendored/puppet/lib/puppet/indirector/catalog/rest.rb +6 -0
- data/vendored/puppet/lib/puppet/indirector/catalog/store_configs.rb +8 -0
- data/vendored/puppet/lib/puppet/indirector/catalog/yaml.rb +22 -0
- data/vendored/puppet/lib/puppet/indirector/certificate/ca.rb +9 -0
- data/vendored/puppet/lib/puppet/indirector/certificate/disabled_ca.rb +22 -0
- data/vendored/puppet/lib/puppet/indirector/certificate/file.rb +9 -0
- data/vendored/puppet/lib/puppet/indirector/certificate/rest.rb +16 -0
- data/vendored/puppet/lib/puppet/indirector/certificate_request/ca.rb +22 -0
- data/vendored/puppet/lib/puppet/indirector/certificate_request/disabled_ca.rb +22 -0
- data/vendored/puppet/lib/puppet/indirector/certificate_request/file.rb +8 -0
- data/vendored/puppet/lib/puppet/indirector/certificate_request/memory.rb +6 -0
- data/vendored/puppet/lib/puppet/indirector/certificate_request/rest.rb +10 -0
- data/vendored/puppet/lib/puppet/indirector/certificate_revocation_list/ca.rb +8 -0
- data/vendored/puppet/lib/puppet/indirector/certificate_revocation_list/disabled_ca.rb +22 -0
- data/vendored/puppet/lib/puppet/indirector/certificate_revocation_list/file.rb +8 -0
- data/vendored/puppet/lib/puppet/indirector/certificate_revocation_list/rest.rb +22 -0
- data/vendored/puppet/lib/puppet/indirector/certificate_status.rb +4 -0
- data/vendored/puppet/lib/puppet/indirector/certificate_status/file.rb +91 -0
- data/vendored/puppet/lib/puppet/indirector/certificate_status/rest.rb +11 -0
- data/vendored/puppet/lib/puppet/indirector/code.rb +6 -0
- data/vendored/puppet/lib/puppet/indirector/data_binding/hiera.rb +7 -0
- data/vendored/puppet/lib/puppet/indirector/data_binding/none.rb +8 -0
- data/vendored/puppet/lib/puppet/indirector/direct_file_server.rb +17 -0
- data/vendored/puppet/lib/puppet/indirector/envelope.rb +11 -0
- data/vendored/puppet/lib/puppet/indirector/errors.rb +5 -0
- data/vendored/puppet/lib/puppet/indirector/exec.rb +38 -0
- data/vendored/puppet/lib/puppet/indirector/face.rb +153 -0
- data/vendored/puppet/lib/puppet/indirector/facts/facter.rb +90 -0
- data/vendored/puppet/lib/puppet/indirector/facts/memory.rb +9 -0
- data/vendored/puppet/lib/puppet/indirector/facts/network_device.rb +27 -0
- data/vendored/puppet/lib/puppet/indirector/facts/store_configs.rb +11 -0
- data/vendored/puppet/lib/puppet/indirector/facts/yaml.rb +86 -0
- data/vendored/puppet/lib/puppet/indirector/file_bucket_file/file.rb +255 -0
- data/vendored/puppet/lib/puppet/indirector/file_bucket_file/rest.rb +8 -0
- data/vendored/puppet/lib/puppet/indirector/file_bucket_file/selector.rb +53 -0
- data/vendored/puppet/lib/puppet/indirector/file_content.rb +5 -0
- data/vendored/puppet/lib/puppet/indirector/file_content/file.rb +7 -0
- data/vendored/puppet/lib/puppet/indirector/file_content/file_server.rb +7 -0
- data/vendored/puppet/lib/puppet/indirector/file_content/http.rb +15 -0
- data/vendored/puppet/lib/puppet/indirector/file_content/rest.rb +9 -0
- data/vendored/puppet/lib/puppet/indirector/file_content/selector.rb +30 -0
- data/vendored/puppet/lib/puppet/indirector/file_metadata.rb +5 -0
- data/vendored/puppet/lib/puppet/indirector/file_metadata/file.rb +7 -0
- data/vendored/puppet/lib/puppet/indirector/file_metadata/file_server.rb +7 -0
- data/vendored/puppet/lib/puppet/indirector/file_metadata/http.rb +27 -0
- data/vendored/puppet/lib/puppet/indirector/file_metadata/rest.rb +9 -0
- data/vendored/puppet/lib/puppet/indirector/file_metadata/selector.rb +30 -0
- data/vendored/puppet/lib/puppet/indirector/file_server.rb +59 -0
- data/vendored/puppet/lib/puppet/indirector/generic_http.rb +16 -0
- data/vendored/puppet/lib/puppet/indirector/hiera.rb +94 -0
- data/vendored/puppet/lib/puppet/indirector/indirection.rb +336 -0
- data/vendored/puppet/lib/puppet/indirector/json.rb +75 -0
- data/vendored/puppet/lib/puppet/indirector/key/ca.rb +16 -0
- data/vendored/puppet/lib/puppet/indirector/key/disabled_ca.rb +22 -0
- data/vendored/puppet/lib/puppet/indirector/key/file.rb +50 -0
- data/vendored/puppet/lib/puppet/indirector/key/memory.rb +6 -0
- data/vendored/puppet/lib/puppet/indirector/ldap.rb +80 -0
- data/vendored/puppet/lib/puppet/indirector/memory.rb +34 -0
- data/vendored/puppet/lib/puppet/indirector/msgpack.rb +83 -0
- data/vendored/puppet/lib/puppet/indirector/node/exec.rb +71 -0
- data/vendored/puppet/lib/puppet/indirector/node/ldap.rb +259 -0
- data/vendored/puppet/lib/puppet/indirector/node/memory.rb +10 -0
- data/vendored/puppet/lib/puppet/indirector/node/msgpack.rb +7 -0
- data/vendored/puppet/lib/puppet/indirector/node/plain.rb +21 -0
- data/vendored/puppet/lib/puppet/indirector/node/rest.rb +7 -0
- data/vendored/puppet/lib/puppet/indirector/node/store_configs.rb +8 -0
- data/vendored/puppet/lib/puppet/indirector/node/write_only_yaml.rb +37 -0
- data/vendored/puppet/lib/puppet/indirector/node/yaml.rb +13 -0
- data/vendored/puppet/lib/puppet/indirector/none.rb +9 -0
- data/vendored/puppet/lib/puppet/indirector/plain.rb +9 -0
- data/vendored/puppet/lib/puppet/indirector/report/msgpack.rb +11 -0
- data/vendored/puppet/lib/puppet/indirector/report/processor.rb +59 -0
- data/vendored/puppet/lib/puppet/indirector/report/rest.rb +28 -0
- data/vendored/puppet/lib/puppet/indirector/report/yaml.rb +11 -0
- data/vendored/puppet/lib/puppet/indirector/request.rb +274 -0
- data/vendored/puppet/lib/puppet/indirector/resource/ral.rb +63 -0
- data/vendored/puppet/lib/puppet/indirector/resource/store_configs.rb +12 -0
- data/vendored/puppet/lib/puppet/indirector/resource/validator.rb +8 -0
- data/vendored/puppet/lib/puppet/indirector/rest.rb +348 -0
- data/vendored/puppet/lib/puppet/indirector/ssl_file.rb +201 -0
- data/vendored/puppet/lib/puppet/indirector/status.rb +3 -0
- data/vendored/puppet/lib/puppet/indirector/status/local.rb +12 -0
- data/vendored/puppet/lib/puppet/indirector/status/rest.rb +9 -0
- data/vendored/puppet/lib/puppet/indirector/store_configs.rb +30 -0
- data/vendored/puppet/lib/puppet/indirector/terminus.rb +169 -0
- data/vendored/puppet/lib/puppet/indirector/yaml.rb +63 -0
- data/vendored/puppet/lib/puppet/info_service.rb +17 -0
- data/vendored/puppet/lib/puppet/info_service/class_information_service.rb +110 -0
- data/vendored/puppet/lib/puppet/info_service/task_information_service.rb +32 -0
- data/vendored/puppet/lib/puppet/interface.rb +236 -0
- data/vendored/puppet/lib/puppet/interface/action.rb +374 -0
- data/vendored/puppet/lib/puppet/interface/action_builder.rb +149 -0
- data/vendored/puppet/lib/puppet/interface/action_manager.rb +97 -0
- data/vendored/puppet/lib/puppet/interface/documentation.rb +342 -0
- data/vendored/puppet/lib/puppet/interface/face_collection.rb +130 -0
- data/vendored/puppet/lib/puppet/interface/option.rb +150 -0
- data/vendored/puppet/lib/puppet/interface/option_builder.rb +91 -0
- data/vendored/puppet/lib/puppet/interface/option_manager.rb +99 -0
- data/vendored/puppet/lib/puppet/loaders.rb +26 -0
- data/vendored/puppet/lib/puppet/metatype/manager.rb +195 -0
- data/vendored/puppet/lib/puppet/module.rb +473 -0
- data/vendored/puppet/lib/puppet/module/task.rb +90 -0
- data/vendored/puppet/lib/puppet/module_tool.rb +196 -0
- data/vendored/puppet/lib/puppet/module_tool/applications.rb +14 -0
- data/vendored/puppet/lib/puppet/module_tool/applications/application.rb +90 -0
- data/vendored/puppet/lib/puppet/module_tool/applications/builder.rb +148 -0
- data/vendored/puppet/lib/puppet/module_tool/applications/checksummer.rb +62 -0
- data/vendored/puppet/lib/puppet/module_tool/applications/installer.rb +352 -0
- data/vendored/puppet/lib/puppet/module_tool/applications/searcher.rb +29 -0
- data/vendored/puppet/lib/puppet/module_tool/applications/uninstaller.rb +118 -0
- data/vendored/puppet/lib/puppet/module_tool/applications/unpacker.rb +100 -0
- data/vendored/puppet/lib/puppet/module_tool/applications/upgrader.rb +278 -0
- data/vendored/puppet/lib/puppet/module_tool/checksums.rb +49 -0
- data/vendored/puppet/lib/puppet/module_tool/contents_description.rb +88 -0
- data/vendored/puppet/lib/puppet/module_tool/dependency.rb +41 -0
- data/vendored/puppet/lib/puppet/module_tool/errors.rb +11 -0
- data/vendored/puppet/lib/puppet/module_tool/errors/base.rb +15 -0
- data/vendored/puppet/lib/puppet/module_tool/errors/installer.rb +95 -0
- data/vendored/puppet/lib/puppet/module_tool/errors/shared.rb +190 -0
- data/vendored/puppet/lib/puppet/module_tool/errors/uninstaller.rb +49 -0
- data/vendored/puppet/lib/puppet/module_tool/errors/upgrader.rb +63 -0
- data/vendored/puppet/lib/puppet/module_tool/install_directory.rb +45 -0
- data/vendored/puppet/lib/puppet/module_tool/installed_modules.rb +96 -0
- data/vendored/puppet/lib/puppet/module_tool/local_tarball.rb +90 -0
- data/vendored/puppet/lib/puppet/module_tool/metadata.rb +224 -0
- data/vendored/puppet/lib/puppet/module_tool/shared_behaviors.rb +180 -0
- data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/.fixtures.yml.erb +7 -0
- data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/.gitignore +18 -0
- data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/.rubocop.yml +42 -0
- data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/.yardopts +1 -0
- data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +18 -0
- data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/README.md.erb +89 -0
- data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/Rakefile +32 -0
- data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/examples/init.pp.erb +12 -0
- data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +48 -0
- data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/metadata.json.erb +1 -0
- data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +6 -0
- data/vendored/puppet/lib/puppet/module_tool/skeleton/templates/generator/spec/spec_helper.rb +1 -0
- data/vendored/puppet/lib/puppet/module_tool/tar.rb +18 -0
- data/vendored/puppet/lib/puppet/module_tool/tar/gnu.rb +19 -0
- data/vendored/puppet/lib/puppet/module_tool/tar/mini.rb +53 -0
- data/vendored/puppet/lib/puppet/network.rb +3 -0
- data/vendored/puppet/lib/puppet/network/auth_config_parser.rb +85 -0
- data/vendored/puppet/lib/puppet/network/authconfig.rb +112 -0
- data/vendored/puppet/lib/puppet/network/authorization.rb +41 -0
- data/vendored/puppet/lib/puppet/network/authstore.rb +282 -0
- data/vendored/puppet/lib/puppet/network/client_request.rb +29 -0
- data/vendored/puppet/lib/puppet/network/format.rb +110 -0
- data/vendored/puppet/lib/puppet/network/format_handler.rb +108 -0
- data/vendored/puppet/lib/puppet/network/format_support.rb +134 -0
- data/vendored/puppet/lib/puppet/network/formats.rb +171 -0
- data/vendored/puppet/lib/puppet/network/http.rb +30 -0
- data/vendored/puppet/lib/puppet/network/http/api.rb +44 -0
- data/vendored/puppet/lib/puppet/network/http/api/ca.rb +2 -0
- data/vendored/puppet/lib/puppet/network/http/api/ca/v1.rb +11 -0
- data/vendored/puppet/lib/puppet/network/http/api/indirected_routes.rb +278 -0
- data/vendored/puppet/lib/puppet/network/http/api/indirection_type.rb +32 -0
- data/vendored/puppet/lib/puppet/network/http/api/master.rb +2 -0
- data/vendored/puppet/lib/puppet/network/http/api/master/v3.rb +28 -0
- data/vendored/puppet/lib/puppet/network/http/api/master/v3/authorization.rb +18 -0
- data/vendored/puppet/lib/puppet/network/http/api/master/v3/environment.rb +82 -0
- data/vendored/puppet/lib/puppet/network/http/api/master/v3/environments.rb +35 -0
- data/vendored/puppet/lib/puppet/network/http/compression.rb +120 -0
- data/vendored/puppet/lib/puppet/network/http/connection.rb +332 -0
- data/vendored/puppet/lib/puppet/network/http/error.rb +73 -0
- data/vendored/puppet/lib/puppet/network/http/factory.rb +47 -0
- data/vendored/puppet/lib/puppet/network/http/handler.rb +183 -0
- data/vendored/puppet/lib/puppet/network/http/issues.rb +12 -0
- data/vendored/puppet/lib/puppet/network/http/memory_response.rb +13 -0
- data/vendored/puppet/lib/puppet/network/http/nocache_pool.rb +21 -0
- data/vendored/puppet/lib/puppet/network/http/pool.rb +129 -0
- data/vendored/puppet/lib/puppet/network/http/rack.rb +33 -0
- data/vendored/puppet/lib/puppet/network/http/rack/rest.rb +162 -0
- data/vendored/puppet/lib/puppet/network/http/request.rb +70 -0
- data/vendored/puppet/lib/puppet/network/http/response.rb +23 -0
- data/vendored/puppet/lib/puppet/network/http/route.rb +100 -0
- data/vendored/puppet/lib/puppet/network/http/session.rb +17 -0
- data/vendored/puppet/lib/puppet/network/http/site.rb +39 -0
- data/vendored/puppet/lib/puppet/network/http/webrick.rb +125 -0
- data/vendored/puppet/lib/puppet/network/http/webrick/rest.rb +114 -0
- data/vendored/puppet/lib/puppet/network/http_pool.rb +61 -0
- data/vendored/puppet/lib/puppet/network/resolver.rb +86 -0
- data/vendored/puppet/lib/puppet/network/rest_controller.rb +2 -0
- data/vendored/puppet/lib/puppet/network/rights.rb +209 -0
- data/vendored/puppet/lib/puppet/network/server.rb +39 -0
- data/vendored/puppet/lib/puppet/node.rb +262 -0
- data/vendored/puppet/lib/puppet/node/environment.rb +572 -0
- data/vendored/puppet/lib/puppet/node/facts.rb +128 -0
- data/vendored/puppet/lib/puppet/parameter.rb +567 -0
- data/vendored/puppet/lib/puppet/parameter/boolean.rb +15 -0
- data/vendored/puppet/lib/puppet/parameter/package_options.rb +31 -0
- data/vendored/puppet/lib/puppet/parameter/path.rb +57 -0
- data/vendored/puppet/lib/puppet/parameter/value.rb +91 -0
- data/vendored/puppet/lib/puppet/parameter/value_collection.rb +212 -0
- data/vendored/puppet/lib/puppet/parser.rb +20 -0
- data/vendored/puppet/lib/puppet/parser/abstract_compiler.rb +36 -0
- data/vendored/puppet/lib/puppet/parser/ast.rb +65 -0
- data/vendored/puppet/lib/puppet/parser/ast/block_expression.rb +15 -0
- data/vendored/puppet/lib/puppet/parser/ast/branch.rb +19 -0
- data/vendored/puppet/lib/puppet/parser/ast/hostclass.rb +27 -0
- data/vendored/puppet/lib/puppet/parser/ast/leaf.rb +75 -0
- data/vendored/puppet/lib/puppet/parser/ast/node.rb +17 -0
- data/vendored/puppet/lib/puppet/parser/ast/pops_bridge.rb +273 -0
- data/vendored/puppet/lib/puppet/parser/ast/resource.rb +66 -0
- data/vendored/puppet/lib/puppet/parser/ast/resource_instance.rb +10 -0
- data/vendored/puppet/lib/puppet/parser/ast/resourceparam.rb +31 -0
- data/vendored/puppet/lib/puppet/parser/ast/top_level_construct.rb +4 -0
- data/vendored/puppet/lib/puppet/parser/compiler.rb +788 -0
- data/vendored/puppet/lib/puppet/parser/compiler/catalog_validator.rb +33 -0
- data/vendored/puppet/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +64 -0
- data/vendored/puppet/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +57 -0
- data/vendored/puppet/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +20 -0
- data/vendored/puppet/lib/puppet/parser/e4_parser_adapter.rb +60 -0
- data/vendored/puppet/lib/puppet/parser/environment_compiler.rb +199 -0
- data/vendored/puppet/lib/puppet/parser/files.rb +92 -0
- data/vendored/puppet/lib/puppet/parser/functions.rb +278 -0
- data/vendored/puppet/lib/puppet/parser/functions/assert_type.rb +60 -0
- data/vendored/puppet/lib/puppet/parser/functions/binary_file.rb +24 -0
- data/vendored/puppet/lib/puppet/parser/functions/break.rb +39 -0
- data/vendored/puppet/lib/puppet/parser/functions/contain.rb +30 -0
- data/vendored/puppet/lib/puppet/parser/functions/create_resources.rb +112 -0
- data/vendored/puppet/lib/puppet/parser/functions/defined.rb +107 -0
- data/vendored/puppet/lib/puppet/parser/functions/dig.rb +38 -0
- data/vendored/puppet/lib/puppet/parser/functions/digest.rb +5 -0
- data/vendored/puppet/lib/puppet/parser/functions/each.rb +104 -0
- data/vendored/puppet/lib/puppet/parser/functions/epp.rb +39 -0
- data/vendored/puppet/lib/puppet/parser/functions/fail.rb +4 -0
- data/vendored/puppet/lib/puppet/parser/functions/file.rb +33 -0
- data/vendored/puppet/lib/puppet/parser/functions/filter.rb +78 -0
- data/vendored/puppet/lib/puppet/parser/functions/find_file.rb +28 -0
- data/vendored/puppet/lib/puppet/parser/functions/fqdn_rand.rb +21 -0
- data/vendored/puppet/lib/puppet/parser/functions/generate.rb +38 -0
- data/vendored/puppet/lib/puppet/parser/functions/hiera.rb +103 -0
- data/vendored/puppet/lib/puppet/parser/functions/hiera_array.rb +92 -0
- data/vendored/puppet/lib/puppet/parser/functions/hiera_hash.rb +102 -0
- data/vendored/puppet/lib/puppet/parser/functions/hiera_include.rb +102 -0
- data/vendored/puppet/lib/puppet/parser/functions/include.rb +34 -0
- data/vendored/puppet/lib/puppet/parser/functions/inline_epp.rb +51 -0
- data/vendored/puppet/lib/puppet/parser/functions/inline_template.rb +27 -0
- data/vendored/puppet/lib/puppet/parser/functions/lest.rb +49 -0
- data/vendored/puppet/lib/puppet/parser/functions/lookup.rb +132 -0
- data/vendored/puppet/lib/puppet/parser/functions/map.rb +76 -0
- data/vendored/puppet/lib/puppet/parser/functions/match.rb +43 -0
- data/vendored/puppet/lib/puppet/parser/functions/md5.rb +5 -0
- data/vendored/puppet/lib/puppet/parser/functions/new.rb +1006 -0
- data/vendored/puppet/lib/puppet/parser/functions/next.rb +38 -0
- data/vendored/puppet/lib/puppet/parser/functions/realize.rb +20 -0
- data/vendored/puppet/lib/puppet/parser/functions/reduce.rb +137 -0
- data/vendored/puppet/lib/puppet/parser/functions/regsubst.rb +62 -0
- data/vendored/puppet/lib/puppet/parser/functions/require.rb +40 -0
- data/vendored/puppet/lib/puppet/parser/functions/return.rb +71 -0
- data/vendored/puppet/lib/puppet/parser/functions/reverse_each.rb +83 -0
- data/vendored/puppet/lib/puppet/parser/functions/scanf.rb +38 -0
- data/vendored/puppet/lib/puppet/parser/functions/sha1.rb +5 -0
- data/vendored/puppet/lib/puppet/parser/functions/shellquote.rb +61 -0
- data/vendored/puppet/lib/puppet/parser/functions/slice.rb +39 -0
- data/vendored/puppet/lib/puppet/parser/functions/split.rb +28 -0
- data/vendored/puppet/lib/puppet/parser/functions/sprintf.rb +36 -0
- data/vendored/puppet/lib/puppet/parser/functions/step.rb +84 -0
- data/vendored/puppet/lib/puppet/parser/functions/strftime.rb +185 -0
- data/vendored/puppet/lib/puppet/parser/functions/tag.rb +12 -0
- data/vendored/puppet/lib/puppet/parser/functions/tagged.rb +24 -0
- data/vendored/puppet/lib/puppet/parser/functions/template.rb +35 -0
- data/vendored/puppet/lib/puppet/parser/functions/then.rb +73 -0
- data/vendored/puppet/lib/puppet/parser/functions/type.rb +53 -0
- data/vendored/puppet/lib/puppet/parser/functions/versioncmp.rb +30 -0
- data/vendored/puppet/lib/puppet/parser/functions/with.rb +28 -0
- data/vendored/puppet/lib/puppet/parser/parser_factory.rb +30 -0
- data/vendored/puppet/lib/puppet/parser/relationship.rb +83 -0
- data/vendored/puppet/lib/puppet/parser/resource.rb +418 -0
- data/vendored/puppet/lib/puppet/parser/resource/param.rb +22 -0
- data/vendored/puppet/lib/puppet/parser/scope.rb +1112 -0
- data/vendored/puppet/lib/puppet/parser/script_compiler.rb +117 -0
- data/vendored/puppet/lib/puppet/parser/templatewrapper.rb +101 -0
- data/vendored/puppet/lib/puppet/parser/type_loader.rb +149 -0
- data/vendored/puppet/lib/puppet/plugins.rb +9 -0
- data/vendored/puppet/lib/puppet/plugins/configuration.rb +25 -0
- data/vendored/puppet/lib/puppet/plugins/syntax_checkers.rb +98 -0
- data/vendored/puppet/lib/puppet/pops.rb +120 -0
- data/vendored/puppet/lib/puppet/pops/adaptable.rb +206 -0
- data/vendored/puppet/lib/puppet/pops/adapters.rb +138 -0
- data/vendored/puppet/lib/puppet/pops/evaluator/access_operator.rb +706 -0
- data/vendored/puppet/lib/puppet/pops/evaluator/callable_signature.rb +107 -0
- data/vendored/puppet/lib/puppet/pops/evaluator/closure.rb +373 -0
- data/vendored/puppet/lib/puppet/pops/evaluator/collector_transformer.rb +233 -0
- data/vendored/puppet/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +86 -0
- data/vendored/puppet/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +29 -0
- data/vendored/puppet/lib/puppet/pops/evaluator/collectors/exported_collector.rb +69 -0
- data/vendored/puppet/lib/puppet/pops/evaluator/collectors/fixed_set_collector.rb +37 -0
- data/vendored/puppet/lib/puppet/pops/evaluator/compare_operator.rb +252 -0
- data/vendored/puppet/lib/puppet/pops/evaluator/epp_evaluator.rb +94 -0
- data/vendored/puppet/lib/puppet/pops/evaluator/evaluator_impl.rb +1258 -0
- data/vendored/puppet/lib/puppet/pops/evaluator/external_syntax_support.rb +45 -0
- data/vendored/puppet/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +82 -0
- data/vendored/puppet/lib/puppet/pops/evaluator/literal_evaluator.rb +87 -0
- data/vendored/puppet/lib/puppet/pops/evaluator/puppet_proc.rb +69 -0
- data/vendored/puppet/lib/puppet/pops/evaluator/relationship_operator.rb +185 -0
- data/vendored/puppet/lib/puppet/pops/evaluator/runtime3_converter.rb +200 -0
- data/vendored/puppet/lib/puppet/pops/evaluator/runtime3_resource_support.rb +117 -0
- data/vendored/puppet/lib/puppet/pops/evaluator/runtime3_support.rb +538 -0
- data/vendored/puppet/lib/puppet/pops/functions/dispatch.rb +100 -0
- data/vendored/puppet/lib/puppet/pops/functions/dispatcher.rb +71 -0
- data/vendored/puppet/lib/puppet/pops/functions/function.rb +135 -0
- data/vendored/puppet/lib/puppet/pops/issue_reporter.rb +115 -0
- data/vendored/puppet/lib/puppet/pops/issues.rb +888 -0
- data/vendored/puppet/lib/puppet/pops/label_provider.rb +90 -0
- data/vendored/puppet/lib/puppet/pops/loader/base_loader.rb +166 -0
- data/vendored/puppet/lib/puppet/pops/loader/dependency_loader.rb +92 -0
- data/vendored/puppet/lib/puppet/pops/loader/gem_support.rb +49 -0
- data/vendored/puppet/lib/puppet/pops/loader/loader.rb +204 -0
- data/vendored/puppet/lib/puppet/pops/loader/loader_paths.rb +296 -0
- data/vendored/puppet/lib/puppet/pops/loader/module_loaders.rb +452 -0
- data/vendored/puppet/lib/puppet/pops/loader/null_loader.rb +60 -0
- data/vendored/puppet/lib/puppet/pops/loader/predefined_loader.rb +24 -0
- data/vendored/puppet/lib/puppet/pops/loader/puppet_function_instantiator.rb +84 -0
- data/vendored/puppet/lib/puppet/pops/loader/puppet_plan_instantiator.rb +84 -0
- data/vendored/puppet/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +79 -0
- data/vendored/puppet/lib/puppet/pops/loader/ruby_function_instantiator.rb +46 -0
- data/vendored/puppet/lib/puppet/pops/loader/runtime3_type_loader.rb +101 -0
- data/vendored/puppet/lib/puppet/pops/loader/simple_environment_loader.rb +20 -0
- data/vendored/puppet/lib/puppet/pops/loader/static_loader.rb +164 -0
- data/vendored/puppet/lib/puppet/pops/loader/task_instantiator.rb +117 -0
- data/vendored/puppet/lib/puppet/pops/loader/type_definition_instantiator.rb +97 -0
- data/vendored/puppet/lib/puppet/pops/loader/typed_name.rb +54 -0
- data/vendored/puppet/lib/puppet/pops/loader/uri_helper.rb +22 -0
- data/vendored/puppet/lib/puppet/pops/loaders.rb +517 -0
- data/vendored/puppet/lib/puppet/pops/lookup.rb +96 -0
- data/vendored/puppet/lib/puppet/pops/lookup/configured_data_provider.rb +93 -0
- data/vendored/puppet/lib/puppet/pops/lookup/context.rb +200 -0
- data/vendored/puppet/lib/puppet/pops/lookup/data_adapter.rb +27 -0
- data/vendored/puppet/lib/puppet/pops/lookup/data_dig_function_provider.rb +145 -0
- data/vendored/puppet/lib/puppet/pops/lookup/data_hash_function_provider.rb +126 -0
- data/vendored/puppet/lib/puppet/pops/lookup/data_provider.rb +92 -0
- data/vendored/puppet/lib/puppet/pops/lookup/environment_data_provider.rb +35 -0
- data/vendored/puppet/lib/puppet/pops/lookup/explainer.rb +594 -0
- data/vendored/puppet/lib/puppet/pops/lookup/function_provider.rb +110 -0
- data/vendored/puppet/lib/puppet/pops/lookup/global_data_provider.rb +75 -0
- data/vendored/puppet/lib/puppet/pops/lookup/hiera_config.rb +761 -0
- data/vendored/puppet/lib/puppet/pops/lookup/interpolation.rb +154 -0
- data/vendored/puppet/lib/puppet/pops/lookup/invocation.rb +261 -0
- data/vendored/puppet/lib/puppet/pops/lookup/location_resolver.rb +99 -0
- data/vendored/puppet/lib/puppet/pops/lookup/lookup_adapter.rb +472 -0
- data/vendored/puppet/lib/puppet/pops/lookup/lookup_key.rb +99 -0
- data/vendored/puppet/lib/puppet/pops/lookup/lookup_key_function_provider.rb +92 -0
- data/vendored/puppet/lib/puppet/pops/lookup/module_data_provider.rb +89 -0
- data/vendored/puppet/lib/puppet/pops/lookup/sub_lookup.rb +92 -0
- data/vendored/puppet/lib/puppet/pops/merge_strategy.rb +434 -0
- data/vendored/puppet/lib/puppet/pops/migration/migration_checker.rb +58 -0
- data/vendored/puppet/lib/puppet/pops/model/ast.pp +695 -0
- data/vendored/puppet/lib/puppet/pops/model/ast.rb +4870 -0
- data/vendored/puppet/lib/puppet/pops/model/ast_transformer.rb +131 -0
- data/vendored/puppet/lib/puppet/pops/model/factory.rb +1145 -0
- data/vendored/puppet/lib/puppet/pops/model/model_label_provider.rb +132 -0
- data/vendored/puppet/lib/puppet/pops/model/model_tree_dumper.rb +463 -0
- data/vendored/puppet/lib/puppet/pops/model/tree_dumper.rb +59 -0
- data/vendored/puppet/lib/puppet/pops/parser/code_merger.rb +29 -0
- data/vendored/puppet/lib/puppet/pops/parser/egrammar.ra +937 -0
- data/vendored/puppet/lib/puppet/pops/parser/eparser.rb +3347 -0
- data/vendored/puppet/lib/puppet/pops/parser/epp_parser.rb +51 -0
- data/vendored/puppet/lib/puppet/pops/parser/epp_support.rb +262 -0
- data/vendored/puppet/lib/puppet/pops/parser/evaluating_parser.rb +165 -0
- data/vendored/puppet/lib/puppet/pops/parser/heredoc_support.rb +143 -0
- data/vendored/puppet/lib/puppet/pops/parser/interpolation_support.rb +244 -0
- data/vendored/puppet/lib/puppet/pops/parser/lexer2.rb +796 -0
- data/vendored/puppet/lib/puppet/pops/parser/lexer_support.rb +220 -0
- data/vendored/puppet/lib/puppet/pops/parser/locatable.rb +23 -0
- data/vendored/puppet/lib/puppet/pops/parser/locator.rb +344 -0
- data/vendored/puppet/lib/puppet/pops/parser/parser_support.rb +247 -0
- data/vendored/puppet/lib/puppet/pops/parser/slurp_support.rb +120 -0
- data/vendored/puppet/lib/puppet/pops/patterns.rb +60 -0
- data/vendored/puppet/lib/puppet/pops/pcore.rb +107 -0
- data/vendored/puppet/lib/puppet/pops/puppet_stack.rb +43 -0
- data/vendored/puppet/lib/puppet/pops/resource/param.rb +55 -0
- data/vendored/puppet/lib/puppet/pops/resource/resource_type_impl.rb +314 -0
- data/vendored/puppet/lib/puppet/pops/resource/resource_type_set.pcore +22 -0
- data/vendored/puppet/lib/puppet/pops/semantic_error.rb +29 -0
- data/vendored/puppet/lib/puppet/pops/serialization.rb +41 -0
- data/vendored/puppet/lib/puppet/pops/serialization/abstract_reader.rb +176 -0
- data/vendored/puppet/lib/puppet/pops/serialization/abstract_writer.rb +215 -0
- data/vendored/puppet/lib/puppet/pops/serialization/deserializer.rb +80 -0
- data/vendored/puppet/lib/puppet/pops/serialization/extension.rb +157 -0
- data/vendored/puppet/lib/puppet/pops/serialization/from_data_converter.rb +169 -0
- data/vendored/puppet/lib/puppet/pops/serialization/instance_reader.rb +19 -0
- data/vendored/puppet/lib/puppet/pops/serialization/instance_writer.rb +14 -0
- data/vendored/puppet/lib/puppet/pops/serialization/json.rb +297 -0
- data/vendored/puppet/lib/puppet/pops/serialization/json_path.rb +126 -0
- data/vendored/puppet/lib/puppet/pops/serialization/object.rb +71 -0
- data/vendored/puppet/lib/puppet/pops/serialization/serializer.rb +139 -0
- data/vendored/puppet/lib/puppet/pops/serialization/time_factory.rb +67 -0
- data/vendored/puppet/lib/puppet/pops/serialization/to_data_converter.rb +301 -0
- data/vendored/puppet/lib/puppet/pops/time/timespan.rb +718 -0
- data/vendored/puppet/lib/puppet/pops/time/timestamp.rb +160 -0
- data/vendored/puppet/lib/puppet/pops/types/annotatable.rb +36 -0
- data/vendored/puppet/lib/puppet/pops/types/annotation.rb +71 -0
- data/vendored/puppet/lib/puppet/pops/types/class_loader.rb +129 -0
- data/vendored/puppet/lib/puppet/pops/types/enumeration.rb +16 -0
- data/vendored/puppet/lib/puppet/pops/types/execution_result.rb +126 -0
- data/vendored/puppet/lib/puppet/pops/types/implementation_registry.rb +141 -0
- data/vendored/puppet/lib/puppet/pops/types/iterable.rb +330 -0
- data/vendored/puppet/lib/puppet/pops/types/p_binary_type.rb +226 -0
- data/vendored/puppet/lib/puppet/pops/types/p_error_type.rb +146 -0
- data/vendored/puppet/lib/puppet/pops/types/p_init_type.rb +238 -0
- data/vendored/puppet/lib/puppet/pops/types/p_meta_type.rb +90 -0
- data/vendored/puppet/lib/puppet/pops/types/p_object_type.rb +976 -0
- data/vendored/puppet/lib/puppet/pops/types/p_runtime_type.rb +115 -0
- data/vendored/puppet/lib/puppet/pops/types/p_sem_ver_range_type.rb +191 -0
- data/vendored/puppet/lib/puppet/pops/types/p_sem_ver_type.rb +141 -0
- data/vendored/puppet/lib/puppet/pops/types/p_sensitive_type.rb +73 -0
- data/vendored/puppet/lib/puppet/pops/types/p_timespan_type.rb +192 -0
- data/vendored/puppet/lib/puppet/pops/types/p_timestamp_type.rb +73 -0
- data/vendored/puppet/lib/puppet/pops/types/p_type_set_type.rb +361 -0
- data/vendored/puppet/lib/puppet/pops/types/puppet_object.rb +30 -0
- data/vendored/puppet/lib/puppet/pops/types/recursion_guard.rb +136 -0
- data/vendored/puppet/lib/puppet/pops/types/ruby_generator.rb +432 -0
- data/vendored/puppet/lib/puppet/pops/types/ruby_method.rb +31 -0
- data/vendored/puppet/lib/puppet/pops/types/string_converter.rb +1102 -0
- data/vendored/puppet/lib/puppet/pops/types/task.rb +116 -0
- data/vendored/puppet/lib/puppet/pops/types/tree_iterators.rb +250 -0
- data/vendored/puppet/lib/puppet/pops/types/type_acceptor.rb +25 -0
- data/vendored/puppet/lib/puppet/pops/types/type_asserter.rb +47 -0
- data/vendored/puppet/lib/puppet/pops/types/type_assertion_error.rb +27 -0
- data/vendored/puppet/lib/puppet/pops/types/type_calculator.rb +799 -0
- data/vendored/puppet/lib/puppet/pops/types/type_conversion_error.rb +15 -0
- data/vendored/puppet/lib/puppet/pops/types/type_factory.rb +599 -0
- data/vendored/puppet/lib/puppet/pops/types/type_formatter.rb +769 -0
- data/vendored/puppet/lib/puppet/pops/types/type_mismatch_describer.rb +1062 -0
- data/vendored/puppet/lib/puppet/pops/types/type_parser.rb +602 -0
- data/vendored/puppet/lib/puppet/pops/types/type_set_reference.rb +59 -0
- data/vendored/puppet/lib/puppet/pops/types/types.rb +3519 -0
- data/vendored/puppet/lib/puppet/pops/utils.rb +119 -0
- data/vendored/puppet/lib/puppet/pops/validation.rb +464 -0
- data/vendored/puppet/lib/puppet/pops/validation/checker4_0.rb +996 -0
- data/vendored/puppet/lib/puppet/pops/validation/tasks_checker.rb +60 -0
- data/vendored/puppet/lib/puppet/pops/validation/validator_factory_4_0.rb +43 -0
- data/vendored/puppet/lib/puppet/pops/visitable.rb +6 -0
- data/vendored/puppet/lib/puppet/pops/visitor.rb +116 -0
- data/vendored/puppet/lib/puppet/property.rb +600 -0
- data/vendored/puppet/lib/puppet/property/boolean.rb +7 -0
- data/vendored/puppet/lib/puppet/property/ensure.rb +105 -0
- data/vendored/puppet/lib/puppet/property/keyvalue.rb +95 -0
- data/vendored/puppet/lib/puppet/property/list.rb +69 -0
- data/vendored/puppet/lib/puppet/property/ordered_list.rb +29 -0
- data/vendored/puppet/lib/puppet/provider.rb +603 -0
- data/vendored/puppet/lib/puppet/provider/aixobject.rb +392 -0
- data/vendored/puppet/lib/puppet/provider/augeas/augeas.rb +567 -0
- data/vendored/puppet/lib/puppet/provider/cisco.rb +9 -0
- data/vendored/puppet/lib/puppet/provider/command.rb +25 -0
- data/vendored/puppet/lib/puppet/provider/computer/computer.rb +20 -0
- data/vendored/puppet/lib/puppet/provider/confine.rb +6 -0
- data/vendored/puppet/lib/puppet/provider/cron/crontab.rb +297 -0
- data/vendored/puppet/lib/puppet/provider/exec.rb +98 -0
- data/vendored/puppet/lib/puppet/provider/exec/posix.rb +48 -0
- data/vendored/puppet/lib/puppet/provider/exec/shell.rb +25 -0
- data/vendored/puppet/lib/puppet/provider/exec/windows.rb +55 -0
- data/vendored/puppet/lib/puppet/provider/file/posix.rb +136 -0
- data/vendored/puppet/lib/puppet/provider/file/windows.rb +104 -0
- data/vendored/puppet/lib/puppet/provider/group/aix.rb +141 -0
- data/vendored/puppet/lib/puppet/provider/group/directoryservice.rb +22 -0
- data/vendored/puppet/lib/puppet/provider/group/groupadd.rb +85 -0
- data/vendored/puppet/lib/puppet/provider/group/ldap.rb +45 -0
- data/vendored/puppet/lib/puppet/provider/group/pw.rb +49 -0
- data/vendored/puppet/lib/puppet/provider/group/windows_adsi.rb +109 -0
- data/vendored/puppet/lib/puppet/provider/host/parsed.rb +46 -0
- data/vendored/puppet/lib/puppet/provider/interface/cisco.rb +27 -0
- data/vendored/puppet/lib/puppet/provider/ldap.rb +137 -0
- data/vendored/puppet/lib/puppet/provider/macauthorization/macauthorization.rb +298 -0
- data/vendored/puppet/lib/puppet/provider/mailalias/aliases.rb +50 -0
- data/vendored/puppet/lib/puppet/provider/maillist/mailman.rb +108 -0
- data/vendored/puppet/lib/puppet/provider/mcx/mcxcontent.rb +173 -0
- data/vendored/puppet/lib/puppet/provider/mount.rb +59 -0
- data/vendored/puppet/lib/puppet/provider/mount/parsed.rb +282 -0
- data/vendored/puppet/lib/puppet/provider/naginator.rb +63 -0
- data/vendored/puppet/lib/puppet/provider/nameservice.rb +317 -0
- data/vendored/puppet/lib/puppet/provider/nameservice/directoryservice.rb +507 -0
- data/vendored/puppet/lib/puppet/provider/nameservice/objectadd.rb +33 -0
- data/vendored/puppet/lib/puppet/provider/nameservice/pw.rb +21 -0
- data/vendored/puppet/lib/puppet/provider/network_device.rb +72 -0
- data/vendored/puppet/lib/puppet/provider/package.rb +56 -0
- data/vendored/puppet/lib/puppet/provider/package/aix.rb +152 -0
- data/vendored/puppet/lib/puppet/provider/package/appdmg.rb +110 -0
- data/vendored/puppet/lib/puppet/provider/package/apple.rb +47 -0
- data/vendored/puppet/lib/puppet/provider/package/apt.rb +116 -0
- data/vendored/puppet/lib/puppet/provider/package/aptitude.rb +29 -0
- data/vendored/puppet/lib/puppet/provider/package/aptrpm.rb +83 -0
- data/vendored/puppet/lib/puppet/provider/package/blastwave.rb +111 -0
- data/vendored/puppet/lib/puppet/provider/package/dnf.rb +46 -0
- data/vendored/puppet/lib/puppet/provider/package/dpkg.rb +165 -0
- data/vendored/puppet/lib/puppet/provider/package/fink.rb +79 -0
- data/vendored/puppet/lib/puppet/provider/package/freebsd.rb +47 -0
- data/vendored/puppet/lib/puppet/provider/package/gem.rb +175 -0
- data/vendored/puppet/lib/puppet/provider/package/hpux.rb +44 -0
- data/vendored/puppet/lib/puppet/provider/package/macports.rb +107 -0
- data/vendored/puppet/lib/puppet/provider/package/nim.rb +283 -0
- data/vendored/puppet/lib/puppet/provider/package/openbsd.rb +242 -0
- data/vendored/puppet/lib/puppet/provider/package/opkg.rb +81 -0
- data/vendored/puppet/lib/puppet/provider/package/pacman.rb +267 -0
- data/vendored/puppet/lib/puppet/provider/package/pip.rb +188 -0
- data/vendored/puppet/lib/puppet/provider/package/pip3.rb +20 -0
- data/vendored/puppet/lib/puppet/provider/package/pkg.rb +249 -0
- data/vendored/puppet/lib/puppet/provider/package/pkgdmg.rb +152 -0
- data/vendored/puppet/lib/puppet/provider/package/pkgin.rb +87 -0
- data/vendored/puppet/lib/puppet/provider/package/pkgng.rb +143 -0
- data/vendored/puppet/lib/puppet/provider/package/pkgutil.rb +186 -0
- data/vendored/puppet/lib/puppet/provider/package/portage.rb +301 -0
- data/vendored/puppet/lib/puppet/provider/package/ports.rb +91 -0
- data/vendored/puppet/lib/puppet/provider/package/portupgrade.rb +239 -0
- data/vendored/puppet/lib/puppet/provider/package/puppet_gem.rb +17 -0
- data/vendored/puppet/lib/puppet/provider/package/rpm.rb +405 -0
- data/vendored/puppet/lib/puppet/provider/package/rug.rb +51 -0
- data/vendored/puppet/lib/puppet/provider/package/sun.rb +133 -0
- data/vendored/puppet/lib/puppet/provider/package/sunfreeware.rb +9 -0
- data/vendored/puppet/lib/puppet/provider/package/tdnf.rb +28 -0
- data/vendored/puppet/lib/puppet/provider/package/up2date.rb +40 -0
- data/vendored/puppet/lib/puppet/provider/package/urpmi.rb +55 -0
- data/vendored/puppet/lib/puppet/provider/package/windows.rb +113 -0
- data/vendored/puppet/lib/puppet/provider/package/windows/exe_package.rb +71 -0
- data/vendored/puppet/lib/puppet/provider/package/windows/msi_package.rb +62 -0
- data/vendored/puppet/lib/puppet/provider/package/windows/package.rb +100 -0
- data/vendored/puppet/lib/puppet/provider/package/yum.rb +278 -0
- data/vendored/puppet/lib/puppet/provider/package/zypper.rb +145 -0
- data/vendored/puppet/lib/puppet/provider/parsedfile.rb +459 -0
- data/vendored/puppet/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +590 -0
- data/vendored/puppet/lib/puppet/provider/selboolean/getsetsebool.rb +47 -0
- data/vendored/puppet/lib/puppet/provider/selmodule/semodule.rb +138 -0
- data/vendored/puppet/lib/puppet/provider/service/base.rb +121 -0
- data/vendored/puppet/lib/puppet/provider/service/bsd.rb +51 -0
- data/vendored/puppet/lib/puppet/provider/service/daemontools.rb +194 -0
- data/vendored/puppet/lib/puppet/provider/service/debian.rb +74 -0
- data/vendored/puppet/lib/puppet/provider/service/freebsd.rb +143 -0
- data/vendored/puppet/lib/puppet/provider/service/gentoo.rb +45 -0
- data/vendored/puppet/lib/puppet/provider/service/init.rb +193 -0
- data/vendored/puppet/lib/puppet/provider/service/launchd.rb +346 -0
- data/vendored/puppet/lib/puppet/provider/service/openbsd.rb +100 -0
- data/vendored/puppet/lib/puppet/provider/service/openrc.rb +71 -0
- data/vendored/puppet/lib/puppet/provider/service/openwrt.rb +36 -0
- data/vendored/puppet/lib/puppet/provider/service/rcng.rb +51 -0
- data/vendored/puppet/lib/puppet/provider/service/redhat.rb +71 -0
- data/vendored/puppet/lib/puppet/provider/service/runit.rb +111 -0
- data/vendored/puppet/lib/puppet/provider/service/service.rb +42 -0
- data/vendored/puppet/lib/puppet/provider/service/smf.rb +167 -0
- data/vendored/puppet/lib/puppet/provider/service/src.rb +147 -0
- data/vendored/puppet/lib/puppet/provider/service/systemd.rb +186 -0
- data/vendored/puppet/lib/puppet/provider/service/upstart.rb +359 -0
- data/vendored/puppet/lib/puppet/provider/service/windows.rb +106 -0
- data/vendored/puppet/lib/puppet/provider/ssh_authorized_key/parsed.rb +105 -0
- data/vendored/puppet/lib/puppet/provider/sshkey/parsed.rb +50 -0
- data/vendored/puppet/lib/puppet/provider/user/aix.rb +375 -0
- data/vendored/puppet/lib/puppet/provider/user/directoryservice.rb +632 -0
- data/vendored/puppet/lib/puppet/provider/user/hpux.rb +95 -0
- data/vendored/puppet/lib/puppet/provider/user/ldap.rb +128 -0
- data/vendored/puppet/lib/puppet/provider/user/openbsd.rb +75 -0
- data/vendored/puppet/lib/puppet/provider/user/pw.rb +98 -0
- data/vendored/puppet/lib/puppet/provider/user/user_role_add.rb +227 -0
- data/vendored/puppet/lib/puppet/provider/user/useradd.rb +231 -0
- data/vendored/puppet/lib/puppet/provider/user/windows_adsi.rb +148 -0
- data/vendored/puppet/lib/puppet/provider/vlan/cisco.rb +28 -0
- data/vendored/puppet/lib/puppet/provider/yumrepo/inifile.rb +304 -0
- data/vendored/puppet/lib/puppet/provider/zfs/zfs.rb +84 -0
- data/vendored/puppet/lib/puppet/provider/zone/solaris.rb +364 -0
- data/vendored/puppet/lib/puppet/provider/zpool/zpool.rb +125 -0
- data/vendored/puppet/lib/puppet/reference/configuration.rb +82 -0
- data/vendored/puppet/lib/puppet/reference/function.rb +17 -0
- data/vendored/puppet/lib/puppet/reference/indirection.rb +71 -0
- data/vendored/puppet/lib/puppet/reference/metaparameter.rb +35 -0
- data/vendored/puppet/lib/puppet/reference/providers.rb +118 -0
- data/vendored/puppet/lib/puppet/reference/report.rb +20 -0
- data/vendored/puppet/lib/puppet/reference/type.rb +114 -0
- data/vendored/puppet/lib/puppet/relationship.rb +88 -0
- data/vendored/puppet/lib/puppet/reports.rb +93 -0
- data/vendored/puppet/lib/puppet/reports/http.rb +37 -0
- data/vendored/puppet/lib/puppet/reports/log.rb +14 -0
- data/vendored/puppet/lib/puppet/reports/store.rb +68 -0
- data/vendored/puppet/lib/puppet/resource.rb +669 -0
- data/vendored/puppet/lib/puppet/resource/capability_finder.rb +147 -0
- data/vendored/puppet/lib/puppet/resource/catalog.rb +667 -0
- data/vendored/puppet/lib/puppet/resource/status.rb +221 -0
- data/vendored/puppet/lib/puppet/resource/type.rb +524 -0
- data/vendored/puppet/lib/puppet/resource/type_collection.rb +263 -0
- data/vendored/puppet/lib/puppet/scheduler.rb +16 -0
- data/vendored/puppet/lib/puppet/scheduler/job.rb +53 -0
- data/vendored/puppet/lib/puppet/scheduler/scheduler.rb +44 -0
- data/vendored/puppet/lib/puppet/scheduler/splay_job.rb +32 -0
- data/vendored/puppet/lib/puppet/scheduler/timer.rb +13 -0
- data/vendored/puppet/lib/puppet/settings.rb +1457 -0
- data/vendored/puppet/lib/puppet/settings/array_setting.rb +17 -0
- data/vendored/puppet/lib/puppet/settings/autosign_setting.rb +22 -0
- data/vendored/puppet/lib/puppet/settings/base_setting.rb +177 -0
- data/vendored/puppet/lib/puppet/settings/boolean_setting.rb +32 -0
- data/vendored/puppet/lib/puppet/settings/certificate_revocation_setting.rb +21 -0
- data/vendored/puppet/lib/puppet/settings/config_file.rb +143 -0
- data/vendored/puppet/lib/puppet/settings/directory_setting.rb +18 -0
- data/vendored/puppet/lib/puppet/settings/duration_setting.rb +32 -0
- data/vendored/puppet/lib/puppet/settings/enum_setting.rb +16 -0
- data/vendored/puppet/lib/puppet/settings/environment_conf.rb +204 -0
- data/vendored/puppet/lib/puppet/settings/errors.rb +11 -0
- data/vendored/puppet/lib/puppet/settings/file_or_directory_setting.rb +40 -0
- data/vendored/puppet/lib/puppet/settings/file_setting.rb +245 -0
- data/vendored/puppet/lib/puppet/settings/ini_file.rb +200 -0
- data/vendored/puppet/lib/puppet/settings/path_setting.rb +8 -0
- data/vendored/puppet/lib/puppet/settings/priority_setting.rb +42 -0
- data/vendored/puppet/lib/puppet/settings/server_list_setting.rb +20 -0
- data/vendored/puppet/lib/puppet/settings/string_setting.rb +9 -0
- data/vendored/puppet/lib/puppet/settings/symbolic_enum_setting.rb +17 -0
- data/vendored/puppet/lib/puppet/settings/terminus_setting.rb +14 -0
- data/vendored/puppet/lib/puppet/settings/ttl_setting.rb +46 -0
- data/vendored/puppet/lib/puppet/settings/value_translator.rb +15 -0
- data/vendored/puppet/lib/puppet/ssl.rb +13 -0
- data/vendored/puppet/lib/puppet/ssl/base.rb +153 -0
- data/vendored/puppet/lib/puppet/ssl/certificate.rb +95 -0
- data/vendored/puppet/lib/puppet/ssl/certificate_authority.rb +553 -0
- data/vendored/puppet/lib/puppet/ssl/certificate_authority/autosign_command.rb +45 -0
- data/vendored/puppet/lib/puppet/ssl/certificate_authority/interface.rb +324 -0
- data/vendored/puppet/lib/puppet/ssl/certificate_factory.rb +219 -0
- data/vendored/puppet/lib/puppet/ssl/certificate_request.rb +327 -0
- data/vendored/puppet/lib/puppet/ssl/certificate_request_attributes.rb +37 -0
- data/vendored/puppet/lib/puppet/ssl/certificate_revocation_list.rb +111 -0
- data/vendored/puppet/lib/puppet/ssl/certificate_signer.rb +27 -0
- data/vendored/puppet/lib/puppet/ssl/configuration.rb +61 -0
- data/vendored/puppet/lib/puppet/ssl/digest.rb +20 -0
- data/vendored/puppet/lib/puppet/ssl/host.rb +400 -0
- data/vendored/puppet/lib/puppet/ssl/inventory.rb +55 -0
- data/vendored/puppet/lib/puppet/ssl/key.rb +63 -0
- data/vendored/puppet/lib/puppet/ssl/oids.rb +187 -0
- data/vendored/puppet/lib/puppet/ssl/validator.rb +60 -0
- data/vendored/puppet/lib/puppet/ssl/validator/default_validator.rb +173 -0
- data/vendored/puppet/lib/puppet/ssl/validator/no_validator.rb +20 -0
- data/vendored/puppet/lib/puppet/status.rb +40 -0
- data/vendored/puppet/lib/puppet/syntax_checkers.rb +3 -0
- data/vendored/puppet/lib/puppet/syntax_checkers/base64.rb +41 -0
- data/vendored/puppet/lib/puppet/syntax_checkers/json.rb +35 -0
- data/vendored/puppet/lib/puppet/test/test_helper.rb +252 -0
- data/vendored/puppet/lib/puppet/transaction.rb +417 -0
- data/vendored/puppet/lib/puppet/transaction/additional_resource_generator.rb +220 -0
- data/vendored/puppet/lib/puppet/transaction/event.rb +144 -0
- data/vendored/puppet/lib/puppet/transaction/event_manager.rb +167 -0
- data/vendored/puppet/lib/puppet/transaction/persistence.rb +84 -0
- data/vendored/puppet/lib/puppet/transaction/report.rb +460 -0
- data/vendored/puppet/lib/puppet/transaction/resource_harness.rb +318 -0
- data/vendored/puppet/lib/puppet/type.rb +2664 -0
- data/vendored/puppet/lib/puppet/type/augeas.rb +211 -0
- data/vendored/puppet/lib/puppet/type/component.rb +88 -0
- data/vendored/puppet/lib/puppet/type/computer.rb +66 -0
- data/vendored/puppet/lib/puppet/type/cron.rb +475 -0
- data/vendored/puppet/lib/puppet/type/exec.rb +622 -0
- data/vendored/puppet/lib/puppet/type/file.rb +1039 -0
- data/vendored/puppet/lib/puppet/type/file/checksum.rb +44 -0
- data/vendored/puppet/lib/puppet/type/file/checksum_value.rb +53 -0
- data/vendored/puppet/lib/puppet/type/file/content.rb +160 -0
- data/vendored/puppet/lib/puppet/type/file/ctime.rb +20 -0
- data/vendored/puppet/lib/puppet/type/file/data_sync.rb +92 -0
- data/vendored/puppet/lib/puppet/type/file/ensure.rb +192 -0
- data/vendored/puppet/lib/puppet/type/file/group.rb +41 -0
- data/vendored/puppet/lib/puppet/type/file/mode.rb +177 -0
- data/vendored/puppet/lib/puppet/type/file/mtime.rb +18 -0
- data/vendored/puppet/lib/puppet/type/file/owner.rb +44 -0
- data/vendored/puppet/lib/puppet/type/file/selcontext.rb +141 -0
- data/vendored/puppet/lib/puppet/type/file/source.rb +356 -0
- data/vendored/puppet/lib/puppet/type/file/target.rb +87 -0
- data/vendored/puppet/lib/puppet/type/file/type.rb +19 -0
- data/vendored/puppet/lib/puppet/type/filebucket.rb +117 -0
- data/vendored/puppet/lib/puppet/type/group.rb +206 -0
- data/vendored/puppet/lib/puppet/type/host.rb +95 -0
- data/vendored/puppet/lib/puppet/type/interface.rb +121 -0
- data/vendored/puppet/lib/puppet/type/k5login.rb +88 -0
- data/vendored/puppet/lib/puppet/type/macauthorization.rb +167 -0
- data/vendored/puppet/lib/puppet/type/mailalias.rb +46 -0
- data/vendored/puppet/lib/puppet/type/maillist.rb +62 -0
- data/vendored/puppet/lib/puppet/type/mcx.rb +98 -0
- data/vendored/puppet/lib/puppet/type/mount.rb +310 -0
- data/vendored/puppet/lib/puppet/type/nagios_command.rb +3 -0
- data/vendored/puppet/lib/puppet/type/nagios_contact.rb +3 -0
- data/vendored/puppet/lib/puppet/type/nagios_contactgroup.rb +3 -0
- data/vendored/puppet/lib/puppet/type/nagios_host.rb +3 -0
- data/vendored/puppet/lib/puppet/type/nagios_hostdependency.rb +3 -0
- data/vendored/puppet/lib/puppet/type/nagios_hostescalation.rb +3 -0
- data/vendored/puppet/lib/puppet/type/nagios_hostextinfo.rb +3 -0
- data/vendored/puppet/lib/puppet/type/nagios_hostgroup.rb +3 -0
- data/vendored/puppet/lib/puppet/type/nagios_service.rb +3 -0
- data/vendored/puppet/lib/puppet/type/nagios_servicedependency.rb +3 -0
- data/vendored/puppet/lib/puppet/type/nagios_serviceescalation.rb +3 -0
- data/vendored/puppet/lib/puppet/type/nagios_serviceextinfo.rb +3 -0
- data/vendored/puppet/lib/puppet/type/nagios_servicegroup.rb +3 -0
- data/vendored/puppet/lib/puppet/type/nagios_timeperiod.rb +3 -0
- data/vendored/puppet/lib/puppet/type/notify.rb +46 -0
- data/vendored/puppet/lib/puppet/type/package.rb +571 -0
- data/vendored/puppet/lib/puppet/type/resources.rb +180 -0
- data/vendored/puppet/lib/puppet/type/router.rb +17 -0
- data/vendored/puppet/lib/puppet/type/schedule.rb +469 -0
- data/vendored/puppet/lib/puppet/type/scheduled_task.rb +183 -0
- data/vendored/puppet/lib/puppet/type/selboolean.rb +26 -0
- data/vendored/puppet/lib/puppet/type/selmodule.rb +59 -0
- data/vendored/puppet/lib/puppet/type/service.rb +258 -0
- data/vendored/puppet/lib/puppet/type/ssh_authorized_key.rb +143 -0
- data/vendored/puppet/lib/puppet/type/sshkey.rb +83 -0
- data/vendored/puppet/lib/puppet/type/stage.rb +27 -0
- data/vendored/puppet/lib/puppet/type/tidy.rb +336 -0
- data/vendored/puppet/lib/puppet/type/user.rb +770 -0
- data/vendored/puppet/lib/puppet/type/vlan.rb +26 -0
- data/vendored/puppet/lib/puppet/type/whit.rb +34 -0
- data/vendored/puppet/lib/puppet/type/yumrepo.rb +409 -0
- data/vendored/puppet/lib/puppet/type/zfs.rb +150 -0
- data/vendored/puppet/lib/puppet/type/zone.rb +382 -0
- data/vendored/puppet/lib/puppet/type/zpool.rb +91 -0
- data/vendored/puppet/lib/puppet/util.rb +705 -0
- data/vendored/puppet/lib/puppet/util/at_fork.rb +35 -0
- data/vendored/puppet/lib/puppet/util/at_fork/noop.rb +18 -0
- data/vendored/puppet/lib/puppet/util/at_fork/solaris.rb +158 -0
- data/vendored/puppet/lib/puppet/util/autoload.rb +226 -0
- data/vendored/puppet/lib/puppet/util/backups.rb +86 -0
- data/vendored/puppet/lib/puppet/util/character_encoding.rb +98 -0
- data/vendored/puppet/lib/puppet/util/checksums.rb +282 -0
- data/vendored/puppet/lib/puppet/util/classgen.rb +228 -0
- data/vendored/puppet/lib/puppet/util/colors.rb +100 -0
- data/vendored/puppet/lib/puppet/util/command_line.rb +185 -0
- data/vendored/puppet/lib/puppet/util/command_line/puppet_option_parser.rb +87 -0
- data/vendored/puppet/lib/puppet/util/command_line/trollop.rb +824 -0
- data/vendored/puppet/lib/puppet/util/constant_inflector.rb +24 -0
- data/vendored/puppet/lib/puppet/util/diff.rb +79 -0
- data/vendored/puppet/lib/puppet/util/docs.rb +128 -0
- data/vendored/puppet/lib/puppet/util/errors.rb +108 -0
- data/vendored/puppet/lib/puppet/util/execution.rb +412 -0
- data/vendored/puppet/lib/puppet/util/execution_stub.rb +26 -0
- data/vendored/puppet/lib/puppet/util/feature.rb +95 -0
- data/vendored/puppet/lib/puppet/util/file_watcher.rb +28 -0
- data/vendored/puppet/lib/puppet/util/fileparsing.rb +377 -0
- data/vendored/puppet/lib/puppet/util/filetype.rb +309 -0
- data/vendored/puppet/lib/puppet/util/http_proxy.rb +197 -0
- data/vendored/puppet/lib/puppet/util/inifile.rb +341 -0
- data/vendored/puppet/lib/puppet/util/instance_loader.rb +81 -0
- data/vendored/puppet/lib/puppet/util/json_lockfile.rb +44 -0
- data/vendored/puppet/lib/puppet/util/ldap.rb +2 -0
- data/vendored/puppet/lib/puppet/util/ldap/connection.rb +71 -0
- data/vendored/puppet/lib/puppet/util/ldap/generator.rb +42 -0
- data/vendored/puppet/lib/puppet/util/ldap/manager.rb +278 -0
- data/vendored/puppet/lib/puppet/util/libuser.conf +15 -0
- data/vendored/puppet/lib/puppet/util/libuser.rb +12 -0
- data/vendored/puppet/lib/puppet/util/limits.rb +12 -0
- data/vendored/puppet/lib/puppet/util/lockfile.rb +66 -0
- data/vendored/puppet/lib/puppet/util/log.rb +423 -0
- data/vendored/puppet/lib/puppet/util/log/destination.rb +49 -0
- data/vendored/puppet/lib/puppet/util/log/destinations.rb +249 -0
- data/vendored/puppet/lib/puppet/util/logging.rb +318 -0
- data/vendored/puppet/lib/puppet/util/metaid.rb +21 -0
- data/vendored/puppet/lib/puppet/util/methodhelper.rb +32 -0
- data/vendored/puppet/lib/puppet/util/metric.rb +64 -0
- data/vendored/puppet/lib/puppet/util/monkey_patches.rb +108 -0
- data/vendored/puppet/lib/puppet/util/multi_match.rb +51 -0
- data/vendored/puppet/lib/puppet/util/nagios_maker.rb +85 -0
- data/vendored/puppet/lib/puppet/util/network_device.rb +17 -0
- data/vendored/puppet/lib/puppet/util/network_device/base.rb +23 -0
- data/vendored/puppet/lib/puppet/util/network_device/cisco.rb +4 -0
- data/vendored/puppet/lib/puppet/util/network_device/cisco/device.rb +285 -0
- data/vendored/puppet/lib/puppet/util/network_device/cisco/facts.rb +72 -0
- data/vendored/puppet/lib/puppet/util/network_device/cisco/interface.rb +94 -0
- data/vendored/puppet/lib/puppet/util/network_device/config.rb +98 -0
- data/vendored/puppet/lib/puppet/util/network_device/ipcalc.rb +68 -0
- data/vendored/puppet/lib/puppet/util/network_device/transport.rb +5 -0
- data/vendored/puppet/lib/puppet/util/network_device/transport/base.rb +26 -0
- data/vendored/puppet/lib/puppet/util/network_device/transport/ssh.rb +126 -0
- data/vendored/puppet/lib/puppet/util/network_device/transport/telnet.rb +47 -0
- data/vendored/puppet/lib/puppet/util/package.rb +31 -0
- data/vendored/puppet/lib/puppet/util/pidlock.rb +62 -0
- data/vendored/puppet/lib/puppet/util/platform.rb +22 -0
- data/vendored/puppet/lib/puppet/util/plist.rb +153 -0
- data/vendored/puppet/lib/puppet/util/posix.rb +137 -0
- data/vendored/puppet/lib/puppet/util/profiler.rb +53 -0
- data/vendored/puppet/lib/puppet/util/profiler/aggregate.rb +85 -0
- data/vendored/puppet/lib/puppet/util/profiler/around_profiler.rb +67 -0
- data/vendored/puppet/lib/puppet/util/profiler/logging.rb +48 -0
- data/vendored/puppet/lib/puppet/util/profiler/object_counts.rb +17 -0
- data/vendored/puppet/lib/puppet/util/profiler/wall_clock.rb +35 -0
- data/vendored/puppet/lib/puppet/util/provider_features.rb +184 -0
- data/vendored/puppet/lib/puppet/util/psych_support.rb +30 -0
- data/vendored/puppet/lib/puppet/util/rdoc.rb +60 -0
- data/vendored/puppet/lib/puppet/util/rdoc/code_objects.rb +294 -0
- data/vendored/puppet/lib/puppet/util/rdoc/generators/puppet_generator.rb +910 -0
- data/vendored/puppet/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +1085 -0
- data/vendored/puppet/lib/puppet/util/rdoc/parser.rb +12 -0
- data/vendored/puppet/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +259 -0
- data/vendored/puppet/lib/puppet/util/rdoc/parser/puppet_parser_rdoc2.rb +14 -0
- data/vendored/puppet/lib/puppet/util/reference.rb +126 -0
- data/vendored/puppet/lib/puppet/util/resource_template.rb +61 -0
- data/vendored/puppet/lib/puppet/util/retry_action.rb +46 -0
- data/vendored/puppet/lib/puppet/util/rubygems.rb +75 -0
- data/vendored/puppet/lib/puppet/util/run_mode.rb +110 -0
- data/vendored/puppet/lib/puppet/util/selinux.rb +264 -0
- data/vendored/puppet/lib/puppet/util/skip_tags.rb +9 -0
- data/vendored/puppet/lib/puppet/util/splayer.rb +18 -0
- data/vendored/puppet/lib/puppet/util/ssl.rb +53 -0
- data/vendored/puppet/lib/puppet/util/storage.rb +89 -0
- data/vendored/puppet/lib/puppet/util/suidmanager.rb +165 -0
- data/vendored/puppet/lib/puppet/util/symbolic_file_mode.rb +144 -0
- data/vendored/puppet/lib/puppet/util/tag_set.rb +27 -0
- data/vendored/puppet/lib/puppet/util/tagging.rb +118 -0
- data/vendored/puppet/lib/puppet/util/terminal.rb +16 -0
- data/vendored/puppet/lib/puppet/util/user_attr.rb +21 -0
- data/vendored/puppet/lib/puppet/util/warnings.rb +33 -0
- data/vendored/puppet/lib/puppet/util/watched_file.rb +37 -0
- data/vendored/puppet/lib/puppet/util/watcher.rb +17 -0
- data/vendored/puppet/lib/puppet/util/watcher/change_watcher.rb +33 -0
- data/vendored/puppet/lib/puppet/util/watcher/periodic_watcher.rb +37 -0
- data/vendored/puppet/lib/puppet/util/watcher/timer.rb +19 -0
- data/vendored/puppet/lib/puppet/util/windows.rb +35 -0
- data/vendored/puppet/lib/puppet/util/windows/access_control_entry.rb +84 -0
- data/vendored/puppet/lib/puppet/util/windows/access_control_list.rb +113 -0
- data/vendored/puppet/lib/puppet/util/windows/adsi.rb +548 -0
- data/vendored/puppet/lib/puppet/util/windows/api_types.rb +282 -0
- data/vendored/puppet/lib/puppet/util/windows/com.rb +224 -0
- data/vendored/puppet/lib/puppet/util/windows/error.rb +83 -0
- data/vendored/puppet/lib/puppet/util/windows/eventlog.rb +192 -0
- data/vendored/puppet/lib/puppet/util/windows/file.rb +488 -0
- data/vendored/puppet/lib/puppet/util/windows/principal.rb +191 -0
- data/vendored/puppet/lib/puppet/util/windows/process.rb +497 -0
- data/vendored/puppet/lib/puppet/util/windows/registry.rb +374 -0
- data/vendored/puppet/lib/puppet/util/windows/root_certs.rb +108 -0
- data/vendored/puppet/lib/puppet/util/windows/security.rb +857 -0
- data/vendored/puppet/lib/puppet/util/windows/security_descriptor.rb +62 -0
- data/vendored/puppet/lib/puppet/util/windows/sid.rb +231 -0
- data/vendored/puppet/lib/puppet/util/windows/string.rb +16 -0
- data/vendored/puppet/lib/puppet/util/windows/taskscheduler.rb +1276 -0
- data/vendored/puppet/lib/puppet/util/windows/user.rb +309 -0
- data/vendored/puppet/lib/puppet/util/yaml.rb +36 -0
- data/vendored/puppet/lib/puppet/vendor.rb +57 -0
- data/vendored/puppet/lib/puppet/vendor/deep_merge/CHANGELOG +45 -0
- data/vendored/puppet/lib/puppet/vendor/deep_merge/Gemfile +3 -0
- data/vendored/puppet/lib/puppet/vendor/deep_merge/LICENSE +21 -0
- data/vendored/puppet/lib/puppet/vendor/deep_merge/PUPPET_README.md +6 -0
- data/vendored/puppet/lib/puppet/vendor/deep_merge/README.md +113 -0
- data/vendored/puppet/lib/puppet/vendor/deep_merge/Rakefile +19 -0
- data/vendored/puppet/lib/puppet/vendor/deep_merge/deep_merge.gemspec +35 -0
- data/vendored/puppet/lib/puppet/vendor/deep_merge/lib/deep_merge.rb +2 -0
- data/vendored/puppet/lib/puppet/vendor/deep_merge/lib/deep_merge/core.rb +210 -0
- data/vendored/puppet/lib/puppet/vendor/deep_merge/lib/deep_merge/deep_merge_hash.rb +28 -0
- data/vendored/puppet/lib/puppet/vendor/deep_merge/lib/deep_merge/rails_compat.rb +27 -0
- data/vendored/puppet/lib/puppet/vendor/deep_merge/test/test_deep_merge.rb +608 -0
- data/vendored/puppet/lib/puppet/vendor/load_deep_merge.rb +1 -0
- data/vendored/puppet/lib/puppet/vendor/load_pathspec.rb +1 -0
- data/vendored/puppet/lib/puppet/vendor/load_semantic.rb +1 -0
- data/vendored/puppet/lib/puppet/vendor/load_semantic_puppet.rb +1 -0
- data/vendored/puppet/lib/puppet/vendor/pathspec/CHANGELOG.md +2 -0
- data/vendored/puppet/lib/puppet/vendor/pathspec/LICENSE +201 -0
- data/vendored/puppet/lib/puppet/vendor/pathspec/PUPPET_README.md +6 -0
- data/vendored/puppet/lib/puppet/vendor/pathspec/README.md +53 -0
- data/vendored/puppet/lib/puppet/vendor/pathspec/lib/pathspec.rb +122 -0
- data/vendored/puppet/lib/puppet/vendor/pathspec/lib/pathspec/gitignorespec.rb +275 -0
- data/vendored/puppet/lib/puppet/vendor/pathspec/lib/pathspec/regexspec.rb +17 -0
- data/vendored/puppet/lib/puppet/vendor/pathspec/lib/pathspec/spec.rb +14 -0
- data/vendored/puppet/lib/puppet/vendor/require_vendored.rb +6 -0
- data/vendored/puppet/lib/puppet/vendor/semantic/lib/semantic.rb +5 -0
- data/vendored/puppet/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +7 -0
- data/vendored/puppet/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency.rb +181 -0
- data/vendored/puppet/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/graph.rb +60 -0
- data/vendored/puppet/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/graph_node.rb +117 -0
- data/vendored/puppet/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/module_release.rb +58 -0
- data/vendored/puppet/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/source.rb +25 -0
- data/vendored/puppet/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/unsatisfiable_graph.rb +31 -0
- data/vendored/puppet/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/gem_version.rb +3 -0
- data/vendored/puppet/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/version.rb +203 -0
- data/vendored/puppet/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/version_range.rb +758 -0
- data/vendored/puppet/lib/puppet/vendor/semantic_puppet/locales/config.yaml +21 -0
- data/vendored/puppet/lib/puppet/version.rb +93 -0
- data/vendored/puppet/lib/puppet_pal.rb +290 -0
- data/vendored/puppet/lib/puppet_x.rb +14 -0
- data/vendored/require_vendored.rb +11 -0
- metadata +1501 -9
@@ -0,0 +1,252 @@
|
|
1
|
+
module Puppet::Pops
|
2
|
+
module Evaluator
|
3
|
+
# Compares the puppet DSL way
|
4
|
+
#
|
5
|
+
# ==Equality
|
6
|
+
# All string vs. numeric equalities check for numeric equality first, then string equality
|
7
|
+
# Arrays are equal to arrays if they have the same length, and each element #equals
|
8
|
+
# Hashes are equal to hashes if they have the same size and keys and values #equals.
|
9
|
+
# All other objects are equal if they are ruby #== equal
|
10
|
+
#
|
11
|
+
class CompareOperator
|
12
|
+
include Utils
|
13
|
+
|
14
|
+
# Provides access to the Puppet 3.x runtime (scope, etc.)
|
15
|
+
# This separation has been made to make it easier to later migrate the evaluator to an improved runtime.
|
16
|
+
#
|
17
|
+
include Runtime3Support
|
18
|
+
|
19
|
+
def initialize
|
20
|
+
@@equals_visitor ||= Visitor.new(self, "equals", 1, 1)
|
21
|
+
@@compare_visitor ||= Visitor.new(self, "cmp", 1, 1)
|
22
|
+
@@match_visitor ||= Visitor.new(self, "match", 2, 2)
|
23
|
+
@@include_visitor ||= Visitor.new(self, "include", 2, 2)
|
24
|
+
end
|
25
|
+
|
26
|
+
def equals (a, b)
|
27
|
+
@@equals_visitor.visit_this_1(self, a, b)
|
28
|
+
end
|
29
|
+
|
30
|
+
# Performs a comparison of a and b, and return > 0 if a is bigger, 0 if equal, and < 0 if b is bigger.
|
31
|
+
# Comparison of String vs. Numeric always compares using numeric.
|
32
|
+
def compare(a, b)
|
33
|
+
@@compare_visitor.visit_this_1(self, a, b)
|
34
|
+
end
|
35
|
+
|
36
|
+
# Performs a match of a and b, and returns true if b matches a
|
37
|
+
def match(a, b, scope)
|
38
|
+
@@match_visitor.visit_this_2(self, b, a, scope)
|
39
|
+
end
|
40
|
+
|
41
|
+
# Answers is b included in a
|
42
|
+
def include?(a, b, scope)
|
43
|
+
@@include_visitor.visit_this_2(self, a, b, scope)
|
44
|
+
end
|
45
|
+
|
46
|
+
protected
|
47
|
+
|
48
|
+
def cmp_String(a, b)
|
49
|
+
return a.casecmp(b) if b.is_a?(String)
|
50
|
+
raise ArgumentError.new(_("A String is not comparable to a non String"))
|
51
|
+
end
|
52
|
+
|
53
|
+
# Equality is case independent.
|
54
|
+
def equals_String(a, b)
|
55
|
+
return false unless b.is_a?(String)
|
56
|
+
a.casecmp(b) == 0
|
57
|
+
end
|
58
|
+
|
59
|
+
def cmp_Numeric(a, b)
|
60
|
+
if b.is_a?(Numeric)
|
61
|
+
a <=> b
|
62
|
+
else
|
63
|
+
raise ArgumentError.new(_("A Numeric is not comparable to non Numeric"))
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def equals_Numeric(a, b)
|
68
|
+
if b.is_a?(Numeric)
|
69
|
+
a == b
|
70
|
+
else
|
71
|
+
false
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def equals_Array(a, b)
|
76
|
+
return false unless b.is_a?(Array) && a.size == b.size
|
77
|
+
a.each_index {|i| return false unless equals(a.slice(i), b.slice(i)) }
|
78
|
+
true
|
79
|
+
end
|
80
|
+
|
81
|
+
def equals_Hash(a, b)
|
82
|
+
return false unless b.is_a?(Hash) && a.size == b.size
|
83
|
+
a.each {|ak, av| return false unless equals(b[ak], av)}
|
84
|
+
true
|
85
|
+
end
|
86
|
+
|
87
|
+
def cmp_Symbol(a, b)
|
88
|
+
if b.is_a?(Symbol)
|
89
|
+
a <=> b
|
90
|
+
else
|
91
|
+
raise ArgumentError.new(_("Symbol not comparable to non Symbol"))
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def cmp_Timespan(a, b)
|
96
|
+
raise ArgumentError.new(_('Timespans are only comparable to Timespans, Integers, and Floats')) unless b.is_a?(Time::Timespan) || b.is_a?(Integer) || b.is_a?(Float)
|
97
|
+
a <=> b
|
98
|
+
end
|
99
|
+
|
100
|
+
def cmp_Timestamp(a, b)
|
101
|
+
raise ArgumentError.new(_('Timestamps are only comparable to Timestamps, Integers, and Floats')) unless b.is_a?(Time::Timestamp) || b.is_a?(Integer) || b.is_a?(Float)
|
102
|
+
a <=> b
|
103
|
+
end
|
104
|
+
|
105
|
+
def cmp_Version(a, b)
|
106
|
+
raise ArgumentError.new(_('Versions not comparable to non Versions')) unless b.is_a?(SemanticPuppet::Version)
|
107
|
+
a <=> b
|
108
|
+
end
|
109
|
+
|
110
|
+
def cmp_Object(a, b)
|
111
|
+
raise ArgumentError.new(_('Only Strings, Numbers, Timespans, Timestamps, and Versions are comparable'))
|
112
|
+
end
|
113
|
+
|
114
|
+
|
115
|
+
def equals_Object(a, b)
|
116
|
+
a == b
|
117
|
+
end
|
118
|
+
|
119
|
+
def equals_NilClass(a, b)
|
120
|
+
# :undef supported in case it is passed from a 3x data structure
|
121
|
+
b.nil? || b == :undef
|
122
|
+
end
|
123
|
+
|
124
|
+
def equals_Symbol(a, b)
|
125
|
+
# :undef supported in case it is passed from a 3x data structure
|
126
|
+
a == b || a == :undef && b.nil?
|
127
|
+
end
|
128
|
+
|
129
|
+
def include_Object(a, b, scope)
|
130
|
+
false
|
131
|
+
end
|
132
|
+
|
133
|
+
def include_String(a, b, scope)
|
134
|
+
case b
|
135
|
+
when String
|
136
|
+
# subsstring search downcased
|
137
|
+
a.downcase.include?(b.downcase)
|
138
|
+
when Regexp
|
139
|
+
matched = a.match(b) # nil, or MatchData
|
140
|
+
set_match_data(matched, scope) # creates ephemeral
|
141
|
+
!!matched # match (convert to boolean)
|
142
|
+
when Numeric
|
143
|
+
# convert string to number, true if ==
|
144
|
+
equals(a, b)
|
145
|
+
else
|
146
|
+
false
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
def include_Binary(a, b, scope)
|
151
|
+
case b
|
152
|
+
when Puppet::Pops::Types::PBinaryType::Binary
|
153
|
+
a.binary_buffer.include?(b.binary_buffer)
|
154
|
+
when String
|
155
|
+
a.binary_buffer.include?(b)
|
156
|
+
when Numeric
|
157
|
+
a.binary_buffer.bytes.include?(b)
|
158
|
+
else
|
159
|
+
false
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
def include_Array(a, b, scope)
|
164
|
+
case b
|
165
|
+
when Regexp
|
166
|
+
matched = nil
|
167
|
+
a.each do |element|
|
168
|
+
next unless element.is_a? String
|
169
|
+
matched = element.match(b) # nil, or MatchData
|
170
|
+
break if matched
|
171
|
+
end
|
172
|
+
# Always set match data, a "not found" should not keep old match data visible
|
173
|
+
set_match_data(matched, scope) # creates ephemeral
|
174
|
+
return !!matched
|
175
|
+
when String, SemanticPuppet::Version
|
176
|
+
a.any? { |element| match(b, element, scope) }
|
177
|
+
when Types::PAnyType
|
178
|
+
a.each {|element| return true if b.instance?(element) }
|
179
|
+
return false
|
180
|
+
else
|
181
|
+
a.each {|element| return true if equals(element, b) }
|
182
|
+
return false
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
def include_Hash(a, b, scope)
|
187
|
+
include?(a.keys, b, scope)
|
188
|
+
end
|
189
|
+
|
190
|
+
def include_VersionRange(a, b, scope)
|
191
|
+
Types::PSemVerRangeType.include?(a, b)
|
192
|
+
end
|
193
|
+
|
194
|
+
# Matches in general by using == operator
|
195
|
+
def match_Object(pattern, a, scope)
|
196
|
+
equals(a, pattern)
|
197
|
+
end
|
198
|
+
|
199
|
+
# Matches only against strings
|
200
|
+
def match_Regexp(regexp, left, scope)
|
201
|
+
return false unless left.is_a? String
|
202
|
+
matched = regexp.match(left)
|
203
|
+
set_match_data(matched, scope) # creates or clears ephemeral
|
204
|
+
!!matched # convert to boolean
|
205
|
+
end
|
206
|
+
|
207
|
+
# Matches against semvers and strings
|
208
|
+
def match_Version(version, left, scope)
|
209
|
+
if left.is_a?(SemanticPuppet::Version)
|
210
|
+
version == left
|
211
|
+
elsif left.is_a? String
|
212
|
+
begin
|
213
|
+
version == SemanticPuppet::Version.parse(left)
|
214
|
+
rescue ArgumentError
|
215
|
+
false
|
216
|
+
end
|
217
|
+
else
|
218
|
+
false
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
# Matches against semvers and strings
|
223
|
+
def match_VersionRange(range, left, scope)
|
224
|
+
Types::PSemVerRangeType.include?(range, left)
|
225
|
+
end
|
226
|
+
|
227
|
+
def match_PAnyType(any_type, left, scope)
|
228
|
+
# right is a type and left is not - check if left is an instance of the given type
|
229
|
+
# (The reverse is not terribly meaningful - computing which of the case options that first produces
|
230
|
+
# an instance of a given type).
|
231
|
+
#
|
232
|
+
any_type.instance?(left)
|
233
|
+
end
|
234
|
+
|
235
|
+
def match_Array(array, left, scope)
|
236
|
+
return false unless left.is_a?(Array)
|
237
|
+
return false unless left.length == array.length
|
238
|
+
array.each_with_index.all? { | pattern, index| match(left[index], pattern, scope) }
|
239
|
+
end
|
240
|
+
|
241
|
+
def match_Hash(hash, left, scope)
|
242
|
+
return false unless left.is_a?(Hash)
|
243
|
+
hash.all? {|x,y| match(left[x], y, scope) }
|
244
|
+
end
|
245
|
+
|
246
|
+
def match_Symbol(symbol, left, scope)
|
247
|
+
return true if symbol == :default
|
248
|
+
equals(left, default, scope)
|
249
|
+
end
|
250
|
+
end
|
251
|
+
end
|
252
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
# Handler of Epp call/evaluation from the epp and inline_epp functions
|
2
|
+
#
|
3
|
+
class Puppet::Pops::Evaluator::EppEvaluator
|
4
|
+
|
5
|
+
def self.inline_epp(scope, epp_source, template_args = nil)
|
6
|
+
unless epp_source.is_a?(String)
|
7
|
+
raise ArgumentError, "inline_epp(): the first argument must be a String with the epp source text, got a #{epp_source.class}"
|
8
|
+
end
|
9
|
+
|
10
|
+
# Parse and validate the source
|
11
|
+
parser = Puppet::Pops::Parser::EvaluatingParser::EvaluatingEppParser.new
|
12
|
+
begin
|
13
|
+
result = parser.parse_string(epp_source, 'inlined-epp-text')
|
14
|
+
rescue Puppet::ParseError => e
|
15
|
+
raise ArgumentError, "inline_epp(): Invalid EPP: #{e.message}"
|
16
|
+
end
|
17
|
+
|
18
|
+
# Evaluate (and check template_args)
|
19
|
+
evaluate(parser, 'inline_epp', scope, false, result, template_args)
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.epp(scope, file, env_name, template_args = nil)
|
23
|
+
unless file.is_a?(String)
|
24
|
+
raise ArgumentError, "epp(): the first argument must be a String with the filename, got a #{file.class}"
|
25
|
+
end
|
26
|
+
|
27
|
+
unless Puppet::FileSystem.exist?(file)
|
28
|
+
unless file =~ /\.epp$/
|
29
|
+
file = file + ".epp"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
scope.debug "Retrieving epp template #{file}"
|
34
|
+
template_file = Puppet::Parser::Files.find_template(file, env_name)
|
35
|
+
if template_file.nil? || !Puppet::FileSystem.exist?(template_file)
|
36
|
+
raise Puppet::ParseError, _("Could not find template '%{file}'") % { file: file }
|
37
|
+
end
|
38
|
+
|
39
|
+
# Parse and validate the source
|
40
|
+
parser = Puppet::Pops::Parser::EvaluatingParser::EvaluatingEppParser.new
|
41
|
+
begin
|
42
|
+
result = parser.parse_file(template_file)
|
43
|
+
rescue Puppet::ParseError => e
|
44
|
+
raise ArgumentError, "epp(): Invalid EPP: #{e.message}"
|
45
|
+
end
|
46
|
+
|
47
|
+
# Evaluate (and check template_args)
|
48
|
+
evaluate(parser, 'epp', scope, true, result, template_args)
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def self.evaluate(parser, func_name, scope, use_global_scope_only, parse_result, template_args)
|
54
|
+
template_args, template_args_set = handle_template_args(func_name, template_args)
|
55
|
+
|
56
|
+
body = parse_result.body
|
57
|
+
unless body.is_a?(Puppet::Pops::Model::LambdaExpression)
|
58
|
+
raise ArgumentError, "#{func_name}(): the parser did not produce a LambdaExpression, got '#{body.class}'"
|
59
|
+
end
|
60
|
+
unless body.body.is_a?(Puppet::Pops::Model::EppExpression)
|
61
|
+
raise ArgumentError, "#{func_name}(): the parser did not produce an EppExpression, got '#{body.body.class}'"
|
62
|
+
end
|
63
|
+
unless parse_result.definitions.empty?
|
64
|
+
raise ArgumentError, "#{func_name}(): The EPP template contains illegal expressions (definitions)"
|
65
|
+
end
|
66
|
+
|
67
|
+
parameters_specified = body.body.parameters_specified
|
68
|
+
if parameters_specified || template_args_set
|
69
|
+
enforce_parameters = parameters_specified
|
70
|
+
else
|
71
|
+
enforce_parameters = true
|
72
|
+
end
|
73
|
+
|
74
|
+
# inline_epp() logic sees all local variables, epp() all global
|
75
|
+
if use_global_scope_only
|
76
|
+
scope.with_global_scope do |global_scope|
|
77
|
+
parser.closure(body, global_scope).call_by_name(template_args, enforce_parameters)
|
78
|
+
end
|
79
|
+
else
|
80
|
+
parser.closure(body, scope).call_by_name(template_args, enforce_parameters)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def self.handle_template_args(func_name, template_args)
|
85
|
+
if template_args.nil?
|
86
|
+
[{}, false]
|
87
|
+
else
|
88
|
+
unless template_args.is_a?(Hash)
|
89
|
+
raise ArgumentError, "#{func_name}(): the template_args must be a Hash, got a #{template_args.class}"
|
90
|
+
end
|
91
|
+
[template_args, true]
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,1258 @@
|
|
1
|
+
require 'puppet/parser/scope'
|
2
|
+
require 'puppet/pops/evaluator/compare_operator'
|
3
|
+
require 'puppet/pops/evaluator/relationship_operator'
|
4
|
+
require 'puppet/pops/evaluator/access_operator'
|
5
|
+
require 'puppet/pops/evaluator/closure'
|
6
|
+
require 'puppet/pops/evaluator/external_syntax_support'
|
7
|
+
require 'puppet/pops/types/iterable'
|
8
|
+
|
9
|
+
module Puppet::Pops
|
10
|
+
module Evaluator
|
11
|
+
# This implementation of {Evaluator} performs evaluation using the puppet 3.x runtime system
|
12
|
+
# in a manner largely compatible with Puppet 3.x, but adds new features and introduces constraints.
|
13
|
+
#
|
14
|
+
# The evaluation uses _polymorphic dispatch_ which works by dispatching to the first found method named after
|
15
|
+
# the class or one of its super-classes. The EvaluatorImpl itself mainly deals with evaluation (it currently
|
16
|
+
# also handles assignment), and it uses a delegation pattern to more specialized handlers of some operators
|
17
|
+
# that in turn use polymorphic dispatch; this to not clutter EvaluatorImpl with too much responsibility).
|
18
|
+
#
|
19
|
+
# Since a pattern is used, only the main entry points are fully documented. The parameters _o_ and _scope_ are
|
20
|
+
# the same in all the polymorphic methods, (the type of the parameter _o_ is reflected in the method's name;
|
21
|
+
# either the actual class, or one of its super classes). The _scope_ parameter is always the scope in which
|
22
|
+
# the evaluation takes place. If nothing else is mentioned, the return is always the result of evaluation.
|
23
|
+
#
|
24
|
+
# See {Visitable} and {Visitor} for more information about
|
25
|
+
# polymorphic calling.
|
26
|
+
#
|
27
|
+
class EvaluatorImpl
|
28
|
+
include Utils
|
29
|
+
|
30
|
+
# Provides access to the Puppet 3.x runtime (scope, etc.)
|
31
|
+
# This separation has been made to make it easier to later migrate the evaluator to an improved runtime.
|
32
|
+
#
|
33
|
+
include Runtime3Support
|
34
|
+
include ExternalSyntaxSupport
|
35
|
+
|
36
|
+
COMMA_SEPARATOR = ', '.freeze
|
37
|
+
|
38
|
+
# Reference to Issues name space makes it easier to refer to issues
|
39
|
+
# (Issues are shared with the validator).
|
40
|
+
#
|
41
|
+
Issues = Issues
|
42
|
+
|
43
|
+
def initialize
|
44
|
+
@@initialized ||= static_initialize
|
45
|
+
|
46
|
+
# Use null migration checker unless given in context
|
47
|
+
@migration_checker = Puppet.lookup(:migration_checker) { Migration::MigrationChecker.singleton }
|
48
|
+
end
|
49
|
+
|
50
|
+
# @api private
|
51
|
+
def static_initialize
|
52
|
+
@@eval_visitor ||= Visitor.new(self, "eval", 1, 1)
|
53
|
+
@@lvalue_visitor ||= Visitor.new(self, "lvalue", 1, 1)
|
54
|
+
@@assign_visitor ||= Visitor.new(self, "assign", 3, 3)
|
55
|
+
@@string_visitor ||= Visitor.new(self, "string", 1, 1)
|
56
|
+
|
57
|
+
@@type_calculator ||= Types::TypeCalculator.singleton
|
58
|
+
|
59
|
+
@@compare_operator ||= CompareOperator.new
|
60
|
+
@@relationship_operator ||= RelationshipOperator.new
|
61
|
+
true
|
62
|
+
end
|
63
|
+
private :static_initialize
|
64
|
+
|
65
|
+
# @api private
|
66
|
+
def type_calculator
|
67
|
+
@@type_calculator
|
68
|
+
end
|
69
|
+
|
70
|
+
# Evaluates the given _target_ object in the given scope.
|
71
|
+
#
|
72
|
+
# @overload evaluate(target, scope)
|
73
|
+
# @param target [Object] evaluation target - see methods on the pattern assign_TYPE for actual supported types.
|
74
|
+
# @param scope [Object] the runtime specific scope class where evaluation should take place
|
75
|
+
# @return [Object] the result of the evaluation
|
76
|
+
#
|
77
|
+
# @api public
|
78
|
+
#
|
79
|
+
def evaluate(target, scope)
|
80
|
+
begin
|
81
|
+
@@eval_visitor.visit_this_1(self, target, scope)
|
82
|
+
|
83
|
+
rescue SemanticError => e
|
84
|
+
# A raised issue may not know the semantic target, use errors call stack, but fill in the
|
85
|
+
# rest from a supplied semantic object, or the target instruction if there is not semantic
|
86
|
+
# object.
|
87
|
+
#
|
88
|
+
fail(e.issue, e.semantic || target, e.options, e)
|
89
|
+
|
90
|
+
rescue Puppet::PreformattedError => e
|
91
|
+
# Already formatted with location information, and with the wanted call stack.
|
92
|
+
# Note this is currently a specialized ParseError, so rescue-order is important
|
93
|
+
#
|
94
|
+
raise e
|
95
|
+
|
96
|
+
rescue Puppet::ParseError => e
|
97
|
+
# ParseError may be raised in ruby code without knowing the location
|
98
|
+
# in puppet code.
|
99
|
+
# Accept a ParseError that has file or line information available
|
100
|
+
# as an error that should be used verbatim. (Tests typically run without
|
101
|
+
# setting a file name).
|
102
|
+
# ParseError can supply an original - it is impossible to determine which
|
103
|
+
# call stack that should be propagated, using the ParseError's backtrace.
|
104
|
+
#
|
105
|
+
if e.file || e.line
|
106
|
+
raise e
|
107
|
+
else
|
108
|
+
# Since it had no location information, treat it as user intended a general purpose
|
109
|
+
# error. Pass on its call stack.
|
110
|
+
fail(Issues::RUNTIME_ERROR, target, {:detail => e.message}, e)
|
111
|
+
end
|
112
|
+
|
113
|
+
|
114
|
+
rescue Puppet::Error => e
|
115
|
+
# PuppetError has the ability to wrap an exception, if so, use the wrapped exception's
|
116
|
+
# call stack instead
|
117
|
+
fail(Issues::RUNTIME_ERROR, target, {:detail => e.message}, e.original || e)
|
118
|
+
|
119
|
+
rescue StopIteration => e
|
120
|
+
# Ensure these are not rescued as StandardError
|
121
|
+
raise e
|
122
|
+
|
123
|
+
rescue StandardError => e
|
124
|
+
# All other errors, use its message and call stack
|
125
|
+
fail(Issues::RUNTIME_ERROR, target, {:detail => e.message}, e)
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
# Assigns the given _value_ to the given _target_. The additional argument _o_ is the instruction that
|
130
|
+
# produced the target/value tuple and it is used to set the origin of the result.
|
131
|
+
#
|
132
|
+
# @param target [Object] assignment target - see methods on the pattern assign_TYPE for actual supported types.
|
133
|
+
# @param value [Object] the value to assign to `target`
|
134
|
+
# @param o [Model::PopsObject] originating instruction
|
135
|
+
# @param scope [Object] the runtime specific scope where evaluation should take place
|
136
|
+
#
|
137
|
+
# @api private
|
138
|
+
#
|
139
|
+
def assign(target, value, o, scope)
|
140
|
+
@@assign_visitor.visit_this_3(self, target, value, o, scope)
|
141
|
+
end
|
142
|
+
|
143
|
+
# Computes a value that can be used as the LHS in an assignment.
|
144
|
+
# @param o [Object] the expression to evaluate as a left (assignable) entity
|
145
|
+
# @param scope [Object] the runtime specific scope where evaluation should take place
|
146
|
+
#
|
147
|
+
# @api private
|
148
|
+
#
|
149
|
+
def lvalue(o, scope)
|
150
|
+
@@lvalue_visitor.visit_this_1(self, o, scope)
|
151
|
+
end
|
152
|
+
|
153
|
+
# Produces a String representation of the given object _o_ as used in interpolation.
|
154
|
+
# @param o [Object] the expression of which a string representation is wanted
|
155
|
+
# @param scope [Object] the runtime specific scope where evaluation should take place
|
156
|
+
#
|
157
|
+
# @api public
|
158
|
+
#
|
159
|
+
def string(o, scope)
|
160
|
+
@@string_visitor.visit_this_1(self, o, scope)
|
161
|
+
end
|
162
|
+
|
163
|
+
# Evaluate a BlockExpression in a new scope with variables bound to the
|
164
|
+
# given values.
|
165
|
+
#
|
166
|
+
# @param scope [Puppet::Parser::Scope] the parent scope
|
167
|
+
# @param variable_bindings [Hash{String => Object}] the variable names and values to bind (names are keys, bound values are values)
|
168
|
+
# @param block [Model::BlockExpression] the sequence of expressions to evaluate in the new scope
|
169
|
+
#
|
170
|
+
# @api private
|
171
|
+
#
|
172
|
+
def evaluate_block_with_bindings(scope, variable_bindings, block_expr)
|
173
|
+
scope.with_guarded_scope do
|
174
|
+
# change to create local scope_from - cannot give it file and line -
|
175
|
+
# that is the place of the call, not "here"
|
176
|
+
create_local_scope_from(variable_bindings, scope)
|
177
|
+
evaluate(block_expr, scope)
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
protected
|
182
|
+
|
183
|
+
def lvalue_VariableExpression(o, scope)
|
184
|
+
# evaluate the name
|
185
|
+
evaluate(o.expr, scope)
|
186
|
+
end
|
187
|
+
|
188
|
+
# Catches all illegal lvalues
|
189
|
+
#
|
190
|
+
def lvalue_Object(o, scope)
|
191
|
+
fail(Issues::ILLEGAL_ASSIGNMENT, o)
|
192
|
+
end
|
193
|
+
|
194
|
+
# An array is assignable if all entries are lvalues
|
195
|
+
def lvalue_LiteralList(o, scope)
|
196
|
+
o.values.map {|x| lvalue(x, scope) }
|
197
|
+
end
|
198
|
+
|
199
|
+
# Assign value to named variable.
|
200
|
+
# The '$' sign is never part of the name.
|
201
|
+
# @example In Puppet DSL
|
202
|
+
# $name = value
|
203
|
+
# @param name [String] name of variable without $
|
204
|
+
# @param value [Object] value to assign to the variable
|
205
|
+
# @param o [Model::PopsObject] originating instruction
|
206
|
+
# @param scope [Object] the runtime specific scope where evaluation should take place
|
207
|
+
# @return [value<Object>]
|
208
|
+
#
|
209
|
+
def assign_String(name, value, o, scope)
|
210
|
+
if name =~ /::/
|
211
|
+
fail(Issues::CROSS_SCOPE_ASSIGNMENT, o.left_expr, {:name => name})
|
212
|
+
end
|
213
|
+
set_variable(name, value, o, scope)
|
214
|
+
value
|
215
|
+
end
|
216
|
+
|
217
|
+
def assign_Numeric(n, value, o, scope)
|
218
|
+
fail(Issues::ILLEGAL_NUMERIC_ASSIGNMENT, o.left_expr, {:varname => n.to_s})
|
219
|
+
end
|
220
|
+
|
221
|
+
# Catches all illegal assignment (e.g. 1 = 2, {'a'=>1} = 2, etc)
|
222
|
+
#
|
223
|
+
def assign_Object(name, value, o, scope)
|
224
|
+
fail(Issues::ILLEGAL_ASSIGNMENT, o)
|
225
|
+
end
|
226
|
+
|
227
|
+
def assign_Array(lvalues, values, o, scope)
|
228
|
+
if values.is_a?(Hash)
|
229
|
+
lvalues.map do |lval|
|
230
|
+
assign(lval,
|
231
|
+
values.fetch(lval) {|k| fail(Issues::MISSING_MULTI_ASSIGNMENT_KEY, o, :key =>k)},
|
232
|
+
o, scope)
|
233
|
+
end
|
234
|
+
elsif values.is_a?(Puppet::Pops::Types::PClassType)
|
235
|
+
if Puppet[:tasks]
|
236
|
+
fail(Issues::CATALOG_OPERATION_NOT_SUPPORTED_WHEN_SCRIPTING, o, {:operation => _('multi var assignment from class')})
|
237
|
+
end
|
238
|
+
# assign variables from class variables
|
239
|
+
# lookup class resource and return one or more parameter values
|
240
|
+
# TODO: behavior when class_name is nil
|
241
|
+
resource = find_resource(scope, 'class', values.class_name)
|
242
|
+
if resource
|
243
|
+
base_name = "#{values.class_name.downcase}::"
|
244
|
+
idx = -1
|
245
|
+
result = lvalues.map do |lval|
|
246
|
+
idx += 1
|
247
|
+
varname = "#{base_name}#{lval}"
|
248
|
+
if variable_exists?(varname, scope)
|
249
|
+
result = get_variable_value(varname, o, scope)
|
250
|
+
assign(lval, result, o, scope)
|
251
|
+
else
|
252
|
+
fail(Puppet::Pops::Issues::MISSING_MULTI_ASSIGNMENT_VARIABLE, o.left_expr.values[idx], {:name => varname})
|
253
|
+
end
|
254
|
+
end
|
255
|
+
else
|
256
|
+
fail(Issues::UNKNOWN_RESOURCE, o.right_expr, {:type_name => 'Class', :title => values.class_name})
|
257
|
+
end
|
258
|
+
|
259
|
+
else
|
260
|
+
values = [values] unless values.is_a?(Array)
|
261
|
+
if values.size != lvalues.size
|
262
|
+
fail(Issues::ILLEGAL_MULTI_ASSIGNMENT_SIZE, o, :expected =>lvalues.size, :actual => values.size)
|
263
|
+
end
|
264
|
+
lvalues.zip(values).map { |lval, val| assign(lval, val, o, scope) }
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
268
|
+
def eval_Factory(o, scope)
|
269
|
+
evaluate(o.model, scope)
|
270
|
+
end
|
271
|
+
|
272
|
+
# Evaluates any object not evaluated to something else to itself.
|
273
|
+
def eval_Object o, scope
|
274
|
+
o
|
275
|
+
end
|
276
|
+
|
277
|
+
# Allows nil to be used as a Nop, Evaluates to nil
|
278
|
+
def eval_NilClass(o, scope)
|
279
|
+
nil
|
280
|
+
end
|
281
|
+
|
282
|
+
# Evaluates Nop to nil.
|
283
|
+
def eval_Nop(o, scope)
|
284
|
+
nil
|
285
|
+
end
|
286
|
+
|
287
|
+
# Captures all LiteralValues not handled elsewhere.
|
288
|
+
#
|
289
|
+
def eval_LiteralValue(o, scope)
|
290
|
+
o.value
|
291
|
+
end
|
292
|
+
|
293
|
+
# Reserved Words fail to evaluate
|
294
|
+
#
|
295
|
+
def eval_ReservedWord(o, scope)
|
296
|
+
if !o.future
|
297
|
+
fail(Issues::RESERVED_WORD, o, {:word => o.word})
|
298
|
+
else
|
299
|
+
o.word
|
300
|
+
end
|
301
|
+
end
|
302
|
+
|
303
|
+
def eval_LiteralDefault(o, scope)
|
304
|
+
:default
|
305
|
+
end
|
306
|
+
|
307
|
+
def eval_LiteralUndef(o, scope)
|
308
|
+
nil
|
309
|
+
end
|
310
|
+
|
311
|
+
# A QualifiedReference (i.e. a capitalized qualified name such as Foo, or Foo::Bar) evaluates to a PTypeType
|
312
|
+
#
|
313
|
+
def eval_QualifiedReference(o, scope)
|
314
|
+
type = Types::TypeParser.singleton.interpret(o)
|
315
|
+
fail(Issues::UNKNOWN_RESOURCE_TYPE, o, {:type_name => type.type_string }) if type.is_a?(Types::PTypeReferenceType)
|
316
|
+
type
|
317
|
+
end
|
318
|
+
|
319
|
+
def eval_NotExpression(o, scope)
|
320
|
+
! is_true?(evaluate(o.expr, scope), o.expr)
|
321
|
+
end
|
322
|
+
|
323
|
+
def eval_UnaryMinusExpression(o, scope)
|
324
|
+
- coerce_numeric(evaluate(o.expr, scope), o, scope)
|
325
|
+
end
|
326
|
+
|
327
|
+
def eval_UnfoldExpression(o, scope)
|
328
|
+
candidate = evaluate(o.expr, scope)
|
329
|
+
case candidate
|
330
|
+
when nil
|
331
|
+
[]
|
332
|
+
when Array
|
333
|
+
candidate
|
334
|
+
when Hash
|
335
|
+
candidate.to_a
|
336
|
+
when Puppet::Pops::Types::Iterator
|
337
|
+
candidate.to_a
|
338
|
+
else
|
339
|
+
# turns anything else into an array (so result can be unfolded)
|
340
|
+
[candidate]
|
341
|
+
end
|
342
|
+
end
|
343
|
+
|
344
|
+
# Abstract evaluation, returns array [left, right] with the evaluated result of left_expr and
|
345
|
+
# right_expr
|
346
|
+
# @return <Array<Object, Object>> array with result of evaluating left and right expressions
|
347
|
+
#
|
348
|
+
def eval_BinaryExpression o, scope
|
349
|
+
[ evaluate(o.left_expr, scope), evaluate(o.right_expr, scope) ]
|
350
|
+
end
|
351
|
+
|
352
|
+
# Evaluates assignment with operators =, +=, -= and
|
353
|
+
#
|
354
|
+
# @example Puppet DSL
|
355
|
+
# $a = 1
|
356
|
+
# $a += 1
|
357
|
+
# $a -= 1
|
358
|
+
#
|
359
|
+
def eval_AssignmentExpression(o, scope)
|
360
|
+
name = lvalue(o.left_expr, scope)
|
361
|
+
value = evaluate(o.right_expr, scope)
|
362
|
+
|
363
|
+
if o.operator == '='
|
364
|
+
assign(name, value, o, scope)
|
365
|
+
else
|
366
|
+
fail(Issues::UNSUPPORTED_OPERATOR, o, {:operator => o.operator})
|
367
|
+
end
|
368
|
+
value
|
369
|
+
end
|
370
|
+
|
371
|
+
ARITHMETIC_OPERATORS = ['+', '-', '*', '/', '%', '<<', '>>'].freeze
|
372
|
+
COLLECTION_OPERATORS = ['+', '-', '<<'].freeze
|
373
|
+
|
374
|
+
# Handles binary expression where lhs and rhs are array/hash or numeric and operator is +, - , *, % / << >>
|
375
|
+
#
|
376
|
+
def eval_ArithmeticExpression(o, scope)
|
377
|
+
left = evaluate(o.left_expr, scope)
|
378
|
+
right = evaluate(o.right_expr, scope)
|
379
|
+
|
380
|
+
begin
|
381
|
+
result = calculate(left, right, o, scope)
|
382
|
+
rescue ArgumentError => e
|
383
|
+
fail(Issues::RUNTIME_ERROR, o, {:detail => e.message}, e)
|
384
|
+
end
|
385
|
+
result
|
386
|
+
end
|
387
|
+
|
388
|
+
|
389
|
+
# Handles binary expression where lhs and rhs are array/hash or numeric and operator is +, - , *, % / << >>
|
390
|
+
#
|
391
|
+
def calculate(left, right, bin_expr, scope)
|
392
|
+
operator = bin_expr.operator
|
393
|
+
unless ARITHMETIC_OPERATORS.include?(operator)
|
394
|
+
fail(Issues::UNSUPPORTED_OPERATOR, bin_expr, {:operator => operator})
|
395
|
+
end
|
396
|
+
|
397
|
+
left_o = bin_expr.left_expr
|
398
|
+
if (left.is_a?(Array) || left.is_a?(Hash)) && COLLECTION_OPERATORS.include?(operator)
|
399
|
+
# Handle operation on collections
|
400
|
+
case operator
|
401
|
+
when '+'
|
402
|
+
concatenate(left, right)
|
403
|
+
when '-'
|
404
|
+
delete(left, right)
|
405
|
+
when '<<'
|
406
|
+
unless left.is_a?(Array)
|
407
|
+
fail(Issues::OPERATOR_NOT_APPLICABLE, left_o, {:operator => operator, :left_value => left})
|
408
|
+
end
|
409
|
+
left + [right]
|
410
|
+
end
|
411
|
+
else
|
412
|
+
# Handle operation on numeric
|
413
|
+
left = coerce_numeric(left, left_o, scope)
|
414
|
+
right = coerce_numeric(right, bin_expr.right_expr, scope)
|
415
|
+
begin
|
416
|
+
if operator == '%' && (left.is_a?(Float) || right.is_a?(Float))
|
417
|
+
# Deny users the fun of seeing severe rounding errors and confusing results
|
418
|
+
fail(Issues::OPERATOR_NOT_APPLICABLE, left_o, {:operator => operator, :left_value => left}) if left.is_a?(Float)
|
419
|
+
fail(Issues::OPERATOR_NOT_APPLICABLE_WHEN, left_o, {:operator => operator, :left_value => left, :right_value => right})
|
420
|
+
end
|
421
|
+
if right.is_a?(Time::TimeData) && !left.is_a?(Time::TimeData)
|
422
|
+
if operator == '+' || operator == '*' && right.is_a?(Time::Timespan)
|
423
|
+
# Switch places. Let the TimeData do the arithmetic
|
424
|
+
x = left
|
425
|
+
left = right
|
426
|
+
right = x
|
427
|
+
elsif operator == '-' && right.is_a?(Time::Timespan)
|
428
|
+
left = Time::Timespan.new((left * Time::NSECS_PER_SEC).to_i)
|
429
|
+
else
|
430
|
+
fail(Issues::OPERATOR_NOT_APPLICABLE_WHEN, left_o, {:operator => operator, :left_value => left, :right_value => right})
|
431
|
+
end
|
432
|
+
end
|
433
|
+
result = left.send(operator, right)
|
434
|
+
rescue NoMethodError => e
|
435
|
+
fail(Issues::OPERATOR_NOT_APPLICABLE, left_o, {:operator => operator, :left_value => left})
|
436
|
+
rescue ZeroDivisionError => e
|
437
|
+
fail(Issues::DIV_BY_ZERO, bin_expr.right_expr)
|
438
|
+
end
|
439
|
+
case result
|
440
|
+
when Float
|
441
|
+
if result == Float::INFINITY || result == -Float::INFINITY
|
442
|
+
fail(Issues::RESULT_IS_INFINITY, left_o, {:operator => operator})
|
443
|
+
end
|
444
|
+
when Integer
|
445
|
+
if result < MIN_INTEGER || result > MAX_INTEGER
|
446
|
+
fail(Issues::NUMERIC_OVERFLOW, bin_expr, {:value => result})
|
447
|
+
end
|
448
|
+
end
|
449
|
+
result
|
450
|
+
end
|
451
|
+
end
|
452
|
+
|
453
|
+
def eval_EppExpression(o, scope)
|
454
|
+
scope["@epp"] = []
|
455
|
+
evaluate(o.body, scope)
|
456
|
+
result = scope["@epp"].join
|
457
|
+
result
|
458
|
+
end
|
459
|
+
|
460
|
+
def eval_RenderStringExpression(o, scope)
|
461
|
+
scope["@epp"] << o.value.dup
|
462
|
+
nil
|
463
|
+
end
|
464
|
+
|
465
|
+
def eval_RenderExpression(o, scope)
|
466
|
+
scope["@epp"] << string(evaluate(o.expr, scope), scope)
|
467
|
+
nil
|
468
|
+
end
|
469
|
+
|
470
|
+
# Evaluates Puppet DSL ->, ~>, <-, and <~
|
471
|
+
def eval_RelationshipExpression(o, scope)
|
472
|
+
# First level evaluation, reduction to basic data types or puppet types, the relationship operator then translates this
|
473
|
+
# to the final set of references (turning strings into references, which can not naturally be done by the main evaluator since
|
474
|
+
# all strings should not be turned into references.
|
475
|
+
#
|
476
|
+
real = eval_BinaryExpression(o, scope)
|
477
|
+
@@relationship_operator.evaluate(real, o, scope)
|
478
|
+
end
|
479
|
+
|
480
|
+
# Evaluates x[key, key, ...]
|
481
|
+
#
|
482
|
+
def eval_AccessExpression(o, scope)
|
483
|
+
left = evaluate(o.left_expr, scope)
|
484
|
+
keys = o.keys || []
|
485
|
+
if left.is_a?(Types::PClassType)
|
486
|
+
# Evaluate qualified references without errors no undefined types
|
487
|
+
keys = keys.map {|key| key.is_a?(Model::QualifiedReference) ? Types::TypeParser.singleton.interpret(key) : evaluate(key, scope) }
|
488
|
+
else
|
489
|
+
keys = keys.map {|key| evaluate(key, scope) }
|
490
|
+
# Resource[File] becomes File
|
491
|
+
return keys[0] if Types::PResourceType::DEFAULT == left && keys.size == 1 && keys[0].is_a?(Types::PResourceType)
|
492
|
+
end
|
493
|
+
AccessOperator.new(o).access(left, scope, *keys)
|
494
|
+
end
|
495
|
+
|
496
|
+
# Evaluates <, <=, >, >=, and ==
|
497
|
+
#
|
498
|
+
def eval_ComparisonExpression o, scope
|
499
|
+
left = evaluate(o.left_expr, scope)
|
500
|
+
right = evaluate(o.right_expr, scope)
|
501
|
+
|
502
|
+
begin
|
503
|
+
# Left is a type
|
504
|
+
if left.is_a?(Types::PAnyType)
|
505
|
+
case o.operator
|
506
|
+
when '=='
|
507
|
+
@@type_calculator.equals(left,right)
|
508
|
+
|
509
|
+
when '!='
|
510
|
+
!@@type_calculator.equals(left,right)
|
511
|
+
|
512
|
+
when '<'
|
513
|
+
# left can be assigned to right, but they are not equal
|
514
|
+
@@type_calculator.assignable?(right, left) && ! @@type_calculator.equals(left,right)
|
515
|
+
when '<='
|
516
|
+
# left can be assigned to right
|
517
|
+
@@type_calculator.assignable?(right, left)
|
518
|
+
when '>'
|
519
|
+
# right can be assigned to left, but they are not equal
|
520
|
+
@@type_calculator.assignable?(left,right) && ! @@type_calculator.equals(left,right)
|
521
|
+
when '>='
|
522
|
+
# right can be assigned to left
|
523
|
+
@@type_calculator.assignable?(left, right)
|
524
|
+
else
|
525
|
+
fail(Issues::UNSUPPORTED_OPERATOR, o, {:operator => o.operator})
|
526
|
+
end
|
527
|
+
else
|
528
|
+
case o.operator
|
529
|
+
when '=='
|
530
|
+
@@compare_operator.equals(left,right)
|
531
|
+
when '!='
|
532
|
+
! @@compare_operator.equals(left,right)
|
533
|
+
when '<'
|
534
|
+
@@compare_operator.compare(left,right) < 0
|
535
|
+
when '<='
|
536
|
+
@@compare_operator.compare(left,right) <= 0
|
537
|
+
when '>'
|
538
|
+
@@compare_operator.compare(left,right) > 0
|
539
|
+
when '>='
|
540
|
+
@@compare_operator.compare(left,right) >= 0
|
541
|
+
else
|
542
|
+
fail(Issues::UNSUPPORTED_OPERATOR, o, {:operator => o.operator})
|
543
|
+
end
|
544
|
+
end
|
545
|
+
rescue ArgumentError => e
|
546
|
+
fail(Issues::COMPARISON_NOT_POSSIBLE, o, {
|
547
|
+
:operator => o.operator,
|
548
|
+
:left_value => left,
|
549
|
+
:right_value => right,
|
550
|
+
:detail => e.message}, e)
|
551
|
+
end
|
552
|
+
end
|
553
|
+
|
554
|
+
# Evaluates matching expressions with type, string or regexp rhs expression.
|
555
|
+
# If RHS is a type, the =~ matches compatible (instance? of) type.
|
556
|
+
#
|
557
|
+
# @example
|
558
|
+
# x =~ /abc.*/
|
559
|
+
# @example
|
560
|
+
# x =~ "abc.*/"
|
561
|
+
# @example
|
562
|
+
# y = "abc"
|
563
|
+
# x =~ "${y}.*"
|
564
|
+
# @example
|
565
|
+
# [1,2,3] =~ Array[Integer[1,10]]
|
566
|
+
#
|
567
|
+
# Note that a string is not instance? of Regexp, only Regular expressions are.
|
568
|
+
# The Pattern type should instead be used as it is specified as subtype of String.
|
569
|
+
#
|
570
|
+
# @return [Boolean] if a match was made or not. Also sets $0..$n to matchdata in current scope.
|
571
|
+
#
|
572
|
+
def eval_MatchExpression o, scope
|
573
|
+
left = evaluate(o.left_expr, scope)
|
574
|
+
pattern = evaluate(o.right_expr, scope)
|
575
|
+
|
576
|
+
# matches RHS types as instance of for all types except a parameterized Regexp[R]
|
577
|
+
if pattern.is_a?(Types::PAnyType)
|
578
|
+
# evaluate as instance? of type check
|
579
|
+
matched = pattern.instance?(left)
|
580
|
+
# convert match result to Boolean true, or false
|
581
|
+
return o.operator == '=~' ? !!matched : !matched
|
582
|
+
end
|
583
|
+
|
584
|
+
if pattern.is_a?(SemanticPuppet::VersionRange)
|
585
|
+
# evaluate if range includes version
|
586
|
+
matched = Types::PSemVerRangeType.include?(pattern, left)
|
587
|
+
return o.operator == '=~' ? matched : !matched
|
588
|
+
end
|
589
|
+
|
590
|
+
begin
|
591
|
+
pattern = Regexp.new(pattern) unless pattern.is_a?(Regexp)
|
592
|
+
rescue StandardError => e
|
593
|
+
fail(Issues::MATCH_NOT_REGEXP, o.right_expr, {:detail => e.message}, e)
|
594
|
+
end
|
595
|
+
unless left.is_a?(String)
|
596
|
+
fail(Issues::MATCH_NOT_STRING, o.left_expr, {:left_value => left})
|
597
|
+
end
|
598
|
+
|
599
|
+
matched = pattern.match(left) # nil, or MatchData
|
600
|
+
set_match_data(matched,scope) # creates ephemeral
|
601
|
+
|
602
|
+
# convert match result to Boolean true, or false
|
603
|
+
o.operator == '=~' ? !!matched : !matched
|
604
|
+
end
|
605
|
+
|
606
|
+
# Evaluates Puppet DSL `in` expression
|
607
|
+
#
|
608
|
+
def eval_InExpression o, scope
|
609
|
+
left = evaluate(o.left_expr, scope)
|
610
|
+
right = evaluate(o.right_expr, scope)
|
611
|
+
@@compare_operator.include?(right, left, scope)
|
612
|
+
end
|
613
|
+
|
614
|
+
# @example
|
615
|
+
# $a and $b
|
616
|
+
# b is only evaluated if a is true
|
617
|
+
#
|
618
|
+
def eval_AndExpression o, scope
|
619
|
+
is_true?(evaluate(o.left_expr, scope), o.left_expr) ? is_true?(evaluate(o.right_expr, scope), o.right_expr) : false
|
620
|
+
end
|
621
|
+
|
622
|
+
# @example
|
623
|
+
# a or b
|
624
|
+
# b is only evaluated if a is false
|
625
|
+
#
|
626
|
+
def eval_OrExpression o, scope
|
627
|
+
is_true?(evaluate(o.left_expr, scope), o.left_expr) ? true : is_true?(evaluate(o.right_expr, scope), o.right_expr)
|
628
|
+
end
|
629
|
+
|
630
|
+
# Evaluates each entry of the literal list and creates a new Array
|
631
|
+
# Supports unfolding of entries
|
632
|
+
# @return [Array] with the evaluated content
|
633
|
+
#
|
634
|
+
def eval_LiteralList o, scope
|
635
|
+
unfold([], o.values, scope)
|
636
|
+
end
|
637
|
+
|
638
|
+
# Evaluates each entry of the literal hash and creates a new Hash.
|
639
|
+
# @return [Hash] with the evaluated content
|
640
|
+
#
|
641
|
+
def eval_LiteralHash o, scope
|
642
|
+
# optimized
|
643
|
+
o.entries.reduce({}) {|h,entry| h[evaluate(entry.key, scope)] = evaluate(entry.value, scope); h }
|
644
|
+
end
|
645
|
+
|
646
|
+
# Evaluates all statements and produces the last evaluated value
|
647
|
+
#
|
648
|
+
def eval_BlockExpression o, scope
|
649
|
+
o.statements.reduce(nil) {|memo, s| evaluate(s, scope)}
|
650
|
+
end
|
651
|
+
|
652
|
+
# Performs optimized search over case option values, lazily evaluating each
|
653
|
+
# until there is a match. If no match is found, the case expression's default expression
|
654
|
+
# is evaluated (it may be nil or Nop if there is no default, thus producing nil).
|
655
|
+
# If an option matches, the result of evaluating that option is returned.
|
656
|
+
# @return [Object, nil] what a matched option returns, or nil if nothing matched.
|
657
|
+
#
|
658
|
+
def eval_CaseExpression(o, scope)
|
659
|
+
# memo scope level before evaluating test - don't want a match in the case test to leak $n match vars
|
660
|
+
# to expressions after the case expression.
|
661
|
+
#
|
662
|
+
scope.with_guarded_scope do
|
663
|
+
test = evaluate(o.test, scope)
|
664
|
+
|
665
|
+
result = nil
|
666
|
+
the_default = nil
|
667
|
+
if o.options.find do |co|
|
668
|
+
# the first case option that matches
|
669
|
+
if co.values.find do |c|
|
670
|
+
c = unwind_parentheses(c)
|
671
|
+
case c
|
672
|
+
when Model::LiteralDefault
|
673
|
+
the_default = co.then_expr
|
674
|
+
next false
|
675
|
+
when Model::UnfoldExpression
|
676
|
+
# not ideal for error reporting, since it is not known which unfolded result
|
677
|
+
# that caused an error - the entire unfold expression is blamed (i.e. the var c, passed to is_match?)
|
678
|
+
evaluate(c, scope).any? {|v| is_match?(test, v, c, co, scope) }
|
679
|
+
else
|
680
|
+
is_match?(test, evaluate(c, scope), c, co, scope)
|
681
|
+
end
|
682
|
+
end
|
683
|
+
result = evaluate(co.then_expr, scope)
|
684
|
+
true # the option was picked
|
685
|
+
end
|
686
|
+
end
|
687
|
+
result # an option was picked, and produced a result
|
688
|
+
else
|
689
|
+
evaluate(the_default, scope) # evaluate the default (should be a nop/nil) if there is no default).
|
690
|
+
end
|
691
|
+
end
|
692
|
+
end
|
693
|
+
|
694
|
+
# Evaluates a CollectExpression by creating a collector transformer. The transformer
|
695
|
+
# will evaulate the collection, create the appropriate collector, and hand it off
|
696
|
+
# to the compiler to collect the resources specified by the query.
|
697
|
+
#
|
698
|
+
def eval_CollectExpression o, scope
|
699
|
+
if o.query.is_a?(Model::ExportedQuery)
|
700
|
+
optionally_fail(Issues::RT_NO_STORECONFIGS, o);
|
701
|
+
end
|
702
|
+
CollectorTransformer.new().transform(o,scope)
|
703
|
+
end
|
704
|
+
|
705
|
+
def eval_ParenthesizedExpression(o, scope)
|
706
|
+
evaluate(o.expr, scope)
|
707
|
+
end
|
708
|
+
|
709
|
+
# This evaluates classes, nodes and resource type definitions to nil, since 3x:
|
710
|
+
# instantiates them, and evaluates their parameters and body. This is achieved by
|
711
|
+
# providing bridge AST classes in Puppet::Parser::AST::PopsBridge that bridges a
|
712
|
+
# Pops Program and a Pops Expression.
|
713
|
+
#
|
714
|
+
# Since all Definitions are handled "out of band", they are treated as a no-op when
|
715
|
+
# evaluated.
|
716
|
+
#
|
717
|
+
def eval_Definition(o, scope)
|
718
|
+
nil
|
719
|
+
end
|
720
|
+
|
721
|
+
def eval_Program(o, scope)
|
722
|
+
begin
|
723
|
+
file = o.locator.file
|
724
|
+
line = 0
|
725
|
+
# Add stack frame for "top scope" logic. See Puppet::Pops::PuppetStack
|
726
|
+
return Puppet::Pops::PuppetStack.stack(file, line, self, 'evaluate', [o.body, scope])
|
727
|
+
#evaluate(o.body, scope)
|
728
|
+
rescue Puppet::Pops::Evaluator::PuppetStopIteration => ex
|
729
|
+
# breaking out of a file level program is not allowed
|
730
|
+
raise Puppet::ParseError.new("break() from context where this is illegal", ex.file, ex.line)
|
731
|
+
end
|
732
|
+
end
|
733
|
+
|
734
|
+
# Produces Array[PAnyType], an array of resource references
|
735
|
+
#
|
736
|
+
def eval_ResourceExpression(o, scope)
|
737
|
+
exported = o.exported
|
738
|
+
virtual = o.virtual
|
739
|
+
|
740
|
+
# Get the type name
|
741
|
+
type_name =
|
742
|
+
if (tmp_name = o.type_name).is_a?(Model::QualifiedName)
|
743
|
+
tmp_name.value # already validated as a name
|
744
|
+
else
|
745
|
+
type_name_acceptable =
|
746
|
+
case o.type_name
|
747
|
+
when Model::QualifiedReference
|
748
|
+
true
|
749
|
+
when Model::AccessExpression
|
750
|
+
o.type_name.left_expr.is_a?(Model::QualifiedReference)
|
751
|
+
end
|
752
|
+
|
753
|
+
evaluated_name = evaluate(tmp_name, scope)
|
754
|
+
unless type_name_acceptable
|
755
|
+
actual = type_calculator.generalize(type_calculator.infer(evaluated_name)).to_s
|
756
|
+
fail(Issues::ILLEGAL_RESOURCE_TYPE, o.type_name, {:actual => actual})
|
757
|
+
end
|
758
|
+
|
759
|
+
# must be a CatalogEntry subtype
|
760
|
+
case evaluated_name
|
761
|
+
when Types::PClassType
|
762
|
+
unless evaluated_name.class_name.nil?
|
763
|
+
fail(Issues::ILLEGAL_RESOURCE_TYPE, o.type_name, {:actual=> evaluated_name.to_s})
|
764
|
+
end
|
765
|
+
'class'
|
766
|
+
|
767
|
+
when Types::PResourceType
|
768
|
+
unless evaluated_name.title().nil?
|
769
|
+
fail(Issues::ILLEGAL_RESOURCE_TYPE, o.type_name, {:actual=> evaluated_name.to_s})
|
770
|
+
end
|
771
|
+
evaluated_name.type_name # assume validated
|
772
|
+
|
773
|
+
when Types::PTypeReferenceType
|
774
|
+
fail(Issues::UNKNOWN_RESOURCE_TYPE, o.type_string, {:type_name => evaluated_name.to_s})
|
775
|
+
|
776
|
+
else
|
777
|
+
actual = type_calculator.generalize(type_calculator.infer(evaluated_name)).to_s
|
778
|
+
fail(Issues::ILLEGAL_RESOURCE_TYPE, o.type_name, {:actual=>actual})
|
779
|
+
end
|
780
|
+
end
|
781
|
+
|
782
|
+
# This is a runtime check - the model is valid, but will have runtime issues when evaluated
|
783
|
+
# and storeconfigs is not set.
|
784
|
+
if(o.exported)
|
785
|
+
optionally_fail(Issues::RT_NO_STORECONFIGS_EXPORT, o);
|
786
|
+
end
|
787
|
+
|
788
|
+
titles_to_body = {}
|
789
|
+
body_to_titles = {}
|
790
|
+
body_to_params = {}
|
791
|
+
|
792
|
+
# titles are evaluated before attribute operations
|
793
|
+
o.bodies.map do | body |
|
794
|
+
titles = evaluate(body.title, scope)
|
795
|
+
|
796
|
+
# Title may not be nil
|
797
|
+
# Titles may be given as an array, it is ok if it is empty, but not if it contains nil entries
|
798
|
+
# Titles may not be an empty String
|
799
|
+
# Titles must be unique in the same resource expression
|
800
|
+
# There may be a :default entry, its entries apply with lower precedence
|
801
|
+
#
|
802
|
+
if titles.nil?
|
803
|
+
fail(Issues::MISSING_TITLE, body.title)
|
804
|
+
end
|
805
|
+
titles = [titles].flatten
|
806
|
+
|
807
|
+
# Check types of evaluated titles and duplicate entries
|
808
|
+
titles.each_with_index do |title, index|
|
809
|
+
if title.nil?
|
810
|
+
fail(Issues::MISSING_TITLE_AT, body.title, {:index => index})
|
811
|
+
|
812
|
+
elsif !title.is_a?(String) && title != :default
|
813
|
+
actual = type_calculator.generalize(type_calculator.infer(title)).to_s
|
814
|
+
fail(Issues::ILLEGAL_TITLE_TYPE_AT, body.title, {:index => index, :actual => actual})
|
815
|
+
|
816
|
+
elsif title == EMPTY_STRING
|
817
|
+
fail(Issues::EMPTY_STRING_TITLE_AT, body.title, {:index => index})
|
818
|
+
|
819
|
+
elsif titles_to_body[title]
|
820
|
+
fail(Issues::DUPLICATE_TITLE, o, {:title => title})
|
821
|
+
end
|
822
|
+
titles_to_body[title] = body
|
823
|
+
end
|
824
|
+
|
825
|
+
# Do not create a real instance from the :default case
|
826
|
+
titles.delete(:default)
|
827
|
+
|
828
|
+
body_to_titles[body] = titles
|
829
|
+
|
830
|
+
# Store evaluated parameters in a hash associated with the body, but do not yet create resource
|
831
|
+
# since the entry containing :defaults may appear later
|
832
|
+
body_to_params[body] = body.operations.reduce({}) do |param_memo, op|
|
833
|
+
params = evaluate(op, scope)
|
834
|
+
params = [params] unless params.is_a?(Array)
|
835
|
+
params.each do |p|
|
836
|
+
if param_memo.include? p.name
|
837
|
+
fail(Issues::DUPLICATE_ATTRIBUTE, o, {:attribute => p.name})
|
838
|
+
end
|
839
|
+
param_memo[p.name] = p
|
840
|
+
end
|
841
|
+
param_memo
|
842
|
+
end
|
843
|
+
end
|
844
|
+
|
845
|
+
# Titles and Operations have now been evaluated and resources can be created
|
846
|
+
# Each production is a PResource, and an array of all is produced as the result of
|
847
|
+
# evaluating the ResourceExpression.
|
848
|
+
#
|
849
|
+
defaults_hash = body_to_params[titles_to_body[:default]] || {}
|
850
|
+
o.bodies.map do | body |
|
851
|
+
titles = body_to_titles[body]
|
852
|
+
params = defaults_hash.merge(body_to_params[body] || {})
|
853
|
+
create_resources(o, scope, virtual, exported, type_name, titles, params.values)
|
854
|
+
end.flatten.compact
|
855
|
+
end
|
856
|
+
|
857
|
+
def eval_ResourceOverrideExpression(o, scope)
|
858
|
+
evaluated_resources = evaluate(o.resources, scope)
|
859
|
+
evaluated_parameters = o.operations.map { |op| evaluate(op, scope) }
|
860
|
+
create_resource_overrides(o, scope, [evaluated_resources].flatten, evaluated_parameters)
|
861
|
+
evaluated_resources
|
862
|
+
end
|
863
|
+
|
864
|
+
# Produces 3x parameter
|
865
|
+
def eval_AttributeOperation(o, scope)
|
866
|
+
create_resource_parameter(o, scope, o.attribute_name, evaluate(o.value_expr, scope), o.operator)
|
867
|
+
end
|
868
|
+
|
869
|
+
def eval_AttributesOperation(o, scope)
|
870
|
+
hashed_params = evaluate(o.expr, scope)
|
871
|
+
unless hashed_params.is_a?(Hash)
|
872
|
+
actual = type_calculator.generalize(type_calculator.infer(hashed_params)).to_s
|
873
|
+
fail(Issues::TYPE_MISMATCH, o.expr, {:expected => 'Hash', :actual => actual})
|
874
|
+
end
|
875
|
+
hashed_params.map { |k,v| create_resource_parameter(o, scope, k, v, '=>') }
|
876
|
+
end
|
877
|
+
|
878
|
+
# Sets default parameter values for a type, produces the type
|
879
|
+
#
|
880
|
+
def eval_ResourceDefaultsExpression(o, scope)
|
881
|
+
type = evaluate(o.type_ref, scope)
|
882
|
+
type_name =
|
883
|
+
if type.is_a?(Types::PResourceType) && !type.type_name.nil? && type.title.nil?
|
884
|
+
type.type_name # assume it is a valid name
|
885
|
+
else
|
886
|
+
actual = type_calculator.generalize(type_calculator.infer(type))
|
887
|
+
fail(Issues::ILLEGAL_RESOURCE_TYPE, o.type_ref, {:actual => actual})
|
888
|
+
end
|
889
|
+
evaluated_parameters = o.operations.map {|op| evaluate(op, scope) }
|
890
|
+
create_resource_defaults(o, scope, type_name, evaluated_parameters)
|
891
|
+
# Produce the type
|
892
|
+
type
|
893
|
+
end
|
894
|
+
|
895
|
+
# Evaluates function call by name.
|
896
|
+
#
|
897
|
+
def eval_CallNamedFunctionExpression(o, scope)
|
898
|
+
# If LHS is a type (i.e. Integer, or Integer[...]
|
899
|
+
# the call is taken as an instantiation of the given type
|
900
|
+
#
|
901
|
+
functor = o.functor_expr
|
902
|
+
if functor.is_a?(Model::QualifiedReference) ||
|
903
|
+
functor.is_a?(Model::AccessExpression) && functor.left_expr.is_a?(Model::QualifiedReference)
|
904
|
+
# instantiation
|
905
|
+
type = evaluate(functor, scope)
|
906
|
+
return call_function_with_block('new', unfold([type], o.arguments || [], scope), o, scope)
|
907
|
+
end
|
908
|
+
|
909
|
+
# The functor expression is not evaluated, it is not possible to select the function to call
|
910
|
+
# via an expression like $a()
|
911
|
+
case functor
|
912
|
+
when Model::QualifiedName
|
913
|
+
# ok
|
914
|
+
when Model::RenderStringExpression
|
915
|
+
# helpful to point out this easy to make Epp error
|
916
|
+
fail(Issues::ILLEGAL_EPP_PARAMETERS, o)
|
917
|
+
else
|
918
|
+
fail(Issues::ILLEGAL_EXPRESSION, o.functor_expr, {:feature=>'function name', :container => o})
|
919
|
+
end
|
920
|
+
name = o.functor_expr.value
|
921
|
+
call_function_with_block(name, unfold([], o.arguments, scope), o, scope)
|
922
|
+
end
|
923
|
+
|
924
|
+
# Evaluation of CallMethodExpression handles a NamedAccessExpression functor (receiver.function_name)
|
925
|
+
#
|
926
|
+
def eval_CallMethodExpression(o, scope)
|
927
|
+
unless o.functor_expr.is_a? Model::NamedAccessExpression
|
928
|
+
fail(Issues::ILLEGAL_EXPRESSION, o.functor_expr, {:feature=>'function accessor', :container => o})
|
929
|
+
end
|
930
|
+
receiver = unfold([], [o.functor_expr.left_expr], scope)
|
931
|
+
name = o.functor_expr.right_expr
|
932
|
+
unless name.is_a? Model::QualifiedName
|
933
|
+
fail(Issues::ILLEGAL_EXPRESSION, o.functor_expr, {:feature=>'function name', :container => o})
|
934
|
+
end
|
935
|
+
name = name.value # the string function name
|
936
|
+
|
937
|
+
obj = receiver[0]
|
938
|
+
receiver_type = Types::TypeCalculator.infer(obj)
|
939
|
+
if receiver_type.is_a?(Types::PObjectType)
|
940
|
+
member = receiver_type[name]
|
941
|
+
unless member.nil?
|
942
|
+
args = unfold([], o.arguments || [], scope)
|
943
|
+
return o.lambda.nil? ? member.invoke(obj, scope, args) : member.invoke(obj, scope, args, &proc_from_lambda(o.lambda, scope))
|
944
|
+
end
|
945
|
+
end
|
946
|
+
|
947
|
+
call_function_with_block(name, unfold(receiver, o.arguments || [], scope), o, scope)
|
948
|
+
end
|
949
|
+
|
950
|
+
def call_function_with_block(name, evaluated_arguments, o, scope)
|
951
|
+
if o.lambda.nil?
|
952
|
+
call_function(name, evaluated_arguments, o, scope)
|
953
|
+
else
|
954
|
+
call_function(name, evaluated_arguments, o, scope, &proc_from_lambda(o.lambda, scope))
|
955
|
+
end
|
956
|
+
end
|
957
|
+
private :call_function_with_block
|
958
|
+
|
959
|
+
def proc_from_lambda(lambda, scope)
|
960
|
+
closure = Closure::Dynamic.new(self, lambda, scope)
|
961
|
+
PuppetProc.new(closure) { |*args| closure.call(*args) }
|
962
|
+
end
|
963
|
+
private :proc_from_lambda
|
964
|
+
|
965
|
+
# @example
|
966
|
+
# $x ? { 10 => true, 20 => false, default => 0 }
|
967
|
+
#
|
968
|
+
def eval_SelectorExpression o, scope
|
969
|
+
# memo scope level before evaluating test - don't want a match in the case test to leak $n match vars
|
970
|
+
# to expressions after the selector expression.
|
971
|
+
#
|
972
|
+
scope.with_guarded_scope do
|
973
|
+
test = evaluate(o.left_expr, scope)
|
974
|
+
|
975
|
+
the_default = nil
|
976
|
+
selected = o.selectors.find do |s|
|
977
|
+
me = unwind_parentheses(s.matching_expr)
|
978
|
+
case me
|
979
|
+
when Model::LiteralDefault
|
980
|
+
the_default = s.value_expr
|
981
|
+
false
|
982
|
+
when Model::UnfoldExpression
|
983
|
+
# not ideal for error reporting, since it is not known which unfolded result
|
984
|
+
# that caused an error - the entire unfold expression is blamed (i.e. the var c, passed to is_match?)
|
985
|
+
evaluate(me, scope).any? {|v| is_match?(test, v, me, s, scope) }
|
986
|
+
else
|
987
|
+
is_match?(test, evaluate(me, scope), me, s, scope)
|
988
|
+
end
|
989
|
+
end
|
990
|
+
if selected
|
991
|
+
evaluate(selected.value_expr, scope)
|
992
|
+
elsif the_default
|
993
|
+
evaluate(the_default, scope)
|
994
|
+
else
|
995
|
+
fail(Issues::UNMATCHED_SELECTOR, o.left_expr, :param_value => test)
|
996
|
+
end
|
997
|
+
end
|
998
|
+
end
|
999
|
+
|
1000
|
+
# SubLocatable is simply an expression that holds location information
|
1001
|
+
def eval_SubLocatedExpression o, scope
|
1002
|
+
evaluate(o.expr, scope)
|
1003
|
+
end
|
1004
|
+
|
1005
|
+
# Evaluates Puppet DSL Heredoc
|
1006
|
+
def eval_HeredocExpression o, scope
|
1007
|
+
result = evaluate(o.text_expr, scope)
|
1008
|
+
assert_external_syntax(scope, result, o.syntax, o.text_expr)
|
1009
|
+
result
|
1010
|
+
end
|
1011
|
+
|
1012
|
+
# Evaluates Puppet DSL `if`
|
1013
|
+
def eval_IfExpression o, scope
|
1014
|
+
scope.with_guarded_scope do
|
1015
|
+
if is_true?(evaluate(o.test, scope), o.test)
|
1016
|
+
evaluate(o.then_expr, scope)
|
1017
|
+
else
|
1018
|
+
evaluate(o.else_expr, scope)
|
1019
|
+
end
|
1020
|
+
end
|
1021
|
+
end
|
1022
|
+
|
1023
|
+
# Evaluates Puppet DSL `unless`
|
1024
|
+
def eval_UnlessExpression o, scope
|
1025
|
+
scope.with_guarded_scope do
|
1026
|
+
unless is_true?(evaluate(o.test, scope), o.test)
|
1027
|
+
evaluate(o.then_expr, scope)
|
1028
|
+
else
|
1029
|
+
evaluate(o.else_expr, scope)
|
1030
|
+
end
|
1031
|
+
end
|
1032
|
+
end
|
1033
|
+
|
1034
|
+
# Evaluates a variable (getting its value)
|
1035
|
+
# The evaluator is lenient; any expression producing a String is used as a name
|
1036
|
+
# of a variable.
|
1037
|
+
#
|
1038
|
+
def eval_VariableExpression o, scope
|
1039
|
+
# Evaluator is not too fussy about what constitutes a name as long as the result
|
1040
|
+
# is a String and a valid variable name
|
1041
|
+
#
|
1042
|
+
name = evaluate(o.expr, scope)
|
1043
|
+
|
1044
|
+
# Should be caught by validation, but make this explicit here as well, or mysterious evaluation issues
|
1045
|
+
# may occur for some evaluation use cases.
|
1046
|
+
case name
|
1047
|
+
when String
|
1048
|
+
when Numeric
|
1049
|
+
else
|
1050
|
+
fail(Issues::ILLEGAL_VARIABLE_EXPRESSION, o.expr)
|
1051
|
+
end
|
1052
|
+
get_variable_value(name, o, scope)
|
1053
|
+
end
|
1054
|
+
|
1055
|
+
# Evaluates double quoted strings that may contain interpolation
|
1056
|
+
#
|
1057
|
+
def eval_ConcatenatedString o, scope
|
1058
|
+
o.segments.collect {|expr| string(evaluate(expr, scope), scope)}.join
|
1059
|
+
end
|
1060
|
+
|
1061
|
+
|
1062
|
+
# If the wrapped expression is a QualifiedName, it is taken as the name of a variable in scope.
|
1063
|
+
# Note that this is different from the 3.x implementation, where an initial qualified name
|
1064
|
+
# is accepted. (e.g. `"---${var + 1}---"` is legal. This implementation requires such concrete
|
1065
|
+
# syntax to be expressed in a model as `(TextExpression (+ (Variable var) 1)` - i.e. moving the decision to
|
1066
|
+
# the parser.
|
1067
|
+
#
|
1068
|
+
# Semantics; the result of an expression is turned into a string, nil is silently transformed to empty
|
1069
|
+
# string.
|
1070
|
+
# @return [String] the interpolated result
|
1071
|
+
#
|
1072
|
+
def eval_TextExpression o, scope
|
1073
|
+
if o.expr.is_a?(Model::QualifiedName)
|
1074
|
+
string(get_variable_value(o.expr.value, o, scope), scope)
|
1075
|
+
else
|
1076
|
+
string(evaluate(o.expr, scope), scope)
|
1077
|
+
end
|
1078
|
+
end
|
1079
|
+
|
1080
|
+
def string_Object(o, scope)
|
1081
|
+
o.to_s
|
1082
|
+
end
|
1083
|
+
|
1084
|
+
def string_Symbol(o, scope)
|
1085
|
+
if :undef == o # optimized comparison 1.44 vs 1.95
|
1086
|
+
EMPTY_STRING
|
1087
|
+
else
|
1088
|
+
o.to_s
|
1089
|
+
end
|
1090
|
+
end
|
1091
|
+
|
1092
|
+
def string_Array(o, scope)
|
1093
|
+
"[#{o.map {|e| string(e, scope)}.join(COMMA_SEPARATOR)}]"
|
1094
|
+
end
|
1095
|
+
|
1096
|
+
def string_Hash(o, scope)
|
1097
|
+
"{#{o.map {|k,v| "#{string(k, scope)} => #{string(v, scope)}"}.join(COMMA_SEPARATOR)}}"
|
1098
|
+
end
|
1099
|
+
|
1100
|
+
def string_Regexp(o, scope)
|
1101
|
+
Types::PRegexpType.regexp_to_s_with_delimiters(o)
|
1102
|
+
end
|
1103
|
+
|
1104
|
+
def string_PAnyType(o, scope)
|
1105
|
+
o.to_s
|
1106
|
+
end
|
1107
|
+
|
1108
|
+
# Produces concatenation / merge of x and y.
|
1109
|
+
#
|
1110
|
+
# When x is an Array, y of type produces:
|
1111
|
+
#
|
1112
|
+
# * Array => concatenation `[1,2], [3,4] => [1,2,3,4]`
|
1113
|
+
# * Hash => concatenation of hash as array `[key, value, key, value, ...]`
|
1114
|
+
# * any other => concatenation of single value
|
1115
|
+
#
|
1116
|
+
# When x is a Hash, y of type produces:
|
1117
|
+
#
|
1118
|
+
# * Array => merge of array interpreted as `[key, value, key, value,...]`
|
1119
|
+
# * Hash => a merge, where entries in `y` overrides
|
1120
|
+
# * any other => error
|
1121
|
+
#
|
1122
|
+
# When x is something else, wrap it in an array first.
|
1123
|
+
#
|
1124
|
+
# When x is nil, an empty array is used instead.
|
1125
|
+
#
|
1126
|
+
# @note to concatenate an Array, nest the array - i.e. `[1,2], [[2,3]]`
|
1127
|
+
#
|
1128
|
+
# @overload concatenate(obj_x, obj_y)
|
1129
|
+
# @param obj_x [Object] object to wrap in an array and concatenate to; see other overloaded methods for return type
|
1130
|
+
# @param ary_y [Object] array to concatenate at end of `ary_x`
|
1131
|
+
# @return [Object] wraps obj_x in array before using other overloaded option based on type of obj_y
|
1132
|
+
# @overload concatenate(ary_x, ary_y)
|
1133
|
+
# @param ary_x [Array] array to concatenate to
|
1134
|
+
# @param ary_y [Array] array to concatenate at end of `ary_x`
|
1135
|
+
# @return [Array] new array with `ary_x` + `ary_y`
|
1136
|
+
# @overload concatenate(ary_x, hsh_y)
|
1137
|
+
# @param ary_x [Array] array to concatenate to
|
1138
|
+
# @param hsh_y [Hash] converted to array form, and concatenated to array
|
1139
|
+
# @return [Array] new array with `ary_x` + `hsh_y` converted to array
|
1140
|
+
# @overload concatenate (ary_x, obj_y)
|
1141
|
+
# @param ary_x [Array] array to concatenate to
|
1142
|
+
# @param obj_y [Object] non array or hash object to add to array
|
1143
|
+
# @return [Array] new array with `ary_x` + `obj_y` added as last entry
|
1144
|
+
# @overload concatenate(hsh_x, ary_y)
|
1145
|
+
# @param hsh_x [Hash] the hash to merge with
|
1146
|
+
# @param ary_y [Array] array interpreted as even numbered sequence of key, value merged with `hsh_x`
|
1147
|
+
# @return [Hash] new hash with `hsh_x` merged with `ary_y` interpreted as hash in array form
|
1148
|
+
# @overload concatenate(hsh_x, hsh_y)
|
1149
|
+
# @param hsh_x [Hash] the hash to merge to
|
1150
|
+
# @param hsh_y [Hash] hash merged with `hsh_x`
|
1151
|
+
# @return [Hash] new hash with `hsh_x` merged with `hsh_y`
|
1152
|
+
# @raise [ArgumentError] when `xxx_x` is neither an Array nor a Hash
|
1153
|
+
# @raise [ArgumentError] when `xxx_x` is a Hash, and `xxx_y` is neither Array nor Hash.
|
1154
|
+
#
|
1155
|
+
def concatenate(x, y)
|
1156
|
+
x = [x] unless x.is_a?(Array) || x.is_a?(Hash)
|
1157
|
+
case x
|
1158
|
+
when Array
|
1159
|
+
y = case y
|
1160
|
+
when Array then y
|
1161
|
+
when Hash then y.to_a
|
1162
|
+
else
|
1163
|
+
[y]
|
1164
|
+
end
|
1165
|
+
x + y # new array with concatenation
|
1166
|
+
when Hash
|
1167
|
+
y = case y
|
1168
|
+
when Hash then y
|
1169
|
+
when Array
|
1170
|
+
# Hash[[a, 1, b, 2]] => {}
|
1171
|
+
# Hash[a,1,b,2] => {a => 1, b => 2}
|
1172
|
+
# Hash[[a,1], [b,2]] => {[a,1] => [b,2]}
|
1173
|
+
# Hash[[[a,1], [b,2]]] => {a => 1, b => 2}
|
1174
|
+
# Use type calcultor to determine if array is Array[Array[?]], and if so use second form
|
1175
|
+
# of call
|
1176
|
+
t = @@type_calculator.infer(y)
|
1177
|
+
if t.element_type.is_a? Types::PArrayType
|
1178
|
+
Hash[y]
|
1179
|
+
else
|
1180
|
+
Hash[*y]
|
1181
|
+
end
|
1182
|
+
else
|
1183
|
+
raise ArgumentError.new(_("Can only append Array or Hash to a Hash"))
|
1184
|
+
end
|
1185
|
+
x.merge y # new hash with overwrite
|
1186
|
+
else
|
1187
|
+
raise ArgumentError.new(_("Can only append to an Array or a Hash."))
|
1188
|
+
end
|
1189
|
+
end
|
1190
|
+
|
1191
|
+
# Produces the result x \ y (set difference)
|
1192
|
+
# When `x` is an Array, `y` is transformed to an array and then all matching elements removed from x.
|
1193
|
+
# When `x` is a Hash, all contained keys are removed from x as listed in `y` if it is an Array, or all its keys if it is a Hash.
|
1194
|
+
# The difference is returned. The given `x` and `y` are not modified by this operation.
|
1195
|
+
# @raise [ArgumentError] when `x` is neither an Array nor a Hash
|
1196
|
+
#
|
1197
|
+
def delete(x, y)
|
1198
|
+
result = x.dup
|
1199
|
+
case x
|
1200
|
+
when Array
|
1201
|
+
y = case y
|
1202
|
+
when Array then y
|
1203
|
+
when Hash then y.to_a
|
1204
|
+
else
|
1205
|
+
[y]
|
1206
|
+
end
|
1207
|
+
y.each {|e| result.delete(e) }
|
1208
|
+
when Hash
|
1209
|
+
y = case y
|
1210
|
+
when Array then y
|
1211
|
+
when Hash then y.keys
|
1212
|
+
else
|
1213
|
+
[y]
|
1214
|
+
end
|
1215
|
+
y.each {|e| result.delete(e) }
|
1216
|
+
else
|
1217
|
+
raise ArgumentError.new(_("Can only delete from an Array or Hash."))
|
1218
|
+
end
|
1219
|
+
result
|
1220
|
+
end
|
1221
|
+
|
1222
|
+
# Implementation of case option matching.
|
1223
|
+
#
|
1224
|
+
# This is the type of matching performed in a case option, using == for every type
|
1225
|
+
# of value except regular expression where a match is performed.
|
1226
|
+
#
|
1227
|
+
def is_match?(left, right, o, option_expr, scope)
|
1228
|
+
@@compare_operator.match(left, right, scope)
|
1229
|
+
end
|
1230
|
+
|
1231
|
+
# Maps the expression in the given array to their product except for UnfoldExpressions which are first unfolded.
|
1232
|
+
# The result is added to the given result Array.
|
1233
|
+
# @param result [Array] Where to add the result (may contain information to add to)
|
1234
|
+
# @param array [Array[Model::Expression] the expressions to map
|
1235
|
+
# @param scope [Puppet::Parser::Scope] the scope to evaluate in
|
1236
|
+
# @return [Array] the given result array with content added from the operation
|
1237
|
+
#
|
1238
|
+
def unfold(result, array, scope)
|
1239
|
+
array.each do |x|
|
1240
|
+
x = unwind_parentheses(x)
|
1241
|
+
if x.is_a?(Model::UnfoldExpression)
|
1242
|
+
result.concat(evaluate(x, scope))
|
1243
|
+
else
|
1244
|
+
result << evaluate(x, scope)
|
1245
|
+
end
|
1246
|
+
end
|
1247
|
+
result
|
1248
|
+
end
|
1249
|
+
private :unfold
|
1250
|
+
|
1251
|
+
def unwind_parentheses(o)
|
1252
|
+
return o unless o.is_a?(Model::ParenthesizedExpression)
|
1253
|
+
unwind_parentheses(o.expr)
|
1254
|
+
end
|
1255
|
+
private :unwind_parentheses
|
1256
|
+
end
|
1257
|
+
end
|
1258
|
+
end
|