chef 12.4.0.rc.0-universal-mingw32 → 12.4.0.rc.2-universal-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.
- checksums.yaml +4 -4
- data/Rakefile +12 -1
- data/lib/chef/api_client.rb +130 -26
- data/lib/chef/application.rb +0 -1
- data/lib/chef/application/client.rb +8 -19
- data/lib/chef/audit/audit_reporter.rb +12 -7
- data/lib/chef/audit/logger.rb +36 -0
- data/lib/chef/audit/runner.rb +4 -2
- data/lib/chef/chef_class.rb +62 -11
- data/lib/chef/client.rb +587 -207
- data/lib/chef/config.rb +0 -1
- data/lib/chef/dsl/recipe.rb +45 -56
- data/lib/chef/dsl/resources.rb +3 -2
- data/lib/chef/event_dispatch/base.rb +7 -2
- data/lib/chef/exceptions.rb +4 -1
- data/lib/chef/file_content_management/deploy/mv_windows.rb +16 -6
- data/lib/chef/formatters/doc.rb +15 -7
- data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +10 -7
- data/lib/chef/guard_interpreter/default_guard_interpreter.rb +2 -0
- data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +4 -1
- data/lib/chef/http/authenticator.rb +7 -2
- data/lib/chef/knife.rb +16 -4
- data/lib/chef/knife/client_create.rb +55 -31
- data/lib/chef/knife/core/generic_presenter.rb +1 -1
- data/lib/chef/knife/core/subcommand_loader.rb +1 -1
- data/lib/chef/knife/osc_user_create.rb +97 -0
- data/lib/chef/knife/osc_user_delete.rb +51 -0
- data/lib/chef/knife/osc_user_edit.rb +58 -0
- data/lib/chef/knife/osc_user_list.rb +47 -0
- data/lib/chef/knife/osc_user_reregister.rb +64 -0
- data/lib/chef/knife/osc_user_show.rb +54 -0
- data/lib/chef/knife/user_create.rb +95 -36
- data/lib/chef/knife/user_delete.rb +52 -2
- data/lib/chef/knife/user_edit.rb +37 -7
- data/lib/chef/knife/user_list.rb +3 -0
- data/lib/chef/knife/user_reregister.rb +39 -8
- data/lib/chef/knife/user_show.rb +30 -1
- data/lib/chef/mixin/api_version_request_handling.rb +66 -0
- data/lib/chef/mixin/convert_to_class_name.rb +10 -4
- data/lib/chef/mixin/deprecation.rb +24 -0
- data/lib/chef/mixin/powershell_out.rb +98 -0
- data/lib/chef/mixin/provides.rb +5 -18
- data/lib/chef/mixin/uris.rb +11 -0
- data/lib/chef/mixin/windows_architecture_helper.rb +5 -2
- data/lib/chef/mixin/windows_env_helper.rb +11 -2
- data/lib/chef/node_map.rb +130 -75
- data/lib/chef/osc_user.rb +194 -0
- data/lib/chef/platform/provider_mapping.rb +2 -269
- data/lib/chef/platform/provider_priority_map.rb +6 -69
- data/lib/chef/platform/query_helpers.rb +5 -0
- data/lib/chef/platform/resource_priority_map.rb +12 -15
- data/lib/chef/policy_builder/policyfile.rb +1 -0
- data/lib/chef/provider.rb +19 -0
- data/lib/chef/provider/directory.rb +3 -0
- data/lib/chef/provider/dsc_resource.rb +8 -1
- data/lib/chef/provider/file.rb +1 -0
- data/lib/chef/provider/group/aix.rb +1 -0
- data/lib/chef/provider/group/dscl.rb +1 -1
- data/lib/chef/provider/group/gpasswd.rb +1 -0
- data/lib/chef/provider/group/groupmod.rb +1 -1
- data/lib/chef/provider/group/pw.rb +1 -0
- data/lib/chef/provider/group/suse.rb +2 -0
- data/lib/chef/provider/group/usermod.rb +2 -1
- data/lib/chef/provider/group/windows.rb +1 -1
- data/lib/chef/provider/ifconfig.rb +2 -0
- data/lib/chef/provider/ifconfig/aix.rb +1 -0
- data/lib/chef/provider/ifconfig/debian.rb +2 -0
- data/lib/chef/provider/ifconfig/redhat.rb +1 -0
- data/lib/chef/provider/lwrp_base.rb +4 -0
- data/lib/chef/provider/mount.rb +0 -1
- data/lib/chef/provider/mount/aix.rb +1 -0
- data/lib/chef/provider/mount/mount.rb +2 -0
- data/lib/chef/provider/mount/solaris.rb +2 -0
- data/lib/chef/provider/package.rb +55 -0
- data/lib/chef/provider/package/aix.rb +7 -7
- data/lib/chef/provider/package/apt.rb +3 -3
- data/lib/chef/provider/package/dpkg.rb +4 -4
- data/lib/chef/provider/package/easy_install.rb +5 -5
- data/lib/chef/provider/package/freebsd/base.rb +2 -2
- data/lib/chef/provider/package/freebsd/pkg.rb +6 -6
- data/lib/chef/provider/package/freebsd/pkgng.rb +5 -5
- data/lib/chef/provider/package/freebsd/port.rb +4 -4
- data/lib/chef/provider/package/homebrew.rb +2 -2
- data/lib/chef/provider/package/ips.rb +4 -4
- data/lib/chef/provider/package/macports.rb +5 -6
- data/lib/chef/provider/package/openbsd.rb +4 -5
- data/lib/chef/provider/package/pacman.rb +4 -4
- data/lib/chef/provider/package/portage.rb +2 -0
- data/lib/chef/provider/package/rpm.rb +7 -8
- data/lib/chef/provider/package/rubygems.rb +5 -12
- data/lib/chef/provider/package/smartos.rb +4 -4
- data/lib/chef/provider/package/solaris.rb +7 -7
- data/lib/chef/provider/package/windows/msi.rb +1 -1
- data/lib/chef/provider/package/yum.rb +4 -6
- data/lib/chef/provider/package/zypper.rb +16 -14
- data/lib/chef/provider/powershell_script.rb +129 -47
- data/lib/chef/provider/remote_file/content.rb +4 -1
- data/lib/chef/provider/remote_file/local_file.rb +10 -4
- data/lib/chef/provider/service.rb +44 -0
- data/lib/chef/provider/service/freebsd.rb +1 -1
- data/lib/chef/provider/service/init.rb +1 -0
- data/lib/chef/provider/service/macosx.rb +1 -1
- data/lib/chef/provider/service/windows.rb +0 -1
- data/lib/chef/provider/user.rb +1 -1
- data/lib/chef/provider/user/aix.rb +3 -2
- data/lib/chef/provider/user/pw.rb +1 -0
- data/lib/chef/provider/user/solaris.rb +2 -0
- data/lib/chef/provider/user/useradd.rb +1 -0
- data/lib/chef/provider_resolver.rb +87 -134
- data/lib/chef/resource.rb +274 -68
- data/lib/chef/resource/apt_package.rb +0 -2
- data/lib/chef/resource/bash.rb +0 -2
- data/lib/chef/resource/batch.rb +1 -1
- data/lib/chef/resource/bff_package.rb +0 -7
- data/lib/chef/resource/breakpoint.rb +3 -6
- data/lib/chef/resource/chef_gem.rb +0 -3
- data/lib/chef/resource/cookbook_file.rb +1 -3
- data/lib/chef/resource/cron.rb +2 -4
- data/lib/chef/resource/csh.rb +0 -2
- data/lib/chef/resource/deploy.rb +9 -6
- data/lib/chef/resource/deploy_revision.rb +0 -14
- data/lib/chef/resource/directory.rb +2 -4
- data/lib/chef/resource/dpkg_package.rb +0 -5
- data/lib/chef/resource/dsc_resource.rb +2 -3
- data/lib/chef/resource/dsc_script.rb +2 -3
- data/lib/chef/resource/easy_install_package.rb +0 -7
- data/lib/chef/resource/env.rb +3 -3
- data/lib/chef/resource/erl_call.rb +2 -5
- data/lib/chef/resource/execute.rb +2 -4
- data/lib/chef/resource/file.rb +2 -4
- data/lib/chef/resource/freebsd_package.rb +0 -5
- data/lib/chef/resource/gem_package.rb +0 -3
- data/lib/chef/resource/git.rb +0 -3
- data/lib/chef/resource/group.rb +2 -4
- data/lib/chef/resource/homebrew_package.rb +0 -2
- data/lib/chef/resource/http_request.rb +3 -4
- data/lib/chef/resource/ifconfig.rb +3 -4
- data/lib/chef/resource/ips_package.rb +2 -2
- data/lib/chef/resource/link.rb +3 -5
- data/lib/chef/resource/log.rb +2 -4
- data/lib/chef/resource/lwrp_base.rb +10 -61
- data/lib/chef/resource/macosx_service.rb +1 -2
- data/lib/chef/resource/macports_package.rb +0 -7
- data/lib/chef/resource/mdadm.rb +2 -5
- data/lib/chef/resource/mount.rb +2 -4
- data/lib/chef/resource/ohai.rb +2 -4
- data/lib/chef/resource/openbsd_package.rb +0 -6
- data/lib/chef/resource/package.rb +9 -6
- data/lib/chef/resource/pacman_package.rb +0 -7
- data/lib/chef/resource/paludis_package.rb +2 -3
- data/lib/chef/resource/perl.rb +0 -3
- data/lib/chef/resource/portage_package.rb +0 -3
- data/lib/chef/resource/powershell_script.rb +1 -2
- data/lib/chef/resource/python.rb +0 -3
- data/lib/chef/resource/reboot.rb +1 -3
- data/lib/chef/resource/registry_key.rb +3 -5
- data/lib/chef/resource/remote_directory.rb +3 -5
- data/lib/chef/resource/remote_file.rb +4 -5
- data/lib/chef/resource/route.rb +3 -5
- data/lib/chef/resource/rpm_package.rb +0 -2
- data/lib/chef/resource/ruby.rb +0 -4
- data/lib/chef/resource/ruby_block.rb +2 -4
- data/lib/chef/resource/scm.rb +3 -5
- data/lib/chef/resource/script.rb +0 -3
- data/lib/chef/resource/service.rb +3 -5
- data/lib/chef/resource/smartos_package.rb +0 -9
- data/lib/chef/resource/solaris_package.rb +0 -10
- data/lib/chef/resource/subversion.rb +1 -3
- data/lib/chef/resource/template.rb +0 -4
- data/lib/chef/resource/timestamped_deploy.rb +0 -4
- data/lib/chef/resource/user.rb +2 -5
- data/lib/chef/resource/whyrun_safe_ruby_block.rb +0 -7
- data/lib/chef/resource/windows_package.rb +3 -3
- data/lib/chef/resource/windows_script.rb +2 -2
- data/lib/chef/resource/windows_service.rb +3 -3
- data/lib/chef/resource/yum_package.rb +0 -3
- data/lib/chef/resource/zypper_package.rb +27 -0
- data/lib/chef/resource_builder.rb +7 -0
- data/lib/chef/resource_reporter.rb +1 -1
- data/lib/chef/resource_resolver.rb +108 -62
- data/lib/chef/resources.rb +1 -0
- data/lib/chef/rest.rb +1 -0
- data/lib/chef/server_api.rb +2 -0
- data/lib/chef/user.rb +193 -42
- data/lib/chef/util/backup.rb +9 -1
- data/lib/chef/util/path_helper.rb +0 -1
- data/lib/chef/version.rb +1 -1
- data/spec/functional/audit/runner_spec.rb +22 -42
- data/spec/functional/mixin/powershell_out_spec.rb +43 -0
- data/spec/functional/resource/execute_spec.rb +9 -2
- data/spec/functional/resource/file_spec.rb +25 -0
- data/spec/functional/resource/group_spec.rb +5 -0
- data/spec/functional/resource/link_spec.rb +5 -11
- data/spec/functional/resource/powershell_spec.rb +40 -5
- data/spec/functional/resource/user/useradd_spec.rb +10 -18
- data/spec/integration/recipes/lwrp_spec.rb +57 -0
- data/spec/integration/recipes/provider_choice.rb +2 -7
- data/spec/integration/recipes/recipe_dsl_spec.rb +517 -19
- data/spec/spec_helper.rb +1 -1
- data/spec/support/lib/chef/provider/openldap_includer.rb +29 -0
- data/spec/support/lib/chef/resource/cat.rb +0 -2
- data/spec/support/lib/chef/resource/one_two_three_four.rb +0 -6
- data/spec/support/lib/chef/resource/openldap_includer.rb +27 -0
- data/spec/support/lib/chef/resource/with_state.rb +0 -9
- data/spec/support/lib/chef/resource/zen_follower.rb +0 -6
- data/spec/support/lib/chef/resource/zen_master.rb +1 -6
- data/spec/support/shared/context/client.rb +277 -0
- data/spec/support/shared/examples/client.rb +53 -0
- data/spec/support/shared/functional/file_resource.rb +0 -4
- data/spec/support/shared/functional/securable_resource.rb +0 -24
- data/spec/support/shared/functional/securable_resource_with_reporting.rb +4 -4
- data/spec/support/shared/functional/windows_script.rb +1 -1
- data/spec/support/shared/unit/api_versioning.rb +77 -0
- data/spec/support/shared/unit/knife_shared.rb +40 -0
- data/spec/support/shared/unit/user_and_client_shared.rb +115 -0
- data/spec/unit/api_client_spec.rb +189 -14
- data/spec/unit/application/client_spec.rb +0 -5
- data/spec/unit/audit/audit_reporter_spec.rb +58 -14
- data/spec/unit/audit/logger_spec.rb +42 -0
- data/spec/unit/audit/runner_spec.rb +2 -2
- data/spec/unit/chef_fs/file_pattern_spec.rb +3 -15
- data/spec/unit/client_spec.rb +58 -374
- data/spec/unit/cookbook_spec.rb +0 -9
- data/spec/unit/cookbook_version_spec.rb +0 -20
- data/spec/unit/deprecation_spec.rb +55 -0
- data/spec/unit/dsl/resources_spec.rb +85 -0
- data/spec/unit/exceptions_spec.rb +2 -2
- data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +60 -0
- data/spec/unit/formatters/doc_spec.rb +46 -0
- data/spec/unit/formatters/error_inspectors/api_error_formatting_spec.rb +12 -10
- data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +8 -0
- data/spec/unit/http/authenticator_spec.rb +11 -2
- data/spec/unit/knife/client_create_spec.rb +122 -51
- data/spec/unit/knife/core/subcommand_loader_spec.rb +19 -3
- data/spec/unit/knife/core/ui_spec.rb +14 -0
- data/spec/unit/knife/osc_user_create_spec.rb +93 -0
- data/spec/unit/knife/osc_user_delete_spec.rb +44 -0
- data/spec/unit/knife/osc_user_edit_spec.rb +52 -0
- data/spec/unit/knife/osc_user_list_spec.rb +37 -0
- data/spec/unit/knife/osc_user_reregister_spec.rb +58 -0
- data/spec/unit/knife/osc_user_show_spec.rb +46 -0
- data/spec/unit/knife/user_create_spec.rb +177 -51
- data/spec/unit/knife/user_delete_spec.rb +34 -8
- data/spec/unit/knife/user_edit_spec.rb +31 -12
- data/spec/unit/knife/user_list_spec.rb +7 -3
- data/spec/unit/knife/user_reregister_spec.rb +38 -17
- data/spec/unit/knife/user_show_spec.rb +35 -11
- data/spec/unit/knife_spec.rb +10 -4
- data/spec/unit/lwrp_spec.rb +228 -54
- data/spec/unit/mixin/api_version_request_handling_spec.rb +127 -0
- data/spec/unit/mixin/command_spec.rb +1 -2
- data/spec/unit/mixin/powershell_out_spec.rb +70 -0
- data/spec/unit/mixin/uris_spec.rb +23 -11
- data/spec/unit/node_map_spec.rb +4 -1
- data/spec/unit/osc_user_spec.rb +276 -0
- data/spec/unit/platform_spec.rb +0 -60
- data/spec/unit/provider/deploy_spec.rb +1 -1
- data/spec/unit/provider/directory_spec.rb +199 -135
- data/spec/unit/provider/ifconfig/debian_spec.rb +0 -10
- data/spec/unit/provider/package/aix_spec.rb +16 -16
- data/spec/unit/provider/package/dpkg_spec.rb +2 -2
- data/spec/unit/provider/package/freebsd/pkg_spec.rb +13 -13
- data/spec/unit/provider/package/freebsd/pkgng_spec.rb +9 -9
- data/spec/unit/provider/package/freebsd/port_spec.rb +7 -7
- data/spec/unit/provider/package/ips_spec.rb +22 -22
- data/spec/unit/provider/package/macports_spec.rb +10 -10
- data/spec/unit/provider/package/openbsd_spec.rb +4 -26
- data/spec/unit/provider/package/pacman_spec.rb +5 -5
- data/spec/unit/provider/package/rpm_spec.rb +14 -14
- data/spec/unit/provider/package/rubygems_spec.rb +10 -44
- data/spec/unit/provider/package/smartos_spec.rb +4 -4
- data/spec/unit/provider/package/solaris_spec.rb +11 -11
- data/spec/unit/provider/package/zypper_spec.rb +125 -90
- data/spec/unit/provider/package_spec.rb +34 -0
- data/spec/unit/provider/powershell_spec.rb +53 -11
- data/spec/unit/provider/remote_directory_spec.rb +2 -2
- data/spec/unit/provider/remote_file/local_file_spec.rb +25 -6
- data/spec/unit/provider/service/freebsd_service_spec.rb +0 -12
- data/spec/unit/provider/user_spec.rb +3 -3
- data/spec/unit/provider_resolver_spec.rb +463 -327
- data/spec/unit/recipe_spec.rb +42 -15
- data/spec/unit/resource/breakpoint_spec.rb +1 -1
- data/spec/unit/resource/erl_call_spec.rb +1 -1
- data/spec/unit/resource/file_spec.rb +1 -1
- data/spec/unit/resource/ifconfig_spec.rb +10 -6
- data/spec/unit/resource/remote_file_spec.rb +5 -0
- data/spec/unit/resource/route_spec.rb +1 -1
- data/spec/unit/resource/ruby_block_spec.rb +2 -2
- data/spec/unit/resource/template_spec.rb +1 -1
- data/spec/unit/resource/timestamped_deploy_spec.rb +1 -2
- data/spec/unit/resource/windows_service_spec.rb +1 -1
- data/spec/unit/resource_spec.rb +99 -13
- data/spec/unit/rest_spec.rb +5 -5
- data/spec/unit/run_context_spec.rb +41 -0
- data/spec/unit/runner_spec.rb +2 -2
- data/spec/unit/user_spec.rb +406 -93
- data/tasks/maintainers.rb +69 -0
- metadata +37 -4
@@ -56,7 +56,7 @@ class Chef
|
|
56
56
|
Chef::Log.debug("#{@new_resource} installing MSI package '#{@new_resource.source}'")
|
57
57
|
shell_out!("msiexec /qn /i \"#{@new_resource.source}\" #{expand_options(@new_resource.options)}", {:timeout => @new_resource.timeout, :returns => @new_resource.returns})
|
58
58
|
end
|
59
|
-
|
59
|
+
|
60
60
|
def remove_package(name, version)
|
61
61
|
# We could use MsiConfigureProduct here, but we'll start off with msiexec
|
62
62
|
Chef::Log.debug("#{@new_resource} removing MSI package '#{@new_resource.source}'")
|
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
|
2
2
|
# Author:: Adam Jacob (<adam@opscode.com>)
|
3
3
|
# Copyright:: Copyright (c) 2008 Opscode, Inc.
|
4
4
|
# License:: Apache License, Version 2.0
|
@@ -18,7 +18,6 @@
|
|
18
18
|
|
19
19
|
require 'chef/config'
|
20
20
|
require 'chef/provider/package'
|
21
|
-
require 'chef/mixin/shell_out'
|
22
21
|
require 'chef/mixin/which'
|
23
22
|
require 'chef/resource/package'
|
24
23
|
require 'singleton'
|
@@ -647,7 +646,6 @@ class Chef
|
|
647
646
|
|
648
647
|
# Cache for our installed and available packages, pulled in from yum-dump.py
|
649
648
|
class YumCache
|
650
|
-
include Chef::Mixin::Command
|
651
649
|
include Chef::Mixin::Which
|
652
650
|
include Chef::Mixin::ShellOut
|
653
651
|
include Singleton
|
@@ -1028,7 +1026,7 @@ class Chef
|
|
1028
1026
|
|
1029
1027
|
def yum_command(command)
|
1030
1028
|
Chef::Log.debug("#{@new_resource}: yum command: \"#{command}\"")
|
1031
|
-
status =
|
1029
|
+
status = shell_out_with_timeout(command, {:timeout => Chef::Config[:yum_timeout]})
|
1032
1030
|
|
1033
1031
|
# This is fun: rpm can encounter errors in the %post/%postun scripts which aren't
|
1034
1032
|
# considered fatal - meaning the rpm is still successfully installed. These issue
|
@@ -1045,7 +1043,7 @@ class Chef
|
|
1045
1043
|
if l =~ %r{^error: %(post|postun)\(.*\) scriptlet failed, exit status \d+$}
|
1046
1044
|
Chef::Log.warn("#{@new_resource} caught non-fatal scriptlet issue: \"#{l}\". Can't trust yum exit status " +
|
1047
1045
|
"so running install again to verify.")
|
1048
|
-
status =
|
1046
|
+
status = shell_out_with_timeout(command, {:timeout => Chef::Config[:yum_timeout]})
|
1049
1047
|
break
|
1050
1048
|
end
|
1051
1049
|
end
|
@@ -1118,7 +1116,7 @@ class Chef
|
|
1118
1116
|
end
|
1119
1117
|
|
1120
1118
|
Chef::Log.debug("#{@new_resource} checking rpm status")
|
1121
|
-
|
1119
|
+
shell_out_with_timeout!("rpm -qp --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' #{@new_resource.source}", :timeout => Chef::Config[:yum_timeout]).stdout.each_line do |line|
|
1122
1120
|
case line
|
1123
1121
|
when /([\w\d_.-]+)\s([\w\d_.-]+)/
|
1124
1122
|
@current_resource.package_name($1)
|
@@ -29,46 +29,48 @@ class Chef
|
|
29
29
|
class Package
|
30
30
|
class Zypper < Chef::Provider::Package
|
31
31
|
|
32
|
+
provides :zypper_package, os: "linux"
|
33
|
+
|
32
34
|
def load_current_resource
|
33
|
-
@current_resource = Chef::Resource::
|
34
|
-
|
35
|
+
@current_resource = Chef::Resource::ZypperPackage.new(new_resource.name)
|
36
|
+
current_resource.package_name(new_resource.package_name)
|
35
37
|
|
36
38
|
is_installed=false
|
37
39
|
is_out_of_date=false
|
38
40
|
version=''
|
39
41
|
oud_version=''
|
40
|
-
Chef::Log.debug("#{
|
41
|
-
status =
|
42
|
+
Chef::Log.debug("#{new_resource} checking zypper")
|
43
|
+
status = shell_out_with_timeout("zypper --non-interactive info #{new_resource.package_name}")
|
42
44
|
status.stdout.each_line do |line|
|
43
45
|
case line
|
44
46
|
when /^Version: (.+)$/
|
45
47
|
version = $1
|
46
|
-
Chef::Log.debug("#{
|
48
|
+
Chef::Log.debug("#{new_resource} version #{$1}")
|
47
49
|
when /^Installed: Yes$/
|
48
50
|
is_installed=true
|
49
|
-
Chef::Log.debug("#{
|
51
|
+
Chef::Log.debug("#{new_resource} is installed")
|
50
52
|
|
51
53
|
when /^Installed: No$/
|
52
54
|
is_installed=false
|
53
|
-
Chef::Log.debug("#{
|
55
|
+
Chef::Log.debug("#{new_resource} is not installed")
|
54
56
|
when /^Status: out-of-date \(version (.+) installed\)$/
|
55
57
|
is_out_of_date=true
|
56
58
|
oud_version=$1
|
57
|
-
Chef::Log.debug("#{
|
59
|
+
Chef::Log.debug("#{new_resource} out of date version #{$1}")
|
58
60
|
end
|
59
61
|
end
|
60
62
|
|
61
63
|
if is_installed==false
|
62
64
|
@candidate_version=version
|
63
|
-
|
65
|
+
current_resource.version(nil)
|
64
66
|
end
|
65
67
|
|
66
68
|
if is_installed==true
|
67
69
|
if is_out_of_date==true
|
68
|
-
|
70
|
+
current_resource.version(oud_version)
|
69
71
|
@candidate_version=version
|
70
72
|
else
|
71
|
-
|
73
|
+
current_resource.version(version)
|
72
74
|
@candidate_version=version
|
73
75
|
end
|
74
76
|
end
|
@@ -77,7 +79,7 @@ class Chef
|
|
77
79
|
raise Chef::Exceptions::Package, "zypper failed - #{status.inspect}!"
|
78
80
|
end
|
79
81
|
|
80
|
-
|
82
|
+
current_resource
|
81
83
|
end
|
82
84
|
|
83
85
|
def zypper_version()
|
@@ -104,9 +106,9 @@ class Chef
|
|
104
106
|
def zypper_package(command, pkgname, version)
|
105
107
|
version = "=#{version}" unless version.nil? || version.empty?
|
106
108
|
if zypper_version < 1.0
|
107
|
-
|
109
|
+
shell_out_with_timeout!("zypper#{gpg_checks} #{command} -y #{pkgname}")
|
108
110
|
else
|
109
|
-
|
111
|
+
shell_out_with_timeout!("zypper --non-interactive#{gpg_checks} "+
|
110
112
|
"#{command} #{pkgname}#{version}")
|
111
113
|
end
|
112
114
|
end
|
@@ -24,71 +24,153 @@ class Chef
|
|
24
24
|
|
25
25
|
provides :powershell_script, os: "windows"
|
26
26
|
|
27
|
+
def initialize (new_resource, run_context)
|
28
|
+
super(new_resource, run_context, '.ps1')
|
29
|
+
add_exit_status_wrapper
|
30
|
+
end
|
31
|
+
|
32
|
+
def action_run
|
33
|
+
valid_syntax = validate_script_syntax!
|
34
|
+
super if valid_syntax
|
35
|
+
end
|
36
|
+
|
37
|
+
def flags
|
38
|
+
# Must use -File rather than -Command to launch the script
|
39
|
+
# file created by the base class that contains the script
|
40
|
+
# code -- otherwise, powershell.exe does not propagate the
|
41
|
+
# error status of a failed Windows process that ran at the
|
42
|
+
# end of the script, it gets changed to '1'.
|
43
|
+
interpreter_flags = [default_interpreter_flags, '-File'].join(' ')
|
44
|
+
|
45
|
+
if ! (@new_resource.flags.nil?)
|
46
|
+
interpreter_flags = [@new_resource.flags, interpreter_flags].join(' ')
|
47
|
+
end
|
48
|
+
|
49
|
+
interpreter_flags
|
50
|
+
end
|
51
|
+
|
27
52
|
protected
|
28
|
-
EXIT_STATUS_EXCEPTION_HANDLER = "\ntrap [Exception] {write-error -exception ($_.Exception.Message);exit 1}".freeze
|
29
|
-
EXIT_STATUS_NORMALIZATION_SCRIPT = "\nif ($? -ne $true) { if ( $LASTEXITCODE ) {exit $LASTEXITCODE} else { exit 1 }}".freeze
|
30
|
-
EXIT_STATUS_RESET_SCRIPT = "\n$global:LASTEXITCODE=$null".freeze
|
31
53
|
|
32
|
-
# Process exit codes are strange with PowerShell
|
33
|
-
#
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
# $? and $LASTEXITCODE to return the process exit code of the
|
38
|
-
# last process run in the script if it is the last command
|
39
|
-
# executed, otherwise 0 or 1 based on whether $? is set to true
|
40
|
-
# (success, where we return 0) or false (where we return 1).
|
41
|
-
def normalize_script_exit_status( code )
|
42
|
-
target_code = ( EXIT_STATUS_EXCEPTION_HANDLER +
|
43
|
-
EXIT_STATUS_RESET_SCRIPT +
|
44
|
-
"\n" +
|
45
|
-
code.to_s +
|
46
|
-
EXIT_STATUS_NORMALIZATION_SCRIPT )
|
47
|
-
convert_boolean_return = @new_resource.convert_boolean_return
|
48
|
-
self.code = <<EOH
|
49
|
-
new-variable -name interpolatedexitcode -visibility private -value $#{convert_boolean_return}
|
50
|
-
new-variable -name chefscriptresult -visibility private
|
51
|
-
$chefscriptresult = {
|
52
|
-
#{target_code}
|
53
|
-
}.invokereturnasis()
|
54
|
-
if ($interpolatedexitcode -and $chefscriptresult.gettype().name -eq 'boolean') { exit [int32](!$chefscriptresult) } else { exit 0 }
|
55
|
-
EOH
|
56
|
-
Chef::Log.debug("powershell_script provider called with script code:\n\n#{code}\n")
|
54
|
+
# Process exit codes are strange with PowerShell and require
|
55
|
+
# special handling to cover common use cases.
|
56
|
+
def add_exit_status_wrapper
|
57
|
+
self.code = wrapper_script
|
58
|
+
Chef::Log.debug("powershell_script provider called with script code:\n\n#{@new_resource.code}\n")
|
57
59
|
Chef::Log.debug("powershell_script provider will execute transformed code:\n\n#{self.code}\n")
|
58
60
|
end
|
59
61
|
|
60
|
-
|
62
|
+
def validate_script_syntax!
|
63
|
+
interpreter_arguments = default_interpreter_flags.join(' ')
|
64
|
+
Tempfile.open(['chef_powershell_script-user-code', '.ps1']) do | user_script_file |
|
65
|
+
user_script_file.puts("{#{@new_resource.code}}")
|
66
|
+
user_script_file.close
|
61
67
|
|
62
|
-
|
63
|
-
|
64
|
-
|
68
|
+
validation_command = "\"#{interpreter}\" #{interpreter_arguments} -Command #{user_script_file.path}"
|
69
|
+
|
70
|
+
# For consistency with other script resources, allow even syntax errors
|
71
|
+
# to be suppressed if the returns attribute would have suppressed it
|
72
|
+
# at converge.
|
73
|
+
valid_returns = [0]
|
74
|
+
specified_returns = @new_resource.returns.is_a?(Integer) ?
|
75
|
+
[@new_resource.returns] :
|
76
|
+
@new_resource.returns
|
77
|
+
valid_returns.concat([1]) if specified_returns.include?(1)
|
78
|
+
|
79
|
+
result = shell_out!(validation_command, {returns: valid_returns})
|
80
|
+
result.exitstatus == 0
|
81
|
+
end
|
65
82
|
end
|
66
83
|
|
67
|
-
def
|
68
|
-
|
84
|
+
def default_interpreter_flags
|
85
|
+
# 'Bypass' is preferable since it doesn't require user input confirmation
|
86
|
+
# for files such as PowerShell modules downloaded from the
|
87
|
+
# Internet. However, 'Bypass' is not supported prior to
|
88
|
+
# PowerShell 3.0, so the fallback is 'Unrestricted'
|
89
|
+
execution_policy = Chef::Platform.supports_powershell_execution_bypass?(run_context.node) ? 'Bypass' : 'Unrestricted'
|
90
|
+
|
91
|
+
[
|
69
92
|
"-NoLogo",
|
70
93
|
"-NonInteractive",
|
71
94
|
"-NoProfile",
|
72
|
-
"-ExecutionPolicy
|
95
|
+
"-ExecutionPolicy #{execution_policy}",
|
73
96
|
# Powershell will hang if STDIN is redirected
|
74
97
|
# http://connect.microsoft.com/PowerShell/feedback/details/572313/powershell-exe-can-hang-if-stdin-is-redirected
|
75
|
-
"-InputFormat None"
|
76
|
-
# Must use -File rather than -Command to launch the script
|
77
|
-
# file created by the base class that contains the script
|
78
|
-
# code -- otherwise, powershell.exe does not propagate the
|
79
|
-
# error status of a failed Windows process that ran at the
|
80
|
-
# end of the script, it gets changed to '1'.
|
81
|
-
"-File"
|
98
|
+
"-InputFormat None"
|
82
99
|
]
|
100
|
+
end
|
83
101
|
|
84
|
-
|
102
|
+
# A wrapper script is used to launch user-supplied script while
|
103
|
+
# still obtaining useful process exit codes. Unless you
|
104
|
+
# explicitly call exit in Powershell, the powershell.exe
|
105
|
+
# interpreter returns only 0 for success or 1 for failure. Since
|
106
|
+
# we'd like to get specific exit codes from executable tools run
|
107
|
+
# with Powershell, we do some work using the automatic variables
|
108
|
+
# $? and $LASTEXITCODE to return the process exit code of the
|
109
|
+
# last process run in the script if it is the last command
|
110
|
+
# executed, otherwise 0 or 1 based on whether $? is set to true
|
111
|
+
# (success, where we return 0) or false (where we return 1).
|
112
|
+
def wrapper_script
|
113
|
+
<<-EOH
|
114
|
+
# Chef Client wrapper for powershell_script resources
|
85
115
|
|
86
|
-
|
87
|
-
|
88
|
-
|
116
|
+
# LASTEXITCODE can be uninitialized -- make it explictly 0
|
117
|
+
# to avoid incorrect detection of failure (non-zero) codes
|
118
|
+
$global:LASTEXITCODE = 0
|
89
119
|
|
90
|
-
|
120
|
+
# Catch any exceptions -- without this, exceptions will result
|
121
|
+
# In a zero return code instead of the desired non-zero code
|
122
|
+
# that indicates a failure
|
123
|
+
trap [Exception] {write-error ($_.Exception.Message);exit 1}
|
124
|
+
|
125
|
+
# Variable state that should not be accessible to the user code
|
126
|
+
new-variable -name interpolatedexitcode -visibility private -value $#{@new_resource.convert_boolean_return}
|
127
|
+
new-variable -name chefscriptresult -visibility private
|
128
|
+
|
129
|
+
# Initialize a variable we use to capture $? inside a block
|
130
|
+
$global:lastcmdlet = $null
|
131
|
+
|
132
|
+
# Execute the user's code in a script block --
|
133
|
+
$chefscriptresult =
|
134
|
+
{
|
135
|
+
#{@new_resource.code}
|
136
|
+
|
137
|
+
# This assignment doesn't affect the block's return value
|
138
|
+
$global:lastcmdlet = $?
|
139
|
+
}.invokereturnasis()
|
140
|
+
|
141
|
+
# Assume failure status of 1 -- success cases
|
142
|
+
# will have to override this
|
143
|
+
$exitstatus = 1
|
144
|
+
|
145
|
+
# If convert_boolean_return is enabled, the block's return value
|
146
|
+
# gets precedence in determining our exit status
|
147
|
+
if ($interpolatedexitcode -and $chefscriptresult -ne $null -and $chefscriptresult.gettype().name -eq 'boolean')
|
148
|
+
{
|
149
|
+
$exitstatus = [int32](!$chefscriptresult)
|
150
|
+
}
|
151
|
+
elseif ($lastcmdlet)
|
152
|
+
{
|
153
|
+
# Otherwise, a successful cmdlet execution defines the status
|
154
|
+
$exitstatus = 0
|
155
|
+
}
|
156
|
+
elseif ( $LASTEXITCODE -ne $null -and $LASTEXITCODE -ne 0 )
|
157
|
+
{
|
158
|
+
# If the cmdlet status is failed, allow the Win32 status
|
159
|
+
# in $LASTEXITCODE to define exit status. This handles the case
|
160
|
+
# where no cmdlets, only Win32 processes have run since $?
|
161
|
+
# will be set to $false whenever a Win32 process returns a non-zero
|
162
|
+
# status.
|
163
|
+
$exitstatus = $LASTEXITCODE
|
164
|
+
}
|
165
|
+
|
166
|
+
# If this script is launched with -File, the process exit
|
167
|
+
# status of PowerShell.exe will be $exitstatus. If it was
|
168
|
+
# launched with -Command, it will be 0 if $exitstatus was 0,
|
169
|
+
# 1 (i.e. failed) otherwise.
|
170
|
+
exit $exitstatus
|
171
|
+
EOH
|
91
172
|
end
|
173
|
+
|
92
174
|
end
|
93
175
|
end
|
94
176
|
end
|
@@ -20,6 +20,7 @@
|
|
20
20
|
require 'uri'
|
21
21
|
require 'tempfile'
|
22
22
|
require 'chef/file_content_management/content_base'
|
23
|
+
require 'chef/mixin/uris'
|
23
24
|
|
24
25
|
class Chef
|
25
26
|
class Provider
|
@@ -28,6 +29,8 @@ class Chef
|
|
28
29
|
|
29
30
|
private
|
30
31
|
|
32
|
+
include Chef::Mixin::Uris
|
33
|
+
|
31
34
|
def file_for_provider
|
32
35
|
Chef::Log.debug("#{@new_resource} checking for changes")
|
33
36
|
|
@@ -48,7 +51,7 @@ class Chef
|
|
48
51
|
uri = if Chef::Provider::RemoteFile::Fetcher.network_share?(source)
|
49
52
|
source
|
50
53
|
else
|
51
|
-
|
54
|
+
as_uri(source)
|
52
55
|
end
|
53
56
|
raw_file = grab_file_from_uri(uri)
|
54
57
|
rescue SocketError, Errno::ECONNREFUSED, Errno::ENOENT, Errno::EACCES, Timeout::Error, Net::HTTPServerException, Net::HTTPFatalError, Net::FTPError => e
|
@@ -32,15 +32,21 @@ class Chef
|
|
32
32
|
@new_resource = new_resource
|
33
33
|
@uri = uri
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
# CHEF-4472: Remove the leading slash from windows paths that we receive from a file:// URI
|
37
|
-
def fix_windows_path(path)
|
38
|
-
path.gsub(/^\/([a-zA-Z]:)/,'\1')
|
37
|
+
def fix_windows_path(path)
|
38
|
+
path.gsub(/^\/([a-zA-Z]:)/,'\1')
|
39
|
+
end
|
40
|
+
|
41
|
+
def source_path
|
42
|
+
@source_path ||= begin
|
43
|
+
path = URI.unescape(uri.path)
|
44
|
+
Chef::Platform.windows? ? fix_windows_path(path) : path
|
45
|
+
end
|
39
46
|
end
|
40
47
|
|
41
48
|
# Fetches the file at uri, returning a Tempfile-like File handle
|
42
49
|
def fetch
|
43
|
-
source_path = Chef::Platform.windows? ? fix_windows_path(uri.path) : uri.path
|
44
50
|
tempfile = Chef::FileContentManagement::Tempfile.new(new_resource).tempfile
|
45
51
|
Chef::Log.debug("#{new_resource} staging #{source_path} to #{tempfile.path}")
|
46
52
|
FileUtils.cp(source_path, tempfile.path)
|
@@ -168,6 +168,50 @@ class Chef
|
|
168
168
|
@new_resource.respond_to?(method_name) &&
|
169
169
|
!!@new_resource.send(method_name)
|
170
170
|
end
|
171
|
+
|
172
|
+
module ServicePriorityInit
|
173
|
+
|
174
|
+
#
|
175
|
+
# Platform-specific versions
|
176
|
+
#
|
177
|
+
|
178
|
+
#
|
179
|
+
# Linux
|
180
|
+
#
|
181
|
+
|
182
|
+
require 'chef/chef_class'
|
183
|
+
require 'chef/provider/service/systemd'
|
184
|
+
require 'chef/provider/service/insserv'
|
185
|
+
require 'chef/provider/service/redhat'
|
186
|
+
require 'chef/provider/service/arch'
|
187
|
+
require 'chef/provider/service/gentoo'
|
188
|
+
require 'chef/provider/service/upstart'
|
189
|
+
require 'chef/provider/service/debian'
|
190
|
+
require 'chef/provider/service/invokercd'
|
191
|
+
require 'chef/provider/service/freebsd'
|
192
|
+
require 'chef/provider/service/openbsd'
|
193
|
+
require 'chef/provider/service/solaris'
|
194
|
+
require 'chef/provider/service/macosx'
|
195
|
+
|
196
|
+
def self.os(os, *providers)
|
197
|
+
Chef.set_provider_priority_array(:service, providers, os: os)
|
198
|
+
end
|
199
|
+
def self.platform_family(platform_family, *providers)
|
200
|
+
Chef.set_provider_priority_array(:service, providers, platform_family: platform_family)
|
201
|
+
end
|
202
|
+
|
203
|
+
os %w(freebsd netbsd), Freebsd
|
204
|
+
os %w(openbsd), Openbsd
|
205
|
+
os %w(solaris2), Solaris
|
206
|
+
os %w(darwin), Macosx
|
207
|
+
os %w(linux), Systemd, Insserv, Redhat
|
208
|
+
|
209
|
+
platform_family %w(arch), Systemd, Arch
|
210
|
+
platform_family %w(gentoo), Systemd, Gentoo
|
211
|
+
platform_family %w(debian), Systemd, Upstart, Insserv, Debian, Invokercd
|
212
|
+
platform_family %w(rhel fedora suse), Systemd, Insserv, Redhat
|
213
|
+
|
214
|
+
end
|
171
215
|
end
|
172
216
|
end
|
173
217
|
end
|
@@ -147,7 +147,7 @@ class Chef
|
|
147
147
|
# some scripts support multiple instances through symlinks such as openvpn.
|
148
148
|
# We should get the service name from rcvar.
|
149
149
|
Chef::Log.debug("name=\"service\" not found at #{init_command}. falling back to rcvar")
|
150
|
-
|
150
|
+
shell_out!("#{init_command} rcvar").stdout[/(\w+_enable)=/, 1]
|
151
151
|
else
|
152
152
|
# for why-run mode when the rcd_script is not there yet
|
153
153
|
new_resource.service_name
|