puppet 6.18.0-x64-mingw32 → 6.21.1-x64-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CODEOWNERS +2 -16
- data/Gemfile +2 -0
- data/Gemfile.lock +37 -34
- data/README.md +1 -2
- data/Rakefile +4 -12
- data/lib/puppet/agent/locker.rb +0 -7
- data/lib/puppet/application.rb +10 -6
- data/lib/puppet/application/agent.rb +9 -3
- data/lib/puppet/application/apply.rb +3 -2
- data/lib/puppet/application/device.rb +1 -0
- data/lib/puppet/application/doc.rb +1 -1
- data/lib/puppet/application/filebucket.rb +2 -2
- data/lib/puppet/application/lookup.rb +5 -5
- data/lib/puppet/application/script.rb +1 -0
- data/lib/puppet/application_support.rb +7 -0
- data/lib/puppet/configurer.rb +50 -8
- data/lib/puppet/defaults.rb +67 -35
- data/lib/puppet/environments.rb +84 -59
- data/lib/puppet/face/catalog.rb +1 -1
- data/lib/puppet/face/config.rb +56 -16
- data/lib/puppet/face/epp.rb +12 -2
- data/lib/puppet/face/facts.rb +60 -0
- data/lib/puppet/face/node.rb +3 -3
- data/lib/puppet/face/node/clean.rb +2 -2
- data/lib/puppet/face/status.rb +1 -1
- data/lib/puppet/ffi/posix.rb +10 -0
- data/lib/puppet/ffi/posix/constants.rb +14 -0
- data/lib/puppet/ffi/posix/functions.rb +24 -0
- data/lib/puppet/file_bucket/dipper.rb +1 -1
- data/lib/puppet/functions/epp.rb +1 -0
- data/lib/puppet/functions/inline_epp.rb +1 -0
- data/lib/puppet/functions/new.rb +8 -3
- data/lib/puppet/http.rb +1 -0
- data/lib/puppet/http/client.rb +1 -1
- data/lib/puppet/http/resolver.rb +5 -8
- data/lib/puppet/http/resolver/server_list.rb +18 -36
- data/lib/puppet/http/resolver/settings.rb +4 -4
- data/lib/puppet/http/resolver/srv.rb +5 -5
- data/lib/puppet/http/service.rb +3 -1
- data/lib/puppet/http/service/compiler.rb +1 -1
- data/lib/puppet/http/service/file_server.rb +1 -1
- data/lib/puppet/http/service/puppetserver.rb +39 -0
- data/lib/puppet/http/session.rb +5 -4
- data/lib/puppet/indirector/catalog/compiler.rb +1 -1
- data/lib/puppet/indirector/fact_search.rb +60 -0
- data/lib/puppet/indirector/facts/json.rb +27 -0
- data/lib/puppet/indirector/facts/yaml.rb +4 -59
- data/lib/puppet/indirector/json.rb +5 -1
- data/lib/puppet/indirector/msgpack.rb +1 -1
- data/lib/puppet/indirector/node/json.rb +8 -0
- data/lib/puppet/indirector/report/json.rb +34 -0
- data/lib/puppet/indirector/request.rb +4 -4
- data/lib/puppet/indirector/yaml.rb +1 -1
- data/lib/puppet/module_tool/applications/installer.rb +48 -2
- data/lib/puppet/module_tool/errors/shared.rb +17 -2
- data/lib/puppet/network/formats.rb +2 -1
- data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
- data/lib/puppet/node/facts.rb +17 -0
- data/lib/puppet/pal/pal_impl.rb +70 -17
- data/lib/puppet/parser/ast/leaf.rb +3 -2
- data/lib/puppet/parser/templatewrapper.rb +1 -1
- data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
- data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +22 -3
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
- data/lib/puppet/pops/model/ast_transformer.rb +1 -1
- data/lib/puppet/pops/types/p_meta_type.rb +1 -1
- data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
- data/lib/puppet/property/list.rb +1 -1
- data/lib/puppet/provider/group/groupadd.rb +13 -8
- data/lib/puppet/provider/package/apt.rb +34 -2
- data/lib/puppet/provider/package/aptitude.rb +6 -0
- data/lib/puppet/provider/package/dpkg.rb +1 -1
- data/lib/puppet/provider/package/pip2.rb +17 -0
- data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
- data/lib/puppet/provider/package/yum.rb +1 -0
- data/lib/puppet/provider/service/debian.rb +2 -0
- data/lib/puppet/provider/user/aix.rb +2 -2
- data/lib/puppet/provider/user/useradd.rb +62 -8
- data/lib/puppet/reference/configuration.rb +6 -5
- data/lib/puppet/resource/type.rb +2 -1
- data/lib/puppet/rest/route.rb +2 -2
- data/lib/puppet/settings.rb +62 -20
- data/lib/puppet/settings/alias_setting.rb +37 -0
- data/lib/puppet/settings/base_setting.rb +26 -2
- data/lib/puppet/transaction/report.rb +11 -7
- data/lib/puppet/type/file/source.rb +1 -1
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/type/package.rb +3 -3
- data/lib/puppet/util/autoload.rb +1 -8
- data/lib/puppet/util/connection.rb +8 -8
- data/lib/puppet/util/fact_dif.rb +62 -0
- data/lib/puppet/util/posix.rb +54 -5
- data/lib/puppet/util/rubygems.rb +5 -1
- data/lib/puppet/util/run_mode.rb +5 -1
- data/lib/puppet/util/windows/service.rb +1 -1
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +289 -268
- data/man/man5/puppet.conf.5 +33 -17
- data/man/man8/puppet-agent.8 +7 -4
- data/man/man8/puppet-apply.8 +2 -2
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +6 -6
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +2 -2
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +32 -1
- data/man/man8/puppet-filebucket.8 +3 -3
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +1 -1
- data/man/man8/puppet-key.8 +1 -1
- data/man/man8/puppet-lookup.8 +1 -1
- data/man/man8/puppet-man.8 +1 -1
- data/man/man8/puppet-module.8 +1 -1
- data/man/man8/puppet-node.8 +7 -4
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +4 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +2 -2
- data/man/man8/puppet-ssl.8 +1 -1
- data/man/man8/puppet-status.8 +2 -2
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
- data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
- data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
- data/spec/integration/application/agent_spec.rb +183 -22
- data/spec/integration/application/apply_spec.rb +19 -0
- data/spec/integration/application/filebucket_spec.rb +7 -7
- data/spec/integration/application/plugin_spec.rb +3 -3
- data/spec/integration/configurer_spec.rb +14 -0
- data/spec/integration/defaults_spec.rb +19 -1
- data/spec/integration/environments/setting_hooks_spec.rb +1 -1
- data/spec/integration/resource/type_collection_spec.rb +2 -6
- data/spec/integration/transaction_spec.rb +4 -9
- data/spec/integration/util/windows/adsi_spec.rb +5 -3
- data/spec/integration/util/windows/registry_spec.rb +0 -10
- data/spec/lib/puppet_spec/settings.rb +6 -1
- data/spec/shared_contexts/types_setup.rb +2 -0
- data/spec/spec_helper.rb +1 -4
- data/spec/unit/agent_spec.rb +8 -6
- data/spec/unit/application/agent_spec.rb +0 -1
- data/spec/unit/application/config_spec.rb +224 -4
- data/spec/unit/application/doc_spec.rb +2 -2
- data/spec/unit/application/facts_spec.rb +3 -1
- data/spec/unit/application/filebucket_spec.rb +0 -2
- data/spec/unit/application_spec.rb +60 -13
- data/spec/unit/configurer_spec.rb +39 -6
- data/spec/unit/confine/feature_spec.rb +1 -1
- data/spec/unit/confine_spec.rb +8 -2
- data/spec/unit/defaults_spec.rb +20 -1
- data/spec/unit/environments_spec.rb +176 -32
- data/spec/unit/face/config_spec.rb +62 -11
- data/spec/unit/face/node_spec.rb +2 -13
- data/spec/unit/file_serving/configuration/parser_spec.rb +0 -1
- data/spec/unit/file_serving/metadata_spec.rb +3 -3
- data/spec/unit/file_serving/terminus_helper_spec.rb +11 -4
- data/spec/unit/file_system_spec.rb +1 -2
- data/spec/unit/forge/module_release_spec.rb +2 -7
- data/spec/unit/functions/inline_epp_spec.rb +26 -1
- data/spec/unit/http/resolver_spec.rb +24 -4
- data/spec/unit/http/service/ca_spec.rb +2 -2
- data/spec/unit/http/service/compiler_spec.rb +51 -2
- data/spec/unit/http/service/file_server_spec.rb +2 -2
- data/spec/unit/http/service/puppetserver_spec.rb +82 -0
- data/spec/unit/http/service/report_spec.rb +2 -2
- data/spec/unit/http/service_spec.rb +1 -1
- data/spec/unit/http/session_spec.rb +8 -20
- data/spec/unit/indirector/catalog/json_spec.rb +1 -1
- data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
- data/spec/unit/indirector/face_spec.rb +0 -1
- data/spec/unit/indirector/facts/facter_spec.rb +0 -1
- data/spec/unit/indirector/facts/json_spec.rb +255 -0
- data/spec/unit/indirector/facts/rest_spec.rb +1 -1
- data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -8
- data/spec/unit/indirector/indirection_spec.rb +8 -12
- data/spec/unit/indirector/json_spec.rb +8 -8
- data/spec/unit/indirector/key/file_spec.rb +0 -1
- data/spec/unit/indirector/msgpack_spec.rb +8 -8
- data/spec/unit/indirector/node/json_spec.rb +33 -0
- data/spec/unit/indirector/node/rest_spec.rb +1 -1
- data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
- data/spec/unit/indirector/report/yaml_spec.rb +72 -8
- data/spec/unit/indirector/request_spec.rb +4 -4
- data/spec/unit/indirector/rest_spec.rb +1 -1
- data/spec/unit/indirector/status/rest_spec.rb +1 -1
- data/spec/unit/indirector/yaml_spec.rb +7 -7
- data/spec/unit/indirector_spec.rb +2 -2
- data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
- data/spec/unit/network/authconfig_spec.rb +0 -3
- data/spec/unit/network/http/api/indirected_routes_spec.rb +0 -9
- data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
- data/spec/unit/network/http/handler_spec.rb +0 -5
- data/spec/unit/parser/compiler_spec.rb +3 -19
- data/spec/unit/parser/resource_spec.rb +14 -8
- data/spec/unit/parser/templatewrapper_spec.rb +4 -3
- data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
- data/spec/unit/property_spec.rb +1 -0
- data/spec/unit/provider/exec_spec.rb +4 -3
- data/spec/unit/provider/group/groupadd_spec.rb +5 -2
- data/spec/unit/provider/nameservice_spec.rb +66 -65
- data/spec/unit/provider/package/apt_spec.rb +28 -23
- data/spec/unit/provider/package/aptitude_spec.rb +1 -1
- data/spec/unit/provider/package/base_spec.rb +6 -5
- data/spec/unit/provider/package/dpkg_spec.rb +22 -7
- data/spec/unit/provider/package/openbsd_spec.rb +2 -0
- data/spec/unit/provider/package/pacman_spec.rb +18 -12
- data/spec/unit/provider/package/pip2_spec.rb +36 -0
- data/spec/unit/provider/package/pip_spec.rb +6 -11
- data/spec/unit/provider/package/pkgdmg_spec.rb +0 -4
- data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
- data/spec/unit/provider/package/yum_spec.rb +31 -0
- data/spec/unit/provider/service/base_spec.rb +2 -4
- data/spec/unit/provider/service/bsd_spec.rb +5 -1
- data/spec/unit/provider/service/daemontools_spec.rb +1 -1
- data/spec/unit/provider/service/debian_spec.rb +3 -5
- data/spec/unit/provider/service/freebsd_spec.rb +1 -1
- data/spec/unit/provider/service/gentoo_spec.rb +4 -5
- data/spec/unit/provider/service/init_spec.rb +4 -5
- data/spec/unit/provider/service/launchd_spec.rb +5 -6
- data/spec/unit/provider/service/openrc_spec.rb +4 -5
- data/spec/unit/provider/service/openwrt_spec.rb +1 -1
- data/spec/unit/provider/service/redhat_spec.rb +1 -1
- data/spec/unit/provider/service/runit_spec.rb +2 -1
- data/spec/unit/provider/service/smf_spec.rb +1 -1
- data/spec/unit/provider/service/src_spec.rb +3 -5
- data/spec/unit/provider/service/systemd_spec.rb +3 -1
- data/spec/unit/provider/service/upstart_spec.rb +4 -5
- data/spec/unit/provider/user/aix_spec.rb +5 -0
- data/spec/unit/provider/user/hpux_spec.rb +1 -1
- data/spec/unit/provider/user/pw_spec.rb +2 -0
- data/spec/unit/provider/user/useradd_spec.rb +56 -3
- data/spec/unit/provider_spec.rb +8 -10
- data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
- data/spec/unit/resource/capability_finder_spec.rb +6 -1
- data/spec/unit/resource/type_spec.rb +1 -1
- data/spec/unit/resource_spec.rb +11 -10
- data/spec/unit/rest/route_spec.rb +4 -4
- data/spec/unit/settings_spec.rb +576 -239
- data/spec/unit/ssl/base_spec.rb +0 -1
- data/spec/unit/ssl/host_spec.rb +0 -5
- data/spec/unit/ssl/ssl_provider_spec.rb +14 -8
- data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -7
- data/spec/unit/transaction/event_manager_spec.rb +14 -11
- data/spec/unit/transaction/report_spec.rb +2 -0
- data/spec/unit/transaction_spec.rb +13 -4
- data/spec/unit/type/file/content_spec.rb +0 -1
- data/spec/unit/type/file/selinux_spec.rb +0 -2
- data/spec/unit/type/file/source_spec.rb +1 -1
- data/spec/unit/type/file_spec.rb +0 -6
- data/spec/unit/type/filebucket_spec.rb +1 -1
- data/spec/unit/type/group_spec.rb +13 -6
- data/spec/unit/type/resources_spec.rb +7 -7
- data/spec/unit/type/service_spec.rb +1 -1
- data/spec/unit/type/tidy_spec.rb +0 -1
- data/spec/unit/type_spec.rb +2 -2
- data/spec/unit/util/at_fork_spec.rb +2 -2
- data/spec/unit/util/autoload_spec.rb +5 -1
- data/spec/unit/util/backups_spec.rb +1 -2
- data/spec/unit/util/execution_spec.rb +15 -11
- data/spec/unit/util/inifile_spec.rb +6 -14
- data/spec/unit/util/log_spec.rb +8 -7
- data/spec/unit/util/logging_spec.rb +3 -3
- data/spec/unit/util/posix_spec.rb +363 -15
- data/spec/unit/util/rubygems_spec.rb +2 -2
- data/spec/unit/util/run_mode_spec.rb +6 -6
- data/spec/unit/util/selinux_spec.rb +76 -52
- data/spec/unit/util/storage_spec.rb +3 -1
- data/spec/unit/util/suidmanager_spec.rb +44 -41
- data/spec/unit/util_spec.rb +13 -6
- metadata +32 -10
- data/spec/integration/application/config_spec.rb +0 -74
- data/spec/unit/face/catalog_spec.rb +0 -6
- data/spec/unit/face/module_spec.rb +0 -3
| @@ -0,0 +1,37 @@ | |
| 1 | 
            +
            class Puppet::Settings::AliasSetting
         | 
