chef 15.17.4-universal-mingw32 → 16.0.257-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 +14 -20
- data/README.md +6 -6
- data/Rakefile +18 -23
- data/chef-universal-mingw32.gemspec +4 -4
- data/chef.gemspec +10 -26
- data/distro/powershell/chef/chef.psm1 +3 -3
- data/distro/templates/powershell/chef/chef.psm1.erb +3 -3
- data/lib/chef/action_collection.rb +16 -5
- data/lib/chef/api_client/registration.rb +2 -2
- data/lib/chef/application.rb +33 -54
- data/lib/chef/application/apply.rb +20 -3
- data/lib/chef/application/base.rb +8 -3
- data/lib/chef/application/exit_code.rb +2 -2
- data/lib/chef/application/knife.rb +1 -1
- data/lib/chef/chef_class.rb +4 -4
- data/lib/chef/chef_fs/chef_fs_data_store.rb +3 -3
- data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +1 -1
- data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +1 -1
- data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +6 -2
- data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +1 -1
- data/lib/chef/chef_fs/file_system/repository/base_file.rb +0 -1
- 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 +1 -1
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +5 -5
- 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/path_utils.rb +3 -3
- data/lib/chef/client.rb +16 -14
- data/lib/chef/config.rb +1 -1
- data/lib/chef/cookbook/file_system_file_vendor.rb +1 -1
- data/lib/chef/cookbook/gem_installer.rb +1 -1
- data/lib/chef/cookbook/metadata.rb +45 -22
- data/lib/chef/cookbook_version.rb +40 -5
- data/lib/chef/data_bag.rb +2 -2
- data/lib/chef/data_collector/error_handlers.rb +1 -1
- data/lib/chef/data_collector/run_end_message.rb +7 -1
- data/lib/chef/deprecated.rb +1 -9
- data/lib/chef/dist.rb +8 -0
- data/lib/chef/dsl/chef_vault.rb +84 -0
- data/lib/chef/dsl/declare_resource.rb +7 -5
- data/lib/chef/dsl/platform_introspection.rb +2 -3
- data/lib/chef/dsl/recipe.rb +7 -12
- data/lib/chef/dsl/universal.rb +3 -7
- data/lib/chef/environment.rb +2 -2
- data/lib/chef/event_dispatch/base.rb +3 -0
- data/lib/chef/exceptions.rb +0 -3
- data/lib/chef/formatters/doc.rb +1 -1
- data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +2 -2
- data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +7 -7
- data/lib/chef/formatters/indentable_output_stream.rb +7 -16
- data/lib/chef/http.rb +1 -2
- data/lib/chef/http/http_request.rb +3 -2
- data/lib/chef/knife.rb +1 -3
- data/lib/chef/knife/acl_add.rb +57 -0
- data/lib/chef/knife/acl_base.rb +183 -0
- data/lib/chef/knife/acl_bulk_add.rb +78 -0
- data/lib/chef/knife/acl_bulk_remove.rb +83 -0
- data/lib/chef/knife/acl_remove.rb +62 -0
- data/lib/chef/knife/acl_show.rb +56 -0
- data/lib/chef/knife/bootstrap.rb +93 -97
- data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -1
- data/lib/chef/knife/bootstrap/client_builder.rb +1 -1
- data/lib/chef/knife/bootstrap/templates/chef-full.erb +20 -20
- data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +13 -15
- data/lib/chef/knife/bootstrap/train_connector.rb +0 -1
- data/lib/chef/knife/cookbook_download.rb +1 -1
- data/lib/chef/knife/cookbook_metadata.rb +1 -1
- data/lib/chef/knife/core/bootstrap_context.rb +63 -60
- data/lib/chef/knife/core/gem_glob_loader.rb +1 -1
- data/lib/chef/knife/core/generic_presenter.rb +4 -3
- data/lib/chef/knife/core/hashed_command_loader.rb +2 -3
- data/lib/chef/knife/core/node_presenter.rb +2 -2
- data/lib/chef/knife/core/status_presenter.rb +5 -5
- data/lib/chef/knife/core/subcommand_loader.rb +1 -1
- data/lib/chef/knife/core/ui.rb +17 -1
- data/lib/chef/knife/core/windows_bootstrap_context.rb +45 -58
- data/lib/chef/knife/data_bag_secret_options.rb +18 -45
- data/lib/chef/knife/environment_compare.rb +1 -1
- data/lib/chef/knife/exec.rb +2 -2
- data/lib/chef/knife/group_add.rb +55 -0
- data/lib/chef/knife/{cookbook_site_download.rb → group_create.rb} +21 -12
- data/lib/chef/knife/group_destroy.rb +53 -0
- data/lib/chef/knife/{cookbook_site_list.rb → group_list.rb} +14 -11
- data/lib/chef/knife/group_remove.rb +56 -0
- data/lib/chef/knife/{cookbook_site_install.rb → group_show.rb} +21 -12
- data/lib/chef/knife/list.rb +1 -1
- data/lib/chef/knife/ssh.rb +12 -50
- data/lib/chef/knife/status.rb +3 -3
- data/lib/chef/knife/supermarket_download.rb +1 -2
- data/lib/chef/knife/supermarket_install.rb +1 -2
- data/lib/chef/knife/supermarket_list.rb +1 -2
- data/lib/chef/knife/supermarket_search.rb +1 -2
- data/lib/chef/knife/supermarket_share.rb +1 -2
- data/lib/chef/knife/supermarket_show.rb +1 -2
- data/lib/chef/knife/supermarket_unshare.rb +1 -2
- data/lib/chef/knife/{cookbook_site_show.rb → user_dissociate.rb} +15 -13
- data/lib/chef/knife/{cookbook_site_search.rb → user_invite_add.rb} +16 -13
- data/lib/chef/knife/user_invite_list.rb +34 -0
- data/lib/chef/knife/user_invite_recind.rb +63 -0
- data/lib/chef/knife/yaml_convert.rb +91 -0
- data/lib/chef/log.rb +1 -1
- data/lib/chef/mixin/create_path.rb +8 -8
- data/lib/chef/mixin/openssl_helper.rb +3 -26
- data/lib/chef/mixin/powershell_exec.rb +10 -1
- data/lib/chef/mixin/powershell_out.rb +1 -1
- data/lib/chef/mixin/properties.rb +13 -1
- data/lib/chef/mixin/shell_out.rb +0 -4
- data/lib/chef/mixin/template.rb +0 -1
- data/lib/chef/monkey_patches/net_http.rb +0 -4
- data/lib/chef/node.rb +18 -6
- data/lib/chef/node/mixin/deep_merge_cache.rb +7 -7
- data/lib/chef/node/mixin/immutablize_array.rb +4 -0
- data/lib/chef/node/mixin/immutablize_hash.rb +3 -0
- data/lib/chef/node_map.rb +7 -36
- data/lib/chef/platform/priority_map.rb +4 -4
- data/lib/chef/platform/query_helpers.rb +6 -34
- data/lib/chef/powershell.rb +14 -0
- data/lib/chef/property.rb +22 -4
- data/lib/chef/provider.rb +40 -6
- data/lib/chef/provider/cron.rb +2 -2
- data/lib/chef/provider/directory.rb +2 -2
- data/lib/chef/provider/dsc_resource.rb +1 -1
- data/lib/chef/provider/dsc_script.rb +1 -1
- data/lib/chef/provider/execute.rb +2 -8
- data/lib/chef/provider/file.rb +5 -5
- data/lib/chef/provider/git.rb +84 -27
- data/lib/chef/provider/group.rb +4 -4
- data/lib/chef/provider/http_request.rb +6 -6
- data/lib/chef/provider/ifconfig.rb +4 -4
- data/lib/chef/provider/launchd.rb +36 -51
- data/lib/chef/provider/link.rb +2 -2
- data/lib/chef/provider/mount.rb +5 -5
- data/lib/chef/provider/mount/solaris.rb +1 -0
- data/lib/chef/provider/osx_profile.rb +7 -3
- data/lib/chef/provider/package.rb +2 -2
- data/lib/chef/provider/package/cab.rb +3 -4
- data/lib/chef/provider/package/chocolatey.rb +1 -3
- data/lib/chef/provider/package/dnf.rb +66 -10
- data/lib/chef/provider/package/dnf/dnf_helper.py +84 -30
- data/lib/chef/provider/package/dnf/python_helper.rb +79 -36
- data/lib/chef/provider/package/dnf/version.rb +5 -1
- data/lib/chef/provider/package/freebsd/pkgng.rb +1 -3
- data/lib/chef/provider/package/homebrew.rb +106 -42
- data/lib/chef/provider/package/msu.rb +3 -1
- data/lib/chef/provider/package/pacman.rb +25 -34
- data/lib/chef/provider/package/powershell.rb +2 -6
- data/lib/chef/provider/package/rubygems.rb +29 -2
- data/lib/chef/provider/package/snap.rb +27 -96
- data/lib/chef/provider/package/windows.rb +3 -2
- data/lib/chef/provider/package/windows/msi.rb +2 -2
- data/lib/chef/provider/package/yum.rb +0 -8
- data/lib/chef/provider/package/yum/yum_helper.py +0 -4
- data/lib/chef/provider/package/zypper.rb +1 -1
- data/lib/chef/provider/powershell_script.rb +4 -10
- data/lib/chef/provider/registry_key.rb +4 -4
- data/lib/chef/provider/remote_directory.rb +3 -3
- data/lib/chef/provider/remote_file/ftp.rb +3 -2
- data/lib/chef/provider/remote_file/local_file.rb +2 -1
- data/lib/chef/provider/remote_file/sftp.rb +3 -2
- data/lib/chef/provider/route.rb +5 -3
- data/lib/chef/provider/ruby_block.rb +1 -1
- data/lib/chef/provider/script.rb +2 -2
- data/lib/chef/provider/service.rb +8 -8
- data/lib/chef/provider/service/aixinit.rb +1 -1
- data/lib/chef/provider/service/arch.rb +2 -2
- data/lib/chef/provider/service/debian.rb +31 -29
- data/lib/chef/provider/service/gentoo.rb +2 -2
- data/lib/chef/provider/service/macosx.rb +7 -12
- data/lib/chef/provider/service/openbsd.rb +1 -1
- data/lib/chef/provider/service/redhat.rb +2 -2
- data/lib/chef/provider/service/simple.rb +3 -3
- data/lib/chef/provider/service/systemd.rb +12 -12
- data/lib/chef/provider/service/upstart.rb +1 -1
- data/lib/chef/provider/service/windows.rb +5 -11
- data/lib/chef/provider/subversion.rb +25 -5
- data/lib/chef/provider/systemd_unit.rb +26 -25
- data/lib/chef/provider/user.rb +6 -6
- data/lib/chef/provider/user/dscl.rb +3 -3
- data/lib/chef/provider/user/mac.rb +10 -9
- data/lib/chef/provider/whyrun_safe_ruby_block.rb +1 -1
- data/lib/chef/provider/windows_env.rb +3 -3
- data/lib/chef/provider/windows_script.rb +2 -2
- data/lib/chef/provider/windows_task.rb +7 -9
- data/lib/chef/provider/yum_repository.rb +1 -1
- data/lib/chef/provider/zypper_repository.rb +11 -31
- data/lib/chef/providers.rb +0 -6
- data/lib/chef/recipe.rb +36 -0
- data/lib/chef/resource.rb +41 -56
- data/lib/chef/resource/action_class.rb +24 -22
- data/lib/chef/resource/alternatives.rb +149 -0
- data/lib/chef/resource/apt_package.rb +2 -1
- data/lib/chef/resource/apt_preference.rb +69 -2
- data/lib/chef/resource/apt_repository.rb +337 -5
- data/lib/chef/resource/apt_update.rb +52 -1
- data/lib/chef/resource/archive_file.rb +9 -29
- data/lib/chef/resource/bash.rb +2 -0
- data/lib/chef/resource/bff_package.rb +9 -1
- data/lib/chef/resource/breakpoint.rb +0 -1
- data/lib/chef/resource/build_essential.rb +42 -48
- data/lib/chef/resource/cab_package.rb +8 -1
- data/lib/chef/resource/chef_client_cron.rb +225 -0
- data/lib/chef/resource/chef_client_scheduled_task.rb +198 -0
- data/lib/chef/resource/chef_client_systemd_timer.rb +177 -0
- data/lib/chef/resource/chef_gem.rb +9 -16
- data/lib/chef/resource/chef_handler.rb +2 -1
- data/lib/chef/resource/chef_sleep.rb +0 -1
- data/lib/chef/resource/chef_vault_secret.rb +135 -0
- data/lib/chef/resource/chocolatey_config.rb +3 -1
- data/lib/chef/resource/chocolatey_feature.rb +2 -1
- data/lib/chef/resource/chocolatey_package.rb +2 -1
- data/lib/chef/resource/chocolatey_source.rb +2 -1
- data/lib/chef/resource/cookbook_file.rb +1 -1
- data/lib/chef/resource/cron.rb +22 -68
- data/lib/chef/resource/cron_access.rb +8 -15
- data/lib/chef/resource/cron_d.rb +9 -75
- data/lib/chef/resource/csh.rb +2 -0
- data/lib/chef/resource/directory.rb +2 -2
- data/lib/chef/resource/dmg_package.rb +4 -4
- data/lib/chef/resource/dnf_package.rb +2 -3
- data/lib/chef/resource/dpkg_package.rb +2 -1
- data/lib/chef/resource/dsc_resource.rb +6 -4
- data/lib/chef/resource/dsc_script.rb +3 -2
- data/lib/chef/resource/execute.rb +13 -12
- data/lib/chef/resource/file.rb +3 -1
- data/lib/chef/resource/freebsd_package.rb +2 -1
- data/lib/chef/resource/gem_package.rb +14 -6
- data/lib/chef/resource/group.rb +4 -1
- data/lib/chef/resource/helpers/cron_validations.rb +98 -0
- data/lib/chef/resource/homebrew_cask.rb +5 -4
- data/lib/chef/resource/homebrew_package.rb +4 -2
- data/lib/chef/resource/homebrew_tap.rb +2 -1
- data/lib/chef/resource/hostname.rb +41 -36
- data/lib/chef/resource/http_request.rb +0 -1
- data/lib/chef/resource/ifconfig.rb +1 -1
- data/lib/chef/resource/ips_package.rb +10 -2
- data/lib/chef/resource/kernel_module.rb +29 -29
- data/lib/chef/resource/ksh.rb +2 -0
- data/lib/chef/resource/launchd.rb +6 -6
- data/lib/chef/resource/link.rb +1 -23
- data/lib/chef/resource/locale.rb +58 -24
- data/lib/chef/resource/log.rb +12 -1
- data/lib/chef/resource/lwrp_base.rb +1 -8
- data/lib/chef/resource/macos_userdefaults.rb +9 -6
- data/lib/chef/resource/macosx_service.rb +2 -1
- data/lib/chef/resource/macports_package.rb +10 -2
- data/lib/chef/resource/mdadm.rb +62 -2
- data/lib/chef/resource/mount.rb +3 -0
- data/lib/chef/resource/msu_package.rb +13 -1
- data/lib/chef/resource/notify_group.rb +8 -3
- data/lib/chef/resource/ohai.rb +19 -3
- data/lib/chef/resource/ohai_hint.rb +3 -12
- data/lib/chef/resource/openbsd_package.rb +9 -1
- data/lib/chef/resource/openssl_dhparam.rb +10 -1
- data/lib/chef/resource/openssl_ec_private_key.rb +23 -1
- data/lib/chef/resource/openssl_ec_public_key.rb +21 -1
- data/lib/chef/resource/openssl_rsa_private_key.rb +20 -1
- data/lib/chef/resource/openssl_rsa_public_key.rb +22 -1
- data/lib/chef/resource/openssl_x509_certificate.rb +37 -1
- data/lib/chef/resource/openssl_x509_crl.rb +12 -1
- data/lib/chef/resource/openssl_x509_request.rb +37 -1
- data/lib/chef/resource/osx_profile.rb +3 -2
- data/lib/chef/resource/package.rb +2 -1
- data/lib/chef/resource/pacman_package.rb +2 -1
- data/lib/chef/resource/paludis_package.rb +12 -3
- data/lib/chef/resource/perl.rb +2 -0
- data/lib/chef/resource/plist.rb +207 -0
- data/lib/chef/resource/portage_package.rb +13 -3
- data/lib/chef/resource/powershell_package.rb +1 -3
- data/lib/chef/resource/powershell_package_source.rb +3 -1
- data/lib/chef/resource/powershell_script.rb +7 -17
- data/lib/chef/resource/python.rb +2 -0
- data/lib/chef/resource/reboot.rb +0 -1
- data/lib/chef/resource/registry_key.rb +1 -2
- data/lib/chef/resource/remote_directory.rb +2 -0
- data/lib/chef/resource/remote_file.rb +2 -0
- data/lib/chef/resource/rhsm_errata.rb +0 -1
- data/lib/chef/resource/rhsm_errata_level.rb +0 -1
- data/lib/chef/resource/rhsm_register.rb +2 -1
- data/lib/chef/resource/rhsm_repo.rb +3 -1
- data/lib/chef/resource/rhsm_subscription.rb +4 -1
- data/lib/chef/resource/route.rb +5 -1
- data/lib/chef/resource/rpm_package.rb +9 -2
- data/lib/chef/resource/ruby.rb +2 -0
- data/lib/chef/resource/ruby_block.rb +1 -1
- data/lib/chef/resource/scm/_scm.rb +48 -0
- data/lib/chef/resource/{scm.rb → scm/git.rb} +16 -30
- data/lib/chef/resource/{subversion.rb → scm/subversion.rb} +8 -5
- data/lib/chef/resource/script.rb +6 -3
- data/lib/chef/resource/service.rb +6 -7
- data/lib/chef/resource/smartos_package.rb +9 -1
- data/lib/chef/resource/snap_package.rb +3 -1
- data/lib/chef/resource/solaris_package.rb +9 -1
- data/lib/chef/resource/ssh_known_hosts_entry.rb +6 -3
- data/lib/chef/resource/sudo.rb +9 -9
- 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 -2
- data/lib/chef/resource/support/ulimit.erb +41 -0
- data/lib/chef/resource/swap_file.rb +5 -3
- data/lib/chef/resource/sysctl.rb +2 -2
- data/lib/chef/resource/systemd_unit.rb +4 -2
- data/lib/chef/resource/template.rb +0 -1
- data/lib/chef/resource/timezone.rb +7 -18
- data/lib/chef/resource/user.rb +1 -3
- data/lib/chef/resource/user/aix_user.rb +0 -2
- data/lib/chef/resource/user/dscl_user.rb +1 -1
- data/lib/chef/resource/user/linux_user.rb +0 -2
- data/lib/chef/resource/user/mac_user.rb +1 -1
- data/lib/chef/resource/user/pw_user.rb +0 -2
- data/lib/chef/resource/user/solaris_user.rb +0 -2
- data/lib/chef/resource/user/windows_user.rb +0 -2
- data/lib/chef/resource/user_ulimit.rb +114 -0
- data/lib/chef/resource/whyrun_safe_ruby_block.rb +1 -0
- data/lib/chef/resource/windows_ad_join.rb +19 -6
- data/lib/chef/resource/windows_auto_run.rb +0 -1
- data/lib/chef/resource/windows_certificate.rb +1 -1
- data/lib/chef/resource/windows_dfs_folder.rb +0 -1
- data/lib/chef/resource/windows_dfs_namespace.rb +0 -1
- data/lib/chef/resource/windows_dfs_server.rb +0 -1
- data/lib/chef/resource/windows_dns_record.rb +0 -1
- data/lib/chef/resource/windows_dns_zone.rb +0 -1
- data/lib/chef/resource/windows_env.rb +2 -3
- data/lib/chef/resource/windows_feature.rb +2 -2
- data/lib/chef/resource/windows_feature_dism.rb +9 -22
- data/lib/chef/resource/windows_feature_powershell.rb +17 -82
- data/lib/chef/resource/windows_firewall_rule.rb +119 -10
- data/lib/chef/resource/windows_font.rb +1 -3
- data/lib/chef/resource/windows_package.rb +13 -4
- data/lib/chef/resource/windows_pagefile.rb +0 -1
- data/lib/chef/resource/windows_path.rb +0 -1
- data/lib/chef/resource/windows_printer.rb +0 -1
- data/lib/chef/resource/windows_printer_port.rb +0 -1
- data/lib/chef/resource/windows_script.rb +3 -4
- data/lib/chef/resource/windows_security_policy.rb +90 -0
- data/lib/chef/resource/windows_service.rb +45 -31
- data/lib/chef/resource/windows_share.rb +3 -7
- data/lib/chef/resource/windows_shortcut.rb +0 -1
- data/lib/chef/resource/windows_task.rb +14 -15
- data/lib/chef/resource/windows_uac.rb +0 -1
- data/lib/chef/resource/windows_user_privilege.rb +157 -0
- data/lib/chef/resource/windows_workgroup.rb +0 -1
- data/lib/chef/resource/yum_package.rb +3 -1
- data/lib/chef/resource/yum_repository.rb +2 -1
- data/lib/chef/resource/zypper_package.rb +3 -2
- data/lib/chef/resource/zypper_repository.rb +2 -1
- data/lib/chef/resource_builder.rb +8 -0
- data/lib/chef/resource_inspector.rb +6 -6
- data/lib/chef/resource_resolver.rb +7 -14
- data/lib/chef/resources.rb +11 -3
- data/lib/chef/role.rb +2 -2
- data/lib/chef/run_context/cookbook_compiler.rb +29 -5
- data/lib/chef/shell.rb +23 -32
- data/lib/chef/shell/shell_session.rb +0 -2
- data/lib/chef/util/diff.rb +1 -1
- data/lib/chef/util/dsc/configuration_generator.rb +1 -1
- data/lib/chef/util/dsc/lcm_output_parser.rb +3 -3
- data/lib/chef/util/powershell/cmdlet.rb +1 -1
- data/lib/chef/version.rb +2 -2
- data/lib/chef/version_string.rb +1 -1
- data/lib/chef/win32/api/file.rb +18 -18
- data/lib/chef/win32/api/security.rb +6 -0
- data/lib/chef/win32/file.rb +3 -11
- data/lib/chef/win32/process.rb +2 -2
- data/lib/chef/win32/security.rb +40 -2
- data/spec/functional/assets/inittest +8 -7
- data/spec/functional/knife/ssh_spec.rb +27 -23
- data/spec/functional/resource/aix_service_spec.rb +1 -0
- data/spec/functional/resource/aixinit_service_spec.rb +8 -7
- data/spec/functional/resource/apt_package_spec.rb +1 -0
- data/spec/functional/resource/bff_spec.rb +2 -2
- data/spec/functional/resource/cookbook_file_spec.rb +1 -1
- data/spec/functional/resource/cron_spec.rb +11 -29
- data/spec/functional/resource/dnf_package_spec.rb +441 -156
- data/spec/functional/resource/dsc_resource_spec.rb +1 -1
- data/spec/functional/resource/git_spec.rb +184 -134
- data/spec/functional/resource/insserv_spec.rb +6 -5
- data/spec/functional/resource/link_spec.rb +17 -17
- data/spec/functional/resource/locale_spec.rb +13 -2
- data/spec/functional/resource/powershell_script_spec.rb +7 -68
- data/spec/functional/resource/rpm_spec.rb +2 -2
- data/spec/functional/resource/user/dscl_spec.rb +2 -2
- data/spec/functional/resource/user/mac_user_spec.rb +2 -2
- data/spec/functional/resource/windows_certificate_spec.rb +3 -3
- data/spec/functional/resource/windows_security_policy_spec.rb +90 -0
- data/spec/functional/resource/windows_task_spec.rb +8 -8
- data/spec/functional/resource/windows_user_privilege_spec.rb +193 -0
- data/spec/functional/run_lock_spec.rb +1 -2
- data/spec/functional/shell_spec.rb +6 -6
- data/spec/functional/util/powershell/cmdlet_spec.rb +1 -1
- data/spec/functional/version_spec.rb +1 -1
- data/spec/functional/win32/registry_spec.rb +0 -6
- data/spec/functional/win32/security_spec.rb +22 -0
- data/spec/functional/win32/service_manager_spec.rb +1 -1
- data/spec/integration/client/client_spec.rb +123 -2
- data/spec/integration/knife/cookbook_show_spec.rb +28 -26
- data/spec/integration/knife/data_bag_show_spec.rb +1 -1
- data/spec/integration/knife/raw_spec.rb +30 -2
- data/spec/integration/knife/show_spec.rb +32 -3
- data/spec/integration/recipes/accumulator_spec.rb +1 -1
- data/spec/integration/recipes/lwrp_inline_resources_spec.rb +5 -5
- data/spec/integration/recipes/lwrp_spec.rb +1 -1
- data/spec/integration/recipes/noop_resource_spec.rb +1 -1
- data/spec/integration/recipes/notifies_spec.rb +50 -21
- data/spec/integration/recipes/notifying_block_spec.rb +9 -6
- data/spec/integration/recipes/provider_choice.rb +2 -0
- data/spec/integration/recipes/recipe_dsl_spec.rb +46 -144
- data/spec/integration/recipes/resource_action_spec.rb +16 -11
- data/spec/integration/recipes/resource_converge_if_changed_spec.rb +1 -3
- data/spec/integration/recipes/resource_load_spec.rb +133 -13
- data/spec/integration/recipes/unified_mode_spec.rb +1 -1
- data/spec/integration/recipes/use_partial_spec.rb +112 -0
- data/spec/integration/solo/solo_spec.rb +3 -3
- data/spec/scripts/ssl-serve.rb +1 -1
- data/spec/spec_helper.rb +11 -14
- data/spec/support/chef_helpers.rb +2 -2
- data/spec/support/lib/chef/resource/zen_follower.rb +2 -0
- data/spec/support/platform_helpers.rb +44 -19
- data/spec/support/platforms/win32/spec_service.rb +1 -1
- data/spec/support/recipe_dsl_helper.rb +83 -0
- 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 +3 -3
- data/spec/support/shared/functional/win32_service.rb +1 -1
- data/spec/support/shared/functional/windows_script.rb +5 -18
- data/spec/support/shared/integration/knife_support.rb +14 -8
- data/spec/unit/application/apply_spec.rb +3 -0
- data/spec/unit/application/client_spec.rb +5 -1
- data/spec/unit/application_spec.rb +1 -9
- data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +4 -2
- data/spec/unit/client_spec.rb +7 -5
- data/spec/unit/cookbook/gem_installer_spec.rb +3 -4
- data/spec/unit/cookbook/metadata_spec.rb +38 -19
- data/spec/unit/data_bag_spec.rb +1 -1
- data/spec/unit/data_collector_spec.rb +38 -17
- data/spec/unit/dsl/platform_introspection_spec.rb +0 -1
- data/spec/unit/environment_spec.rb +7 -7
- data/spec/unit/event_dispatch/dispatcher_spec.rb +0 -3
- data/spec/unit/file_access_control_spec.rb +1 -1
- data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +15 -15
- data/spec/unit/knife/bootstrap/client_builder_spec.rb +9 -9
- data/spec/unit/knife/bootstrap_spec.rb +36 -54
- 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/cookbook_show_spec.rb +1 -0
- data/spec/unit/knife/cookbook_upload_spec.rb +6 -5
- data/spec/unit/knife/core/bootstrap_context_spec.rb +23 -43
- data/spec/unit/knife/core/hashed_command_loader_spec.rb +3 -3
- data/spec/unit/knife/core/ui_spec.rb +16 -0
- data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +8 -68
- data/spec/unit/knife/data_bag_secret_options_spec.rb +22 -14
- data/spec/unit/knife/role_env_run_list_add_spec.rb +6 -6
- data/spec/unit/knife/role_env_run_list_clear_spec.rb +4 -4
- data/spec/unit/knife/role_env_run_list_remove_spec.rb +4 -4
- data/spec/unit/knife/role_env_run_list_replace_spec.rb +4 -4
- data/spec/unit/knife/role_env_run_list_set_spec.rb +4 -4
- data/spec/unit/knife/role_run_list_add_spec.rb +6 -6
- data/spec/unit/knife/role_run_list_clear_spec.rb +4 -4
- data/spec/unit/knife/role_run_list_remove_spec.rb +4 -4
- data/spec/unit/knife/role_run_list_replace_spec.rb +4 -4
- data/spec/unit/knife/role_run_list_set_spec.rb +4 -4
- data/spec/unit/knife/ssh_spec.rb +10 -113
- data/spec/unit/knife/status_spec.rb +1 -1
- data/spec/unit/knife/supermarket_share_spec.rb +3 -5
- data/spec/unit/knife_spec.rb +18 -0
- data/spec/unit/lwrp_spec.rb +4 -4
- data/spec/unit/mixin/powershell_exec_spec.rb +10 -0
- data/spec/unit/mixin/securable_spec.rb +1 -0
- data/spec/unit/mixin/user_context_spec.rb +9 -1
- data/spec/unit/node/attribute_spec.rb +2 -2
- data/spec/unit/node_spec.rb +24 -0
- data/spec/unit/platform/query_helpers_spec.rb +0 -143
- data/spec/unit/property/state_spec.rb +12 -7
- data/spec/unit/property/validation_spec.rb +25 -1
- data/spec/unit/property_spec.rb +18 -15
- data/spec/unit/provider/apt_preference_spec.rb +14 -10
- data/spec/unit/provider/apt_repository_spec.rb +9 -11
- data/spec/unit/provider/apt_update_spec.rb +12 -11
- data/spec/unit/provider/cookbook_file_spec.rb +4 -4
- data/spec/unit/provider/cron_spec.rb +2 -2
- data/spec/unit/provider/directory_spec.rb +4 -15
- data/spec/unit/provider/file_spec.rb +4 -4
- data/spec/unit/provider/git_spec.rb +44 -4
- data/spec/unit/provider/link_spec.rb +0 -1
- data/spec/unit/provider/log_spec.rb +3 -3
- data/spec/unit/provider/mdadm_spec.rb +3 -3
- data/spec/unit/provider/osx_profile_spec.rb +2 -2
- data/spec/unit/provider/package/dnf/python_helper_spec.rb +2 -2
- data/spec/unit/provider/package/freebsd/pkgng_spec.rb +1 -1
- data/spec/unit/provider/package/homebrew_spec.rb +280 -174
- data/spec/unit/provider/package/msu_spec.rb +3 -3
- data/spec/unit/provider/package/pacman_spec.rb +65 -147
- data/spec/unit/provider/package/powershell_spec.rb +88 -96
- data/spec/unit/provider/package/rubygems_spec.rb +221 -31
- data/spec/unit/provider/package/snap_spec.rb +1 -1
- data/spec/unit/provider/package/windows/exe_spec.rb +1 -1
- data/spec/unit/provider/package/windows_spec.rb +53 -30
- data/spec/unit/provider/powershell_script_spec.rb +21 -61
- data/spec/unit/provider/remote_file_spec.rb +3 -4
- data/spec/unit/provider/service/arch_service_spec.rb +2 -3
- data/spec/unit/provider/service/debian_service_spec.rb +35 -14
- data/spec/unit/provider/service/gentoo_service_spec.rb +8 -8
- data/spec/unit/provider/service/macosx_spec.rb +210 -214
- data/spec/unit/provider/service/redhat_spec.rb +2 -2
- data/spec/unit/provider/service/systemd_service_spec.rb +23 -23
- data/spec/unit/provider/service/upstart_service_spec.rb +3 -3
- data/spec/unit/provider/service/windows_spec.rb +6 -2
- data/spec/unit/provider/subversion_spec.rb +4 -2
- data/spec/unit/provider/systemd_unit_spec.rb +24 -28
- data/spec/unit/provider/template_spec.rb +3 -4
- data/spec/unit/provider/zypper_repository_spec.rb +25 -75
- data/spec/unit/provider_resolver_spec.rb +11 -11
- data/spec/unit/provider_spec.rb +0 -1
- data/spec/unit/recipe_spec.rb +68 -0
- data/spec/unit/resource/alternatives_spec.rb +120 -0
- data/spec/unit/resource/apt_preference_spec.rb +0 -18
- data/spec/unit/resource/apt_repository_spec.rb +0 -18
- data/spec/unit/resource/apt_update_spec.rb +0 -18
- data/spec/unit/resource/archive_file_spec.rb +2 -11
- data/spec/unit/resource/chef_client_cron_spec.rb +119 -0
- data/spec/unit/resource/chef_client_scheduled_task_spec.rb +102 -0
- data/spec/unit/resource/chef_client_systemd_timer_spec.rb +70 -0
- data/spec/unit/resource/chef_vault_secret_spec.rb +40 -0
- data/spec/unit/resource/chocolatey_source_spec.rb +2 -1
- data/spec/unit/resource/cron_d_spec.rb +6 -48
- data/spec/unit/resource/cron_spec.rb +4 -10
- data/spec/unit/resource/gem_package_spec.rb +3 -3
- data/spec/unit/resource/helpers/cron_validations_spec.rb +77 -0
- data/spec/unit/resource/link_spec.rb +0 -4
- data/spec/unit/resource/locale_spec.rb +0 -34
- data/spec/unit/resource/ohai_spec.rb +56 -2
- data/spec/unit/resource/plist_spec.rb +130 -0
- data/spec/unit/resource/powershell_script_spec.rb +0 -5
- data/spec/unit/resource/{git_spec.rb → scm/git_spec.rb} +50 -2
- data/spec/unit/resource/{scm_spec.rb → scm/scm.rb} +1 -52
- data/spec/unit/resource/{subversion_spec.rb → scm/subversion_spec.rb} +2 -3
- data/spec/unit/resource/service_spec.rb +4 -0
- data/spec/unit/resource/user_spec.rb +2 -2
- data/spec/unit/resource/user_ulimit_spec.rb +53 -0
- data/spec/unit/resource/windows_dns_record_spec.rb +3 -3
- data/spec/unit/resource/windows_dns_zone_spec.rb +2 -2
- data/spec/unit/resource/windows_feature_dism_spec.rb +2 -17
- data/spec/unit/resource/windows_feature_powershell_spec.rb +6 -47
- data/spec/unit/resource/windows_firewall_rule_spec.rb +88 -41
- data/spec/unit/resource/windows_package_spec.rb +4 -1
- data/spec/unit/resource/windows_service_spec.rb +9 -0
- data/spec/unit/resource/windows_task_spec.rb +1 -1
- data/spec/unit/resource/windows_uac_spec.rb +2 -2
- data/spec/unit/resource/yum_repository_spec.rb +21 -21
- data/spec/unit/resource_reporter_spec.rb +1 -5
- data/spec/unit/resource_spec.rb +11 -4
- data/spec/unit/role_spec.rb +11 -11
- data/spec/unit/run_context/cookbook_compiler_spec.rb +1 -1
- data/spec/unit/run_context_spec.rb +1 -1
- data/spec/unit/search/query_spec.rb +1 -1
- data/spec/unit/util/threaded_job_queue_spec.rb +0 -9
- data/spec/unit/win32/security_spec.rb +3 -4
- data/tasks/rspec.rb +1 -1
- metadata +116 -87
- data/lib/chef/dsl/core.rb +0 -52
- data/lib/chef/knife/cookbook_site_share.rb +0 -41
- data/lib/chef/knife/cookbook_site_unshare.rb +0 -41
- data/lib/chef/provider/apt_preference.rb +0 -93
- data/lib/chef/provider/apt_repository.rb +0 -358
- data/lib/chef/provider/apt_update.rb +0 -79
- data/lib/chef/provider/log.rb +0 -43
- data/lib/chef/provider/mdadm.rb +0 -85
- data/lib/chef/provider/ohai.rb +0 -45
- data/lib/chef/resource/git.rb +0 -37
- data/spec/functional/resource/windows_font_spec.rb +0 -49
- data/spec/unit/provider/ohai_spec.rb +0 -84
@@ -0,0 +1,198 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: Copyright (c) Chef Software Inc.
|
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
|
+
|
17
|
+
require_relative "../resource"
|
18
|
+
require_relative "../dist"
|
19
|
+
|
20
|
+
class Chef
|
21
|
+
class Resource
|
22
|
+
class ChefClientScheduledTask < Chef::Resource
|
23
|
+
unified_mode true
|
24
|
+
|
25
|
+
provides :chef_client_scheduled_task
|
26
|
+
|
27
|
+
description "Use the chef_client_cron resource to setup the #{Chef::Dist::PRODUCT} to run as a Windows scheduled task. This resource will also create the specified log directory if it doesn't already exist."
|
28
|
+
introduced "16.0"
|
29
|
+
examples <<~DOC
|
30
|
+
Setup #{Chef::Dist::PRODUCT} to run using the default 30 minute cadence
|
31
|
+
```ruby
|
32
|
+
chef_client_scheduled_task "Run chef-client as a scheduled task"
|
33
|
+
```
|
34
|
+
|
35
|
+
Run #{Chef::Dist::PRODUCT} on system start
|
36
|
+
```ruby
|
37
|
+
chef_client_scheduled_task 'Chef Client on start' do
|
38
|
+
frequency 'onstart'
|
39
|
+
end
|
40
|
+
```
|
41
|
+
|
42
|
+
Run #{Chef::Dist::PRODUCT} with extra options passed to the client
|
43
|
+
```ruby
|
44
|
+
chef_client_scheduled_task "Run an override recipe" do
|
45
|
+
daemon_options ["--override-runlist mycorp_base::default"]
|
46
|
+
end
|
47
|
+
```
|
48
|
+
DOC
|
49
|
+
|
50
|
+
resource_name :chef_client_scheduled_task
|
51
|
+
|
52
|
+
property :task_name, String,
|
53
|
+
description: "The name of the scheduled task to create.",
|
54
|
+
default: Chef::Dist::CLIENT
|
55
|
+
|
56
|
+
property :user, String,
|
57
|
+
description: "The name of the user that #{Chef::Dist::PRODUCT} runs as.",
|
58
|
+
default: "System", sensitive: true
|
59
|
+
|
60
|
+
property :password, String, sensitive: true,
|
61
|
+
description: "The password for the user that #{Chef::Dist::PRODUCT} runs as."
|
62
|
+
|
63
|
+
property :frequency, String,
|
64
|
+
description: "Frequency with which to run the task.",
|
65
|
+
default: "minute",
|
66
|
+
equal_to: %w{minute hourly daily monthly once on_logon onstart on_idle}
|
67
|
+
|
68
|
+
property :frequency_modifier, [Integer, String],
|
69
|
+
coerce: proc { |x| Integer(x) },
|
70
|
+
callbacks: { "should be a positive number" => proc { |v| v > 0 } },
|
71
|
+
description: "Numeric value to go with the scheduled task frequency",
|
72
|
+
default: 30
|
73
|
+
|
74
|
+
property :accept_chef_license, [true, false],
|
75
|
+
description: "Accept the Chef Online Master License and Services Agreement. See <https://www.chef.io/online-master-agreement/>",
|
76
|
+
default: false
|
77
|
+
|
78
|
+
property :start_date, String,
|
79
|
+
description: "The start date for the task in m:d:Y format (ex: 12/17/2020).",
|
80
|
+
regex: [%r{^[0-1][0-9]\/[0-3][0-9]\/\d{4}$}]
|
81
|
+
|
82
|
+
property :start_time, String,
|
83
|
+
description: "The start time for the task in HH:mm format (ex: 14:00). If the frequency is minute default start time will be Time.now plus the frequency_modifier number of minutes.",
|
84
|
+
regex: [/^\d{2}:\d{2}$/]
|
85
|
+
|
86
|
+
property :splay, [Integer, String],
|
87
|
+
coerce: proc { |x| Integer(x) },
|
88
|
+
callbacks: { "should be a positive number" => proc { |v| v > 0 } },
|
89
|
+
description: "A random number of seconds between 0 and X to add to interval so that all #{Chef::Dist::CLIENT} commands don't execute at the same time.",
|
90
|
+
default: 300
|
91
|
+
|
92
|
+
property :run_on_battery, [true, false],
|
93
|
+
description: "Run the #{Chef::Dist::PRODUCT} task when the system is on batteries.",
|
94
|
+
default: true
|
95
|
+
|
96
|
+
property :config_directory, String,
|
97
|
+
description: "The path of the config directory.",
|
98
|
+
default: Chef::Dist::CONF_DIR
|
99
|
+
|
100
|
+
property :log_directory, String,
|
101
|
+
description: "The path of the directory to create the log file in.",
|
102
|
+
default: lazy { |r| "#{r.config_directory}/log" },
|
103
|
+
default_description: "CONFIG_DIRECTORY/log"
|
104
|
+
|
105
|
+
property :log_file_name, String,
|
106
|
+
description: "The name of the log file to use.",
|
107
|
+
default: "client.log"
|
108
|
+
|
109
|
+
property :chef_binary_path, String,
|
110
|
+
description: "The path to the #{Chef::Dist::CLIENT} binary.",
|
111
|
+
default: "C:/#{Chef::Dist::LEGACY_CONF_DIR}/#{Chef::Dist::DIR_SUFFIX}/bin/#{Chef::Dist::CLIENT}"
|
112
|
+
|
113
|
+
property :daemon_options, Array,
|
114
|
+
description: "An array of options to pass to the #{Chef::Dist::CLIENT} command.",
|
115
|
+
default: lazy { [] }
|
116
|
+
|
117
|
+
action :add do
|
118
|
+
# TODO: Replace this with a :create_if_missing action on directory when that exists
|
119
|
+
unless Dir.exist?(new_resource.log_directory)
|
120
|
+
directory new_resource.log_directory do
|
121
|
+
inherits true
|
122
|
+
recursive true
|
123
|
+
action :create
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
# According to https://docs.microsoft.com/en-us/windows/desktop/taskschd/schtasks,
|
128
|
+
# the :once, :onstart, :onlogon, and :onidle schedules don't accept schedule modifiers
|
129
|
+
windows_task new_resource.task_name do
|
130
|
+
run_level :highest
|
131
|
+
command full_command
|
132
|
+
user new_resource.user
|
133
|
+
password new_resource.password
|
134
|
+
frequency new_resource.frequency.to_sym
|
135
|
+
frequency_modifier new_resource.frequency_modifier if frequency_supports_frequency_modifier?
|
136
|
+
start_time new_resource.start_time
|
137
|
+
start_day new_resource.start_date unless new_resource.start_date.nil?
|
138
|
+
random_delay new_resource.splay if frequency_supports_random_delay?
|
139
|
+
disallow_start_if_on_batteries new_resource.splay unless new_resource.run_on_battery
|
140
|
+
action %i{create enable}
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
action :remove do
|
145
|
+
windows_task new_resource.task_name do
|
146
|
+
action :delete
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
action_class do
|
151
|
+
#
|
152
|
+
# The full command to run in the scheduled task
|
153
|
+
#
|
154
|
+
# @return [String]
|
155
|
+
#
|
156
|
+
def full_command
|
157
|
+
# Fetch path of cmd.exe through environment variable comspec
|
158
|
+
cmd_path = ENV["COMSPEC"]
|
159
|
+
|
160
|
+
"#{cmd_path} /c \'#{client_cmd}\'"
|
161
|
+
end
|
162
|
+
|
163
|
+
# Build command line to pass to cmd.exe
|
164
|
+
#
|
165
|
+
# @return [String]
|
166
|
+
def client_cmd
|
167
|
+
cmd = new_resource.chef_binary_path.dup
|
168
|
+
cmd << " -L #{::File.join(new_resource.log_directory, new_resource.log_file_name)}"
|
169
|
+
cmd << " -c #{::File.join(new_resource.config_directory, "client.rb")}"
|
170
|
+
|
171
|
+
# Add custom options
|
172
|
+
cmd << " #{new_resource.daemon_options.join(" ")}" if new_resource.daemon_options.any?
|
173
|
+
cmd << " --chef-license accept" if new_resource.accept_chef_license
|
174
|
+
cmd
|
175
|
+
end
|
176
|
+
|
177
|
+
#
|
178
|
+
# not all frequencies in the windows_task resource support random_delay
|
179
|
+
#
|
180
|
+
# @return [boolean]
|
181
|
+
#
|
182
|
+
def frequency_supports_random_delay?
|
183
|
+
%w{once minute hourly daily weekly monthly}.include?(new_resource.frequency)
|
184
|
+
end
|
185
|
+
|
186
|
+
#
|
187
|
+
# not all frequencies in the windows_task resource support frequency_modifier
|
188
|
+
#
|
189
|
+
# @return [boolean]
|
190
|
+
#
|
191
|
+
def frequency_supports_frequency_modifier?
|
192
|
+
# these are the only ones that don't
|
193
|
+
!%w{once on_logon onstart on_idle}.include?(new_resource.frequency)
|
194
|
+
end
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
@@ -0,0 +1,177 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: Copyright (c) Chef Software Inc.
|
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
|
+
|
17
|
+
require_relative "../resource"
|
18
|
+
require_relative "../dist"
|
19
|
+
|
20
|
+
class Chef
|
21
|
+
class Resource
|
22
|
+
class ChefClientSystemdTimer < Chef::Resource
|
23
|
+
unified_mode true
|
24
|
+
|
25
|
+
provides :chef_client_systemd_timer
|
26
|
+
|
27
|
+
description "Use the chef_client_systemd_timer resource to setup the #{Chef::Dist::PRODUCT} to run as a systemd timer."
|
28
|
+
introduced "16.0"
|
29
|
+
examples <<~DOC
|
30
|
+
Setup #{Chef::Dist::PRODUCT} to run using the default 30 minute cadence
|
31
|
+
```ruby
|
32
|
+
chef_client_systemd_timer "Run chef-client as a systemd timer"
|
33
|
+
```
|
34
|
+
|
35
|
+
Run #{Chef::Dist::PRODUCT} every 1 hour
|
36
|
+
```ruby
|
37
|
+
chef_client_systemd_timer "Run chef-client every 1 hour" do
|
38
|
+
interval "1hr"
|
39
|
+
end
|
40
|
+
```
|
41
|
+
|
42
|
+
Run #{Chef::Dist::PRODUCT} with extra options passed to the client
|
43
|
+
```ruby
|
44
|
+
chef_client_systemd_timer "Run an override recipe" do
|
45
|
+
daemon_options ["--override-runlist mycorp_base::default"]
|
46
|
+
end
|
47
|
+
```
|
48
|
+
DOC
|
49
|
+
|
50
|
+
property :job_name, String,
|
51
|
+
description: "The name of the system timer to create.",
|
52
|
+
default: Chef::Dist::CLIENT
|
53
|
+
|
54
|
+
property :description, String,
|
55
|
+
description: "The description to add to the systemd timer. This will be displayed when running `systemctl status` for the timer.",
|
56
|
+
default: "#{Chef::Dist::PRODUCT} periodic execution"
|
57
|
+
|
58
|
+
property :user, String,
|
59
|
+
description: "The name of the user that #{Chef::Dist::PRODUCT} runs as.",
|
60
|
+
default: "root"
|
61
|
+
|
62
|
+
property :delay_after_boot, String,
|
63
|
+
description: "The time to wait after booting before the interval starts. This is expressed as a systemd time span such as `300seconds`, `1hr`, or `1m`. See <https://www.freedesktop.org/software/systemd/man/systemd.time.html> for a complete list of allowed time span values.",
|
64
|
+
default: "1min"
|
65
|
+
|
66
|
+
property :interval, String,
|
67
|
+
description: "The interval to wait between executions. This is expressed as a systemd time span such as `300seconds`, `1hr`, or `1m`. See <https://www.freedesktop.org/software/systemd/man/systemd.time.html> for a complete list of allowed time span values.",
|
68
|
+
default: "30min"
|
69
|
+
|
70
|
+
property :splay, String,
|
71
|
+
description: "A interval between 0 and X to add to the interval so that all #{Chef::Dist::CLIENT} commands don't execute at the same time. This is expressed as a systemd time span such as `300seconds`, `1hr`, or `1m`. See <https://www.freedesktop.org/software/systemd/man/systemd.time.html> for a complete list of allowed time span values.",
|
72
|
+
default: "5min"
|
73
|
+
|
74
|
+
property :accept_chef_license, [true, false],
|
75
|
+
description: "Accept the Chef Online Master License and Services Agreement. See <https://www.chef.io/online-master-agreement/>",
|
76
|
+
default: false
|
77
|
+
|
78
|
+
property :run_on_battery, [true, false],
|
79
|
+
description: "Run the timer for #{Chef::Dist::PRODUCT} if the system is on battery.",
|
80
|
+
default: true
|
81
|
+
|
82
|
+
property :config_directory, String,
|
83
|
+
description: "The path of the config directory.",
|
84
|
+
default: Chef::Dist::CONF_DIR
|
85
|
+
|
86
|
+
property :chef_binary_path, String,
|
87
|
+
description: "The path to the #{Chef::Dist::CLIENT} binary.",
|
88
|
+
default: "/opt/#{Chef::Dist::DIR_SUFFIX}/bin/#{Chef::Dist::CLIENT}"
|
89
|
+
|
90
|
+
property :daemon_options, Array,
|
91
|
+
description: "An array of options to pass to the #{Chef::Dist::CLIENT} command.",
|
92
|
+
default: lazy { [] }
|
93
|
+
|
94
|
+
property :environment, Hash,
|
95
|
+
description: "A Hash containing additional arbitrary environment variables under which the systemd timer will be run in the form of ``({'ENV_VARIABLE' => 'VALUE'})``.",
|
96
|
+
default: lazy { {} }
|
97
|
+
|
98
|
+
action :add do
|
99
|
+
systemd_unit "#{new_resource.job_name}.service" do
|
100
|
+
content service_content
|
101
|
+
action :create
|
102
|
+
end
|
103
|
+
|
104
|
+
systemd_unit "#{new_resource.job_name}.timer" do
|
105
|
+
content timer_content
|
106
|
+
action %i{create enable start}
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
action :remove do
|
111
|
+
systemd_unit "#{new_resource.job_name}.service" do
|
112
|
+
action :remove
|
113
|
+
end
|
114
|
+
|
115
|
+
systemd_unit "#{new_resource.job_name}.timer" do
|
116
|
+
action :remove
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
action_class do
|
121
|
+
#
|
122
|
+
# The chef-client command to run in the systemd unit.
|
123
|
+
#
|
124
|
+
# @return [String]
|
125
|
+
#
|
126
|
+
def chef_client_cmd
|
127
|
+
cmd = "#{new_resource.chef_binary_path}"
|
128
|
+
cmd << " #{new_resource.daemon_options.join(" ")}" unless new_resource.daemon_options.empty?
|
129
|
+
cmd << " --chef-license accept" if new_resource.accept_chef_license
|
130
|
+
cmd << " -c #{::File.join(new_resource.config_directory, "client.rb")}"
|
131
|
+
cmd
|
132
|
+
end
|
133
|
+
|
134
|
+
#
|
135
|
+
# The timer content to pass to the systemd_unit
|
136
|
+
#
|
137
|
+
# @return [Hash]
|
138
|
+
#
|
139
|
+
def timer_content
|
140
|
+
{
|
141
|
+
"Unit" => { "Description" => new_resource.description },
|
142
|
+
"Timer" => {
|
143
|
+
"OnBootSec" => new_resource.delay_after_boot,
|
144
|
+
"OnUnitActiveSec" => new_resource.interval,
|
145
|
+
"RandomizedDelaySec" => new_resource.splay,
|
146
|
+
},
|
147
|
+
"Install" => { "WantedBy" => "timers.target" },
|
148
|
+
}
|
149
|
+
end
|
150
|
+
|
151
|
+
#
|
152
|
+
# The service content to pass to the systemd_unit
|
153
|
+
#
|
154
|
+
# @return [Hash]
|
155
|
+
#
|
156
|
+
def service_content
|
157
|
+
unit = {
|
158
|
+
"Unit" => {
|
159
|
+
"Description" => new_resource.description,
|
160
|
+
"After" => "network.target auditd.service",
|
161
|
+
},
|
162
|
+
"Service" => {
|
163
|
+
"Type" => "oneshot",
|
164
|
+
"ExecStart" => chef_client_cmd,
|
165
|
+
"SuccessExitStatus" => [3, 213, 35, 37, 41],
|
166
|
+
},
|
167
|
+
"Install" => { "WantedBy" => "multi-user.target" },
|
168
|
+
}
|
169
|
+
|
170
|
+
unit["Service"]["ConditionACPower"] = "true" unless new_resource.run_on_battery
|
171
|
+
unit["Service"]["Environment"] = new_resource.environment.collect { |k, v| "\"#{k}=#{v}\"" } unless new_resource.environment.empty?
|
172
|
+
unit
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
177
|
+
end
|
@@ -35,28 +35,21 @@ class Chef
|
|
35
35
|
# - Runs Gem.clear_paths after the action, ensuring that gem is aware of changes so that it can be required
|
36
36
|
# immediately after it is installed
|
37
37
|
class ChefGem < Chef::Resource::Package::GemPackage
|
38
|
-
|
38
|
+
unified_mode true
|
39
|
+
provides :chef_gem
|
40
|
+
|
41
|
+
property :package_name, String,
|
42
|
+
description: "An optional property to set the package name if it differs from the resource block's name.",
|
43
|
+
identity: true
|
44
|
+
|
45
|
+
property :version, String,
|
46
|
+
description: "The version of a package to be installed or upgraded."
|
39
47
|
|
40
48
|
property :gem_binary, default: "#{RbConfig::CONFIG["bindir"]}/gem", default_description: "Chef's built-in gem binary.",
|
41
49
|
description: "The path of a gem binary to use for the installation. By default, the same version of Ruby that is used by the #{Chef::Dist::CLIENT} will be installed.",
|
42
50
|
callbacks: {
|
43
51
|
"The chef_gem resource is restricted to the current gem environment, use gem_package to install to other environments." => proc { |v| v == "#{RbConfig::CONFIG["bindir"]}/gem" },
|
44
52
|
}
|
45
|
-
property :compile_time, [TrueClass, FalseClass],
|
46
|
-
description: "Controls the phase during which a gem is installed on a node. Set to 'true' to install a gem while the resource collection is being built (the 'compile phase'). Set to 'false' to install a gem while the #{Chef::Dist::CLIENT} is configuring the node (the 'converge phase').",
|
47
|
-
default: false, desired_state: false
|
48
|
-
|
49
|
-
# force the resource to compile time if the compile time property has been set
|
50
|
-
#
|
51
|
-
# @return [void]
|
52
|
-
def after_created
|
53
|
-
if compile_time
|
54
|
-
Array(action).each do |action|
|
55
|
-
run_action(action)
|
56
|
-
end
|
57
|
-
Gem.clear_paths
|
58
|
-
end
|
59
|
-
end
|
60
53
|
end
|
61
54
|
end
|
62
55
|
end
|
@@ -21,7 +21,8 @@ require_relative "../dist"
|
|
21
21
|
class Chef
|
22
22
|
class Resource
|
23
23
|
class ChefHandler < Chef::Resource
|
24
|
-
|
24
|
+
unified_mode true
|
25
|
+
|
25
26
|
provides(:chef_handler) { true }
|
26
27
|
|
27
28
|
description "Use the chef_handler resource to install or uninstall reporting/exception handlers."
|
@@ -0,0 +1,135 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Joshua Timberman <joshua@chef.io>
|
3
|
+
# Copyright:: Copyright (c) Chef Software Inc.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
|
18
|
+
require_relative "../resource"
|
19
|
+
require "chef-vault"
|
20
|
+
|
21
|
+
class Chef
|
22
|
+
class Resource
|
23
|
+
class ChefVaultSecret < Chef::Resource
|
24
|
+
unified_mode true
|
25
|
+
|
26
|
+
provides :chef_vault_secret
|
27
|
+
|
28
|
+
introduced "16.0"
|
29
|
+
description "Use the chef_vault_secret resource to store secrets in Chef Vault items. Where possible and relevant, this resource attempts to map behavior and functionality to the knife vault sub-commands."
|
30
|
+
examples <<~DOC
|
31
|
+
To create a 'foo' item in an existing 'bar' data bag:
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
chef_vault_secret 'foo' do
|
35
|
+
data_bag 'bar'
|
36
|
+
raw_data({'auth' => 'baz'})
|
37
|
+
admins 'jtimberman'
|
38
|
+
search '*:*'
|
39
|
+
end
|
40
|
+
```
|
41
|
+
|
42
|
+
To allow multiple admins access to an item:
|
43
|
+
|
44
|
+
```ruby
|
45
|
+
chef_vault_secret 'root-password' do
|
46
|
+
admins 'jtimberman,paulmooring'
|
47
|
+
data_bag 'secrets'
|
48
|
+
raw_data({'auth' => 'DontUseThisPasswordForRoot'})
|
49
|
+
search '*:*'
|
50
|
+
end
|
51
|
+
```
|
52
|
+
DOC
|
53
|
+
|
54
|
+
property :id, String, name_property: true,
|
55
|
+
description: "The name of the data bag item if it differs from the name of the resource block"
|
56
|
+
|
57
|
+
property :data_bag, String, required: true, desired_state: false,
|
58
|
+
description: "The data bag that contains the item."
|
59
|
+
|
60
|
+
property :admins, [String, Array], required: true, desired_state: false,
|
61
|
+
description: "A list of admin users who should have access to the item. Corresponds to the 'admin' option when using the chef-vault knife plugin. Can be specified as a comma separated string or an array."
|
62
|
+
|
63
|
+
property :clients, [String, Array], desired_state: false,
|
64
|
+
description: "A search query for the nodes' API clients that should have access to the item."
|
65
|
+
|
66
|
+
property :search, String, default: "*:*", desired_state: false,
|
67
|
+
description: "Search query that would match the same used for the clients, gets stored as a field in the item."
|
68
|
+
|
69
|
+
property :raw_data, [Hash, Mash], default: {},
|
70
|
+
description: "The raw data, as a Ruby Hash, that will be stored in the item."
|
71
|
+
|
72
|
+
property :environment, [String, NilClass], desired_state: false,
|
73
|
+
description: "The Chef environment of the data if storing per environment values."
|
74
|
+
|
75
|
+
load_current_value do
|
76
|
+
begin
|
77
|
+
item = ChefVault::Item.load(data_bag, id)
|
78
|
+
raw_data item.raw_data
|
79
|
+
clients item.get_clients
|
80
|
+
admins item.get_admins
|
81
|
+
search item.search
|
82
|
+
rescue ChefVault::Exceptions::SecretDecryption
|
83
|
+
current_value_does_not_exist!
|
84
|
+
rescue ChefVault::Exceptions::KeysNotFound
|
85
|
+
current_value_does_not_exist!
|
86
|
+
rescue Net::HTTPClientException => e
|
87
|
+
current_value_does_not_exist! if e.response_code == "404"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
action :create do
|
92
|
+
description "Creates the item, or updates it if it already exists."
|
93
|
+
|
94
|
+
converge_if_changed do
|
95
|
+
item = ChefVault::Item.new(new_resource.data_bag, new_resource.id)
|
96
|
+
|
97
|
+
Chef::Log.debug("#{new_resource.id} environment: '#{new_resource.environment}'")
|
98
|
+
item.raw_data = if new_resource.environment.nil?
|
99
|
+
new_resource.raw_data.merge("id" => new_resource.id)
|
100
|
+
else
|
101
|
+
{ "id" => new_resource.id, new_resource.environment => new_resource.raw_data }
|
102
|
+
end
|
103
|
+
|
104
|
+
Chef::Log.debug("#{new_resource.id} search query: '#{new_resource.search}'")
|
105
|
+
item.search(new_resource.search)
|
106
|
+
Chef::Log.debug("#{new_resource.id} clients: '#{new_resource.clients}'")
|
107
|
+
item.clients([new_resource.clients].flatten.join(",")) unless new_resource.clients.nil?
|
108
|
+
Chef::Log.debug("#{new_resource.id} admins (users): '#{new_resource.admins}'")
|
109
|
+
item.admins([new_resource.admins].flatten.join(","))
|
110
|
+
item.save
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
action :create_if_missing do
|
115
|
+
description "Calls the create action unless it exists."
|
116
|
+
|
117
|
+
action_create if current_resource.nil?
|
118
|
+
end
|
119
|
+
|
120
|
+
action :delete do
|
121
|
+
description "Deletes the item and the item's keys ('id'_keys)."
|
122
|
+
|
123
|
+
chef_data_bag_item new_resource.id do
|
124
|
+
data_bag new_resource.data_bag
|
125
|
+
action :delete
|
126
|
+
end
|
127
|
+
|
128
|
+
chef_data_bag_item [new_resource.id, "keys"].join("_") do
|
129
|
+
data_bag new_resource.data_bag
|
130
|
+
action :delete
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|