puppet 5.5.16-x86-mingw32 → 5.5.21-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CODEOWNERS +10 -10
- data/Gemfile +2 -3
- data/Gemfile.lock +57 -52
- data/ext/build_defaults.yaml +1 -0
- data/ext/cert_inspector +3 -3
- data/ext/project_data.yaml +2 -2
- data/ext/puppet-test +2 -2
- data/ext/regexp_nodes/regexp_nodes.rb +4 -4
- data/ext/windows/service/daemon.rb +54 -8
- data/install.rb +6 -24
- data/lib/puppet.rb +5 -2
- data/lib/puppet/agent.rb +5 -13
- data/lib/puppet/application.rb +1 -1
- data/lib/puppet/application/agent.rb +15 -1
- data/lib/puppet/application/apply.rb +2 -2
- data/lib/puppet/application/describe.rb +3 -9
- data/lib/puppet/application/device.rb +4 -4
- data/lib/puppet/application/doc.rb +1 -1
- data/lib/puppet/application/filebucket.rb +13 -0
- data/lib/puppet/application/lookup.rb +1 -1
- data/lib/puppet/application/resource.rb +4 -4
- data/lib/puppet/application/script.rb +2 -2
- data/lib/puppet/configurer.rb +86 -28
- data/lib/puppet/configurer/downloader.rb +2 -6
- data/lib/puppet/daemon.rb +1 -1
- data/lib/puppet/defaults.rb +82 -38
- data/lib/puppet/error.rb +9 -1
- data/lib/puppet/external/nagios/base.rb +1 -1
- data/lib/puppet/face/ca.rb +1 -1
- data/lib/puppet/face/config.rb +10 -48
- data/lib/puppet/face/facts.rb +1 -1
- data/lib/puppet/face/module/list.rb +5 -5
- data/lib/puppet/face/module/search.rb +1 -1
- data/lib/puppet/face/module/uninstall.rb +1 -1
- data/lib/puppet/face/module/upgrade.rb +1 -1
- data/lib/puppet/face/plugin.rb +9 -2
- data/lib/puppet/file_serving/http_metadata.rb +1 -1
- data/lib/puppet/file_system.rb +0 -8
- data/lib/puppet/file_system/memory_file.rb +1 -1
- data/lib/puppet/file_system/posix.rb +3 -2
- data/lib/puppet/file_system/uniquefile.rb +4 -0
- data/lib/puppet/forge.rb +3 -3
- data/lib/puppet/functions/epp.rb +4 -4
- data/lib/puppet/functions/inline_epp.rb +5 -5
- data/lib/puppet/functions/reduce.rb +2 -4
- data/lib/puppet/gettext/module_translations.rb +1 -1
- data/lib/puppet/graph/rb_tree_map.rb +2 -2
- data/lib/puppet/graph/simple_graph.rb +6 -5
- data/lib/puppet/indirector/catalog/compiler.rb +8 -0
- data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
- data/lib/puppet/indirector/hiera.rb +2 -0
- data/lib/puppet/indirector/resource/ral.rb +1 -3
- data/lib/puppet/indirector/resource/validator.rb +1 -1
- data/lib/puppet/interface.rb +2 -1
- data/lib/puppet/loaders.rb +0 -1
- data/lib/puppet/metatype/manager.rb +1 -1
- data/lib/puppet/module.rb +1 -1
- data/lib/puppet/module_tool/applications/builder.rb +1 -1
- data/lib/puppet/module_tool/applications/installer.rb +1 -1
- data/lib/puppet/module_tool/applications/uninstaller.rb +3 -3
- data/lib/puppet/module_tool/metadata.rb +1 -1
- data/lib/puppet/module_tool/shared_behaviors.rb +4 -4
- data/lib/puppet/module_tool/tar/mini.rb +12 -2
- data/lib/puppet/network/http/api/indirected_routes.rb +13 -12
- data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
- data/lib/puppet/network/http/connection.rb +14 -12
- data/lib/puppet/network/http/factory.rb +1 -11
- data/lib/puppet/network/http/pool.rb +7 -1
- data/lib/puppet/network/http/rack/rest.rb +2 -2
- data/lib/puppet/network/http/site.rb +1 -1
- data/lib/puppet/network/resolver.rb +2 -2
- data/lib/puppet/node/environment.rb +4 -2
- data/lib/puppet/parameter.rb +8 -0
- data/lib/puppet/parser/ast.rb +1 -1
- data/lib/puppet/parser/ast/resourceparam.rb +1 -1
- data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
- data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
- data/lib/puppet/parser/environment_compiler.rb +3 -0
- data/lib/puppet/parser/functions.rb +1 -1
- data/lib/puppet/parser/functions/epp.rb +3 -3
- data/lib/puppet/parser/functions/inline_epp.rb +5 -5
- data/lib/puppet/parser/resource.rb +3 -2
- data/lib/puppet/parser/resource/param.rb +6 -0
- data/lib/puppet/pops/evaluator/access_operator.rb +2 -2
- data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +1 -1
- data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +1 -1
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
- data/lib/puppet/pops/evaluator/external_syntax_support.rb +3 -2
- data/lib/puppet/pops/evaluator/runtime3_support.rb +4 -4
- data/lib/puppet/pops/issues.rb +5 -0
- data/lib/puppet/pops/loaders.rb +1 -1
- data/lib/puppet/pops/lookup/hiera_config.rb +1 -0
- data/lib/puppet/pops/lookup/sub_lookup.rb +1 -1
- data/lib/puppet/pops/merge_strategy.rb +22 -18
- data/lib/puppet/pops/parser/heredoc_support.rb +1 -1
- data/lib/puppet/pops/parser/interpolation_support.rb +4 -4
- data/lib/puppet/pops/parser/locator.rb +1 -1
- data/lib/puppet/pops/parser/pn_parser.rb +17 -16
- data/lib/puppet/pops/puppet_stack.rb +51 -48
- data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
- data/lib/puppet/pops/types/p_sensitive_type.rb +1 -1
- data/lib/puppet/pops/types/string_converter.rb +10 -10
- data/lib/puppet/pops/types/type_calculator.rb +24 -0
- data/lib/puppet/pops/types/types.rb +3 -3
- data/lib/puppet/pops/validation/checker4_0.rb +10 -0
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
- data/lib/puppet/property.rb +1 -1
- data/lib/puppet/property/ensure.rb +1 -1
- data/lib/puppet/provider/augeas/augeas.rb +1 -1
- data/lib/puppet/provider/cron/crontab.rb +1 -1
- data/lib/puppet/provider/exec.rb +6 -2
- data/lib/puppet/provider/file/posix.rb +5 -0
- data/lib/puppet/provider/group/groupadd.rb +19 -19
- data/lib/puppet/provider/group/windows_adsi.rb +3 -3
- data/lib/puppet/provider/mailalias/aliases.rb +1 -1
- data/lib/puppet/provider/mount.rb +1 -1
- data/lib/puppet/provider/mount/parsed.rb +8 -8
- data/lib/puppet/provider/nameservice.rb +10 -3
- data/lib/puppet/provider/nameservice/directoryservice.rb +1 -1
- data/lib/puppet/provider/nameservice/pw.rb +2 -2
- data/lib/puppet/provider/package/aix.rb +17 -2
- data/lib/puppet/provider/package/apt.rb +14 -3
- data/lib/puppet/provider/package/dnf.rb +1 -1
- data/lib/puppet/provider/package/dnfmodule.rb +141 -0
- data/lib/puppet/provider/package/dpkg.rb +16 -18
- data/lib/puppet/provider/package/fink.rb +20 -3
- data/lib/puppet/provider/package/openbsd.rb +14 -2
- data/lib/puppet/provider/package/pip.rb +37 -10
- data/lib/puppet/provider/package/pkg.rb +18 -5
- data/lib/puppet/provider/package/pkgdmg.rb +1 -1
- data/lib/puppet/provider/package/pkgng.rb +16 -4
- data/lib/puppet/provider/package/portage.rb +4 -4
- data/lib/puppet/provider/package/rpm.rb +57 -19
- data/lib/puppet/provider/package/windows/package.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +35 -24
- data/lib/puppet/provider/package/zypper.rb +1 -0
- data/lib/puppet/provider/package_targetable.rb +5 -4
- data/lib/puppet/provider/parsedfile.rb +1 -1
- data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +3 -3
- data/lib/puppet/provider/selmodule/semodule.rb +43 -26
- data/lib/puppet/provider/service/daemontools.rb +9 -9
- data/lib/puppet/provider/service/launchd.rb +20 -5
- data/lib/puppet/provider/service/openbsd.rb +1 -1
- data/lib/puppet/provider/service/rcng.rb +2 -2
- data/lib/puppet/provider/service/runit.rb +2 -8
- data/lib/puppet/provider/service/systemd.rb +35 -22
- data/lib/puppet/provider/service/windows.rb +8 -0
- data/lib/puppet/provider/user/directoryservice.rb +31 -6
- data/lib/puppet/provider/user/hpux.rb +1 -1
- data/lib/puppet/provider/user/pw.rb +12 -3
- data/lib/puppet/provider/user/user_role_add.rb +5 -1
- data/lib/puppet/provider/user/useradd.rb +62 -27
- data/lib/puppet/provider/user/windows_adsi.rb +4 -5
- data/lib/puppet/provider/yumrepo/inifile.rb +2 -2
- data/lib/puppet/reference/indirection.rb +2 -2
- data/lib/puppet/reference/metaparameter.rb +1 -3
- data/lib/puppet/reference/providers.rb +1 -1
- data/lib/puppet/reference/type.rb +3 -9
- data/lib/puppet/reports.rb +1 -1
- data/lib/puppet/resource.rb +18 -1
- data/lib/puppet/resource/catalog.rb +1 -1
- data/lib/puppet/resource/type.rb +8 -0
- data/lib/puppet/settings.rb +43 -3
- data/lib/puppet/settings/environment_conf.rb +1 -0
- data/lib/puppet/ssl/certificate.rb +2 -1
- data/lib/puppet/ssl/certificate_authority.rb +6 -5
- data/lib/puppet/ssl/certificate_authority/interface.rb +1 -1
- data/lib/puppet/ssl/certificate_factory.rb +2 -2
- data/lib/puppet/ssl/host.rb +3 -3
- data/lib/puppet/ssl/oids.rb +1 -1
- data/lib/puppet/test/test_helper.rb +15 -10
- data/lib/puppet/transaction/report.rb +1 -1
- data/lib/puppet/transaction/resource_harness.rb +1 -1
- data/lib/puppet/type.rb +15 -4
- data/lib/puppet/type/cron.rb +1 -1
- data/lib/puppet/type/exec.rb +21 -9
- data/lib/puppet/type/file.rb +14 -2
- data/lib/puppet/type/file/data_sync.rb +5 -1
- data/lib/puppet/type/group.rb +4 -2
- data/lib/puppet/type/interface.rb +1 -1
- data/lib/puppet/type/notify.rb +3 -2
- data/lib/puppet/type/package.rb +107 -8
- data/lib/puppet/type/schedule.rb +1 -1
- data/lib/puppet/type/selboolean.rb +17 -3
- data/lib/puppet/type/service.rb +9 -10
- data/lib/puppet/type/user.rb +6 -24
- data/lib/puppet/type/yumrepo.rb +3 -7
- data/lib/puppet/util.rb +47 -25
- data/lib/puppet/util/command_line/trollop.rb +1 -1
- data/lib/puppet/util/execution.rb +4 -3
- data/lib/puppet/util/http_proxy.rb +24 -16
- data/lib/puppet/util/instance_loader.rb +1 -1
- data/lib/puppet/util/log.rb +1 -1
- data/lib/puppet/util/log/destinations.rb +3 -12
- data/lib/puppet/util/logging.rb +30 -18
- data/lib/puppet/util/metric.rb +2 -2
- data/lib/puppet/util/monkey_patches.rb +1 -1
- data/lib/puppet/util/nagios_maker.rb +2 -2
- data/lib/puppet/util/network_device/cisco/device.rb +1 -1
- data/lib/puppet/util/network_device/cisco/interface.rb +2 -2
- data/lib/puppet/util/network_device/transport/ssh.rb +1 -1
- data/lib/puppet/util/pidlock.rb +12 -6
- data/lib/puppet/util/plist.rb +6 -0
- data/lib/puppet/util/provider_features.rb +2 -4
- data/lib/puppet/util/rdoc.rb +1 -1
- data/lib/puppet/util/reference.rb +1 -1
- data/lib/puppet/util/resource_template.rb +1 -1
- data/lib/puppet/util/selinux.rb +8 -2
- data/lib/puppet/util/windows/adsi.rb +60 -30
- data/lib/puppet/util/windows/api_types.rb +45 -32
- data/lib/puppet/util/windows/eventlog.rb +1 -6
- data/lib/puppet/util/windows/principal.rb +8 -6
- data/lib/puppet/util/windows/process.rb +16 -15
- data/lib/puppet/util/windows/registry.rb +17 -15
- data/lib/puppet/util/windows/security.rb +3 -0
- data/lib/puppet/util/windows/service.rb +149 -4
- data/lib/puppet/util/windows/sid.rb +4 -3
- data/lib/puppet/vendor.rb +1 -1
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet_pal.rb +2 -2
- data/locales/puppet.pot +479 -443
- data/man/man5/puppet.conf.5 +38 -8
- data/man/man8/puppet-agent.8 +2 -2
- data/man/man8/puppet-apply.8 +1 -1
- data/man/man8/puppet-ca.8 +1 -1
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-cert.8 +1 -1
- data/man/man8/puppet-certificate.8 +1 -1
- data/man/man8/puppet-certificate_request.8 +1 -1
- data/man/man8/puppet-certificate_revocation_list.8 +1 -1
- data/man/man8/puppet-config.8 +1 -1
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +1 -1
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +1 -1
- data/man/man8/puppet-filebucket.8 +16 -1
- 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-master.8 +1 -1
- data/man/man8/puppet-module.8 +1 -1
- data/man/man8/puppet-node.8 +1 -1
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +1 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +1 -1
- data/man/man8/puppet-status.8 +1 -1
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/integration/provider/mailalias/aliases/test1 +1 -0
- data/spec/fixtures/unit/provider/package/dnfmodule/dnf-module-list.txt +19 -0
- data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
- data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
- data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
- data/spec/integration/configurer_spec.rb +52 -0
- data/spec/integration/defaults_spec.rb +1 -2
- data/spec/integration/indirector/facts/facter_spec.rb +4 -0
- data/spec/integration/parser/compiler_spec.rb +11 -0
- data/spec/integration/provider/service/systemd_spec.rb +8 -5
- data/spec/integration/type/file_spec.rb +28 -0
- data/spec/integration/type/notify_spec.rb +46 -0
- data/spec/integration/util/execution_spec.rb +27 -0
- data/spec/integration/util/windows/adsi_spec.rb +6 -1
- data/spec/integration/util/windows/registry_spec.rb +7 -7
- data/spec/unit/agent_spec.rb +34 -26
- data/spec/unit/application/agent_spec.rb +18 -0
- data/spec/unit/application/apply_spec.rb +2 -12
- data/spec/unit/application/device_spec.rb +1 -1
- data/spec/unit/configurer/fact_handler_spec.rb +0 -4
- data/spec/unit/configurer_spec.rb +377 -397
- data/spec/unit/daemon_spec.rb +0 -1
- data/spec/unit/face/facts_spec.rb +9 -0
- data/spec/unit/face/plugin_spec.rb +8 -0
- data/spec/unit/file_system/uniquefile_spec.rb +11 -0
- data/spec/unit/forge/forge_spec.rb +1 -3
- data/spec/unit/forge/repository_spec.rb +1 -3
- data/spec/unit/indirector/catalog/compiler_spec.rb +45 -26
- data/spec/unit/indirector/resource/ral_spec.rb +4 -4
- data/spec/unit/module_tool/tar/mini_spec.rb +1 -1
- data/spec/unit/network/http/api/indirected_routes_spec.rb +28 -11
- data/spec/unit/network/http/connection_spec.rb +43 -1
- data/spec/unit/network/http/factory_spec.rb +27 -5
- data/spec/unit/network/http/pool_spec.rb +32 -0
- data/spec/unit/node_spec.rb +7 -4
- data/spec/unit/parser/environment_compiler_spec.rb +7 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -3
- data/spec/unit/pops/validator/validator_spec.rb +7 -0
- data/spec/unit/provider/exec_spec.rb +209 -0
- data/spec/unit/provider/group/groupadd_spec.rb +30 -1
- data/spec/unit/provider/group/windows_adsi_spec.rb +43 -10
- data/spec/unit/provider/package/aix_spec.rb +29 -0
- data/spec/unit/provider/package/apt_spec.rb +13 -2
- data/spec/unit/provider/package/aptitude_spec.rb +1 -0
- data/spec/unit/provider/package/aptrpm_spec.rb +1 -1
- data/spec/unit/provider/package/dnf_spec.rb +7 -0
- data/spec/unit/provider/package/dnfmodule_spec.rb +247 -0
- data/spec/unit/provider/package/dpkg_spec.rb +35 -7
- data/spec/unit/provider/package/openbsd_spec.rb +17 -0
- data/spec/unit/provider/package/pip_spec.rb +93 -22
- data/spec/unit/provider/package/pkg_spec.rb +13 -1
- data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
- data/spec/unit/provider/package/pkgng_spec.rb +36 -0
- data/spec/unit/provider/package/portage_spec.rb +4 -4
- data/spec/unit/provider/package/rpm_spec.rb +150 -16
- data/spec/unit/provider/package/yum_spec.rb +66 -0
- data/spec/unit/provider/package/zypper_spec.rb +13 -0
- data/spec/unit/provider/package_targetable_spec.rb +60 -0
- data/spec/unit/provider/selmodule_spec.rb +118 -47
- data/spec/unit/provider/service/daemontools_spec.rb +24 -0
- data/spec/unit/provider/service/launchd_spec.rb +28 -0
- data/spec/unit/provider/service/runit_spec.rb +24 -0
- data/spec/unit/provider/service/systemd_spec.rb +109 -36
- data/spec/unit/provider/service/windows_spec.rb +20 -0
- data/spec/unit/provider/user/directoryservice_spec.rb +41 -0
- data/spec/unit/provider/user/hpux_spec.rb +2 -2
- data/spec/unit/provider/user/openbsd_spec.rb +1 -0
- data/spec/unit/provider/user/pw_spec.rb +37 -0
- data/spec/unit/provider/user/useradd_spec.rb +122 -15
- data/spec/unit/provider/user/windows_adsi_spec.rb +3 -3
- data/spec/unit/puppet_pal_2pec.rb +3 -0
- data/spec/unit/resource_spec.rb +26 -1
- data/spec/unit/ssl/certificate_authority_spec.rb +2 -3
- data/spec/unit/ssl/certificate_spec.rb +7 -0
- data/spec/unit/test/test_helper_spec.rb +17 -0
- data/spec/unit/transaction_spec.rb +18 -0
- data/spec/unit/type/exec_spec.rb +15 -12
- data/spec/unit/type/file/content_spec.rb +9 -3
- data/spec/unit/type/file/source_spec.rb +4 -4
- data/spec/unit/type/file_spec.rb +9 -4
- data/spec/unit/type/package_spec.rb +8 -0
- data/spec/unit/type/schedule_spec.rb +3 -1
- data/spec/unit/type/selboolean_spec.rb +4 -6
- data/spec/unit/type/service_spec.rb +25 -8
- data/spec/unit/type/user_spec.rb +32 -26
- data/spec/unit/type/yumrepo_spec.rb +30 -0
- data/spec/unit/type_spec.rb +40 -0
- data/spec/unit/util/execution_spec.rb +16 -0
- data/spec/unit/util/http_proxy_spec.rb +121 -1
- data/spec/unit/util/log/destinations_spec.rb +2 -26
- data/spec/unit/util/log_spec.rb +0 -112
- data/spec/unit/util/logging_spec.rb +200 -0
- data/spec/unit/util/pidlock_spec.rb +67 -40
- data/spec/unit/util/plist_spec.rb +20 -0
- data/spec/unit/util/windows/adsi_spec.rb +55 -4
- data/spec/unit/util/windows/api_types_spec.rb +104 -40
- data/spec/unit/util/windows/service_spec.rb +9 -0
- data/spec/unit/util/windows/sid_spec.rb +2 -2
- data/tasks/manpages.rake +1 -0
- metadata +18 -13
- data/ext/windows/eventlog/Rakefile +0 -32
- data/ext/windows/eventlog/puppetres.dll +0 -0
- data/ext/windows/eventlog/puppetres.mc +0 -18
- data/lib/puppet/pops/loader/null_loader.rb +0 -60
- data/locales/ja/puppet.po +0 -12114
- data/spec/integration/test/test_helper_spec.rb +0 -31
@@ -102,7 +102,7 @@ Puppet::Type.type(:package).provide :pkgdmg, :parent => Puppet::Provider::Packag
|
|
102
102
|
if source =~ /\.dmg$/i
|
103
103
|
# If you fix this to use open-uri again, you must update the docs above. -NF
|
104
104
|
File.open(cached_source) do |dmg|
|
105
|
-
xml_str = hdiutil "mount", "-plist", "-nobrowse", "-readonly", "-
|
105
|
+
xml_str = hdiutil "mount", "-plist", "-nobrowse", "-readonly", "-mountrandom", "/tmp", dmg.path
|
106
106
|
hdiutil_info = Puppet::Util::Plist.parse_plist(xml_str)
|
107
107
|
raise Puppet::Error.new(_("No disk entities returned by mount at %{path}") % { path: dmg.path }) unless hdiutil_info.has_key?("system-entities")
|
108
108
|
mounts = hdiutil_info["system-entities"].collect { |entity|
|
@@ -11,6 +11,7 @@ Puppet::Type.type(:package).provide :pkgng, :parent => Puppet::Provider::Package
|
|
11
11
|
|
12
12
|
has_feature :versionable
|
13
13
|
has_feature :upgradeable
|
14
|
+
has_feature :install_options
|
14
15
|
|
15
16
|
def self.get_query
|
16
17
|
pkg(['query', '-a', '%n %v %o'])
|
@@ -22,7 +23,11 @@ Puppet::Type.type(:package).provide :pkgng, :parent => Puppet::Provider::Package
|
|
22
23
|
|
23
24
|
def self.get_latest_version(origin, version_list)
|
24
25
|
if latest_version = version_list.lines.find { |l| l =~ /^#{origin} / }
|
25
|
-
|
26
|
+
_name, compare, status = latest_version.chomp.split(' ', 3)
|
27
|
+
if ['!', '?'].include?(compare)
|
28
|
+
return nil
|
29
|
+
end
|
30
|
+
latest_version = status.split(' ').last.split(')').first
|
26
31
|
return latest_version
|
27
32
|
end
|
28
33
|
nil
|
@@ -97,13 +102,16 @@ Puppet::Type.type(:package).provide :pkgng, :parent => Puppet::Provider::Package
|
|
97
102
|
end
|
98
103
|
|
99
104
|
if not source # install using default repo logic
|
100
|
-
args = ['install', '-qy'
|
105
|
+
args = ['install', '-qy']
|
101
106
|
elsif source.scheme == 'urn' # install from repo named in URN
|
102
107
|
tag = repo_tag_from_urn(source.to_s)
|
103
|
-
args = ['install', '-qy', '-r', tag
|
108
|
+
args = ['install', '-qy', '-r', tag]
|
104
109
|
else # add package located at URL
|
105
|
-
args = ['add', '-q'
|
110
|
+
args = ['add', '-q']
|
111
|
+
installname = source.to_s
|
106
112
|
end
|
113
|
+
args += install_options if @resource[:install_options]
|
114
|
+
args << installname
|
107
115
|
|
108
116
|
pkg(args)
|
109
117
|
end
|
@@ -140,4 +148,8 @@ Puppet::Type.type(:package).provide :pkgng, :parent => Puppet::Provider::Package
|
|
140
148
|
@property_hash[:origin]
|
141
149
|
end
|
142
150
|
|
151
|
+
def install_options
|
152
|
+
join_options(@resource[:install_options])
|
153
|
+
end
|
154
|
+
|
143
155
|
end
|
@@ -70,7 +70,7 @@ Puppet::Type.type(:package).provide :portage, :parent => Puppet::Provider::Packa
|
|
70
70
|
name = qatom[:pfx] + name if qatom[:pfx]
|
71
71
|
name = name + '-' + qatom[:pv] if qatom[:pv]
|
72
72
|
name = name + '-' + qatom[:pr] if qatom[:pr]
|
73
|
-
name = name + qatom[:slot] if qatom[:slot]
|
73
|
+
name = name + ':' + qatom[:slot] if qatom[:slot]
|
74
74
|
cmd << '--update' if [:latest].include?(should)
|
75
75
|
cmd += install_options if @resource[:install_options]
|
76
76
|
cmd << name
|
@@ -84,7 +84,7 @@ Puppet::Type.type(:package).provide :portage, :parent => Puppet::Provider::Packa
|
|
84
84
|
name = qatom[:pfx] + name if qatom[:pfx]
|
85
85
|
name = name + '-' + qatom[:pv] if qatom[:pv]
|
86
86
|
name = name + '-' + qatom[:pr] if qatom[:pr]
|
87
|
-
name = name + qatom[:slot] if qatom[:slot]
|
87
|
+
name = name + ':' + qatom[:slot] if qatom[:slot]
|
88
88
|
cmd += uninstall_options if @resource[:uninstall_options]
|
89
89
|
cmd << name
|
90
90
|
if [:purged].include?(should)
|
@@ -169,7 +169,7 @@ Puppet::Type.type(:package).provide :portage, :parent => Puppet::Provider::Packa
|
|
169
169
|
package_sets << package_set.to_s.strip
|
170
170
|
end
|
171
171
|
|
172
|
-
if @resource[:name]
|
172
|
+
if @resource[:name] =~ /^@/
|
173
173
|
if package_sets.include?(@resource[:name][1..-1].to_s)
|
174
174
|
return({:name => "#{@resource[:name]}", :ensure => '9999', :version_available => nil, :installed_versions => nil, :installable_versions => "9999,"})
|
175
175
|
end
|
@@ -247,7 +247,7 @@ Puppet::Type.type(:package).provide :portage, :parent => Puppet::Provider::Packa
|
|
247
247
|
# [2.7.12: 2.7
|
248
248
|
# 3.4.5: 3.4
|
249
249
|
# 3.5.2: 3.5]
|
250
|
-
version_for_slot = versions_and_slots.find { |version_and_slot| version_and_slot.last == slot
|
250
|
+
version_for_slot = versions_and_slots.find { |version_and_slot| version_and_slot.last == slot }
|
251
251
|
# [3.5.2: 3.5]
|
252
252
|
version_for_slot.first if version_for_slot
|
253
253
|
# 3.5.2
|
@@ -14,6 +14,7 @@ Puppet::Type.type(:package).provide :rpm, :source => :rpm, :parent => Puppet::Pr
|
|
14
14
|
has_feature :install_options
|
15
15
|
has_feature :uninstall_options
|
16
16
|
has_feature :virtual_packages
|
17
|
+
has_feature :install_only
|
17
18
|
|
18
19
|
# Note: self:: is required here to keep these constants in the context of what will
|
19
20
|
# eventually become this Puppet::Type::Package::ProviderRpm class.
|
@@ -21,6 +22,7 @@ Puppet::Type.type(:package).provide :rpm, :source => :rpm, :parent => Puppet::Pr
|
|
21
22
|
self::NEVRA_FORMAT = %Q{%{NAME} %|EPOCH?{%{EPOCH}}:{0}| %{VERSION} %{RELEASE} %{ARCH}\\n}
|
22
23
|
self::NEVRA_REGEX = %r{^'?(\S+) (\S+) (\S+) (\S+) (\S+)$}
|
23
24
|
self::NEVRA_FIELDS = [:name, :epoch, :version, :release, :arch]
|
25
|
+
self::MULTIVERSION_SEPARATOR = "; "
|
24
26
|
|
25
27
|
ARCH_LIST = [
|
26
28
|
'noarch',
|
@@ -80,12 +82,9 @@ Puppet::Type.type(:package).provide :rpm, :source => :rpm, :parent => Puppet::Pr
|
|
80
82
|
|
81
83
|
# list out all of the packages
|
82
84
|
begin
|
83
|
-
execpipe("#{command(:rpm)} -qa #{nosignature} #{nodigest} --qf '#{self::NEVRA_FORMAT}'") { |process|
|
85
|
+
execpipe("#{command(:rpm)} -qa #{nosignature} #{nodigest} --qf '#{self::NEVRA_FORMAT}' | sort") { |process|
|
84
86
|
# now turn each returned line into a package object
|
85
|
-
process.
|
86
|
-
hash = nevra_to_hash(line)
|
87
|
-
packages << new(hash) unless hash.empty?
|
88
|
-
}
|
87
|
+
nevra_to_multiversion_hash(process).each { |hash| packages << new(hash) }
|
89
88
|
}
|
90
89
|
rescue Puppet::ExecutionFailure
|
91
90
|
raise Puppet::Error, _("Failed to list packages"), $!.backtrace
|
@@ -101,7 +100,7 @@ Puppet::Type.type(:package).provide :rpm, :source => :rpm, :parent => Puppet::Pr
|
|
101
100
|
#NOTE: Prior to a fix for issue 1243, this method potentially returned a cached value
|
102
101
|
#IF YOU CALL THIS METHOD, IT WILL CALL RPM
|
103
102
|
#Use get(:property) to check if cached values are available
|
104
|
-
cmd = ["-q", @resource[:name], "#{self.class.nosignature}", "#{self.class.nodigest}", "--qf", "
|
103
|
+
cmd = ["-q", @resource[:name], "#{self.class.nosignature}", "#{self.class.nodigest}", "--qf", "#{self.class::NEVRA_FORMAT}"]
|
105
104
|
|
106
105
|
begin
|
107
106
|
output = rpm(*cmd)
|
@@ -118,9 +117,7 @@ Puppet::Type.type(:package).provide :rpm, :source => :rpm, :parent => Puppet::Pr
|
|
118
117
|
return nil
|
119
118
|
end
|
120
119
|
end
|
121
|
-
|
122
|
-
# for multilib and this will only return the first such package
|
123
|
-
@property_hash.update(self.class.nevra_to_hash(output))
|
120
|
+
@property_hash.update(self.class.nevra_to_multiversion_hash(output))
|
124
121
|
|
125
122
|
@property_hash.dup
|
126
123
|
end
|
@@ -131,8 +128,8 @@ Puppet::Type.type(:package).provide :rpm, :source => :rpm, :parent => Puppet::Pr
|
|
131
128
|
@resource.fail _("RPMs must specify a package source")
|
132
129
|
end
|
133
130
|
|
134
|
-
cmd = [command(:rpm), "-q", "--qf", "
|
135
|
-
h = self.class.
|
131
|
+
cmd = [command(:rpm), "-q", "--qf", "#{self.class::NEVRA_FORMAT}", "-p", source]
|
132
|
+
h = self.class.nevra_to_multiversion_hash(execute(cmd))
|
136
133
|
h[:ensure]
|
137
134
|
rescue Puppet::ExecutionFailure => e
|
138
135
|
raise Puppet::Error, e.message, e.backtrace
|
@@ -169,7 +166,11 @@ Puppet::Type.type(:package).provide :rpm, :source => :rpm, :parent => Puppet::Pr
|
|
169
166
|
if @resource[:name].start_with? nav
|
170
167
|
identifier = nav
|
171
168
|
else
|
172
|
-
|
169
|
+
if @resource[:install_only]
|
170
|
+
identifier = get(:ensure).split(self.class::MULTIVERSION_SEPARATOR).map { |ver| "#{name}-#{ver}" }
|
171
|
+
else
|
172
|
+
identifier = name
|
173
|
+
end
|
173
174
|
end
|
174
175
|
end
|
175
176
|
# If an arch is specified in the resource, uninstall that arch,
|
@@ -228,14 +229,14 @@ Puppet::Type.type(:package).provide :rpm, :source => :rpm, :parent => Puppet::Pr
|
|
228
229
|
str2 = str2.gsub(front_strip_re, '')
|
229
230
|
|
230
231
|
# "handle the tilde separator, it sorts before everything else"
|
231
|
-
if
|
232
|
+
if str1 =~ /^~/ && str2 =~ /^~/
|
232
233
|
# if they both have ~, strip it
|
233
234
|
str1 = str1[1..-1]
|
234
235
|
str2 = str2[1..-1]
|
235
236
|
next
|
236
|
-
elsif
|
237
|
+
elsif str1 =~ /^~/
|
237
238
|
return -1
|
238
|
-
elsif
|
239
|
+
elsif str2 =~ /^~/
|
239
240
|
return 1
|
240
241
|
end
|
241
242
|
|
@@ -244,7 +245,7 @@ Puppet::Type.type(:package).provide :rpm, :source => :rpm, :parent => Puppet::Pr
|
|
244
245
|
# "grab first completely alpha or completely numeric segment"
|
245
246
|
isnum = false
|
246
247
|
# if the first char of str1 is a digit, grab the chunk of continuous digits from each string
|
247
|
-
if /^[0-9]
|
248
|
+
if str1 =~ /^[0-9]+/
|
248
249
|
if str1 =~ /^[0-9]+/
|
249
250
|
segment1 = $~.to_s
|
250
251
|
str1 = $~.post_match
|
@@ -309,8 +310,12 @@ Puppet::Type.type(:package).provide :rpm, :source => :rpm, :parent => Puppet::Pr
|
|
309
310
|
|
310
311
|
def insync?(is)
|
311
312
|
return false if [:purged, :absent].include?(is)
|
313
|
+
return false if is.include?(self.class::MULTIVERSION_SEPARATOR) && !@resource[:install_only]
|
314
|
+
|
312
315
|
should = resource[:ensure]
|
313
|
-
|
316
|
+
is.split(self.class::MULTIVERSION_SEPARATOR).any? do |version|
|
317
|
+
0 == self.rpm_compareEVR(rpm_parse_evr(should), rpm_parse_evr(version))
|
318
|
+
end
|
314
319
|
end
|
315
320
|
|
316
321
|
# parse a rpm "version" specification
|
@@ -335,8 +340,8 @@ Puppet::Type.type(:package).provide :rpm, :source => :rpm, :parent => Puppet::Pr
|
|
335
340
|
v = s[0,ri]
|
336
341
|
r = s[ri+1,s.length]
|
337
342
|
if arch = r.scan(ARCH_REGEX)[0]
|
338
|
-
a = arch.
|
339
|
-
|
343
|
+
a = arch.delete('.')
|
344
|
+
r.gsub!(ARCH_REGEX, '')
|
340
345
|
end
|
341
346
|
else
|
342
347
|
v = s
|
@@ -413,4 +418,37 @@ Puppet::Type.type(:package).provide :rpm, :source => :rpm, :parent => Puppet::Pr
|
|
413
418
|
|
414
419
|
return hash
|
415
420
|
end
|
421
|
+
|
422
|
+
# @param line [String] multiple lines of rpm package query information
|
423
|
+
# @return list of [Hash] of NEVRA_FIELDS strings parsed from package info
|
424
|
+
# or an empty list if we failed to parse
|
425
|
+
# @api private
|
426
|
+
def self.nevra_to_multiversion_hash(multiline)
|
427
|
+
list = []
|
428
|
+
multiversion_hash = {}
|
429
|
+
multiline.each_line do |line|
|
430
|
+
hash = self.nevra_to_hash(line)
|
431
|
+
if !hash.empty?
|
432
|
+
if multiversion_hash.empty?
|
433
|
+
multiversion_hash = hash.dup
|
434
|
+
next
|
435
|
+
end
|
436
|
+
|
437
|
+
if multiversion_hash[:name] != hash[:name]
|
438
|
+
list << multiversion_hash
|
439
|
+
multiversion_hash = hash.dup
|
440
|
+
next
|
441
|
+
end
|
442
|
+
|
443
|
+
if !multiversion_hash[:ensure].include?(hash[:ensure])
|
444
|
+
multiversion_hash[:ensure].concat("#{self::MULTIVERSION_SEPARATOR}#{hash[:ensure]}")
|
445
|
+
end
|
446
|
+
end
|
447
|
+
end
|
448
|
+
list << multiversion_hash if multiversion_hash
|
449
|
+
if list.size == 1
|
450
|
+
return list[0]
|
451
|
+
end
|
452
|
+
return list
|
453
|
+
end
|
416
454
|
end
|
@@ -9,7 +9,7 @@ Puppet::Type.type(:package).provide :yum, :parent => :rpm, :source => :rpm do
|
|
9
9
|
These options should be specified as a string (e.g. '--flag'), a hash (e.g. {'--flag' => 'value'}),
|
10
10
|
or an array where each element is either a string or a hash."
|
11
11
|
|
12
|
-
has_feature :install_options, :versionable, :virtual_packages
|
12
|
+
has_feature :install_options, :versionable, :virtual_packages, :install_only
|
13
13
|
|
14
14
|
commands :cmd => "yum", :rpm => "rpm"
|
15
15
|
|
@@ -25,6 +25,8 @@ Puppet::Type.type(:package).provide :yum, :parent => :rpm, :source => :rpm do
|
|
25
25
|
|
26
26
|
defaultfor :osfamily => :redhat
|
27
27
|
|
28
|
+
VERSION_REGEX = /^(?:(\d+):)?(\S+)-(\S+)$/
|
29
|
+
|
28
30
|
def self.prefetch(packages)
|
29
31
|
raise Puppet::Error, _("The yum provider can only be used as root") if Process.euid != 0
|
30
32
|
super
|
@@ -86,23 +88,24 @@ Puppet::Type.type(:package).provide :yum, :parent => :rpm, :source => :rpm do
|
|
86
88
|
end
|
87
89
|
|
88
90
|
def self.parse_updates(str)
|
89
|
-
# Strip off all content
|
90
|
-
body = str.partition(
|
91
|
+
# Strip off all content that contains Obsoleting, Security: or Update
|
92
|
+
body = str.partition(/^(Obsoleting|Security:|Update)/).first
|
91
93
|
|
92
94
|
updates = Hash.new { |h, k| h[k] = [] }
|
93
|
-
body.split.each_slice(3) do |tuple|
|
94
|
-
break if tuple[0] =~ /^(Obsoleting|Security:|Update)/
|
95
|
-
break unless tuple[1].match(/^(?:(\d+):)?(\S+)-(\S+)$/)
|
96
|
-
hash = update_to_hash(*tuple[0..1])
|
97
|
-
# Create entries for both the package name without a version and a
|
98
|
-
# version since yum considers those as mostly interchangeable.
|
99
|
-
short_name = hash[:name]
|
100
|
-
long_name = "#{hash[:name]}.#{hash[:arch]}"
|
101
|
-
|
102
|
-
updates[short_name] << hash
|
103
|
-
updates[long_name] << hash
|
104
|
-
end
|
105
95
|
|
96
|
+
body.split(/^\s*\n/).each do |line|
|
97
|
+
line.split.each_slice(3) do |tuple|
|
98
|
+
next unless tuple[0].include?('.') && tuple[1] =~ VERSION_REGEX
|
99
|
+
|
100
|
+
hash = update_to_hash(*tuple[0..1])
|
101
|
+
# Create entries for both the package name without a version and a
|
102
|
+
# version since yum considers those as mostly interchangeable.
|
103
|
+
short_name = hash[:name]
|
104
|
+
long_name = "#{hash[:name]}.#{hash[:arch]}"
|
105
|
+
updates[short_name] << hash
|
106
|
+
updates[long_name] << hash
|
107
|
+
end
|
108
|
+
end
|
106
109
|
updates
|
107
110
|
end
|
108
111
|
|
@@ -117,7 +120,7 @@ Puppet::Type.type(:package).provide :yum, :parent => :rpm, :source => :rpm do
|
|
117
120
|
raise _("Failed to parse package name and architecture from '%{pkgname}'") % { pkgname: pkgname }
|
118
121
|
end
|
119
122
|
|
120
|
-
match = pkgversion.match(
|
123
|
+
match = pkgversion.match(VERSION_REGEX)
|
121
124
|
epoch = match[1] || '0'
|
122
125
|
version = match[2]
|
123
126
|
release = match[3]
|
@@ -203,7 +206,10 @@ Puppet::Type.type(:package).provide :yum, :parent => :rpm, :source => :rpm do
|
|
203
206
|
end
|
204
207
|
current_package = self.query
|
205
208
|
if current_package
|
206
|
-
if
|
209
|
+
if @resource[:install_only]
|
210
|
+
self.debug "Updating package #{@resource[:name]} from version #{current_package[:ensure]} to #{should} as install_only packages are never downgraded"
|
211
|
+
operation = update_command
|
212
|
+
elsif rpm_compareEVR(rpm_parse_evr(should), rpm_parse_evr(current_package[:ensure])) < 0
|
207
213
|
self.debug "Downgrading package #{@resource[:name]} from version #{current_package[:ensure]} to #{should}"
|
208
214
|
operation = :downgrade
|
209
215
|
elsif rpm_compareEVR(rpm_parse_evr(should), rpm_parse_evr(current_package[:ensure])) > 0
|
@@ -228,10 +234,11 @@ Puppet::Type.type(:package).provide :yum, :parent => :rpm, :source => :rpm do
|
|
228
234
|
is = self.query
|
229
235
|
raise Puppet::Error, _("Could not find package %{name}") % { name: self.name } unless is
|
230
236
|
|
237
|
+
version = is[:ensure]
|
231
238
|
# FIXME: Should we raise an exception even if should == :latest
|
232
239
|
# and yum updated us to a version other than @param_hash[:ensure] ?
|
233
|
-
|
234
|
-
|
240
|
+
raise Puppet::Error, _("Failed to update to version %{should}, got version %{version} instead") % { should: should, version: version } unless
|
241
|
+
insync?(version)
|
235
242
|
end
|
236
243
|
end
|
237
244
|
|
@@ -282,12 +289,16 @@ Puppet::Type.type(:package).provide :yum, :parent => :rpm, :source => :rpm do
|
|
282
289
|
# @param key [String] The key to look for in all contained hashes
|
283
290
|
# @return [Array<String>] All hash values with the given key.
|
284
291
|
def scan_options(options, key)
|
285
|
-
return []
|
286
|
-
options.
|
287
|
-
if
|
288
|
-
|
292
|
+
return [] unless options.is_a?(Enumerable)
|
293
|
+
values = options.map do | repo |
|
294
|
+
value = if repo.is_a?(String)
|
295
|
+
next unless repo.include?('=')
|
296
|
+
Hash[*repo.strip.split('=')] # make it a hash
|
297
|
+
else
|
298
|
+
repo
|
289
299
|
end
|
290
|
-
|
300
|
+
value[key]
|
291
301
|
end
|
302
|
+
values.compact.uniq
|
292
303
|
end
|
293
304
|
end
|
@@ -89,6 +89,7 @@ Puppet::Type.type(:package).provide :zypper, :parent => :rpm, :source => :rpm do
|
|
89
89
|
options = []
|
90
90
|
options << quiet
|
91
91
|
options << '--no-gpg-check' unless inst_opts.delete('--no-gpg-check').nil?
|
92
|
+
options << '--no-gpg-checks' unless inst_opts.delete('--no-gpg-checks').nil?
|
92
93
|
options << :install
|
93
94
|
|
94
95
|
#zypper 0.6.13 (OpenSuSE 10.2) does not support auto agree with licenses
|
@@ -25,24 +25,25 @@ require 'puppet/provider/package'
|
|
25
25
|
class Puppet::Provider::Package::Targetable < Puppet::Provider::Package
|
26
26
|
# Prefetch our package list, yo.
|
27
27
|
def self.prefetch(packages)
|
28
|
-
catalog_packages = packages.first
|
28
|
+
catalog_packages = packages.values.first.catalog.resources.select{ |p| p.provider.class == self }
|
29
29
|
package_commands = catalog_packages.map { |catalog_package| catalog_package::original_parameters[:command] }.uniq
|
30
30
|
package_commands.each do |command|
|
31
31
|
instances(command).each do |instance|
|
32
32
|
catalog_packages.each do |catalog_package|
|
33
|
-
if catalog_package[:name] == instance.name && catalog_package
|
33
|
+
if catalog_package[:name] == instance.name && catalog_package.original_parameters[:command] == command
|
34
34
|
catalog_package.provider = instance
|
35
|
-
self.debug "Prefetched instance: %{name} via command: %{
|
35
|
+
self.debug "Prefetched instance: %{name} via command: %{cmd}" % { name: instance.name, cmd: (command || :default) }
|
36
36
|
end
|
37
37
|
end
|
38
38
|
end
|
39
39
|
end
|
40
|
+
package_commands
|
40
41
|
end
|
41
42
|
|
42
43
|
# Returns the resource command or provider command.
|
43
44
|
|
44
45
|
def resource_or_provider_command
|
45
|
-
resource
|
46
|
+
resource.original_parameters[:command] || self.class.provider_command
|
46
47
|
end
|
47
48
|
|
48
49
|
# Targetable providers use has_command/is_optional to defer validation of provider suitability.
|
@@ -71,7 +71,7 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
|
|
71
71
|
|
72
72
|
flushed = []
|
73
73
|
begin
|
74
|
-
@modified.
|
74
|
+
@modified.sort_by(&:to_s).uniq.each do |target|
|
75
75
|
Puppet.debug "Flushing #{@resource_type.name} provider target #{target}"
|
76
76
|
flushed << target
|
77
77
|
flush_target(target)
|
@@ -200,12 +200,12 @@ Puppet::Type.type(:scheduled_task).provide(:win32_taskscheduler) do
|
|
200
200
|
def user=(value)
|
201
201
|
self.fail("Invalid user: #{value}") unless Puppet::Util::Windows::SID.name_to_sid(value)
|
202
202
|
|
203
|
-
if value.to_s.
|
204
|
-
task.set_account_information(value, resource[:password])
|
205
|
-
else
|
203
|
+
if value.to_s.casecmp('system').zero?
|
206
204
|
# Win32::TaskScheduler treats a nil/empty username & password as
|
207
205
|
# requesting the SYSTEM account.
|
208
206
|
task.set_account_information(nil, nil)
|
207
|
+
else
|
208
|
+
task.set_account_information(value, resource[:password])
|
209
209
|
end
|
210
210
|
end
|
211
211
|
|
@@ -20,14 +20,7 @@ Puppet::Type.type(:selmodule).provide(:semodule) do
|
|
20
20
|
|
21
21
|
def exists?
|
22
22
|
self.debug "Checking for module #{@resource[:name]}"
|
23
|
-
|
24
|
-
out.each_line do |line|
|
25
|
-
if line =~ /^#{@resource[:name]}\b/
|
26
|
-
return :true
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
nil
|
23
|
+
return selmodules_loaded.has_key?(@resource[:name])
|
31
24
|
end
|
32
25
|
|
33
26
|
def syncversion
|
@@ -35,7 +28,7 @@ Puppet::Type.type(:selmodule).provide(:semodule) do
|
|
35
28
|
|
36
29
|
loadver = selmodversion_loaded
|
37
30
|
|
38
|
-
if(loadver) then
|
31
|
+
if (loadver) then
|
39
32
|
filever = selmodversion_file
|
40
33
|
if (filever == loadver)
|
41
34
|
return :true
|
@@ -44,7 +37,7 @@ Puppet::Type.type(:selmodule).provide(:semodule) do
|
|
44
37
|
:false
|
45
38
|
end
|
46
39
|
|
47
|
-
def syncversion=
|
40
|
+
def syncversion=(dosync)
|
48
41
|
execoutput("#{command(:semodule)} --upgrade #{selmod_name_to_filename}")
|
49
42
|
rescue Puppet::ExecutionFailure => detail
|
50
43
|
raise Puppet::Error, "Could not upgrade policy module: #{detail}", detail.backtrace
|
@@ -52,7 +45,7 @@ Puppet::Type.type(:selmodule).provide(:semodule) do
|
|
52
45
|
|
53
46
|
# Helper functions
|
54
47
|
|
55
|
-
def execoutput
|
48
|
+
def execoutput(cmd)
|
56
49
|
output = ''
|
57
50
|
begin
|
58
51
|
execpipe(cmd) do |out|
|
@@ -72,7 +65,7 @@ Puppet::Type.type(:selmodule).provide(:semodule) do
|
|
72
65
|
end
|
73
66
|
end
|
74
67
|
|
75
|
-
def selmod_readnext
|
68
|
+
def selmod_readnext(handle)
|
76
69
|
len = handle.read(4).unpack('V')[0]
|
77
70
|
handle.read(len)
|
78
71
|
end
|
@@ -118,23 +111,47 @@ Puppet::Type.type(:selmodule).provide(:semodule) do
|
|
118
111
|
end
|
119
112
|
|
120
113
|
def selmodversion_loaded
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
114
|
+
selmodules_loaded[@resource[:name]]
|
115
|
+
end
|
116
|
+
|
117
|
+
def selmodules_loaded
|
118
|
+
self.class.selmodules_loaded
|
119
|
+
end
|
120
|
+
|
121
|
+
# Extend Class
|
122
|
+
|
123
|
+
class << self
|
124
|
+
attr_accessor :loaded_modules
|
125
|
+
end
|
126
|
+
|
127
|
+
# Prefetch loaded selinux modules.
|
128
|
+
def self.prefetch(resources)
|
129
|
+
selmodules_loaded
|
130
|
+
end
|
131
|
+
|
132
|
+
def self.selmodules_loaded
|
133
|
+
if self.loaded_modules.nil?
|
134
|
+
self.debug "Fetching loaded selinux modules"
|
135
|
+
modules = {}
|
136
|
+
selmodule_cmd = "#{command(:semodule)} --list"
|
137
|
+
output = []
|
138
|
+
begin
|
139
|
+
execpipe(selmodule_cmd) do |pipe|
|
140
|
+
pipe.each_line do |line|
|
141
|
+
line.chomp!
|
142
|
+
output << line
|
143
|
+
name, version = line.split
|
144
|
+
modules[name] = version
|
132
145
|
end
|
133
146
|
end
|
147
|
+
self.loaded_modules = modules
|
148
|
+
rescue Puppet::ExecutionFailure
|
149
|
+
raise Puppet::Error,
|
150
|
+
_('Could not list policy modules: "%{selmodule_command}" failed with "%{selmod_output}"') %
|
151
|
+
{ selmodule_command: selmodule_cmd, selmod_output: output.join(' ') },
|
152
|
+
$ERROR_INFO.backtrace
|
134
153
|
end
|
135
|
-
rescue Puppet::ExecutionFailure
|
136
|
-
raise Puppet::ExecutionFailure, _("Could not list policy modules: \"%{selmodule_command}\" failed with \"%{selmod_output}\"") % { selmodule_command: selmodule_cmd, selmod_output: selmod_output.join(' ') }
|
137
154
|
end
|
138
|
-
|
155
|
+
self.loaded_modules
|
139
156
|
end
|
140
157
|
end
|