| 2 | 
            +
              attr_reader :name, :alias_name
         | 
| 3 | 
            +
             | 
| 4 | 
            +
              def initialize(args = {})
         | 
| 5 | 
            +
                @name = args[:name]
         | 
| 6 | 
            +
                @alias_name = args[:alias_for]
         | 
| 7 | 
            +
                @alias_for = Puppet.settings.setting(alias_name)
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              def optparse_args
         | 
| 11 | 
            +
                args = @alias_for.optparse_args
         | 
| 12 | 
            +
                args[0].gsub!(alias_name.to_s, name.to_s)
         | 
| 13 | 
            +
                args
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              def getopt_args
         | 
| 17 | 
            +
                args = @alias_for.getopt_args
         | 
| 18 | 
            +
                args[0].gsub!(alias_name.to_s, name.to_s)
         | 
| 19 | 
            +
                args
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              def type
         | 
| 23 | 
            +
                :alias
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              def method_missing(method, *args)
         | 
| 27 | 
            +
                begin
         | 
| 28 | 
            +
                  alias_for.send(method, *args)
         | 
| 29 | 
            +
                rescue => e
         | 
| 30 | 
            +
                  Puppet.log_exception(self.class, e.message)
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
              private
         | 
| 35 | 
            +
             | 
| 36 | 
            +
              attr_reader :alias_for
         | 
