chef 15.17.4 → 16.0.257
Sign up to get free protection for your applications and to get access to all the features.
- 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/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 +110 -75
- 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
@@ -21,7 +21,8 @@ require_relative "../resource"
|
|
21
21
|
class Chef
|
22
22
|
class Resource
|
23
23
|
class AptUpdate < Chef::Resource
|
24
|
-
|
24
|
+
unified_mode true
|
25
|
+
|
25
26
|
provides(:apt_update) { true }
|
26
27
|
|
27
28
|
description "Use the apt_update resource to manage APT repository updates on Debian and Ubuntu platforms."
|
@@ -50,6 +51,56 @@ class Chef
|
|
50
51
|
|
51
52
|
default_action :periodic
|
52
53
|
allowed_actions :update, :periodic
|
54
|
+
|
55
|
+
action_class do
|
56
|
+
APT_CONF_DIR = "/etc/apt/apt.conf.d".freeze
|
57
|
+
STAMP_DIR = "/var/lib/apt/periodic".freeze
|
58
|
+
|
59
|
+
# Determines whether we need to run `apt-get update`
|
60
|
+
#
|
61
|
+
# @return [Boolean]
|
62
|
+
def apt_up_to_date?
|
63
|
+
::File.exist?("#{STAMP_DIR}/update-success-stamp") &&
|
64
|
+
::File.mtime("#{STAMP_DIR}/update-success-stamp") > Time.now - new_resource.frequency
|
65
|
+
end
|
66
|
+
|
67
|
+
def do_update
|
68
|
+
[STAMP_DIR, APT_CONF_DIR].each do |d|
|
69
|
+
directory d do
|
70
|
+
recursive true
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
file "#{APT_CONF_DIR}/15update-stamp" do
|
75
|
+
content "APT::Update::Post-Invoke-Success {\"touch #{STAMP_DIR}/update-success-stamp 2>/dev/null || true\";};\n"
|
76
|
+
action :create_if_missing
|
77
|
+
end
|
78
|
+
|
79
|
+
execute "apt-get -q update" do
|
80
|
+
command [ "apt-get", "-q", "update" ]
|
81
|
+
default_env true
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
action :periodic do
|
87
|
+
return unless debian?
|
88
|
+
|
89
|
+
unless apt_up_to_date?
|
90
|
+
converge_by "update new lists of packages" do
|
91
|
+
do_update
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
action :update do
|
97
|
+
return unless debian?
|
98
|
+
|
99
|
+
converge_by "force update new lists of packages" do
|
100
|
+
do_update
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
53
104
|
end
|
54
105
|
end
|
55
106
|
end
|
@@ -19,13 +19,12 @@
|
|
19
19
|
#
|
20
20
|
|
21
21
|
require_relative "../resource"
|
22
|
-
require "fileutils" unless defined?(FileUtils)
|
23
22
|
|
24
23
|
class Chef
|
25
24
|
class Resource
|
26
25
|
class ArchiveFile < Chef::Resource
|
26
|
+
unified_mode true
|
27
27
|
|
28
|
-
resource_name :archive_file
|
29
28
|
provides :archive_file
|
30
29
|
provides :libarchive_file # legacy cookbook name
|
31
30
|
|
@@ -39,18 +38,6 @@ class Chef
|
|
39
38
|
destination '/srv/files'
|
40
39
|
end
|
41
40
|
```
|
42
|
-
|
43
|
-
**Set specific permissions on the extracted files**:
|
44
|
-
|
45
|
-
```ruby
|
46
|
-
archive_file 'Precompiled.zip' do
|
47
|
-
owner 'tsmith'
|
48
|
-
group 'staff'
|
49
|
-
mode '700'
|
50
|
-
path '/tmp/Precompiled.zip'
|
51
|
-
destination '/srv/files'
|
52
|
-
end
|
53
|
-
```
|
54
41
|
DOC
|
55
42
|
|
56
43
|
property :path, String,
|
@@ -65,7 +52,7 @@ class Chef
|
|
65
52
|
description: "The group of the extracted files."
|
66
53
|
|
67
54
|
property :mode, [String, Integer],
|
68
|
-
description: "The mode of the extracted files.
|
55
|
+
description: "The mode of the extracted files.",
|
69
56
|
default: "755"
|
70
57
|
|
71
58
|
property :destination, String,
|
@@ -84,11 +71,11 @@ class Chef
|
|
84
71
|
alias_method :extract_options, :options
|
85
72
|
alias_method :extract_to, :destination
|
86
73
|
|
74
|
+
require "fileutils" unless defined?(FileUtils)
|
75
|
+
|
87
76
|
action :extract do
|
88
77
|
description "Extract and archive file."
|
89
78
|
|
90
|
-
require_libarchive
|
91
|
-
|
92
79
|
unless ::File.exist?(new_resource.path)
|
93
80
|
raise Errno::ENOENT, "No archive found at #{new_resource.path}! Cannot continue."
|
94
81
|
end
|
@@ -97,8 +84,7 @@ class Chef
|
|
97
84
|
Chef::Log.trace("File or directory does not exist at destination path: #{new_resource.destination}")
|
98
85
|
|
99
86
|
converge_by("create directory #{new_resource.destination}") do
|
100
|
-
|
101
|
-
FileUtils.mkdir_p(new_resource.destination, mode: new_resource.mode.to_s.to_i(8))
|
87
|
+
FileUtils.mkdir_p(new_resource.destination, mode: new_resource.mode.to_i)
|
102
88
|
end
|
103
89
|
|
104
90
|
extract(new_resource.path, new_resource.destination, Array(new_resource.options))
|
@@ -126,16 +112,6 @@ class Chef
|
|
126
112
|
end
|
127
113
|
|
128
114
|
action_class do
|
129
|
-
def require_libarchive
|
130
|
-
require "ffi-libarchive"
|
131
|
-
end
|
132
|
-
|
133
|
-
def define_resource_requirements
|
134
|
-
if new_resource.mode.is_a?(Integer)
|
135
|
-
Chef.deprecated(:archive_file_integer_file_mode, "The mode property should be passed to archive_file resources as a String and not an Integer to ensure the value is properly interpreted.")
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
115
|
# This can't be a constant since we might not have required 'ffi-libarchive' yet.
|
140
116
|
def extract_option_map
|
141
117
|
{
|
@@ -159,6 +135,8 @@ class Chef
|
|
159
135
|
#
|
160
136
|
# @return [Boolean]
|
161
137
|
def archive_differs_from_disk?(src, dest)
|
138
|
+
require "ffi-libarchive"
|
139
|
+
|
162
140
|
modified = false
|
163
141
|
Dir.chdir(dest) do
|
164
142
|
archive = Archive::Reader.open_filename(src)
|
@@ -185,6 +163,8 @@ class Chef
|
|
185
163
|
#
|
186
164
|
# @return [void]
|
187
165
|
def extract(src, dest, options = [])
|
166
|
+
require "ffi-libarchive"
|
167
|
+
|
188
168
|
converge_by("extract #{src} to #{dest}") do
|
189
169
|
flags = [options].flatten.map { |option| extract_option_map[option] }.compact.reduce(:|)
|
190
170
|
|
data/lib/chef/resource/bash.rb
CHANGED
@@ -24,6 +24,8 @@ class Chef
|
|
24
24
|
class Bash < Chef::Resource::Script
|
25
25
|
unified_mode true
|
26
26
|
|
27
|
+
provides :bash
|
28
|
+
|
27
29
|
description "Use the bash resource to execute scripts using the Bash interpreter. This resource may also use any of the actions and properties that are available to the execute resource. Commands that are executed with this resource are (by their nature) not idempotent, as they are typically unique to the environment in which they are run. Use not_if and only_if to guard this resource for idempotence."
|
28
30
|
|
29
31
|
def initialize(name, run_context = nil)
|
@@ -21,11 +21,19 @@ require_relative "package"
|
|
21
21
|
class Chef
|
22
22
|
class Resource
|
23
23
|
class BffPackage < Chef::Resource::Package
|
24
|
-
|
24
|
+
unified_mode true
|
25
|
+
|
25
26
|
provides :bff_package
|
26
27
|
|
27
28
|
description "Use the bff_package resource to manage packages for the AIX platform using the installp utility. When a package is installed from a local file, it must be added to the node using the remote_file or cookbook_file resources."
|
28
29
|
introduced "12.0"
|
30
|
+
|
31
|
+
property :package_name, String,
|
32
|
+
description: "An optional property to set the package name if it differs from the resource block's name.",
|
33
|
+
identity: true
|
34
|
+
|
35
|
+
property :version, String,
|
36
|
+
description: "The version of a package to be installed or upgraded."
|
29
37
|
end
|
30
38
|
end
|
31
39
|
end
|
@@ -25,7 +25,6 @@ class Chef
|
|
25
25
|
unified_mode true
|
26
26
|
|
27
27
|
provides :breakpoint, target_mode: true
|
28
|
-
resource_name :breakpoint
|
29
28
|
|
30
29
|
description "Use the breakpoint resource to add breakpoints to recipes. Run the #{Chef::Dist::SHELL} in #{Chef::Dist::PRODUCT} mode, and then use those breakpoints to debug recipes. Breakpoints are ignored by the #{Chef::Dist::CLIENT} during an actual #{Chef::Dist::CLIENT} run. That said, breakpoints are typically used to debug recipes only when running them in a non-production environment, after which they are removed from those recipes before the parent cookbook is uploaded to the Chef server."
|
31
30
|
introduced "12.0"
|
@@ -20,7 +20,8 @@ require "plist"
|
|
20
20
|
class Chef
|
21
21
|
class Resource
|
22
22
|
class BuildEssential < Chef::Resource
|
23
|
-
|
23
|
+
unified_mode true
|
24
|
+
|
24
25
|
provides(:build_essential) { true }
|
25
26
|
|
26
27
|
description "Use the build_essential resource to install the packages required for compiling C software from source."
|
@@ -37,15 +38,18 @@ class Chef
|
|
37
38
|
compile_time true
|
38
39
|
end
|
39
40
|
```
|
41
|
+
|
42
|
+
Upgrade compilation packages on macOS systems
|
43
|
+
```ruby
|
44
|
+
build_essential 'Install compilation tools' do
|
45
|
+
action :upgrade
|
46
|
+
end
|
47
|
+
```
|
40
48
|
DOC
|
41
49
|
|
42
50
|
# this allows us to use build_essential without setting a name
|
43
51
|
property :name, String, default: ""
|
44
52
|
|
45
|
-
property :compile_time, [TrueClass, FalseClass],
|
46
|
-
description: "Install the build essential packages at compile time.",
|
47
|
-
default: false, desired_state: false
|
48
|
-
|
49
53
|
property :raise_if_unsupported, [TrueClass, FalseClass],
|
50
54
|
description: "Raise a hard error on platforms where this resource is unsupported.",
|
51
55
|
default: false, desired_state: false # FIXME: make this default to true
|
@@ -57,11 +61,8 @@ class Chef
|
|
57
61
|
case
|
58
62
|
when debian?
|
59
63
|
package %w{ autoconf binutils-doc bison build-essential flex gettext ncurses-dev }
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
# Ensure GCC 4 is available on older pre-6 EL
|
64
|
-
package %w{ gcc44 gcc44-c++ } if platform_family?("rhel") && node["platform_version"].to_i < 6
|
64
|
+
when fedora_derived?
|
65
|
+
package %w{ autoconf bison flex gcc gcc-c++ gettext kernel-devel make m4 ncurses-devel patch }
|
65
66
|
when freebsd?
|
66
67
|
package "devel/gmake"
|
67
68
|
package "devel/autoconf"
|
@@ -88,11 +89,7 @@ class Chef
|
|
88
89
|
package "bison"
|
89
90
|
package "gnu-coreutils"
|
90
91
|
package "flex"
|
91
|
-
package "gcc"
|
92
|
-
# lock because we don't use 5 yet
|
93
|
-
version "4.8.2"
|
94
|
-
end
|
95
|
-
package "gcc-3"
|
92
|
+
package "gcc"
|
96
93
|
package "gnu-grep"
|
97
94
|
package "gnu-make"
|
98
95
|
package "gnu-patch"
|
@@ -109,22 +106,33 @@ class Chef
|
|
109
106
|
package "pkg-config"
|
110
107
|
when suse?
|
111
108
|
package %w{ autoconf bison flex gcc gcc-c++ kernel-default-devel make m4 }
|
112
|
-
package %w{ gcc48 gcc48-c++ } if node["platform_version"].to_i < 12
|
113
109
|
else
|
114
|
-
|
115
|
-
raise <<-EOH
|
110
|
+
msg = <<-EOH
|
116
111
|
The build_essential resource does not currently support the '#{node["platform_family"]}'
|
117
112
|
platform family. Skipping...
|
118
|
-
|
113
|
+
EOH
|
114
|
+
if new_resource.raise_if_unsupported
|
115
|
+
raise msg
|
119
116
|
else
|
120
|
-
Chef::Log.warn
|
121
|
-
The build_essential resource does not currently support the '#{node["platform_family"]}'
|
122
|
-
platform family. Skipping...
|
123
|
-
EOH
|
117
|
+
Chef::Log.warn msg
|
124
118
|
end
|
125
119
|
end
|
126
120
|
end
|
127
121
|
|
122
|
+
action :upgrade do
|
123
|
+
description "Upgrade build essential (Xcode Command Line) tools on macOS"
|
124
|
+
|
125
|
+
if macos?
|
126
|
+
pkg_label = xcode_cli_package_label
|
127
|
+
|
128
|
+
# With upgrade action we should install if it's not installed or if there's an available update.
|
129
|
+
# `xcode_cli_package_label` will be nil if there's no update.
|
130
|
+
install_xcode_cli_tools(pkg_label) if !xcode_cli_installed? || xcode_cli_package_label
|
131
|
+
else
|
132
|
+
Chef::Log.info "The build_essential resource :upgrade action is only supported on macOS systems. Skipping..."
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
128
136
|
action_class do
|
129
137
|
#
|
130
138
|
# Install Xcode Command Line tools via softwareupdate CLI
|
@@ -134,19 +142,16 @@ class Chef
|
|
134
142
|
def install_xcode_cli_tools(label)
|
135
143
|
# This script was graciously borrowed and modified from Tim Sutton's
|
136
144
|
# osx-vm-templates at https://github.com/timsutton/osx-vm-templates/blob/b001475df54a9808d3d56d06e71b8fa3001fff42/scripts/xcode-cli-tools.sh
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
rm -f /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
|
148
|
-
EOH
|
149
|
-
end
|
145
|
+
execute "install Xcode Command Line tools" do
|
146
|
+
command <<-EOH
|
147
|
+
# create the placeholder file that's checked by CLI updates' .dist code
|
148
|
+
# in Apple's SUS catalog
|
149
|
+
touch /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
|
150
|
+
# install it
|
151
|
+
softwareupdate -i "#{label}" --verbose
|
152
|
+
# Remove the placeholder to prevent perpetual appearance in the update utility
|
153
|
+
rm -f /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
|
154
|
+
EOH
|
150
155
|
end
|
151
156
|
end
|
152
157
|
|
@@ -156,7 +161,7 @@ class Chef
|
|
156
161
|
#
|
157
162
|
# @return [true, false]
|
158
163
|
def xcode_cli_installed?
|
159
|
-
packages = Plist.parse_xml(::File.open("/Library/Receipts/InstallHistory.plist", "r"))
|
164
|
+
packages = ::Plist.parse_xml(::File.open("/Library/Receipts/InstallHistory.plist", "r"))
|
160
165
|
packages.select! { |package| package["displayName"].match? "Command Line Tools" }
|
161
166
|
!packages.empty?
|
162
167
|
end
|
@@ -176,17 +181,6 @@ class Chef
|
|
176
181
|
available_updates.stdout[/^\s*\* (?:Label: )?(Command Line Tools.*)/, 1]
|
177
182
|
end
|
178
183
|
end
|
179
|
-
|
180
|
-
# this resource forces itself to run at compile_time
|
181
|
-
#
|
182
|
-
# @return [void]
|
183
|
-
def after_created
|
184
|
-
return unless compile_time
|
185
|
-
|
186
|
-
Array(action).each do |action|
|
187
|
-
run_action(action)
|
188
|
-
end
|
189
|
-
end
|
190
184
|
end
|
191
185
|
end
|
192
186
|
end
|
@@ -23,8 +23,8 @@ class Chef
|
|
23
23
|
class Resource
|
24
24
|
class CabPackage < Chef::Resource::Package
|
25
25
|
include Chef::Mixin::Uris
|
26
|
+
unified_mode true
|
26
27
|
|
27
|
-
resource_name :cab_package
|
28
28
|
provides :cab_package
|
29
29
|
|
30
30
|
description "Use the cab_package resource to install or remove Microsoft Windows cabinet (.cab) packages."
|
@@ -32,6 +32,13 @@ class Chef
|
|
32
32
|
|
33
33
|
allowed_actions :install, :remove
|
34
34
|
|
35
|
+
property :package_name, String,
|
36
|
+
description: "An optional property to set the package name if it differs from the resource block's name.",
|
37
|
+
identity: true
|
38
|
+
|
39
|
+
property :version, String,
|
40
|
+
description: "The version of a package to be installed or upgraded."
|
41
|
+
|
35
42
|
property :source, String,
|
36
43
|
description: "The local file path or URL for the CAB package.",
|
37
44
|
coerce: (proc do |s|
|
@@ -0,0 +1,225 @@
|
|
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
|
+
require_relative "helpers/cron_validations"
|
20
|
+
require "digest/md5"
|
21
|
+
|
22
|
+
class Chef
|
23
|
+
class Resource
|
24
|
+
class ChefClientCron < Chef::Resource
|
25
|
+
unified_mode true
|
26
|
+
|
27
|
+
provides :chef_client_cron
|
28
|
+
|
29
|
+
description "Use the chef_client_cron resource to setup the #{Chef::Dist::PRODUCT} to run as a cron job. This resource will also create the specified log directory if it doesn't already exist."
|
30
|
+
introduced "16.0"
|
31
|
+
examples <<~DOC
|
32
|
+
Setup #{Chef::Dist::PRODUCT} to run using the default 30 minute cadence
|
33
|
+
```ruby
|
34
|
+
chef_client_cron "Run chef-client as a cron job"
|
35
|
+
```
|
36
|
+
|
37
|
+
Run #{Chef::Dist::PRODUCT} twice a day
|
38
|
+
```ruby
|
39
|
+
chef_client_cron "Run chef-client every 12 hours" do
|
40
|
+
minute 0
|
41
|
+
hour "0,12"
|
42
|
+
end
|
43
|
+
```
|
44
|
+
|
45
|
+
Run #{Chef::Dist::PRODUCT} with extra options passed to the client
|
46
|
+
```ruby
|
47
|
+
chef_client_cron "Run an override recipe" do
|
48
|
+
daemon_options ["--override-runlist mycorp_base::default"]
|
49
|
+
end
|
50
|
+
```
|
51
|
+
DOC
|
52
|
+
|
53
|
+
extend Chef::ResourceHelpers::CronValidations
|
54
|
+
|
55
|
+
property :job_name, String,
|
56
|
+
default: Chef::Dist::CLIENT,
|
57
|
+
description: "The name of the cron job to create."
|
58
|
+
|
59
|
+
property :comment, String,
|
60
|
+
description: "A comment to place in the cron.d file."
|
61
|
+
|
62
|
+
property :user, String,
|
63
|
+
description: "The name of the user that #{Chef::Dist::PRODUCT} runs as.",
|
64
|
+
default: "root"
|
65
|
+
|
66
|
+
property :minute, [Integer, String],
|
67
|
+
description: "The minute at which #{Chef::Dist::PRODUCT} is to run (0 - 59) or a cron pattern such as '0,30'.",
|
68
|
+
default: "0,30", callbacks: {
|
69
|
+
"should be a valid minute spec" => method(:validate_minute),
|
70
|
+
}
|
71
|
+
|
72
|
+
property :hour, [Integer, String],
|
73
|
+
description: "The hour at which #{Chef::Dist::PRODUCT} is to run (0 - 23) or a cron pattern such as '0,12'.",
|
74
|
+
default: "*", callbacks: {
|
75
|
+
"should be a valid hour spec" => method(:validate_hour),
|
76
|
+
}
|
77
|
+
|
78
|
+
property :day, [Integer, String],
|
79
|
+
description: "The day of month at which #{Chef::Dist::PRODUCT} is to run (1 - 31) or a cron pattern such as '1,7,14,21,28'.",
|
80
|
+
default: "*", callbacks: {
|
81
|
+
"should be a valid day spec" => method(:validate_day),
|
82
|
+
}
|
83
|
+
|
84
|
+
property :month, [Integer, String],
|
85
|
+
description: "The month in the year on which #{Chef::Dist::PRODUCT} is to run (1 - 12, jan-dec, or *).",
|
86
|
+
default: "*", callbacks: {
|
87
|
+
"should be a valid month spec" => method(:validate_month),
|
88
|
+
}
|
89
|
+
|
90
|
+
property :weekday, [Integer, String],
|
91
|
+
description: "The day of the week on which #{Chef::Dist::PRODUCT} is to run (0-7, mon-sun, or *), where Sunday is both 0 and 7.",
|
92
|
+
default: "*", callbacks: {
|
93
|
+
"should be a valid weekday spec" => method(:validate_dow),
|
94
|
+
}
|
95
|
+
|
96
|
+
property :splay, [Integer, String],
|
97
|
+
default: 300,
|
98
|
+
coerce: proc { |x| Integer(x) },
|
99
|
+
callbacks: { "should be a positive number" => proc { |v| v > 0 } },
|
100
|
+
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."
|
101
|
+
|
102
|
+
property :mailto, String,
|
103
|
+
description: "The e-mail address to e-mail any cron task failures to."
|
104
|
+
|
105
|
+
property :accept_chef_license, [true, false],
|
106
|
+
description: "Accept the Chef Online Master License and Services Agreement. See <https://www.chef.io/online-master-agreement/>",
|
107
|
+
default: false
|
108
|
+
|
109
|
+
property :config_directory, String,
|
110
|
+
default: Chef::Dist::CONF_DIR,
|
111
|
+
description: "The path of the config directory."
|
112
|
+
|
113
|
+
property :log_directory, String,
|
114
|
+
default: lazy { platform?("mac_os_x") ? "/Library/Logs/#{Chef::Dist::DIR_SUFFIX.capitalize}" : "/var/log/#{Chef::Dist::DIR_SUFFIX}" },
|
115
|
+
default_description: "/Library/Logs/#{Chef::Dist::DIR_SUFFIX.capitalize} on macOS and /var/log/#{Chef::Dist::DIR_SUFFIX} otherwise",
|
116
|
+
description: "The path of the directory to create the log file in."
|
117
|
+
|
118
|
+
property :log_file_name, String,
|
119
|
+
default: "client.log",
|
120
|
+
description: "The name of the log file to use."
|
121
|
+
|
122
|
+
property :append_log_file, [true, false],
|
123
|
+
default: true,
|
124
|
+
description: "Append to the log file instead of overwriting the log file on each run."
|
125
|
+
|
126
|
+
property :chef_binary_path, String,
|
127
|
+
default: "/opt/#{Chef::Dist::DIR_SUFFIX}/bin/#{Chef::Dist::CLIENT}",
|
128
|
+
description: "The path to the #{Chef::Dist::CLIENT} binary."
|
129
|
+
|
130
|
+
property :daemon_options, Array,
|
131
|
+
default: lazy { [] },
|
132
|
+
description: "An array of options to pass to the #{Chef::Dist::CLIENT} command."
|
133
|
+
|
134
|
+
property :environment, Hash,
|
135
|
+
default: lazy { {} },
|
136
|
+
description: "A Hash containing additional arbitrary environment variables under which the cron job will be run in the form of ``({'ENV_VARIABLE' => 'VALUE'})``."
|
137
|
+
|
138
|
+
action :add do
|
139
|
+
# TODO: Replace this with a :create_if_missing action on directory when that exists
|
140
|
+
unless ::Dir.exist?(new_resource.log_directory)
|
141
|
+
directory new_resource.log_directory do
|
142
|
+
owner new_resource.user
|
143
|
+
mode "0640"
|
144
|
+
recursive true
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
declare_resource(cron_resource_type, new_resource.job_name) do
|
149
|
+
minute new_resource.minute
|
150
|
+
hour new_resource.hour
|
151
|
+
day new_resource.day
|
152
|
+
weekday new_resource.weekday
|
153
|
+
month new_resource.month
|
154
|
+
environment new_resource.environment
|
155
|
+
mailto new_resource.mailto if new_resource.mailto
|
156
|
+
user new_resource.user
|
157
|
+
comment new_resource.comment if new_resource.comment
|
158
|
+
command cron_command
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
action :remove do
|
163
|
+
cron_d new_resource.job_name do
|
164
|
+
action :delete
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
action_class do
|
169
|
+
#
|
170
|
+
# Generate a uniformly distributed unique number to sleep from 0 to the splay time
|
171
|
+
#
|
172
|
+
# @param [Integer] splay The number of seconds to splay
|
173
|
+
#
|
174
|
+
# @return [Integer]
|
175
|
+
#
|
176
|
+
def splay_sleep_time(splay)
|
177
|
+
seed = node["shard_seed"] || Digest::MD5.hexdigest(node.name).to_s.hex
|
178
|
+
random = Random.new(seed.to_i)
|
179
|
+
random.rand(splay)
|
180
|
+
end
|
181
|
+
|
182
|
+
#
|
183
|
+
# The complete cron command to run
|
184
|
+
#
|
185
|
+
# @return [String]
|
186
|
+
#
|
187
|
+
def cron_command
|
188
|
+
cmd = ""
|
189
|
+
cmd << "/bin/sleep #{splay_sleep_time(new_resource.splay)}; "
|
190
|
+
cmd << "#{new_resource.chef_binary_path} "
|
191
|
+
cmd << "#{new_resource.daemon_options.join(" ")} " unless new_resource.daemon_options.empty?
|
192
|
+
cmd << "-c #{::File.join(new_resource.config_directory, "client.rb")} "
|
193
|
+
cmd << "--chef-license accept " if new_resource.accept_chef_license
|
194
|
+
cmd << log_command
|
195
|
+
cmd << " || echo \"#{Chef::Dist::PRODUCT} execution failed\"" if new_resource.mailto
|
196
|
+
cmd
|
197
|
+
end
|
198
|
+
|
199
|
+
#
|
200
|
+
# The portion of the overall cron job that handles logging based on the append_log_file property
|
201
|
+
#
|
202
|
+
# @return [String]
|
203
|
+
#
|
204
|
+
def log_command
|
205
|
+
if new_resource.append_log_file
|
206
|
+
"-L #{::File.join(new_resource.log_directory, new_resource.log_file_name)}"
|
207
|
+
else
|
208
|
+
"> #{::File.join(new_resource.log_directory, new_resource.log_file_name)} 2>&1"
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
#
|
213
|
+
# The type of cron resource to run. Linux systems all support the /etc/cron.d directory
|
214
|
+
# and can use the cron_d resource, but Solaris / AIX / FreeBSD need to use the crontab
|
215
|
+
# via the legacy cron resource.
|
216
|
+
#
|
217
|
+
# @return [Symbol]
|
218
|
+
#
|
219
|
+
def cron_resource_type
|
220
|
+
linux? ? :cron_d : :cron
|
221
|
+
end
|
222
|
+
end
|
223
|
+
end
|
224
|
+
end
|
225
|
+
end
|