chef 16.5.64 → 16.8.14
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +6 -14
- data/README.md +1 -1
- data/Rakefile +21 -14
- data/chef-universal-mingw32.gemspec +1 -1
- data/chef.gemspec +3 -2
- data/lib/chef/application.rb +2 -2
- data/lib/chef/application/base.rb +1 -1
- data/lib/chef/application/client.rb +7 -2
- data/lib/chef/application/knife.rb +1 -1
- data/lib/chef/application/solo.rb +1 -1
- data/lib/chef/chef_fs/chef_fs_data_store.rb +1 -1
- data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +1 -1
- data/lib/chef/chef_fs/file_pattern.rb +1 -1
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +1 -1
- data/lib/chef/client.rb +6 -32
- data/lib/chef/compliance/default_attributes.rb +89 -0
- data/lib/chef/compliance/fetcher/automate.rb +69 -0
- data/lib/chef/compliance/fetcher/chef_server.rb +134 -0
- data/lib/chef/compliance/reporter/automate.rb +202 -0
- data/lib/chef/compliance/reporter/chef_server_automate.rb +94 -0
- data/lib/chef/compliance/reporter/compliance_enforcer.rb +20 -0
- data/lib/chef/compliance/reporter/json_file.rb +19 -0
- data/lib/chef/compliance/runner.rb +261 -0
- data/lib/chef/cookbook/gem_installer.rb +1 -1
- data/lib/chef/cookbook_manifest.rb +2 -1
- data/lib/chef/cookbook_site_streaming_uploader.rb +1 -1
- data/lib/chef/cookbook_version.rb +2 -5
- data/lib/chef/data_collector.rb +1 -1
- data/lib/chef/encrypted_data_bag_item/assertions.rb +1 -1
- data/lib/chef/environment.rb +1 -1
- data/lib/chef/event_loggers/windows_eventlog.rb +1 -1
- data/lib/chef/exceptions.rb +5 -1
- data/lib/chef/file_access_control/windows.rb +1 -4
- data/lib/chef/file_content_management/tempfile.rb +1 -1
- data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +2 -2
- data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +5 -5
- data/lib/chef/formatters/indentable_output_stream.rb +2 -2
- data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +28 -39
- data/lib/chef/http.rb +2 -12
- data/lib/chef/http/basic_client.rb +1 -1
- data/lib/chef/http/http_request.rb +1 -1
- data/lib/chef/http/socketless_chef_zero_client.rb +1 -1
- data/lib/chef/http/ssl_policies.rb +6 -0
- data/lib/chef/json_compat.rb +2 -7
- data/lib/chef/key.rb +1 -1
- data/lib/chef/knife/bootstrap.rb +2 -1
- data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +2 -2
- data/lib/chef/knife/bootstrap/train_connector.rb +1 -1
- data/lib/chef/knife/config_show.rb +1 -1
- data/lib/chef/knife/core/cookbook_scm_repo.rb +1 -1
- data/lib/chef/knife/core/gem_glob_loader.rb +1 -1
- data/lib/chef/knife/core/ui.rb +5 -2
- data/lib/chef/knife/core/windows_bootstrap_context.rb +7 -4
- data/lib/chef/knife/node_policy_set.rb +2 -2
- data/lib/chef/knife/node_run_list_add.rb +1 -1
- data/lib/chef/knife/node_run_list_remove.rb +1 -1
- data/lib/chef/knife/node_run_list_set.rb +1 -1
- data/lib/chef/knife/role_env_run_list_add.rb +1 -1
- data/lib/chef/knife/role_env_run_list_set.rb +1 -1
- data/lib/chef/knife/role_run_list_add.rb +1 -1
- data/lib/chef/knife/role_run_list_set.rb +1 -1
- data/lib/chef/knife/search.rb +0 -1
- data/lib/chef/knife/ssh.rb +5 -3
- data/lib/chef/knife/tag_create.rb +1 -1
- data/lib/chef/knife/tag_delete.rb +1 -1
- data/lib/chef/local_mode.rb +1 -1
- data/lib/chef/mixin/convert_to_class_name.rb +0 -56
- data/lib/chef/mixin/openssl_helper.rb +1 -1
- data/lib/chef/mixin/powershell_exec.rb +24 -10
- data/lib/chef/mixin/powershell_out.rb +12 -5
- data/lib/chef/mixin/properties.rb +2 -0
- data/lib/chef/mixin/template.rb +1 -1
- data/lib/chef/mixin/unformatter.rb +1 -1
- data/lib/chef/mixin/uris.rb +3 -1
- data/lib/chef/node/attribute_collections.rb +2 -6
- data/lib/chef/node/mixin/immutablize_hash.rb +2 -0
- data/lib/chef/node_map.rb +2 -2
- data/lib/chef/platform/query_helpers.rb +4 -4
- data/lib/chef/policy_builder/dynamic.rb +2 -0
- data/lib/chef/powershell.rb +10 -4
- data/lib/chef/property.rb +1 -1
- data/lib/chef/provider.rb +1 -1
- data/lib/chef/provider/cron.rb +2 -13
- data/lib/chef/provider/dsc_resource.rb +12 -24
- data/lib/chef/provider/dsc_script.rb +16 -20
- data/lib/chef/provider/file.rb +1 -1
- data/lib/chef/provider/git.rb +5 -5
- data/lib/chef/provider/group.rb +14 -6
- data/lib/chef/provider/group/windows.rb +12 -1
- data/lib/chef/provider/ifconfig.rb +8 -8
- data/lib/chef/provider/ifconfig/debian.rb +38 -22
- data/lib/chef/provider/ifconfig/redhat.rb +54 -18
- data/lib/chef/provider/launchd.rb +1 -11
- data/lib/chef/provider/link.rb +0 -9
- data/lib/chef/provider/mount.rb +18 -1
- data/lib/chef/provider/mount/linux.rb +4 -0
- data/lib/chef/provider/mount/mount.rb +41 -43
- data/lib/chef/provider/package.rb +3 -0
- data/lib/chef/provider/package/apt.rb +1 -1
- data/lib/chef/provider/package/chocolatey.rb +6 -6
- data/lib/chef/provider/package/dpkg.rb +3 -12
- data/lib/chef/provider/package/freebsd/base.rb +3 -2
- data/lib/chef/provider/package/freebsd/pkgng.rb +1 -1
- data/lib/chef/provider/package/homebrew.rb +1 -1
- data/lib/chef/provider/package/ips.rb +1 -1
- data/lib/chef/provider/package/powershell.rb +2 -3
- data/lib/chef/provider/package/rubygems.rb +1 -1
- data/lib/chef/provider/package/snap.rb +1 -3
- data/lib/chef/provider/package/solaris.rb +0 -2
- data/lib/chef/provider/package/yum/rpm_utils.rb +1 -1
- data/lib/chef/provider/package/zypper.rb +98 -71
- data/lib/chef/provider/powershell_script.rb +12 -1
- data/lib/chef/provider/registry_key.rb +4 -3
- data/lib/chef/provider/route.rb +2 -2
- data/lib/chef/provider/service/debian.rb +2 -1
- data/lib/chef/provider/service/redhat.rb +1 -1
- data/lib/chef/provider/user.rb +17 -9
- data/lib/chef/provider/user/aix.rb +1 -1
- data/lib/chef/provider/user/dscl.rb +2 -2
- data/lib/chef/provider/user/mac.rb +14 -6
- data/lib/chef/provider/user/solaris.rb +1 -1
- data/lib/chef/provider/user/windows.rb +10 -3
- data/lib/chef/providers.rb +0 -3
- data/lib/chef/pwsh.rb +71 -0
- data/lib/chef/resource.rb +1 -1
- data/lib/chef/resource/apt_repository.rb +6 -5
- data/lib/chef/resource/bash.rb +119 -1
- data/lib/chef/resource/batch.rb +1 -1
- data/lib/chef/resource/breakpoint.rb +3 -1
- data/lib/chef/resource/build_essential.rb +5 -8
- data/lib/chef/resource/chef_client_config.rb +313 -0
- data/lib/chef/resource/chef_client_cron.rb +5 -5
- data/lib/chef/resource/chef_client_scheduled_task.rb +4 -4
- data/lib/chef/resource/chef_client_systemd_timer.rb +5 -5
- data/lib/chef/resource/chef_handler.rb +1 -0
- data/lib/chef/resource/chef_sleep.rb +1 -1
- data/lib/chef/resource/cron/_cron_shared.rb +1 -0
- data/lib/chef/resource/cron/cron_d.rb +2 -2
- data/lib/chef/resource/csh.rb +2 -2
- data/lib/chef/resource/dsc_script.rb +8 -1
- data/lib/chef/resource/execute.rb +6 -4
- data/lib/chef/resource/file.rb +2 -2
- data/lib/chef/resource/homebrew_update.rb +4 -1
- data/lib/chef/resource/hostname.rb +5 -5
- data/lib/chef/resource/ifconfig.rb +52 -5
- data/lib/chef/resource/kernel_module.rb +1 -1
- data/lib/chef/resource/ksh.rb +3 -3
- data/lib/chef/resource/launchd.rb +15 -15
- data/lib/chef/resource/lwrp_base.rb +3 -5
- data/lib/chef/resource/mount.rb +8 -2
- data/lib/chef/resource/perl.rb +2 -2
- data/lib/chef/resource/plist.rb +2 -6
- data/lib/chef/resource/powershell_package_source.rb +19 -18
- data/lib/chef/resource/powershell_script.rb +14 -11
- data/lib/chef/resource/python.rb +2 -2
- data/lib/chef/resource/registry_key.rb +93 -2
- data/lib/chef/resource/route.rb +1 -1
- data/lib/chef/resource/ruby.rb +2 -2
- data/lib/chef/resource/scm/_scm.rb +2 -1
- data/lib/chef/resource/scm/git.rb +82 -1
- data/lib/chef/resource/scm/subversion.rb +12 -0
- data/lib/chef/resource/script.rb +2 -2
- data/lib/chef/resource/solaris_package.rb +0 -2
- data/lib/chef/resource/sudo.rb +1 -1
- data/lib/chef/resource/support/client.erb +64 -0
- data/lib/chef/resource/systemd_unit.rb +42 -1
- data/lib/chef/resource/template.rb +2 -2
- data/lib/chef/resource/windows_ad_join.rb +9 -9
- data/lib/chef/resource/windows_audit_policy.rb +26 -24
- data/lib/chef/resource/windows_certificate.rb +13 -7
- data/lib/chef/resource/windows_dfs_server.rb +7 -4
- data/lib/chef/resource/windows_env.rb +173 -0
- data/lib/chef/resource/windows_feature.rb +2 -0
- data/lib/chef/resource/windows_firewall_profile.rb +7 -12
- data/lib/chef/resource/windows_firewall_rule.rb +9 -11
- data/lib/chef/resource/windows_font.rb +1 -1
- data/lib/chef/resource/windows_package.rb +1 -0
- data/lib/chef/resource/windows_path.rb +38 -0
- data/lib/chef/resource/windows_security_policy.rb +5 -5
- data/lib/chef/resource/windows_service.rb +108 -0
- data/lib/chef/resource/windows_share.rb +18 -18
- data/lib/chef/resource/windows_task.rb +629 -28
- data/lib/chef/resource/windows_workgroup.rb +6 -4
- data/lib/chef/resource/yum_repository.rb +1 -1
- data/lib/chef/resource_collection/resource_set.rb +2 -6
- data/lib/chef/resource_inspector.rb +77 -75
- data/lib/chef/resource_reporter.rb +0 -2
- data/lib/chef/resources.rb +1 -0
- data/lib/chef/run_lock.rb +2 -2
- data/lib/chef/search/query.rb +3 -1
- data/lib/chef/server_api.rb +0 -4
- data/lib/chef/shell/ext.rb +1 -1
- data/lib/chef/util/backup.rb +1 -1
- data/lib/chef/util/dsc/configuration_generator.rb +52 -11
- data/lib/chef/util/dsc/lcm_output_parser.rb +4 -7
- data/lib/chef/util/dsc/local_configuration_manager.rb +18 -15
- data/lib/chef/util/dsc/resource_store.rb +5 -11
- data/lib/chef/version.rb +1 -1
- data/lib/chef/win32/api/file.rb +4 -0
- data/lib/chef/win32/file.rb +1 -1
- data/lib/chef/win32/security/sid.rb +1 -1
- data/lib/chef/win32/unicode.rb +1 -1
- data/spec/functional/mixin/powershell_out_spec.rb +11 -3
- data/spec/functional/resource/apt_package_spec.rb +4 -6
- data/spec/functional/resource/chocolatey_package_spec.rb +3 -3
- data/spec/functional/resource/cron_spec.rb +3 -3
- data/spec/functional/resource/dsc_script_spec.rb +6 -9
- data/spec/functional/resource/mount_spec.rb +10 -2
- data/spec/functional/resource/powershell_package_source_spec.rb +107 -0
- data/spec/functional/resource/powershell_script_spec.rb +57 -14
- data/spec/functional/resource/windows_certificate_spec.rb +10 -6
- data/spec/functional/resource/windows_firewall_rule_spec.rb +93 -0
- data/spec/functional/resource/windows_package_spec.rb +36 -10
- data/spec/functional/resource/windows_share_spec.rb +103 -0
- data/spec/functional/resource/windows_task_spec.rb +2 -3
- data/spec/functional/resource/zypper_package_spec.rb +11 -0
- data/spec/integration/client/client_spec.rb +2 -1
- data/spec/integration/compliance/compliance_spec.rb +81 -0
- data/spec/integration/knife/client_key_create_spec.rb +1 -1
- data/spec/integration/knife/node_create_spec.rb +1 -1
- data/spec/integration/knife/node_environment_set_spec.rb +1 -1
- data/spec/integration/knife/node_run_list_add_spec.rb +4 -4
- data/spec/integration/knife/node_run_list_remove_spec.rb +1 -1
- data/spec/integration/knife/node_run_list_set_spec.rb +1 -1
- data/spec/integration/knife/node_show_spec.rb +1 -1
- data/spec/integration/recipes/notifies_spec.rb +1 -1
- data/spec/integration/recipes/provider_choice.rb +2 -2
- data/spec/integration/recipes/recipe_dsl_spec.rb +1 -0
- data/spec/spec_helper.rb +3 -4
- data/spec/support/lib/chef/resource/cat.rb +1 -1
- data/spec/support/lib/chef/resource/one_two_three_four.rb +1 -1
- data/spec/support/mock/platform.rb +24 -16
- data/spec/support/platform_helpers.rb +11 -4
- data/spec/support/shared/unit/knife_shared.rb +1 -1
- data/spec/support/shared/unit/script_resource.rb +4 -4
- data/spec/support/shared/unit/windows_script_resource.rb +1 -1
- data/spec/unit/chef_fs/config_spec.rb +1 -1
- data/spec/unit/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
- data/spec/unit/client_spec.rb +17 -0
- data/spec/unit/compliance/fetcher/automate_spec.rb +134 -0
- data/spec/unit/compliance/fetcher/chef_server_spec.rb +93 -0
- data/spec/unit/compliance/reporter/automate_spec.rb +427 -0
- data/spec/unit/compliance/reporter/chef_server_automate_spec.rb +177 -0
- data/spec/unit/compliance/reporter/compliance_enforcer_spec.rb +48 -0
- data/spec/unit/compliance/runner_spec.rb +140 -0
- data/spec/unit/data_collector_spec.rb +0 -4
- data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +11 -11
- data/spec/unit/http/ssl_policies_spec.rb +11 -0
- data/spec/unit/knife/client_create_spec.rb +2 -2
- data/spec/unit/knife/configure_client_spec.rb +5 -5
- data/spec/unit/knife/configure_spec.rb +3 -3
- data/spec/unit/knife/cookbook_delete_spec.rb +2 -2
- data/spec/unit/knife/cookbook_download_spec.rb +2 -2
- data/spec/unit/knife/cookbook_list_spec.rb +2 -2
- data/spec/unit/knife/cookbook_metadata_spec.rb +3 -3
- data/spec/unit/knife/core/node_editor_spec.rb +1 -1
- data/spec/unit/knife/environment_compare_spec.rb +3 -3
- data/spec/unit/knife/supermarket_download_spec.rb +8 -8
- data/spec/unit/knife/supermarket_list_spec.rb +3 -3
- data/spec/unit/knife/supermarket_search_spec.rb +1 -1
- data/spec/unit/knife/tag_create_spec.rb +1 -1
- data/spec/unit/knife/tag_delete_spec.rb +1 -1
- data/spec/unit/knife/user_create_spec.rb +1 -1
- data/spec/unit/mixin/powershell_exec_spec.rb +41 -4
- data/spec/unit/mixin/powershell_out_spec.rb +14 -0
- data/spec/unit/mixin/which.rb +1 -1
- data/spec/unit/platform/query_helpers_spec.rb +11 -12
- data/spec/unit/provider/dsc_resource_spec.rb +10 -27
- data/spec/unit/provider/dsc_script_spec.rb +1 -1
- data/spec/unit/provider/group/windows_spec.rb +6 -0
- data/spec/unit/provider/group_spec.rb +1 -1
- data/spec/unit/provider/mount/linux_spec.rb +10 -0
- data/spec/unit/provider/mount/mount_spec.rb +21 -10
- data/spec/unit/provider/mount/solaris_spec.rb +1 -1
- data/spec/unit/provider/mount/windows_spec.rb +1 -0
- data/spec/unit/provider/mount_spec.rb +31 -0
- data/spec/unit/provider/package/chocolatey_spec.rb +1 -2
- data/spec/unit/provider/package/powershell_spec.rb +87 -95
- data/spec/unit/provider/package/zypper_spec.rb +0 -25
- data/spec/unit/provider/package_spec.rb +2 -2
- data/spec/unit/provider/powershell_script_spec.rb +11 -0
- data/spec/unit/provider/subversion_spec.rb +0 -3
- data/spec/unit/provider/systemd_unit_spec.rb +1 -1
- data/spec/unit/provider/user_spec.rb +7 -1
- data/spec/unit/provider/windows_env_spec.rb +18 -34
- data/spec/unit/provider/windows_path_spec.rb +6 -11
- data/spec/unit/provider/windows_task_spec.rb +7 -6
- data/spec/unit/resource/breakpoint_spec.rb +1 -1
- data/spec/unit/resource/build_essential_spec.rb +0 -12
- data/spec/unit/resource/chef_client_config_spec.rb +137 -0
- data/spec/unit/resource/ifconfig_spec.rb +2 -10
- data/spec/unit/resource/mount_spec.rb +18 -5
- data/spec/unit/resource/powershell_package_source_spec.rb +20 -20
- data/spec/unit/resource/powershell_script_spec.rb +4 -74
- data/spec/unit/resource/service_spec.rb +2 -2
- data/spec/unit/resource/solaris_package_spec.rb +8 -10
- data/spec/unit/resource/windows_certificate_spec.rb +12 -0
- data/spec/unit/resource_inspector_spec.rb +3 -3
- data/spec/unit/shell_spec.rb +2 -2
- data/spec/unit/util/dsc/configuration_generator_spec.rb +79 -0
- data/spec/unit/util/dsc/local_configuration_manager_spec.rb +27 -35
- data/tasks/rspec.rb +1 -1
- metadata +47 -24
- data/lib/chef/monkey_patches/net_http.rb +0 -22
- data/lib/chef/provider/windows_env.rb +0 -210
- data/lib/chef/provider/windows_path.rb +0 -61
- data/lib/chef/provider/windows_task.rb +0 -631
- data/lib/chef/util/powershell/cmdlet.rb +0 -175
- data/lib/chef/util/powershell/cmdlet_result.rb +0 -61
- data/spec/functional/util/powershell/cmdlet_spec.rb +0 -111
- data/spec/support/mock/constant.rb +0 -52
- data/spec/unit/monkey_patches/uri_spec.rb +0 -34
- data/spec/unit/provider_resolver_spec.rb +0 -885
- data/spec/unit/resource/data/InstallHistory_with_CLT.plist +0 -92
- data/spec/unit/resource/data/InstallHistory_without_CLT.plist +0 -38
- data/spec/unit/util/powershell/cmdlet_spec.rb +0 -106
@@ -96,6 +96,17 @@ describe Chef::Resource::ZypperPackage, :requires_root, :suse_only do
|
|
96
96
|
expect(zypper_package.updated_by_last_action?).to be false
|
97
97
|
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.2-1.#{pkg_arch}$")
|
98
98
|
end
|
99
|
+
|
100
|
+
it "multipackage installs which result in nils from the superclass" do
|
101
|
+
# this looks weird, it tests an internal condition of the allow_nils behavior where the arrays passed to install_package will have
|
102
|
+
# nil values, and ensures that doesn't wind up creating weirdness in the resulting shell_out that causes it to fail
|
103
|
+
preinstall("chef_rpm-1.2-1.#{pkg_arch}.rpm")
|
104
|
+
zypper_package.package_name(%w{chef_rpm chef_rpm})
|
105
|
+
zypper_package.version(["1.2", "1.10"])
|
106
|
+
zypper_package.run_action(:install)
|
107
|
+
expect(zypper_package.updated_by_last_action?).to be true
|
108
|
+
expect(shell_out("rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' chef_rpm").stdout.chomp).to match("^chef_rpm-1.10-1.#{pkg_arch}$")
|
109
|
+
end
|
99
110
|
end
|
100
111
|
|
101
112
|
context "with versions" do
|
@@ -97,7 +97,8 @@ describe "chef-client" do
|
|
97
97
|
before { file ".chef/knife.rb", "xxx.xxx" }
|
98
98
|
|
99
99
|
it "should load .chef/knife.rb when -z is specified" do
|
100
|
-
|
100
|
+
# On Solaris shell_out will invoke /bin/sh which doesn't understand how to correctly update ENV['PWD']
|
101
|
+
result = shell_out("#{chef_client} -z -o 'x::default'", cwd: path_to(""), env: { "PWD" => nil })
|
101
102
|
# FATAL: Configuration error NoMethodError: undefined method `xxx' for nil:NilClass
|
102
103
|
expect(result.stdout).to include("xxx")
|
103
104
|
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
require "support/shared/integration/integration_helper"
|
4
|
+
require "chef/mixin/shell_out"
|
5
|
+
require "chef-utils/dist"
|
6
|
+
|
7
|
+
describe "chef-client with audit mode" do
|
8
|
+
|
9
|
+
include IntegrationSupport
|
10
|
+
include Chef::Mixin::ShellOut
|
11
|
+
|
12
|
+
let(:chef_dir) { File.join(__dir__, "..", "..", "..", "bin") }
|
13
|
+
|
14
|
+
# Invoke `chef-client` as `ruby PATH/TO/chef-client`. This ensures the
|
15
|
+
# following constraints are satisfied:
|
16
|
+
# * Windows: windows can only run batch scripts as bare executables. Rubygems
|
17
|
+
# creates batch wrappers for installed gems, but we don't have batch wrappers
|
18
|
+
# in the source tree.
|
19
|
+
# * Other `chef-client` in PATH: A common case is running the tests on a
|
20
|
+
# machine that has omnibus chef installed. In that case we need to ensure
|
21
|
+
# we're running `chef-client` from the source tree and not the external one.
|
22
|
+
# cf. CHEF-4914
|
23
|
+
let(:chef_client) { "bundle exec #{ChefUtils::Dist::Infra::CLIENT} --minimal-ohai" }
|
24
|
+
|
25
|
+
when_the_repository "has a custom profile" do
|
26
|
+
let(:report_file) { path_to("report_file.json") }
|
27
|
+
|
28
|
+
before do
|
29
|
+
directory "profiles/my-profile" do
|
30
|
+
file "inspec.yml", <<~FILE
|
31
|
+
---
|
32
|
+
name: my-profile
|
33
|
+
FILE
|
34
|
+
|
35
|
+
directory "controls" do
|
36
|
+
file "my_control.rb", <<~FILE
|
37
|
+
control "my control" do
|
38
|
+
describe Dir.home do
|
39
|
+
it { should be_kind_of String }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
FILE
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
file "attributes.json", <<~FILE
|
47
|
+
{
|
48
|
+
"audit": {
|
49
|
+
"json_file": {
|
50
|
+
"location": "#{report_file}"
|
51
|
+
},
|
52
|
+
"profiles": {
|
53
|
+
"my-profile": {
|
54
|
+
"path": "#{path_to("profiles/my-profile")}"
|
55
|
+
}
|
56
|
+
}
|
57
|
+
}
|
58
|
+
}
|
59
|
+
FILE
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should complete with success" do
|
63
|
+
result = shell_out!("#{chef_client} --local-mode --json-attributes #{path_to("attributes.json")}", cwd: chef_dir)
|
64
|
+
result.error!
|
65
|
+
|
66
|
+
inspec_report = JSON.parse(File.read(report_file))
|
67
|
+
expect(inspec_report["profiles"].length).to eq(1)
|
68
|
+
|
69
|
+
profile = inspec_report["profiles"].first
|
70
|
+
expect(profile["name"]).to eq("my-profile")
|
71
|
+
expect(profile["controls"].length).to eq(1)
|
72
|
+
|
73
|
+
control = profile["controls"].first
|
74
|
+
expect(control["id"]).to eq("my control")
|
75
|
+
expect(control["results"].length).to eq(1)
|
76
|
+
|
77
|
+
result = control["results"].first
|
78
|
+
expect(result["status"]).to eq("passed")
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -39,7 +39,7 @@ describe "knife client key create", :workstation do
|
|
39
39
|
it "creates a new client key with an expiration date" do
|
40
40
|
date = "2017-12-31T23:59:59Z"
|
41
41
|
knife("client key create -k new -e #{date} bah").should_succeed stderr: /^#{out}/, stdout: /.*BEGIN RSA PRIVATE KEY/
|
42
|
-
knife("client key show bah new").should_succeed
|
42
|
+
knife("client key show bah new").should_succeed(/expiration_date:.*#{date}/)
|
43
43
|
end
|
44
44
|
|
45
45
|
it "refuses to add an already existing key" do
|
@@ -34,7 +34,7 @@ describe "knife node create", :workstation do
|
|
34
34
|
|
35
35
|
it "creates a new validator node" do
|
36
36
|
knife("node create bah").should_succeed out
|
37
|
-
knife("node show bah").should_succeed
|
37
|
+
knife("node show bah").should_succeed(/Node Name: bah/)
|
38
38
|
end
|
39
39
|
|
40
40
|
it "refuses to add an existing node" do
|
@@ -31,7 +31,7 @@ describe "knife node environment set", :workstation do
|
|
31
31
|
end
|
32
32
|
|
33
33
|
it "sets an environment on a node" do
|
34
|
-
knife("node environment set cons lisp").should_succeed
|
34
|
+
knife("node environment set cons lisp").should_succeed(/chef_environment:.*lisp/)
|
35
35
|
knife("node show cons -a chef_environment").should_succeed <<~EOM
|
36
36
|
cons:
|
37
37
|
chef_environment: lisp
|
@@ -30,7 +30,7 @@ describe "knife node run list add", :workstation do
|
|
30
30
|
end
|
31
31
|
|
32
32
|
it "sets the run list" do
|
33
|
-
knife("node run list add cons recipe[foo]").should_succeed
|
33
|
+
knife("node run list add cons recipe[foo]").should_succeed(/run_list:\s*recipe\[foo\]\n/)
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -40,15 +40,15 @@ describe "knife node run list add", :workstation do
|
|
40
40
|
end
|
41
41
|
|
42
42
|
it "appends to the run list" do
|
43
|
-
knife("node run list add cons recipe[foo]").should_succeed
|
43
|
+
knife("node run list add cons recipe[foo]").should_succeed(/run_list:\n\s*recipe\[bar\]\n\s*recipe\[foo\]\n/m)
|
44
44
|
end
|
45
45
|
|
46
46
|
it "adds to the run list before the specified item" do
|
47
|
-
knife("node run list add cons -b recipe[bar] recipe[foo]").should_succeed
|
47
|
+
knife("node run list add cons -b recipe[bar] recipe[foo]").should_succeed(/run_list:\n\s*recipe\[foo\]\n\s*recipe\[bar\]\n/m)
|
48
48
|
end
|
49
49
|
|
50
50
|
it "adds to the run list after the specified item" do
|
51
|
-
knife("node run list add cons -a recipe[bar] recipe[foo]").should_succeed
|
51
|
+
knife("node run list add cons -a recipe[bar] recipe[foo]").should_succeed(/run_list:\n\s*recipe\[bar\]\n\s*recipe\[foo\]\n/m)
|
52
52
|
end
|
53
53
|
end
|
54
54
|
end
|
@@ -30,7 +30,7 @@ describe "knife node run list remove", :workstation do
|
|
30
30
|
end
|
31
31
|
|
32
32
|
it "removes the item from the run list" do
|
33
|
-
knife("node run list remove cons recipe[bar]").should_succeed
|
33
|
+
knife("node run list remove cons recipe[bar]").should_succeed(/run_list:\s*recipe\[foo\]\n/m)
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
@@ -30,7 +30,7 @@ describe "knife node run list set", :workstation do
|
|
30
30
|
end
|
31
31
|
|
32
32
|
it "sets the run list" do
|
33
|
-
knife("node run list set cons recipe[bar]").should_succeed
|
33
|
+
knife("node run list set cons recipe[bar]").should_succeed(/run_list:\s*recipe\[bar\]\n/m)
|
34
34
|
end
|
35
35
|
|
36
36
|
it "with no role or recipe" do
|
@@ -30,7 +30,7 @@ describe "knife node show", :workstation do
|
|
30
30
|
end
|
31
31
|
|
32
32
|
it "shows the node" do
|
33
|
-
knife("node show cons").should_succeed
|
33
|
+
knife("node show cons").should_succeed(/Run List:\s*recipe\[bar\], recipe\[foo\]\n/m)
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
@@ -416,7 +416,7 @@ describe "notifications" do
|
|
416
416
|
EOM
|
417
417
|
|
418
418
|
result = shell_out("#{chef_client} -c \"#{path_to("config/client.rb")}\" --no-color -F doc -o 'x::default'", cwd: chef_dir)
|
419
|
-
expect(result.stdout).to match
|
419
|
+
expect(result.stdout).to match(/\* log\[a, b\] action write/)
|
420
420
|
result.error!
|
421
421
|
end
|
422
422
|
|
@@ -30,8 +30,8 @@ describe "Recipe DSL methods" do
|
|
30
30
|
recipe = converge do
|
31
31
|
provider_thingy("blah") {}
|
32
32
|
end
|
33
|
-
expect(recipe.logged_warnings).to match
|
34
|
-
expect(recipe.logged_warnings).to match
|
33
|
+
expect(recipe.logged_warnings).to match(/hello from Chef::Provider::ProviderThingy/)
|
34
|
+
expect(recipe.logged_warnings).to match(/you must use 'provides' to provide DSL/i)
|
35
35
|
end
|
36
36
|
end
|
37
37
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -31,7 +31,7 @@ $LOAD_PATH.unshift File.expand_path("../chef-utils/lib", __dir__)
|
|
31
31
|
|
32
32
|
require "rubygems"
|
33
33
|
require "rspec/mocks"
|
34
|
-
|
34
|
+
require "rexml/document"
|
35
35
|
require "webmock/rspec"
|
36
36
|
|
37
37
|
require "chef"
|
@@ -68,7 +68,7 @@ end
|
|
68
68
|
|
69
69
|
# If you want to load anything into the testing environment
|
70
70
|
# without versioning it, add it to spec/support/local_gems.rb
|
71
|
-
require "spec/support/local_gems
|
71
|
+
require "spec/support/local_gems" if File.exist?(File.join(File.dirname(__FILE__), "support", "local_gems.rb"))
|
72
72
|
|
73
73
|
# Explicitly require spec helpers that need to load first
|
74
74
|
require "spec/support/platform_helpers"
|
@@ -200,6 +200,7 @@ RSpec.configure do |config|
|
|
200
200
|
# check for particular binaries we need
|
201
201
|
config.filter_run_excluding choco_installed: true unless choco_installed?
|
202
202
|
config.filter_run_excluding requires_ifconfig: true unless ifconfig?
|
203
|
+
config.filter_run_excluding pwsh_installed: true unless pwsh_installed?
|
203
204
|
|
204
205
|
running_platform_arch = `uname -m`.strip unless windows?
|
205
206
|
|
@@ -309,8 +310,6 @@ RSpec.configure do |config|
|
|
309
310
|
end
|
310
311
|
|
311
312
|
require "webrick/utils"
|
312
|
-
require "thread"
|
313
|
-
|
314
313
|
# Webrick uses a centralized/synchronized timeout manager. It works by
|
315
314
|
# starting a thread to check for timeouts on an interval. The timeout
|
316
315
|
# checker thread cannot be stopped or canceled in any easy way, and it
|
@@ -5,21 +5,29 @@
|
|
5
5
|
# 'i386-mingw32' (windows) or 'x86_64-darwin11.2.0' (unix). Useful for
|
6
6
|
# testing code that mixes in platform specific modules like +Chef::Mixin::Securable+
|
7
7
|
# or +Chef::FileAccessControl+
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
RSpec.configure do |c|
|
9
|
+
c.include(Module.new do
|
10
|
+
def platform_mock(platform = :unix)
|
11
|
+
case platform
|
12
|
+
when :windows
|
13
|
+
Chef::Config.set_defaults_for_windows
|
14
|
+
allow(ChefUtils).to receive(:windows?).and_return(true)
|
15
|
+
stub_const("ENV", ENV.to_hash.merge("SYSTEMDRIVE" => "C:"))
|
16
|
+
stub_const("RUBY_PLATFORM", "i386-mingw32")
|
17
|
+
stub_const("File::PATH_SEPARATOR", ";")
|
18
|
+
stub_const("File::ALT_SEPARATOR", "\\")
|
19
|
+
when :unix
|
20
|
+
Chef::Config.set_defaults_for_nix
|
21
|
+
allow(ChefUtils).to receive(:windows?).and_return(false)
|
22
|
+
stub_const("ENV", ENV.to_hash.merge("SYSTEMDRIVE" => nil))
|
23
|
+
stub_const("RUBY_PLATFORM", "x86_64-darwin11.2.0")
|
24
|
+
stub_const("File::PATH_SEPARATOR", ":")
|
25
|
+
stub_const("File::ALT_SEPARATOR", nil)
|
26
|
+
else
|
27
|
+
raise "#{__method__}: unrecognized platform '#{platform}', expected one of ':unix' or ':windows'"
|
28
|
+
end
|
11
29
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
Chef::Config.set_defaults_for_nix
|
16
|
-
end
|
17
|
-
|
18
|
-
if block_given?
|
19
|
-
mock_constants({ "RUBY_PLATFORM" => (platform == :windows ? "i386-mingw32" : "x86_64-darwin11.2.0"),
|
20
|
-
"File::PATH_SEPARATOR" => (platform == :windows ? ";" : ":"),
|
21
|
-
"File::ALT_SEPARATOR" => (platform == :windows ? "\\" : nil) }) do
|
22
|
-
yield
|
23
|
-
end
|
24
|
-
end
|
30
|
+
yield
|
31
|
+
end
|
32
|
+
end)
|
25
33
|
end
|
@@ -2,11 +2,9 @@ require "fcntl"
|
|
2
2
|
require "chef/mixin/shell_out"
|
3
3
|
require "ohai/mixin/http_helper"
|
4
4
|
require "ohai/mixin/gce_metadata"
|
5
|
-
require "chef/mixin/powershell_out"
|
6
5
|
|
7
6
|
class ShellHelpers
|
8
7
|
extend Chef::Mixin::ShellOut
|
9
|
-
extend Chef::Mixin::PowershellOut
|
10
8
|
end
|
11
9
|
|
12
10
|
# magic stolen from bundler/spec/support/less_than_proc.rb
|
@@ -242,6 +240,15 @@ def ifconfig?
|
|
242
240
|
end
|
243
241
|
|
244
242
|
def choco_installed?
|
245
|
-
result = ShellHelpers.
|
246
|
-
result.stderr.empty?
|
243
|
+
result = ShellHelpers.shell_out("choco --version")
|
244
|
+
result.stderr.empty?
|
245
|
+
rescue
|
246
|
+
false
|
247
|
+
end
|
248
|
+
|
249
|
+
def pwsh_installed?
|
250
|
+
result = ShellHelpers.shell_out("pwsh.exe --version")
|
251
|
+
result.stderr.empty?
|
252
|
+
rescue
|
253
|
+
false
|
247
254
|
end
|
@@ -33,7 +33,7 @@ shared_examples_for "mandatory field missing" do
|
|
33
33
|
|
34
34
|
it "prints a relevant error message" do
|
35
35
|
expect { knife.run }.to raise_error(SystemExit)
|
36
|
-
expect(stderr.string).to match
|
36
|
+
expect(stderr.string).to match(/You must specify a #{fieldname}/)
|
37
37
|
end
|
38
38
|
end
|
39
39
|
end
|
@@ -47,16 +47,16 @@ shared_examples_for "a script resource" do
|
|
47
47
|
end
|
48
48
|
|
49
49
|
describe "when executing guards" do
|
50
|
-
it "inherits exactly the :cwd, :environment, :group, :path, :user, and :umask attributes from a parent resource class" do
|
50
|
+
it "inherits exactly the :cwd, :domain, :environment, :group, :password, :path, :user, and :umask attributes from a parent resource class" do
|
51
51
|
inherited_difference = Chef::Resource::Script.guard_inherited_attributes -
|
52
|
-
%i{cwd environment group path user umask}
|
52
|
+
%i{cwd domain environment group password path user umask}
|
53
53
|
|
54
54
|
expect(inherited_difference).to eq([])
|
55
55
|
end
|
56
56
|
|
57
57
|
it "when guard_interpreter is set to the default value, the guard command string should be evaluated by command execution and not through a resource" do
|
58
58
|
expect_any_instance_of(Chef::Resource::Conditional).not_to receive(:evaluate_block)
|
59
|
-
expect_any_instance_of(Chef::GuardInterpreter::ResourceGuardInterpreter).not_to receive(:
|
59
|
+
expect_any_instance_of(Chef::GuardInterpreter::ResourceGuardInterpreter).not_to receive(:evaluate)
|
60
60
|
expect_any_instance_of(Chef::GuardInterpreter::DefaultGuardInterpreter).to receive(:evaluate).and_return(true)
|
61
61
|
script_resource.only_if "echo hi"
|
62
62
|
expect(script_resource.should_skip?(:run)).to eq(nil)
|
@@ -65,7 +65,7 @@ shared_examples_for "a script resource" do
|
|
65
65
|
it "when a valid guard_interpreter resource is specified, a block should be used to evaluate the guard" do
|
66
66
|
expect_any_instance_of(Chef::Resource::Conditional).not_to receive(:evaluate_block)
|
67
67
|
expect_any_instance_of(Chef::GuardInterpreter::DefaultGuardInterpreter).not_to receive(:evaluate)
|
68
|
-
expect_any_instance_of(Chef::GuardInterpreter::ResourceGuardInterpreter).to receive(:
|
68
|
+
expect_any_instance_of(Chef::GuardInterpreter::ResourceGuardInterpreter).to receive(:evaluate).and_return(true)
|
69
69
|
script_resource.guard_interpreter :script
|
70
70
|
script_resource.only_if "echo hi"
|
71
71
|
expect(script_resource.should_skip?(:run)).to eq(nil)
|
@@ -35,7 +35,7 @@ shared_examples_for "a Windows script resource" do
|
|
35
35
|
end
|
36
36
|
|
37
37
|
it "should use a resource to evaluate the guard when guard_interpreter is not specified" do
|
38
|
-
expect_any_instance_of(Chef::GuardInterpreter::ResourceGuardInterpreter).to receive(:
|
38
|
+
expect_any_instance_of(Chef::GuardInterpreter::ResourceGuardInterpreter).to receive(:evaluate).and_return(true)
|
39
39
|
expect_any_instance_of(Chef::GuardInterpreter::DefaultGuardInterpreter).not_to receive(:evaluate)
|
40
40
|
windows_script_resource.only_if "echo hi"
|
41
41
|
expect(windows_script_resource.should_skip?(:run)).to eq(nil)
|
data/spec/unit/client_spec.rb
CHANGED
@@ -129,6 +129,7 @@ shared_context "a client run" do
|
|
129
129
|
expect(client.events).to receive(:register).with(instance_of(Chef::DataCollector::Reporter))
|
130
130
|
expect(client.events).to receive(:register).with(instance_of(Chef::ResourceReporter))
|
131
131
|
expect(client.events).to receive(:register).with(instance_of(Chef::ActionCollection))
|
132
|
+
expect(client.events).to receive(:register).with(instance_of(Chef::Compliance::Runner))
|
132
133
|
end
|
133
134
|
|
134
135
|
def stub_for_node_load
|
@@ -801,4 +802,20 @@ describe Chef::Client do
|
|
801
802
|
allow_any_instance_of(Chef::RunLock).to receive(:save_pid).and_raise(NoMethodError)
|
802
803
|
end
|
803
804
|
end
|
805
|
+
|
806
|
+
describe "deprecated enforce_path_sanity" do
|
807
|
+
include_context "a client run"
|
808
|
+
include_context "converge completed"
|
809
|
+
|
810
|
+
it "print a warning, when enforce_path_sanity is passed" do
|
811
|
+
Chef::Config[:enforce_path_sanity] = true
|
812
|
+
expect(logger).to receive(:warn).with("`enforce_path_sanity` is deprecated, please use `enforce_default_paths` instead!")
|
813
|
+
client.run
|
814
|
+
end
|
815
|
+
|
816
|
+
it "should not print a warning, when enforce_path_sanity is not passed" do
|
817
|
+
expect(logger).not_to receive(:warn).with("`enforce_path_sanity` is deprecated, please use `enforce_default_paths` instead!")
|
818
|
+
client.run
|
819
|
+
end
|
820
|
+
end
|
804
821
|
end
|