| 37 | 
            +
            end
         | 
| @@ -1,3 +1,4 @@ | |
| 1 | 
            +
            require 'set'
         | 
| 1 2 | 
             
            require 'puppet/settings/errors'
         | 
| 2 3 |  | 
| 3 4 | 
             
            # The base setting type
         | 
| @@ -5,27 +6,50 @@ class Puppet::Settings::BaseSetting | |
| 5 6 | 
             
              attr_accessor :name, :desc, :section, :default, :call_hook
         | 
| 6 7 | 
             
              attr_reader :short, :deprecated
         | 
| 7 8 |  | 
| 9 | 
            +
              # Hooks are called during different parts of the settings lifecycle:
         | 
| 10 | 
            +
              #
         | 
| 11 | 
            +
              # * :on_write_only - This is the default hook type. The hook will be called
         | 
| 12 | 
            +
              #   if its value is set in `main` or programmatically. If its value is set in
         | 
| 13 | 
            +
              #   a section that doesn't match the application's run mode, it will be
         | 
| 14 | 
            +
              #   ignored entirely. If the section does match the run mode, the value will
         | 
| 15 | 
            +
              #   be used, but the hook will not be called!
         | 
| 16 | 
            +
              #
         | 
| 17 | 
            +
              # * :on_define_and_write - The hook behaves the same as above, except it is
         | 
