chef 16.3.45-universal-mingw32 → 16.5.77-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/Gemfile +1 -1
- data/Rakefile +2 -2
- data/bin/knife +1 -1
- data/chef-universal-mingw32.gemspec +0 -1
- data/chef.gemspec +2 -1
- data/distro/templates/powershell/chef/chef.psm1.erb +18 -18
- data/ext/win32-eventlog/Rakefile +2 -2
- data/ext/win32-eventlog/chef-log.man.erb +4 -4
- data/lib/chef/action_collection.rb +4 -0
- data/lib/chef/api_client/registration.rb +2 -2
- data/lib/chef/application.rb +20 -18
- data/lib/chef/application/apply.rb +17 -12
- data/lib/chef/application/base.rb +26 -23
- data/lib/chef/application/client.rb +10 -4
- data/lib/chef/application/exit_code.rb +13 -4
- data/lib/chef/application/knife.rb +22 -11
- data/lib/chef/application/solo.rb +2 -1
- data/lib/chef/application/windows_service.rb +39 -39
- data/lib/chef/application/windows_service_manager.rb +6 -6
- data/lib/chef/chef_class.rb +0 -1
- data/lib/chef/chef_fs/chef_fs_data_store.rb +55 -55
- data/lib/chef/chef_fs/file_system/chef_server/acl_entry.rb +10 -10
- data/lib/chef/chef_fs/file_system/chef_server/organization_invites_entry.rb +8 -8
- data/lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb +8 -8
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +2 -2
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +2 -2
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +18 -18
- data/lib/chef/chef_fs/file_system/repository/directory.rb +1 -1
- data/lib/chef/chef_fs/file_system/repository/file_system_entry.rb +1 -1
- data/lib/chef/chef_fs/knife.rb +2 -2
- data/lib/chef/chef_fs/parallelizer.rb +0 -1
- data/lib/chef/client.rb +21 -22
- data/lib/chef/cookbook/cookbook_version_loader.rb +1 -1
- data/lib/chef/cookbook/gem_installer.rb +1 -1
- data/lib/chef/cookbook/synchronizer.rb +2 -2
- data/lib/chef/cookbook_site_streaming_uploader.rb +13 -11
- data/lib/chef/cookbook_uploader.rb +1 -1
- data/lib/chef/data_collector.rb +6 -5
- data/lib/chef/data_collector/config_validation.rb +22 -13
- data/lib/chef/data_collector/run_end_message.rb +13 -3
- data/lib/chef/data_collector/run_start_message.rb +1 -1
- data/lib/chef/deprecated.rb +1 -1
- data/lib/chef/deprecation/warnings.rb +2 -2
- data/lib/chef/digester.rb +2 -2
- data/lib/chef/dsl/chef_vault.rb +1 -1
- data/lib/chef/dsl/data_query.rb +2 -2
- data/lib/chef/dsl/platform_introspection.rb +9 -9
- data/lib/chef/encrypted_data_bag_item.rb +3 -4
- data/lib/chef/encrypted_data_bag_item/decryptor.rb +3 -3
- data/lib/chef/encrypted_data_bag_item/encryptor.rb +3 -3
- data/lib/chef/environment.rb +4 -4
- data/lib/chef/event_loggers/windows_eventlog.rb +2 -2
- data/lib/chef/exceptions.rb +5 -5
- data/lib/chef/file_access_control/windows.rb +5 -1
- data/lib/chef/file_content_management/tempfile.rb +10 -10
- data/lib/chef/formatters/doc.rb +7 -6
- data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +6 -5
- data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +3 -3
- data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +9 -9
- data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +2 -2
- data/lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb +3 -3
- data/lib/chef/formatters/indentable_output_stream.rb +2 -2
- data/lib/chef/formatters/minimal.rb +5 -4
- data/lib/chef/http.rb +6 -3
- data/lib/chef/http/auth_credentials.rb +5 -1
- data/lib/chef/http/authenticator.rb +1 -1
- data/lib/chef/http/basic_client.rb +4 -2
- data/lib/chef/http/decompressor.rb +1 -1
- data/lib/chef/http/http_request.rb +7 -5
- data/lib/chef/http/socketless_chef_zero_client.rb +5 -2
- data/lib/chef/http/ssl_policies.rb +1 -1
- data/lib/chef/json_compat.rb +2 -2
- data/lib/chef/knife.rb +4 -4
- data/lib/chef/knife/bootstrap.rb +18 -16
- data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -1
- data/lib/chef/knife/bootstrap/templates/chef-full.erb +3 -3
- data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +7 -7
- data/lib/chef/knife/client_create.rb +3 -3
- data/lib/chef/knife/config_get.rb +8 -97
- data/lib/chef/knife/config_get_profile.rb +9 -9
- data/lib/chef/knife/config_list.rb +139 -0
- data/lib/chef/knife/config_list_profiles.rb +8 -98
- data/lib/chef/knife/config_show.rb +127 -0
- data/lib/chef/knife/config_use.rb +61 -0
- data/lib/chef/knife/config_use_profile.rb +9 -24
- data/lib/chef/knife/configure.rb +4 -2
- data/lib/chef/knife/cookbook_download.rb +1 -1
- data/lib/chef/knife/cookbook_metadata.rb +1 -1
- data/lib/chef/knife/cookbook_upload.rb +23 -23
- data/lib/chef/knife/core/bootstrap_context.rb +2 -2
- data/lib/chef/knife/core/generic_presenter.rb +1 -1
- data/lib/chef/knife/core/hashed_command_loader.rb +2 -2
- data/lib/chef/knife/core/object_loader.rb +1 -1
- data/lib/chef/knife/core/ui.rb +1 -1
- data/lib/chef/knife/core/windows_bootstrap_context.rb +42 -34
- data/lib/chef/knife/delete.rb +15 -15
- data/lib/chef/knife/exec.rb +4 -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/node_show.rb +2 -2
- 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/serve.rb +3 -3
- data/lib/chef/knife/ssh.rb +24 -9
- data/lib/chef/knife/ssl_check.rb +3 -3
- data/lib/chef/knife/status.rb +2 -2
- data/lib/chef/knife/tag_create.rb +1 -1
- data/lib/chef/knife/tag_delete.rb +1 -1
- data/lib/chef/knife/user_create.rb +2 -2
- data/lib/chef/knife/xargs.rb +19 -19
- data/lib/chef/knife/yaml_convert.rb +1 -1
- data/lib/chef/local_mode.rb +2 -2
- data/lib/chef/log/syslog.rb +2 -2
- data/lib/chef/log/winevt.rb +2 -2
- data/lib/chef/mixin/checksum.rb +0 -1
- data/lib/chef/mixin/deep_merge.rb +35 -18
- data/lib/chef/mixin/openssl_helper.rb +4 -5
- data/lib/chef/mixin/shell_out.rb +1 -1
- data/lib/chef/mixin/template.rb +3 -3
- data/lib/chef/mixin/uris.rb +4 -2
- data/lib/chef/mixin/versioned_api.rb +1 -2
- data/lib/chef/mixin/which.rb +1 -1
- data/lib/chef/monkey_patches/net_http.rb +4 -4
- data/lib/chef/monkey_patches/webrick-utils.rb +10 -10
- data/lib/chef/node/attribute.rb +2 -4
- data/lib/chef/node_map.rb +4 -4
- data/lib/chef/platform/service_helpers.rb +1 -1
- data/lib/chef/policy_builder/dynamic.rb +2 -0
- data/lib/chef/policy_builder/policyfile.rb +2 -2
- data/lib/chef/property.rb +1 -1
- data/lib/chef/provider.rb +1 -5
- data/lib/chef/provider/cron/unix.rb +0 -2
- data/lib/chef/provider/file.rb +2 -2
- data/lib/chef/provider/git.rb +5 -5
- data/lib/chef/provider/group.rb +0 -2
- data/lib/chef/provider/group/suse.rb +5 -5
- data/lib/chef/provider/ifconfig.rb +1 -4
- data/lib/chef/provider/launchd.rb +2 -2
- data/lib/chef/provider/link.rb +0 -9
- data/lib/chef/provider/mount.rb +0 -2
- data/lib/chef/provider/mount/linux.rb +63 -0
- data/lib/chef/provider/package.rb +0 -2
- data/lib/chef/provider/package/dpkg.rb +3 -12
- data/lib/chef/provider/package/homebrew.rb +1 -1
- data/lib/chef/provider/package/rubygems.rb +22 -19
- data/lib/chef/provider/package/snap.rb +1 -2
- data/lib/chef/provider/package/windows.rb +2 -2
- data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +12 -10
- data/lib/chef/provider/package/zypper.rb +1 -1
- data/lib/chef/provider/powershell_script.rb +21 -5
- data/lib/chef/provider/remote_file/content.rb +3 -0
- data/lib/chef/provider/remote_file/ftp.rb +6 -4
- data/lib/chef/provider/remote_file/sftp.rb +6 -4
- data/lib/chef/provider/route.rb +2 -6
- data/lib/chef/provider/service/arch.rb +1 -1
- data/lib/chef/provider/service/debian.rb +1 -1
- data/lib/chef/provider/service/gentoo.rb +2 -2
- data/lib/chef/provider/service/macosx.rb +4 -4
- data/lib/chef/provider/service/openbsd.rb +1 -4
- data/lib/chef/provider/service/redhat.rb +3 -3
- data/lib/chef/provider/service/upstart.rb +1 -1
- data/lib/chef/provider/service/windows.rb +10 -10
- data/lib/chef/provider/systemd_unit.rb +0 -2
- data/lib/chef/provider/template/content.rb +1 -0
- data/lib/chef/provider/template_finder.rb +2 -10
- data/lib/chef/provider/user/dscl.rb +7 -7
- data/lib/chef/provider/user/mac.rb +12 -12
- data/lib/chef/provider/windows_task.rb +1 -5
- data/lib/chef/provider/zypper_repository.rb +2 -3
- data/lib/chef/provider_resolver.rb +1 -1
- data/lib/chef/providers.rb +1 -1
- data/lib/chef/recipe.rb +2 -2
- data/lib/chef/resource.rb +8 -12
- data/lib/chef/resource/apt_repository.rb +5 -12
- data/lib/chef/resource/bff_package.rb +22 -0
- data/lib/chef/resource/breakpoint.rb +57 -2
- data/lib/chef/resource/build_essential.rb +1 -1
- data/lib/chef/resource/cab_package.rb +29 -0
- data/lib/chef/resource/chef_client_cron.rb +32 -25
- data/lib/chef/resource/chef_client_launchd.rb +194 -0
- data/lib/chef/resource/chef_client_scheduled_task.rb +21 -18
- data/lib/chef/resource/chef_client_systemd_timer.rb +26 -19
- data/lib/chef/resource/chef_client_trusted_certificate.rb +101 -0
- data/lib/chef/resource/chef_gem.rb +10 -10
- data/lib/chef/resource/chef_handler.rb +149 -4
- data/lib/chef/resource/chef_sleep.rb +2 -2
- data/lib/chef/resource/chef_vault_secret.rb +14 -14
- data/lib/chef/resource/cookbook_file.rb +2 -2
- data/lib/chef/resource/cron/_cron_shared.rb +1 -0
- data/lib/chef/resource/cron/cron_d.rb +0 -1
- data/lib/chef/resource/dnf_package.rb +2 -2
- data/lib/chef/resource/dsc_resource.rb +0 -1
- data/lib/chef/resource/dsc_script.rb +2 -2
- data/lib/chef/resource/execute.rb +8 -9
- data/lib/chef/resource/file.rb +4 -4
- data/lib/chef/resource/gem_package.rb +5 -5
- data/lib/chef/resource/homebrew_package.rb +3 -3
- data/lib/chef/resource/homebrew_update.rb +7 -7
- data/lib/chef/resource/hostname.rb +2 -2
- data/lib/chef/resource/launchd.rb +2 -1
- data/lib/chef/resource/locale.rb +2 -2
- data/lib/chef/resource/macos_userdefaults.rb +3 -3
- data/lib/chef/resource/notify_group.rb +0 -1
- data/lib/chef/resource/ohai.rb +46 -3
- data/lib/chef/resource/ohai_hint.rb +33 -0
- data/lib/chef/resource/openssl_dhparam.rb +29 -5
- data/lib/chef/resource/openssl_ec_private_key.rb +8 -3
- data/lib/chef/resource/openssl_ec_public_key.rb +4 -2
- data/lib/chef/resource/openssl_rsa_private_key.rb +8 -3
- data/lib/chef/resource/openssl_rsa_public_key.rb +2 -0
- data/lib/chef/resource/openssl_x509_certificate.rb +38 -35
- data/lib/chef/resource/openssl_x509_crl.rb +21 -10
- data/lib/chef/resource/openssl_x509_request.rb +37 -36
- data/lib/chef/resource/osx_profile.rb +292 -6
- data/lib/chef/resource/plist.rb +1 -1
- data/lib/chef/resource/powershell_package_source.rb +6 -6
- data/lib/chef/resource/powershell_script.rb +24 -30
- data/lib/chef/resource/reboot.rb +2 -2
- data/lib/chef/resource/remote_file.rb +3 -3
- data/lib/chef/resource/rhsm_register.rb +22 -10
- data/lib/chef/resource/ruby_block.rb +2 -2
- data/lib/chef/resource/scm/subversion.rb +2 -2
- data/lib/chef/resource/service.rb +3 -3
- data/lib/chef/resource/ssh_known_hosts_entry.rb +2 -2
- data/lib/chef/resource/sudo.rb +1 -1
- data/lib/chef/resource/support/cron.d.erb +1 -1
- data/lib/chef/resource/support/cron_access.erb +1 -1
- data/lib/chef/resource/support/sudoer.erb +1 -1
- data/lib/chef/resource/support/ulimit.erb +1 -1
- data/lib/chef/resource/sysctl.rb +6 -10
- data/lib/chef/resource/systemd_unit.rb +2 -2
- data/lib/chef/resource/template.rb +2 -2
- data/lib/chef/resource/timezone.rb +112 -73
- data/lib/chef/resource/windows_ad_join.rb +12 -3
- data/lib/chef/resource/windows_audit_policy.rb +3 -0
- data/lib/chef/resource/windows_auto_run.rb +2 -0
- data/lib/chef/resource/windows_certificate.rb +8 -4
- data/lib/chef/resource/windows_dfs_folder.rb +2 -0
- data/lib/chef/resource/windows_dfs_namespace.rb +2 -0
- data/lib/chef/resource/windows_dfs_server.rb +2 -0
- data/lib/chef/resource/windows_dns_record.rb +10 -7
- data/lib/chef/resource/windows_dns_zone.rb +12 -7
- data/lib/chef/resource/windows_feature.rb +2 -0
- data/lib/chef/resource/windows_feature_dism.rb +10 -0
- data/lib/chef/resource/windows_feature_powershell.rb +14 -2
- data/lib/chef/resource/windows_firewall_profile.rb +24 -20
- data/lib/chef/resource/windows_firewall_rule.rb +5 -3
- data/lib/chef/resource/windows_font.rb +3 -1
- data/lib/chef/resource/windows_package.rb +28 -5
- data/lib/chef/resource/windows_pagefile.rb +4 -0
- data/lib/chef/resource/windows_printer.rb +22 -21
- data/lib/chef/resource/windows_printer_port.rb +20 -17
- data/lib/chef/resource/windows_security_policy.rb +2 -0
- data/lib/chef/resource/windows_share.rb +5 -3
- data/lib/chef/resource/windows_shortcut.rb +2 -0
- data/lib/chef/resource/windows_uac.rb +2 -0
- data/lib/chef/resource/windows_user_privilege.rb +54 -53
- data/lib/chef/resource/windows_workgroup.rb +5 -6
- data/lib/chef/resource/yum_package.rb +2 -2
- data/lib/chef/resource_collection/stepable_iterator.rb +1 -2
- data/lib/chef/resource_reporter.rb +0 -2
- data/lib/chef/resources.rb +3 -1
- data/lib/chef/role.rb +2 -2
- data/lib/chef/run_context.rb +2 -2
- data/lib/chef/run_context/cookbook_compiler.rb +21 -21
- data/lib/chef/run_lock.rb +2 -2
- data/lib/chef/run_status.rb +2 -6
- data/lib/chef/search/query.rb +6 -5
- data/lib/chef/shell.rb +32 -27
- data/lib/chef/shell/ext.rb +11 -11
- data/lib/chef/shell/shell_session.rb +2 -2
- data/lib/chef/train_transport.rb +5 -104
- data/lib/chef/util/backup.rb +2 -2
- data/lib/chef/util/diff.rb +14 -14
- data/lib/chef/util/powershell/cmdlet.rb +4 -2
- data/lib/chef/util/powershell/ps_credential.rb +18 -14
- data/lib/chef/util/threaded_job_queue.rb +0 -2
- data/lib/chef/version.rb +1 -1
- data/lib/chef/win32/crypto.rb +1 -1
- data/lib/chef/win32/file.rb +3 -3
- data/lib/chef/win32/file/version_info.rb +5 -5
- data/lib/chef/win32/registry.rb +1 -2
- data/lib/chef/win32/unicode.rb +1 -1
- data/spec/data/shef-config.rb +1 -1
- data/spec/data/ssl/chef-rspec.cert +15 -15
- data/spec/functional/event_loggers/windows_eventlog_spec.rb +6 -5
- data/spec/functional/resource/aix_service_spec.rb +2 -2
- data/spec/functional/resource/aixinit_service_spec.rb +8 -8
- data/spec/functional/resource/bff_spec.rb +2 -2
- data/spec/functional/resource/cookbook_file_spec.rb +1 -1
- data/spec/functional/resource/dsc_resource_spec.rb +1 -1
- data/spec/functional/resource/dsc_script_spec.rb +0 -1
- data/spec/functional/resource/group_spec.rb +6 -6
- data/spec/functional/resource/insserv_spec.rb +5 -5
- data/spec/functional/resource/link_spec.rb +20 -20
- data/spec/functional/resource/powershell_script_spec.rb +4 -4
- data/spec/functional/resource/rpm_spec.rb +2 -2
- data/spec/functional/resource/user/dscl_spec.rb +1 -1
- data/spec/functional/resource/user/mac_user_spec.rb +1 -1
- data/spec/functional/resource/windows_certificate_spec.rb +3 -3
- data/spec/functional/resource/windows_font_spec.rb +49 -0
- data/spec/functional/resource/windows_security_policy_spec.rb +0 -3
- data/spec/functional/resource/windows_task_spec.rb +13 -13
- data/spec/functional/run_lock_spec.rb +24 -24
- data/spec/functional/version_spec.rb +3 -3
- data/spec/functional/win32/registry_spec.rb +8 -8
- data/spec/functional/win32/service_manager_spec.rb +1 -1
- data/spec/integration/client/client_spec.rb +4 -4
- data/spec/integration/client/exit_code_spec.rb +3 -2
- data/spec/integration/client/ipv6_spec.rb +1 -1
- data/spec/integration/knife/common_options_spec.rb +12 -12
- data/spec/integration/knife/config_list_spec.rb +220 -0
- data/spec/integration/knife/config_show_spec.rb +192 -0
- data/spec/integration/knife/config_use_spec.rb +198 -0
- data/spec/integration/knife/cookbook_api_ipv6_spec.rb +1 -1
- data/spec/integration/knife/diff_spec.rb +3 -1
- data/spec/integration/knife/download_spec.rb +3 -1
- data/spec/integration/knife/serve_spec.rb +5 -5
- data/spec/integration/knife/upload_spec.rb +3 -1
- data/spec/integration/ohai/ohai_spec.rb +61 -0
- data/spec/integration/recipes/lwrp_inline_resources_spec.rb +1 -1
- data/spec/integration/recipes/remote_directory.rb +1 -1
- data/spec/integration/solo/solo_spec.rb +5 -5
- data/spec/spec_helper.rb +12 -11
- data/spec/stress/win32/file_spec.rb +1 -1
- data/spec/support/chef_helpers.rb +2 -2
- data/spec/support/matchers/leak.rb +2 -2
- data/spec/support/platform_helpers.rb +17 -35
- data/spec/support/platforms/win32/spec_service.rb +1 -1
- data/spec/support/shared/functional/directory_resource.rb +1 -1
- data/spec/support/shared/functional/execute_resource.rb +1 -1
- data/spec/support/shared/functional/file_resource.rb +20 -20
- data/spec/support/shared/functional/securable_resource.rb +108 -27
- data/spec/support/shared/functional/win32_service.rb +2 -2
- data/spec/support/shared/functional/windows_script.rb +3 -3
- data/spec/support/shared/integration/integration_helper.rb +22 -52
- data/spec/support/shared/unit/application_dot_d.rb +5 -3
- data/spec/support/shared/unit/script_resource.rb +6 -20
- data/spec/support/shared/unit/windows_script_resource.rb +15 -28
- data/spec/tiny_server.rb +0 -1
- data/spec/unit/application/client_spec.rb +2 -2
- data/spec/unit/application/exit_code_spec.rb +10 -0
- data/spec/unit/application_spec.rb +4 -6
- 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/chef_fs/parallelizer_spec.rb +5 -1
- data/spec/unit/chef_fs/path_util_spec.rb +1 -1
- data/spec/unit/cookbook/synchronizer_spec.rb +2 -2
- data/spec/unit/cookbook_spec.rb +2 -2
- data/spec/unit/data_collector/config_validation_spec.rb +208 -0
- data/spec/unit/data_collector_spec.rb +28 -117
- data/spec/unit/dsl/declare_resource_spec.rb +1 -1
- data/spec/unit/environment_spec.rb +7 -7
- data/spec/unit/file_access_control_spec.rb +1 -1
- data/spec/unit/knife/bootstrap_spec.rb +20 -20
- data/spec/unit/knife/cookbook_download_spec.rb +4 -4
- data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +1 -1
- data/spec/unit/knife/core/hashed_command_loader_spec.rb +3 -3
- data/spec/unit/knife/core/ui_spec.rb +1 -0
- data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +21 -12
- data/spec/unit/knife/ssh_spec.rb +2 -2
- data/spec/unit/knife/supermarket_share_spec.rb +1 -1
- data/spec/unit/lwrp_spec.rb +3 -3
- data/spec/unit/mixin/deep_merge_spec.rb +15 -0
- data/spec/unit/mixin/openssl_helper_spec.rb +1 -1
- data/spec/unit/mixin/powershell_exec_spec.rb +1 -1
- data/spec/unit/mixin/securable_spec.rb +2 -2
- data/spec/unit/mixin/template_spec.rb +30 -30
- data/spec/unit/mixin/windows_architecture_helper_spec.rb +4 -4
- data/spec/unit/node/immutable_collections_spec.rb +8 -4
- data/spec/unit/node_spec.rb +5 -5
- data/spec/unit/provider/mount/linux_spec.rb +97 -0
- data/spec/unit/provider/package/chocolatey_spec.rb +1 -1
- data/spec/unit/provider/package/powershell_spec.rb +1 -1
- data/spec/unit/provider/package/rubygems_spec.rb +4 -1
- data/spec/unit/provider/powershell_script_spec.rb +11 -4
- data/spec/unit/provider/remote_directory_spec.rb +9 -9
- data/spec/unit/provider/route_spec.rb +0 -2
- data/spec/unit/provider/service/arch_service_spec.rb +3 -2
- data/spec/unit/provider/service/debian_service_spec.rb +1 -1
- data/spec/unit/provider/service/gentoo_service_spec.rb +7 -7
- data/spec/unit/provider/service/macosx_spec.rb +3 -3
- data/spec/unit/provider/service/redhat_spec.rb +2 -2
- data/spec/unit/provider/service/upstart_service_spec.rb +3 -3
- data/spec/unit/provider_resolver_spec.rb +6 -6
- data/spec/unit/recipe_spec.rb +1 -1
- data/spec/unit/resource/batch_spec.rb +6 -6
- data/spec/unit/resource/chef_client_cron_spec.rb +35 -14
- data/spec/unit/resource/chef_client_launchd_spec.rb +127 -0
- data/spec/unit/resource/chef_client_systemd_timer_spec.rb +36 -1
- data/spec/unit/resource/chef_client_trusted_certificate_spec.rb +54 -0
- data/spec/unit/resource/execute_spec.rb +113 -118
- data/spec/unit/resource/launchd_spec.rb +8 -0
- data/spec/unit/resource/osx_profile_spec.rb +299 -0
- data/spec/unit/resource/powershell_script_spec.rb +11 -29
- data/spec/unit/resource/rhsm_register_spec.rb +56 -18
- data/spec/unit/resource/script_spec.rb +6 -1
- data/spec/unit/resource/timezone_spec.rb +63 -0
- data/spec/unit/resource/windows_feature_powershell_spec.rb +30 -4
- data/spec/unit/resource/windows_uac_spec.rb +1 -1
- data/spec/unit/resource/windows_user_privilege_spec.rb +55 -0
- data/spec/unit/role_spec.rb +11 -11
- data/spec/unit/run_lock_spec.rb +5 -1
- data/spec/unit/runner_spec.rb +1 -2
- data/spec/unit/shell/shell_ext_spec.rb +46 -3
- data/spec/unit/shell/shell_session_spec.rb +35 -64
- data/spec/unit/shell_spec.rb +16 -19
- data/spec/unit/train_transport_spec.rb +14 -13
- data/spec/unit/util/selinux_spec.rb +2 -0
- data/tasks/rspec.rb +1 -3
- metadata +42 -33
- data/lib/chef/dist.rb +0 -68
- data/lib/chef/provider/osx_profile.rb +0 -255
- data/spec/integration/knife/config_get_profile_spec.rb +0 -113
- data/spec/integration/knife/config_get_spec.rb +0 -191
- data/spec/integration/knife/config_list_profiles_spec.rb +0 -218
- data/spec/integration/knife/config_use_profile_spec.rb +0 -154
- data/spec/unit/provider/osx_profile_spec.rb +0 -255
data/lib/chef/dist.rb
DELETED
@@ -1,68 +0,0 @@
|
|
1
|
-
class Chef
|
2
|
-
class Dist
|
3
|
-
require "chef-config/dist"
|
4
|
-
require "chef-config/config"
|
5
|
-
|
6
|
-
# This class is not fully implemented, depending on it is not recommended!
|
7
|
-
# When referencing a product directly, like Chef (Now Chef Infra)
|
8
|
-
PRODUCT = "Chef Infra Client".freeze
|
9
|
-
|
10
|
-
# A short designation for the product, used in Windows event logs
|
11
|
-
# and some nomenclature.
|
12
|
-
SHORT = ChefConfig::Dist::SHORT.freeze
|
13
|
-
|
14
|
-
# The name of the server product
|
15
|
-
SERVER_PRODUCT = "Chef Infra Server".freeze
|
16
|
-
|
17
|
-
# The client's alias (chef-client)
|
18
|
-
CLIENT = ChefConfig::Dist::CLIENT.freeze
|
19
|
-
|
20
|
-
# name of the automate product
|
21
|
-
AUTOMATE = "Chef Automate".freeze
|
22
|
-
|
23
|
-
# The chef executable, as in `chef gem install` or `chef generate cookbook`
|
24
|
-
EXEC = ChefConfig::Dist::EXEC.freeze
|
25
|
-
|
26
|
-
# product website address
|
27
|
-
WEBSITE = "https://chef.io".freeze
|
28
|
-
|
29
|
-
# Chef-Zero's product name
|
30
|
-
ZERO = "Chef Infra Zero".freeze
|
31
|
-
|
32
|
-
# Chef-Solo's product name
|
33
|
-
SOLO = "Chef Infra Solo".freeze
|
34
|
-
|
35
|
-
# The chef-zero executable (local mode)
|
36
|
-
ZEROEXEC = "chef-zero".freeze
|
37
|
-
|
38
|
-
# The chef-solo executable (legacy local mode)
|
39
|
-
SOLOEXEC = "chef-solo".freeze
|
40
|
-
|
41
|
-
# The chef-shell executable
|
42
|
-
SHELL = "chef-shell".freeze
|
43
|
-
|
44
|
-
# The chef-apply executable
|
45
|
-
APPLY = "chef-apply".freeze
|
46
|
-
|
47
|
-
# Configuration related constants
|
48
|
-
# The chef-shell configuration file
|
49
|
-
SHELL_CONF = "chef_shell.rb".freeze
|
50
|
-
|
51
|
-
# The configuration directory
|
52
|
-
CONF_DIR = ChefConfig::Config.etc_chef_dir.freeze
|
53
|
-
|
54
|
-
# The user's configuration directory
|
55
|
-
USER_CONF_DIR = ChefConfig::Dist::USER_CONF_DIR.freeze
|
56
|
-
|
57
|
-
# The suffix for Chef's /etc/chef, /var/chef and C:\\Chef directories
|
58
|
-
# "cinc" => /etc/cinc, /var/cinc, C:\\cinc
|
59
|
-
DIR_SUFFIX = ChefConfig::Dist::DIR_SUFFIX.freeze
|
60
|
-
|
61
|
-
# The legacy conf folder: C:/opscode/chef. Specifically the "opscode" part
|
62
|
-
# DIR_SUFFIX is appended to it in code where relevant
|
63
|
-
LEGACY_CONF_DIR = ChefConfig::Dist::LEGACY_CONF_DIR.freeze
|
64
|
-
|
65
|
-
# The server's configuration directory
|
66
|
-
SERVER_CONF_DIR = "/etc/chef-server".freeze
|
67
|
-
end
|
68
|
-
end
|
@@ -1,255 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Nate Walck (<nate.walck@gmail.com>)
|
3
|
-
# Copyright:: Copyright 2015-2016, Facebook, Inc.
|
4
|
-
# License:: Apache License, Version 2.0
|
5
|
-
#
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
-
# you may not use this file except in compliance with the License.
|
8
|
-
# You may obtain a copy of the License at
|
9
|
-
#
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
-
#
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
-
# See the License for the specific language governing permissions and
|
16
|
-
# limitations under the License.
|
17
|
-
#
|
18
|
-
|
19
|
-
require_relative "../log"
|
20
|
-
require_relative "../provider"
|
21
|
-
require_relative "../resource"
|
22
|
-
require_relative "../resource/file"
|
23
|
-
require "uuidtools"
|
24
|
-
require "plist"
|
25
|
-
|
26
|
-
class Chef
|
27
|
-
class Provider
|
28
|
-
class OsxProfile < Chef::Provider
|
29
|
-
provides :osx_profile
|
30
|
-
provides :osx_config_profile
|
31
|
-
|
32
|
-
def load_current_resource
|
33
|
-
@current_resource = Chef::Resource::OsxProfile.new(new_resource.name)
|
34
|
-
current_resource.profile_name(new_resource.profile_name)
|
35
|
-
|
36
|
-
all_profiles = get_installed_profiles
|
37
|
-
# FIXME: stop mutating the desired state
|
38
|
-
new_resource.profile(
|
39
|
-
new_resource.profile ||
|
40
|
-
new_resource.profile_name
|
41
|
-
)
|
42
|
-
|
43
|
-
@new_profile_hash = get_profile_hash(new_resource.profile)
|
44
|
-
if @new_profile_hash
|
45
|
-
@new_profile_hash["PayloadUUID"] =
|
46
|
-
config_uuid(@new_profile_hash)
|
47
|
-
end
|
48
|
-
|
49
|
-
if @new_profile_hash
|
50
|
-
@new_profile_identifier = @new_profile_hash["PayloadIdentifier"]
|
51
|
-
else
|
52
|
-
@new_profile_identifier = new_resource.identifier ||
|
53
|
-
new_resource.profile_name
|
54
|
-
end
|
55
|
-
|
56
|
-
current_profile = nil
|
57
|
-
if all_profiles && all_profiles.key?("_computerlevel")
|
58
|
-
current_profile = all_profiles["_computerlevel"].find do |item|
|
59
|
-
item["ProfileIdentifier"] == @new_profile_identifier
|
60
|
-
end
|
61
|
-
end
|
62
|
-
current_resource.profile(current_profile)
|
63
|
-
end
|
64
|
-
|
65
|
-
def define_resource_requirements
|
66
|
-
requirements.assert(:remove) do |a|
|
67
|
-
if @new_profile_identifier
|
68
|
-
a.assertion do
|
69
|
-
!@new_profile_identifier.nil? &&
|
70
|
-
!@new_profile_identifier.end_with?(".mobileconfig") &&
|
71
|
-
/^\w+(?:(\.| )\w+)+$/.match(@new_profile_identifier)
|
72
|
-
end
|
73
|
-
a.failure_message RuntimeError, "when removing using the identifier property, it must match the profile identifier"
|
74
|
-
else
|
75
|
-
new_profile_name = new_resource.profile_name
|
76
|
-
a.assertion do
|
77
|
-
!new_profile_name.end_with?(".mobileconfig") &&
|
78
|
-
/^\w+(?:(\.| )\w+)+$/.match(new_profile_name)
|
79
|
-
end
|
80
|
-
a.failure_message RuntimeError, "When removing by resource name, it must match the profile identifier "
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
requirements.assert(:install) do |a|
|
85
|
-
if @new_profile_hash.is_a?(Hash)
|
86
|
-
a.assertion do
|
87
|
-
@new_profile_hash.include?("PayloadIdentifier")
|
88
|
-
end
|
89
|
-
a.failure_message RuntimeError, "The specified profile does not seem to be valid"
|
90
|
-
end
|
91
|
-
if @new_profile_hash.is_a?(String)
|
92
|
-
a.assertion do
|
93
|
-
@new_profile_hash.end_with?(".mobileconfig")
|
94
|
-
end
|
95
|
-
a.failure_message RuntimeError, "#{new_profile_hash}' is not a valid profile"
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
action :install do
|
101
|
-
unless profile_installed?
|
102
|
-
converge_by("install profile #{@new_profile_identifier}") do
|
103
|
-
profile_path = write_profile_to_disk
|
104
|
-
install_profile(profile_path)
|
105
|
-
get_installed_profiles(true)
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
action :remove do
|
111
|
-
# Clean up profile after removing it
|
112
|
-
if profile_installed?
|
113
|
-
converge_by("remove profile #{@new_profile_identifier}") do
|
114
|
-
remove_profile
|
115
|
-
get_installed_profiles(true)
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
def load_profile_hash(new_profile)
|
121
|
-
# file must exist in cookbook
|
122
|
-
if new_profile.end_with?(".mobileconfig")
|
123
|
-
unless cookbook_file_available?(new_profile)
|
124
|
-
error_string = "#{self}: '#{new_profile}' not found in cookbook"
|
125
|
-
raise Chef::Exceptions::FileNotFound, error_string
|
126
|
-
end
|
127
|
-
cookbook_profile = cache_cookbook_profile(new_profile)
|
128
|
-
read_plist(cookbook_profile)
|
129
|
-
else
|
130
|
-
nil
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
def cookbook_file_available?(cookbook_file)
|
135
|
-
run_context.has_cookbook_file_in_cookbook?(
|
136
|
-
new_resource.cookbook_name, cookbook_file
|
137
|
-
)
|
138
|
-
end
|
139
|
-
|
140
|
-
def get_cache_dir
|
141
|
-
cache_dir = Chef::FileCache.create_cache_path(
|
142
|
-
"profiles/#{new_resource.cookbook_name}"
|
143
|
-
)
|
144
|
-
end
|
145
|
-
|
146
|
-
def cache_cookbook_profile(cookbook_file)
|
147
|
-
Chef::FileCache.create_cache_path(
|
148
|
-
::File.join(
|
149
|
-
"profiles",
|
150
|
-
new_resource.cookbook_name,
|
151
|
-
::File.dirname(cookbook_file)
|
152
|
-
)
|
153
|
-
)
|
154
|
-
# FIXME: should use a real cookbook file, or document what this craziness is
|
155
|
-
remote_file = Chef::Resource::CookbookFile.new(
|
156
|
-
::File.join(
|
157
|
-
get_cache_dir,
|
158
|
-
"#{cookbook_file}.remote"
|
159
|
-
),
|
160
|
-
run_context
|
161
|
-
)
|
162
|
-
remote_file.cookbook_name = new_resource.cookbook_name
|
163
|
-
remote_file.source(cookbook_file)
|
164
|
-
remote_file.backup(false)
|
165
|
-
remote_file.run_action(:create)
|
166
|
-
remote_file.path
|
167
|
-
end
|
168
|
-
|
169
|
-
def get_profile_hash(new_profile)
|
170
|
-
if new_profile.is_a?(Hash)
|
171
|
-
new_profile
|
172
|
-
elsif new_profile.is_a?(String)
|
173
|
-
load_profile_hash(new_profile)
|
174
|
-
end
|
175
|
-
end
|
176
|
-
|
177
|
-
def config_uuid(profile)
|
178
|
-
# Make a UUID of the profile contents and return as string
|
179
|
-
UUIDTools::UUID.sha1_create(
|
180
|
-
UUIDTools::UUID_DNS_NAMESPACE,
|
181
|
-
profile.to_s
|
182
|
-
).to_s
|
183
|
-
end
|
184
|
-
|
185
|
-
def write_profile_to_disk
|
186
|
-
# FIXME: use a real chef file resource and stop hacking up tempfiles directly
|
187
|
-
new_resource.path(Chef::FileCache.create_cache_path("profiles"))
|
188
|
-
tempfile = Chef::FileContentManagement::Tempfile.new(new_resource).tempfile
|
189
|
-
tempfile.write(@new_profile_hash.to_plist)
|
190
|
-
tempfile.close
|
191
|
-
tempfile.path
|
192
|
-
end
|
193
|
-
|
194
|
-
def install_profile(profile_path)
|
195
|
-
cmd = [ "/usr/bin/profiles", "-I", "-F", profile_path ]
|
196
|
-
logger.trace("cmd: #{cmd.join(" ")}")
|
197
|
-
shellout_results = shell_out(*cmd)
|
198
|
-
shellout_results.exitstatus
|
199
|
-
end
|
200
|
-
|
201
|
-
def remove_profile
|
202
|
-
cmd = [ "/usr/bin/profiles", "-R", "-p", @new_profile_identifier ]
|
203
|
-
logger.trace("cmd: #{cmd.join(" ")}")
|
204
|
-
shellout_results = shell_out(*cmd)
|
205
|
-
shellout_results.exitstatus
|
206
|
-
end
|
207
|
-
|
208
|
-
def get_installed_profiles(update = nil)
|
209
|
-
if update
|
210
|
-
node.run_state[:config_profiles] = query_installed_profiles
|
211
|
-
else
|
212
|
-
node.run_state[:config_profiles] ||= query_installed_profiles
|
213
|
-
end
|
214
|
-
end
|
215
|
-
|
216
|
-
def query_installed_profiles
|
217
|
-
# Dump all profile metadata to a tempfile
|
218
|
-
tempfile = generate_tempfile
|
219
|
-
write_installed_profiles(tempfile)
|
220
|
-
installed_profiles = read_plist(tempfile)
|
221
|
-
logger.trace("Saved profiles to run_state")
|
222
|
-
# Clean up the temp file as we do not need it anymore
|
223
|
-
::File.unlink(tempfile)
|
224
|
-
installed_profiles
|
225
|
-
end
|
226
|
-
|
227
|
-
def generate_tempfile
|
228
|
-
tempfile = ::Dir::Tmpname.create("allprofiles.plist") {}
|
229
|
-
end
|
230
|
-
|
231
|
-
def write_installed_profiles(tempfile)
|
232
|
-
shell_out!( "/usr/bin/profiles", "-P", "-o", tempfile )
|
233
|
-
end
|
234
|
-
|
235
|
-
def read_plist(xml_file)
|
236
|
-
::Plist.parse_xml(xml_file)
|
237
|
-
end
|
238
|
-
|
239
|
-
def profile_installed?
|
240
|
-
# Profile Identifier and UUID must match a currently installed profile
|
241
|
-
if current_resource.profile.nil? || current_resource.profile.empty?
|
242
|
-
false
|
243
|
-
else
|
244
|
-
if new_resource.action.include?(:remove)
|
245
|
-
true
|
246
|
-
else
|
247
|
-
current_resource.profile["ProfileUUID"] ==
|
248
|
-
@new_profile_hash["PayloadUUID"]
|
249
|
-
end
|
250
|
-
end
|
251
|
-
end
|
252
|
-
|
253
|
-
end
|
254
|
-
end
|
255
|
-
end
|
@@ -1,113 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Copyright 2018, Noah Kantrowitz
|
3
|
-
#
|
4
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
-
# you may not use this file except in compliance with the License.
|
6
|
-
# You may obtain a copy of the License at
|
7
|
-
#
|
8
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
-
#
|
10
|
-
# Unless required by applicable law or agreed to in writing, software
|
11
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
-
# See the License for the specific language governing permissions and
|
14
|
-
# limitations under the License.
|
15
|
-
|
16
|
-
require "spec_helper"
|
17
|
-
require "support/shared/integration/integration_helper"
|
18
|
-
require "support/shared/context/config"
|
19
|
-
|
20
|
-
describe "knife config get-profile", :workstation do
|
21
|
-
include IntegrationSupport
|
22
|
-
include KnifeSupport
|
23
|
-
|
24
|
-
include_context "default config options"
|
25
|
-
include_context "with a chef repo"
|
26
|
-
|
27
|
-
let(:cmd_args) { [] }
|
28
|
-
|
29
|
-
subject do
|
30
|
-
cmd = knife("config", "get-profile", *cmd_args, instance_filter: lambda { |instance|
|
31
|
-
# Fake the failsafe check because this command doesn't actually process knife.rb.
|
32
|
-
$__KNIFE_INTEGRATION_FAILSAFE_CHECK << " ole"
|
33
|
-
})
|
34
|
-
cmd.stdout
|
35
|
-
end
|
36
|
-
|
37
|
-
around do |ex|
|
38
|
-
# Store and reset the value of some env vars.
|
39
|
-
old_chef_home = ENV["CHEF_HOME"]
|
40
|
-
old_knife_home = ENV["KNIFE_HOME"]
|
41
|
-
old_home = ENV["HOME"]
|
42
|
-
old_wd = Dir.pwd
|
43
|
-
ChefConfig::PathHelper.per_tool_home_environment = "KNIFE_HOME"
|
44
|
-
# Clear these out because they are cached permanently.
|
45
|
-
ChefConfig::PathHelper.class_exec { remove_class_variable(:@@home_dir) }
|
46
|
-
Chef::Knife::ConfigGetProfile.reset_config_loader!
|
47
|
-
begin
|
48
|
-
ex.run
|
49
|
-
ensure
|
50
|
-
ENV["CHEF_HOME"] = old_chef_home
|
51
|
-
ENV["KNIFE_HOME"] = old_knife_home
|
52
|
-
ENV["HOME"] = old_home
|
53
|
-
Dir.chdir(old_wd)
|
54
|
-
ENV[ChefUtils.windows? ? "CD" : "PWD"] = Dir.pwd
|
55
|
-
ChefConfig::PathHelper.per_tool_home_environment = nil
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
before do
|
60
|
-
# Always run from the temp folder. This can't be in the `around` block above
|
61
|
-
# because it has to run after the before set in the "with a chef repo" shared context.
|
62
|
-
directory("repo")
|
63
|
-
Dir.chdir(path_to("repo"))
|
64
|
-
ENV[ChefUtils.windows? ? "CD" : "PWD"] = Dir.pwd
|
65
|
-
ENV["HOME"] = path_to(".")
|
66
|
-
end
|
67
|
-
|
68
|
-
context "with no configuration" do
|
69
|
-
it { is_expected.to eq "default\n" }
|
70
|
-
end
|
71
|
-
|
72
|
-
context "with --profile" do
|
73
|
-
let(:cmd_args) { %w{--profile production} }
|
74
|
-
it { is_expected.to eq "production\n" }
|
75
|
-
end
|
76
|
-
|
77
|
-
context "with an environment variable" do
|
78
|
-
around do |ex|
|
79
|
-
old_chef_profile = ENV["CHEF_PROFILE"]
|
80
|
-
begin
|
81
|
-
ENV["CHEF_PROFILE"] = "staging"
|
82
|
-
ex.run
|
83
|
-
ensure
|
84
|
-
ENV["CHEF_PROFILE"] = old_chef_profile
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
it { is_expected.to eq "staging\n" }
|
89
|
-
end
|
90
|
-
|
91
|
-
context "with a context file" do
|
92
|
-
before { file(".chef/context", "development\n") }
|
93
|
-
it { is_expected.to eq "development\n" }
|
94
|
-
end
|
95
|
-
|
96
|
-
context "with a context file under $CHEF_HOME" do
|
97
|
-
before do
|
98
|
-
file("chefhome/.chef/context", "other\n")
|
99
|
-
ENV["CHEF_HOME"] = path_to("chefhome")
|
100
|
-
end
|
101
|
-
|
102
|
-
it { is_expected.to eq "other\n" }
|
103
|
-
end
|
104
|
-
|
105
|
-
context "with a context file under $KNIFE_HOME" do
|
106
|
-
before do
|
107
|
-
file("knifehome/.chef/context", "other\n")
|
108
|
-
ENV["KNIFE_HOME"] = path_to("knifehome")
|
109
|
-
end
|
110
|
-
|
111
|
-
it { is_expected.to eq "other\n" }
|
112
|
-
end
|
113
|
-
end
|
@@ -1,191 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Copyright 2018, Noah Kantrowitz
|
3
|
-
#
|
4
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
-
# you may not use this file except in compliance with the License.
|
6
|
-
# You may obtain a copy of the License at
|
7
|
-
#
|
8
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
-
#
|
10
|
-
# Unless required by applicable law or agreed to in writing, software
|
11
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
-
# See the License for the specific language governing permissions and
|
14
|
-
# limitations under the License.
|
15
|
-
|
16
|
-
require "spec_helper"
|
17
|
-
require "support/shared/integration/integration_helper"
|
18
|
-
require "support/shared/context/config"
|
19
|
-
|
20
|
-
describe "knife config get", :workstation do
|
21
|
-
include IntegrationSupport
|
22
|
-
include KnifeSupport
|
23
|
-
|
24
|
-
include_context "default config options"
|
25
|
-
include_context "with a chef repo"
|
26
|
-
|
27
|
-
let(:cmd_args) { [] }
|
28
|
-
|
29
|
-
subject do
|
30
|
-
cmd = knife("config", "get", *cmd_args, instance_filter: lambda { |instance|
|
31
|
-
# Clear the stub set up in KnifeSupport.
|
32
|
-
allow(File).to receive(:file?).and_call_original
|
33
|
-
# Lies, damn lies, and config files. We need to allow normal config loading
|
34
|
-
# behavior to be able to test stuff.
|
35
|
-
instance.config.delete(:config_file)
|
36
|
-
$__KNIFE_INTEGRATION_FAILSAFE_CHECK << " ole"
|
37
|
-
})
|
38
|
-
cmd.stdout
|
39
|
-
end
|
40
|
-
|
41
|
-
around do |ex|
|
42
|
-
# Store and reset the value of some env vars.
|
43
|
-
old_chef_home = ENV["CHEF_HOME"]
|
44
|
-
old_knife_home = ENV["KNIFE_HOME"]
|
45
|
-
old_home = ENV["HOME"]
|
46
|
-
old_wd = Dir.pwd
|
47
|
-
ChefConfig::PathHelper.per_tool_home_environment = "KNIFE_HOME"
|
48
|
-
# Clear these out because they are cached permanently.
|
49
|
-
ChefConfig::PathHelper.class_exec { remove_class_variable(:@@home_dir) }
|
50
|
-
Chef::Knife::ConfigGet.reset_config_loader!
|
51
|
-
begin
|
52
|
-
ex.run
|
53
|
-
ensure
|
54
|
-
ENV["CHEF_HOME"] = old_chef_home
|
55
|
-
ENV["KNIFE_HOME"] = old_knife_home
|
56
|
-
ENV["HOME"] = old_home
|
57
|
-
Dir.chdir(old_wd)
|
58
|
-
ENV[ChefUtils.windows? ? "CD" : "PWD"] = Dir.pwd
|
59
|
-
ChefConfig::PathHelper.per_tool_home_environment = nil
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
before do
|
64
|
-
# Always run from the temp folder. This can't be in the `around` block above
|
65
|
-
# because it has to run after the before set in the "with a chef repo" shared context.
|
66
|
-
directory("repo")
|
67
|
-
Dir.chdir(path_to("repo"))
|
68
|
-
ENV[ChefUtils.windows? ? "CD" : "PWD"] = Dir.pwd
|
69
|
-
ENV["HOME"] = path_to(".")
|
70
|
-
end
|
71
|
-
|
72
|
-
context "with a global knife.rb" do
|
73
|
-
before { file(".chef/knife.rb", "node_name 'one'\n") }
|
74
|
-
|
75
|
-
it { is_expected.to match(%r{^Loading from configuration file .*/#{File.basename(path_to("."))}/.chef/knife.rb$}) }
|
76
|
-
it { is_expected.to match(/^node_name:\s+one$/) }
|
77
|
-
end
|
78
|
-
|
79
|
-
context "with a repo knife.rb" do
|
80
|
-
before { file("repo/.chef/knife.rb", "node_name 'two'\n") }
|
81
|
-
|
82
|
-
it { is_expected.to match(%r{^Loading from configuration file .*/#{File.basename(path_to("."))}/repo/.chef/knife.rb$}) }
|
83
|
-
it { is_expected.to match(/^node_name:\s+two$/) }
|
84
|
-
end
|
85
|
-
|
86
|
-
context "with both knife.rb" do
|
87
|
-
before do
|
88
|
-
file(".chef/knife.rb", "node_name 'one'\n")
|
89
|
-
file("repo/.chef/knife.rb", "node_name 'two'\n")
|
90
|
-
end
|
91
|
-
|
92
|
-
it { is_expected.to match(%r{^Loading from configuration file .*/#{File.basename(path_to("."))}/repo/.chef/knife.rb$}) }
|
93
|
-
it { is_expected.to match(/^node_name:\s+two$/) }
|
94
|
-
end
|
95
|
-
|
96
|
-
context "with a credentials file" do
|
97
|
-
before { file(".chef/credentials", "[default]\nclient_name = \"three\"\n") }
|
98
|
-
|
99
|
-
it { is_expected.to match(%r{^Loading from credentials file .*/#{File.basename(path_to("."))}/.chef/credentials$}) }
|
100
|
-
it { is_expected.to match(/^node_name:\s+three$/) }
|
101
|
-
end
|
102
|
-
|
103
|
-
context "with a credentials file and knife.rb" do
|
104
|
-
before do
|
105
|
-
file(".chef/knife.rb", "node_name 'one'\n")
|
106
|
-
file(".chef/credentials", "[default]\nclient_name = \"three\"\n")
|
107
|
-
end
|
108
|
-
|
109
|
-
it { is_expected.to match(%r{^Loading from configuration file .*/#{File.basename(path_to("."))}/.chef/knife.rb$}) }
|
110
|
-
it { is_expected.to match(%r{^Loading from credentials file .*/#{File.basename(path_to("."))}/.chef/credentials$}) }
|
111
|
-
it { is_expected.to match(/^node_name:\s+one$/) }
|
112
|
-
end
|
113
|
-
|
114
|
-
context "with a config dot d files" do
|
115
|
-
before { file(".chef/config.d/abc.rb", "node_name 'one'\n") }
|
116
|
-
|
117
|
-
it { is_expected.to match(%r{^Loading from .d/ configuration file .*/#{File.basename(path_to("."))}/.chef/config.d/abc.rb$}) }
|
118
|
-
it { is_expected.to match(/^node_name:\s+one$/) }
|
119
|
-
end
|
120
|
-
|
121
|
-
context "with a credentials file and CHEF_HOME" do
|
122
|
-
before do
|
123
|
-
file(".chef/credentials", "[default]\nclient_name = \"three\"\n")
|
124
|
-
file("foo/.chef/credentials", "[default]\nclient_name = \"four\"\n")
|
125
|
-
ENV["CHEF_HOME"] = path_to("foo")
|
126
|
-
end
|
127
|
-
|
128
|
-
it { is_expected.to match(%r{^Loading from credentials file .*/#{File.basename(path_to("."))}/foo/.chef/credentials$}) }
|
129
|
-
it { is_expected.to match(/^node_name:\s+four$/) }
|
130
|
-
end
|
131
|
-
|
132
|
-
context "with a credentials file and KNIFE_HOME" do
|
133
|
-
before do
|
134
|
-
file(".chef/credentials", "[default]\nclient_name = \"three\"\n")
|
135
|
-
file("bar/.chef/credentials", "[default]\nclient_name = \"four\"\n")
|
136
|
-
ENV["KNIFE_HOME"] = path_to("bar")
|
137
|
-
end
|
138
|
-
|
139
|
-
it { is_expected.to match(%r{^Loading from credentials file .*/#{File.basename(path_to("."))}/bar/.chef/credentials$}) }
|
140
|
-
it { is_expected.to match(/^node_name:\s+four$/) }
|
141
|
-
end
|
142
|
-
|
143
|
-
context "with single argument" do
|
144
|
-
let(:cmd_args) { %w{node_name} }
|
145
|
-
before { file(".chef/credentials", "[default]\nclient_name = \"three\"\n") }
|
146
|
-
|
147
|
-
it { is_expected.to match(/^node_name:\s+three\Z/) }
|
148
|
-
end
|
149
|
-
|
150
|
-
context "with two arguments" do
|
151
|
-
let(:cmd_args) { %w{node_name client_key} }
|
152
|
-
before { file(".chef/credentials", "[default]\nclient_name = \"three\"\nclient_key = \"three.pem\"") }
|
153
|
-
|
154
|
-
it { is_expected.to match(%r{^client_key:\s+\S*/.chef/three.pem\nnode_name:\s+three\Z}) }
|
155
|
-
end
|
156
|
-
|
157
|
-
context "with a dotted argument" do
|
158
|
-
let(:cmd_args) { %w{knife.ssh_user} }
|
159
|
-
before { file(".chef/credentials", "[default]\nclient_name = \"three\"\n[default.knife]\nssh_user = \"foo\"\n") }
|
160
|
-
|
161
|
-
it { is_expected.to match(/^knife.ssh_user:\s+foo\Z/) }
|
162
|
-
end
|
163
|
-
|
164
|
-
context "with regex argument" do
|
165
|
-
let(:cmd_args) { %w{/name/} }
|
166
|
-
before { file(".chef/credentials", "[default]\nclient_name = \"three\"\n") }
|
167
|
-
|
168
|
-
it { is_expected.to match(/^node_name:\s+three\Z/) }
|
169
|
-
end
|
170
|
-
|
171
|
-
context "with --all" do
|
172
|
-
let(:cmd_args) { %w{-a /key_contents/} }
|
173
|
-
before { file(".chef/credentials", "[default]\nclient_name = \"three\"\n") }
|
174
|
-
|
175
|
-
it { is_expected.to match(/^client_key_contents:\s+\nvalidation_key_contents:\s+\Z/) }
|
176
|
-
end
|
177
|
-
|
178
|
-
context "with --raw" do
|
179
|
-
let(:cmd_args) { %w{-r node_name} }
|
180
|
-
before { file(".chef/credentials", "[default]\nclient_name = \"three\"\n") }
|
181
|
-
|
182
|
-
it { is_expected.to eq("three\n") }
|
183
|
-
end
|
184
|
-
|
185
|
-
context "with --format=json" do
|
186
|
-
let(:cmd_args) { %w{--format=json node_name} }
|
187
|
-
before { file(".chef/credentials", "[default]\nclient_name = \"three\"\n") }
|
188
|
-
|
189
|
-
it { expect(JSON.parse(subject)).to eq({ "node_name" => "three" }) }
|
190
|
-
end
|
191
|
-
end
|