| 18 | 
            +
              #   also called immediately when the setting is defined in
         | 
| 19 | 
            +
              #   {Puppet::Settings.define_settings}. In that case, the hook receives the
         | 
| 20 | 
            +
              #   default value as specified.
         | 
| 21 | 
            +
              #
         | 
| 22 | 
            +
              # * :on_initialize_and_write - The hook will be called if the value is set in
         | 
| 23 | 
            +
              #   `main`, the section that matches the run mode, or programmatically.
         | 
| 24 | 
            +
              #
         | 
| 25 | 
            +
              HOOK_TYPES = Set.new([:on_define_and_write, :on_initialize_and_write, :on_write_only]).freeze
         | 
| 26 | 
            +
             | 
| 8 27 | 
             
              def self.available_call_hook_values
         | 
| 9 | 
            -
                 | 
| 28 | 
            +
                HOOK_TYPES.to_a
         | 
| 10 29 | 
             
              end
         | 
| 11 30 |  | 
| 31 | 
            +
              # Registers a hook to be called later based on the type of hook specified in `value`.
         | 
| 32 | 
            +
              #
         | 
| 33 | 
            +
              # @param value [Symbol] One of {HOOK_TYPES}
         | 
| 12 34 | 
             
              def call_hook=(value)
         | 
| 13 35 | 
             
                if value.nil?
         | 
| 14 36 | 
             
                  #TRANSLATORS ':%{name}', ':call_hook', and ':on_write_only' should not be translated
         | 
| 15 37 | 
             
                  Puppet.warning _("Setting :%{name} :call_hook is nil, defaulting to :on_write_only") % { name: name }
         | 
| 16 38 | 
             
                  value = :on_write_only
         | 
| 17 39 | 
             
                end
         | 
| 18 | 
            -
                unless  | 
| 40 | 
            +
                unless HOOK_TYPES.include?(value)
         | 
| 19 41 | 
             
                  #TRANSLATORS 'call_hook' is a Puppet option name and should not be translated
         | 
| 20 42 | 
             
                  raise ArgumentError, _("Invalid option %{value} for call_hook") % { value: value }
         | 
| 21 43 | 
             
                end
         | 
| 22 44 | 
             
                @call_hook = value
         | 
| 23 45 | 
             
              end
         | 
| 24 46 |  | 
| 47 | 
            +
              # @see {HOOK_TYPES}
         | 
| 25 48 | 
             
              def call_hook_on_define?
         | 
| 26 49 | 
             
                call_hook == :on_define_and_write
         | 
| 27 50 | 
             
              end
         | 
| 28 51 |  | 
| 52 | 
            +
              # @see {HOOK_TYPES}
         | 
| 29 53 | 
             
              def call_hook_on_initialize?
         | 
| 30 54 | 
             
                call_hook == :on_initialize_and_write
         | 
| 31 55 | 
             
              end
         | 
| @@ -63,9 +63,11 @@ class Puppet::Transaction::Report | |
| 63 63 | 
             
              # or 'on_failure'
         | 
| 64 64 | 
             
              attr_accessor :cached_catalog_status
         | 
| 65 65 |  | 
| 66 | 
            -
              # Contains the name and port of the  | 
| 66 | 
            +
              # Contains the name and port of the server that was successfully contacted
         | 
| 67 67 | 
             
              # @return [String] a string of the format 'servername:port'
         | 
| 68 | 
            -
              attr_accessor : | 
| 68 | 
            +
              attr_accessor :server_used
         | 
| 69 | 
            +
              alias :master_used :server_used
         | 
| 70 | 
            +
              alias :master_used= :server_used=
         | 
| 69 71 |  | 
| 70 72 | 
             
              # The host name for which the report is generated
         | 
| 71 73 | 
             
              # @return [String] the host name
         | 
| @@ -224,7 +226,7 @@ class Puppet::Transaction::Report | |
| 224 226 | 
             
                @external_times ||= {}
         | 
| 225 227 | 
             
                @host = Puppet[:node_name_value]
         | 
| 226 228 | 
             
                @time = start_time
         | 
| 227 | 
            -
                @report_format =  | 
| 229 | 
            +
                @report_format = 11
         | 
| 228 230 | 
             
                @puppet_version = Puppet.version
         | 
| 229 231 | 
             
                @configuration_version = configuration_version
         | 
| 230 232 | 
             
                @transaction_uuid = transaction_uuid
         | 
| @@ -232,7 +234,7 @@ class Puppet::Transaction::Report | |
| 232 234 | 
             
                @job_id = job_id
         | 
| 233 235 | 
             
                @catalog_uuid = nil
         | 
| 234 236 | 
             
                @cached_catalog_status = nil
         | 
| 235 | 
            -
                @ | 
| 237 | 
            +
                @server_used = nil
         | 
| 236 238 | 
             
                @environment = environment
         | 
| 237 239 | 
             
                @status = 'failed' # assume failed until the report is finalized
         | 
| 238 240 | 
             
                @noop = Puppet[:noop]
         | 
| @@ -256,8 +258,10 @@ class Puppet::Transaction::Report | |
| 256 258 | 
             
                @time = data['time']
         | 
| 257 259 | 
             
                @corrective_change = data['corrective_change']
         | 
| 258 260 |  | 
| 259 | 
            -
                if data[' | 
| 260 | 
            -
                  @ | 
| 261 | 
            +
                if data['server_used']
         | 
| 262 | 
            +
                  @server_used = data['server_used']
         | 
| 263 | 
            +
                elsif data['master_used']
         | 
| 264 | 
            +
                  @server_used = data['master_used']
         | 
| 261 265 | 
             
                end
         | 
| 262 266 |  | 
| 263 267 | 
             
                if data['catalog_uuid']
         | 
| @@ -322,7 +326,7 @@ class Puppet::Transaction::Report | |
| 322 326 | 
             
                }
         | 
| 323 327 |  | 
| 324 328 | 
             
                # The following is include only when set
         | 
| 325 | 
            -
                hash['master_used'] = @ | 
| 329 | 
            +
                hash['master_used'] = hash['server_used'] = @server_used unless @server_used.nil?
         | 
| 326 330 | 
             
                hash['catalog_uuid'] = @catalog_uuid unless @catalog_uuid.nil?
         | 
| 327 331 | 
             
                hash['code_id'] = @code_id unless @code_id.nil?
         | 
| 328 332 | 
             
                hash['job_id'] = @job_id unless @job_id.nil?
         | 
| @@ -57,7 +57,7 @@ module Puppet | |
| 57 57 | 
             
                    This setting is _only_ consulted if the `path` attribute is set to `false`.
         | 
| 58 58 |  | 
| 59 59 | 
             
                    If this attribute is not specified, the first entry in the `server_list`
         | 
| 60 | 
            -
                    configuration setting is used, followed by the value of the ` | 
| 60 | 
            +
                    configuration setting is used, followed by the value of the `serverport`
         | 
| 61 61 | 
             
                    setting if `server_list` is not set."
         | 
| 62 62 | 
             
                end
         | 
| 63 63 |  | 
    
        data/lib/puppet/type/package.rb
    CHANGED
    
    | @@ -426,10 +426,10 @@ module Puppet | |
| 426 426 | 
             
                end
         | 
| 427 427 |  | 
| 428 428 | 
             
                newparam(:source) do
         | 
| 429 | 
            -
                  desc "Where to find the package file. This is  | 
| 429 | 
            +
                  desc "Where to find the package file. This is mostly used by providers that don't
         | 
| 430 430 | 
             
                    automatically download packages from a central repository. (For example:
         | 
| 431 | 
            -
                    the `yum`  | 
| 432 | 
            -
                    `dpkg` providers require it.)
         | 
| 431 | 
            +
                    the `yum` provider ignores this attribute, `apt` provider uses it if present
         | 
| 432 | 
            +
                    and the `rpm` and `dpkg` providers require it.)
         | 
| 433 433 |  | 
| 434 434 | 
             
                    Different providers accept different values for `source`. Most providers
         | 
| 435 435 | 
             
                    accept paths to local files stored on the target system. Some providers
         | 
    
        data/lib/puppet/util/autoload.rb
    CHANGED
    
    | @@ -166,14 +166,7 @@ class Puppet::Util::Autoload | |
| 166 166 | 
             
                # Normalize a path. This converts ALT_SEPARATOR to SEPARATOR on Windows
         | 
| 167 167 | 
             
                # and eliminates unnecessary parts of a path.
         | 
| 168 168 | 
             
                def cleanpath(path)
         | 
| 169 | 
            -
                   | 
| 170 | 
            -
                  # paths correctly on windows (c:\ and c:/ are treated as distinct) but
         | 
| 171 | 
            -
                  # we don't want to convert relative paths to absolute
         | 
| 172 | 
            -
                  if Puppet::Util.absolute_path?(path)
         | 
| 173 | 
            -
                    File.expand_path(path)
         | 
| 174 | 
            -
                  else
         | 
| 175 | 
            -
                    Pathname.new(path).cleanpath.to_s
         | 
| 176 | 
            -
                  end
         | 
| 169 | 
            +
                  Pathname.new(path).cleanpath.to_s
         | 
| 177 170 | 
             
                end
         | 
| 178 171 | 
             
              end
         | 
| 179 172 |  | 
| @@ -8,7 +8,7 @@ module Puppet::Util | |
| 8 8 | 
             
                # The logic for server and port is kind of gross. In summary:
         | 
| 9 9 | 
             
                # IF an endpoint-specific setting is requested AND that setting has been set by the user
         | 
| 10 10 | 
             
                #    Use that setting.
         | 
| 11 | 
            -
                #         The defaults for these settings are the "normal" server/ | 
| 11 | 
            +
                #         The defaults for these settings are the "normal" server/serverport settings, so
         | 
| 12 12 | 
             
                #         when they are unset we instead want to "fall back" to the failover-selected
         | 
| 13 13 | 
             
                #         host/port pair.
         | 
| 14 14 | 
             
                # ELSE IF we have a failover-selected host/port
         | 
| @@ -17,7 +17,7 @@ module Puppet::Util | |
| 17 17 | 
             
                #    Use the first entry - failover hasn't happened yet, but that
         | 
| 18 18 | 
             
                #    setting is still authoritative
         | 
| 19 19 | 
             
                # ELSE
         | 
| 20 | 
            -
                #    Go for the legacy server/ | 
| 20 | 
            +
                #    Go for the legacy server/serverport settings, and hope for the best
         | 
| 21 21 |  | 
| 22 22 | 
             
                # Determines which server to use based on the specified setting, taking into
         | 
| 23 23 | 
             
                # account HA fallback from server_list.
         | 
| @@ -55,7 +55,7 @@ module Puppet::Util | |
| 55 55 | 
             
                # @param [Symbol] server_setting The server setting assoicated with this route.
         | 
| 56 56 | 
             
                # @return [Integer] the port to use for use in the request
         | 
| 57 57 | 
             
                def self.determine_port(port_setting, server_setting)
         | 
| 58 | 
            -
                  if (port_setting && port_setting != : | 
| 58 | 
            +
                  if (port_setting && port_setting != :serverport && Puppet.settings.set_by_config?(port_setting)) ||
         | 
| 59 59 | 
             
                     (server_setting && server_setting != :server && Puppet.settings.set_by_config?(server_setting))
         | 
| 60 60 | 
             
                    debug_once _("Selected port from the %{setting} setting: %{port}") % {setting: port_setting, port: Puppet.settings[port_setting].to_i}
         | 
| 61 61 | 
             
                    Puppet.settings[port_setting].to_i
         | 
| @@ -65,18 +65,18 @@ module Puppet::Util | |
| 65 65 | 
             
                      if primary_server
         | 
| 66 66 | 
             
                        # Port might not be set, so we want to fallback in that
         | 
| 67 67 | 
             
                        # case. We know we don't need to use `setting` here, since
         | 
| 68 | 
            -
                        # the default value of every port setting is ` | 
| 68 | 
            +
                        # the default value of every port setting is `serverport`
         | 
| 69 69 | 
             
                        if primary_server[1]
         | 
| 70 70 | 
             
                          #TRANSLATORS 'server_list' is the name of a setting and should not be translated
         | 
| 71 71 | 
             
                          debug_once _("Dynamically-bound port lookup failed; using first entry from the `server_list` setting: %{port}") % {port: primary_server[1]}
         | 
| 72 72 | 
             
                          primary_server[1]
         | 
| 73 73 | 
             
                        else
         | 
| 74 | 
            -
                          #TRANSLATORS ' | 
| 75 | 
            -
                          debug_once _("Dynamically-bound port lookup failed; falling back to ` | 
| 76 | 
            -
                          Puppet.settings[: | 
| 74 | 
            +
                          #TRANSLATORS 'serverport' is the name of a setting and should not be translated
         | 
| 75 | 
            +
                          debug_once _("Dynamically-bound port lookup failed; falling back to `serverport` setting: %{port}") % {port: Puppet.settings[:serverport]}
         | 
| 76 | 
            +
                          Puppet.settings[:serverport]
         | 
| 77 77 | 
             
                        end
         | 
| 78 78 | 
             
                      else
         | 
| 79 | 
            -
                        port_setting ||= : | 
| 79 | 
            +
                        port_setting ||= :serverport
         | 
| 80 80 | 
             
                        debug_once _("Dynamically-bound port lookup failed; falling back to %{setting} setting: %{port}") % {setting: port_setting, port: Puppet.settings[port_setting]}
         | 
| 81 81 | 
             
                        Puppet.settings[port_setting]
         | 
| 82 82 | 
             
                      end
         | 
| @@ -0,0 +1,62 @@ | |
| 1 | 
            +
            require 'json'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class FactDif
         | 
| 4 | 
            +
              def initialize(old_output, new_output, exclude_list = [])
         | 
| 5 | 
            +
                @c_facter = JSON.parse(old_output)['values']
         | 
| 6 | 
            +
                @next_facter = JSON.parse(new_output)['values']
         | 
| 7 | 
            +
                @exclude_list = exclude_list
         | 
| 8 | 
            +
                @diff = {}
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              def difs
         | 
| 12 | 
            +
                search_hash(@c_facter, [])
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                @diff
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              private
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              def search_hash(sh, path = [])
         | 
| 20 | 
            +
                if sh.is_a?(Hash)
         | 
| 21 | 
            +
                  sh.each do |k, v|
         | 
| 22 | 
            +
                    search_hash(v, path.push(k))
         | 
| 23 | 
            +
                    path.pop
         | 
| 24 | 
            +
                  end
         | 
| 25 | 
            +
                elsif sh.is_a?(Array)
         | 
| 26 | 
            +
                  sh.each_with_index do |v, index|
         | 
| 27 | 
            +
                    search_hash(v, path.push(index))
         | 
| 28 | 
            +
                    path.pop
         | 
| 29 | 
            +
                  end
         | 
| 30 | 
            +
                else
         | 
| 31 | 
            +
                  compare(path, sh)
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
              end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
              def compare(fact_path, old_value)
         | 
| 36 | 
            +
                new_value = @next_facter.dig(*fact_path)
         | 
| 37 | 
            +
                if different?(new_value, old_value) && !excluded?(fact_path.join('.'))
         | 
| 38 | 
            +
                  @diff[fact_path.join('.')] = { new_value: new_value, old_value: old_value }
         | 
| 39 | 
            +
                end
         | 
| 40 | 
            +
              end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
              def different?(new, old)
         | 
| 43 | 
            +
                if old.is_a?(String) && new.is_a?(String)
         | 
| 44 | 
            +
                  old_values = old.split(',')
         | 
| 45 | 
            +
                  new_values = new.split(',')
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                  diff = old_values - new_values
         | 
| 48 | 
            +
                  # also add new entries only available in Facter 4
         | 
| 49 | 
            +
                  diff.concat(new_values - old_values)
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                  return true if diff.any?
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                  return false
         | 
| 54 | 
            +
                end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                old != new
         | 
| 57 | 
            +
              end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
              def excluded?(fact_name)
         | 
| 60 | 
            +
                @exclude_list.any? {|excluded_fact| fact_name =~ /#{excluded_fact}/}
         | 
| 61 | 
            +
              end
         | 
| 62 | 
            +
            end
         | 
    
        data/lib/puppet/util/posix.rb
    CHANGED
    
    | @@ -12,11 +12,18 @@ module Puppet::Util::POSIX | |
| 12 12 | 
             
              class << self
         | 
| 13 13 | 
             
                # Returns an array of all the groups that the user's a member of.
         | 
| 14 14 | 
             
                def groups_of(user)
         | 
| 15 | 
            -
                   | 
| 16 | 
            -
             | 
| 17 | 
            -
                    groups  | 
| 15 | 
            +
                  begin
         | 
| 16 | 
            +
                    require 'puppet/ffi/posix'
         | 
| 17 | 
            +
                    groups = get_groups_list(user)
         | 
| 18 | 
            +
                  rescue StandardError, LoadError => e
         | 
| 19 | 
            +
                    Puppet.debug("Falling back to Puppet::Etc.group: #{e.message}")
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    groups = []
         | 
| 22 | 
            +
                    Puppet::Etc.group do |group|
         | 
| 23 | 
            +
                      groups << group.name if group.mem.include?(user)
         | 
| 24 | 
            +
                    end
         | 
| 18 25 | 
             
                  end
         | 
| 19 | 
            -
             | 
| 26 | 
            +
             | 
| 20 27 | 
             
                  uniq_groups = groups.uniq
         | 
| 21 28 | 
             
                  if uniq_groups != groups
         | 
| 22 29 | 
             
                    Puppet.debug(_('Removing any duplicate group entries'))
         | 
| @@ -24,6 +31,39 @@ module Puppet::Util::POSIX | |
| 24 31 |  | 
| 25 32 | 
             
                  uniq_groups
         | 
| 26 33 | 
             
                end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                private
         | 
| 36 | 
            +
                def get_groups_list(user)
         | 
| 37 | 
            +
                  raise LoadError, "The 'getgrouplist' method is not available" unless Puppet::FFI::POSIX::Functions.respond_to?(:getgrouplist)
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                  user_gid = Puppet::Etc.getpwnam(user).gid
         | 
| 40 | 
            +
                  ngroups = Puppet::FFI::POSIX::Constants::MAXIMUM_NUMBER_OF_GROUPS
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                  while true do # rubocop:disable Lint/LiteralInCondition
         | 
| 43 | 
            +
                    FFI::MemoryPointer.new(:int) do |ngroups_ptr|
         | 
| 44 | 
            +
                      FFI::MemoryPointer.new(:uint, ngroups) do |groups_ptr|
         | 
| 45 | 
            +
                        old_ngroups = ngroups
         | 
| 46 | 
            +
                        ngroups_ptr.write_int(ngroups)
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                        if Puppet::FFI::POSIX::Functions::getgrouplist(user, user_gid, groups_ptr, ngroups_ptr) != -1
         | 
| 49 | 
            +
                          groups_gids = groups_ptr.get_array_of_uint(0, ngroups_ptr.read_int)
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                          result = []
         | 
| 52 | 
            +
                          groups_gids.each do |group_gid|
         | 
| 53 | 
            +
                            group_info = Puppet::Etc.getgrgid(group_gid)
         | 
| 54 | 
            +
                            result |= [group_info.name] if group_info.mem.include?(user)
         | 
| 55 | 
            +
                          end
         | 
| 56 | 
            +
                          return result
         | 
| 57 | 
            +
                        end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                        ngroups = ngroups_ptr.read_int
         | 
| 60 | 
            +
                        if ngroups <= old_ngroups
         | 
| 61 | 
            +
                          ngroups *= 2
         | 
| 62 | 
            +
                        end
         | 
| 63 | 
            +
                      end
         | 
| 64 | 
            +
                    end
         | 
| 65 | 
            +
                  end
         | 
| 66 | 
            +
                end
         | 
| 27 67 | 
             
              end
         | 
| 28 68 |  | 
| 29 69 | 
             
              # Retrieve a field from a POSIX Etc object.  The id can be either an integer
         | 
| @@ -144,8 +184,17 @@ module Puppet::Util::POSIX | |
| 144 184 | 
             
                  name = get_posix_field(location, :name, id)
         | 
| 145 185 | 
             
                  check_value = name
         | 
| 146 186 | 
             
                end
         | 
| 187 | 
            +
             | 
| 147 188 | 
             
                if check_value != field
         | 
| 148 | 
            -
                   | 
| 189 | 
            +
                  check_value_id = get_posix_field(location, id_field, check_value) if check_value
         | 
| 190 | 
            +
             | 
| 191 | 
            +
                  if id == check_value_id
         | 
| 192 | 
            +
                    Puppet.debug("Multiple entries found for resource: '#{location}' with #{id_field}: #{id}")
         | 
| 193 | 
            +
                    return id
         | 
| 194 | 
            +
                  else
         | 
| 195 | 
            +
                    Puppet.debug("The value retrieved: '#{check_value}' is different than the required state: '#{field}', searching in all entries")
         | 
| 196 | 
            +
                    return search_posix_field(location, id_field, field)
         | 
| 197 | 
            +
                  end
         | 
| 149 198 | 
             
                else
         | 
| 150 199 | 
             
                  return id
         | 
| 151 200 | 
             
                end
         | 
    
        data/lib/puppet/util/rubygems.rb
    CHANGED
    
    | @@ -41,7 +41,11 @@ module Puppet::Util::RubyGems | |
| 41 41 | 
             
                def directories
         | 
| 42 42 | 
             
                  # `require 'mygem'` will consider and potentially load
         | 
| 43 43 | 
             
                  # prerelease gems, so we need to match that behavior.
         | 
| 44 | 
            -
                   | 
| 44 | 
            +
                  #
         | 
| 45 | 
            +
                  # Just load the stub which points to the gem path, and
         | 
| 46 | 
            +
                  # delay loading the full specification until if/when the
         | 
| 47 | 
            +
                  # gem is required.
         | 
| 48 | 
            +
                  Gem::Specification.stubs.collect do |spec|
         | 
| 45 49 | 
             
                    File.join(spec.full_gem_path, 'lib')
         | 
| 46 50 | 
             
                  end
         | 
| 47 51 | 
             
                end
         | 
    
        data/lib/puppet/util/run_mode.rb
    CHANGED
    
    
| @@ -191,7 +191,7 @@ module Puppet::Util::Windows | |
| 191 191 | 
             
                SERVICE_CONFIG_PRESHUTDOWN_INFO         = 0x00000007
         | 
| 192 192 | 
             
                SERVICE_CONFIG_TRIGGER_INFO             = 0x00000008
         | 
| 193 193 | 
             
                SERVICE_CONFIG_PREFERRED_NODE           = 0x00000009
         | 
| 194 | 
            -
                SERVICE_CONFIG_LAUNCH_PROTECTED         =  | 
| 194 | 
            +
                SERVICE_CONFIG_LAUNCH_PROTECTED         = 0x0000000C
         | 
| 195 195 | 
             
                SERVICE_NO_CHANGE                       = 0xffffffff
         | 
| 196 196 | 
             
                SERVICE_CONFIG_TYPES = {
         | 
| 197 197 | 
             
                  SERVICE_CONFIG_DESCRIPTION => :SERVICE_CONFIG_DESCRIPTION,
         | 
    
        data/lib/puppet/version.rb
    CHANGED