chef 15.11.3-universal-mingw32 → 16.1.16-universal-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +3 -7
- data/README.md +1 -1
- data/Rakefile +44 -16
- data/chef.gemspec +6 -4
- 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/application.rb +33 -54
- data/lib/chef/application/apply.rb +18 -1
- data/lib/chef/application/base.rb +8 -3
- data/lib/chef/application/knife.rb +1 -1
- data/lib/chef/chef_class.rb +4 -4
- data/lib/chef/chef_fs/file_system/chef_server/acls_dir.rb +1 -1
- data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.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/repository/chef_repository_file_system_root_dir.rb +3 -3
- data/lib/chef/chef_fs/file_system/repository/directory.rb +1 -1
- data/lib/chef/chef_fs/parallelizer/parallel_enumerable.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_loader.rb +1 -1
- data/lib/chef/cookbook_manifest.rb +1 -1
- data/lib/chef/cookbook_site_streaming_uploader.rb +1 -1
- data/lib/chef/cookbook_version.rb +38 -3
- data/lib/chef/data_collector.rb +1 -1
- data/lib/chef/data_collector/error_handlers.rb +1 -1
- data/lib/chef/data_collector/run_end_message.rb +7 -1
- data/lib/chef/decorator/lazy_array.rb +2 -2
- data/lib/chef/deprecated.rb +4 -0
- data/lib/chef/digester.rb +4 -4
- 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 +3 -2
- data/lib/chef/dsl/recipe.rb +7 -12
- data/lib/chef/dsl/universal.rb +3 -7
- data/lib/chef/encrypted_data_bag_item/decryptor.rb +1 -1
- data/lib/chef/encrypted_data_bag_item/encryptor.rb +1 -1
- data/lib/chef/event_dispatch/base.rb +3 -0
- data/lib/chef/formatters/base.rb +1 -1
- data/lib/chef/formatters/doc.rb +1 -1
- data/lib/chef/formatters/indentable_output_stream.rb +7 -16
- data/lib/chef/http.rb +1 -1
- data/lib/chef/http/decompressor.rb +1 -1
- data/lib/chef/http/http_request.rb +3 -2
- data/lib/chef/json_compat.rb +1 -1
- data/lib/chef/key.rb +1 -1
- data/lib/chef/knife.rb +2 -4
- 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 +84 -90
- data/lib/chef/knife/bootstrap/chef_vault_handler.rb +2 -2
- data/lib/chef/knife/bootstrap/client_builder.rb +2 -2
- data/lib/chef/knife/bootstrap/templates/chef-full.erb +11 -11
- data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +12 -12
- data/lib/chef/knife/core/bootstrap_context.rb +63 -60
- data/lib/chef/knife/core/generic_presenter.rb +4 -3
- data/lib/chef/knife/core/hashed_command_loader.rb +1 -1
- 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 +44 -42
- data/lib/chef/knife/data_bag_secret_options.rb +18 -45
- 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/key_create_base.rb +1 -1
- data/lib/chef/knife/key_edit_base.rb +1 -1
- data/lib/chef/knife/ssh.rb +12 -31
- data/lib/chef/knife/status.rb +3 -3
- data/lib/chef/knife/supermarket_download.rb +1 -2
- data/lib/chef/knife/supermarket_install.rb +2 -3
- 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_rescind.rb +63 -0
- data/lib/chef/knife/yaml_convert.rb +91 -0
- data/lib/chef/mixin/api_version_request_handling.rb +1 -1
- data/lib/chef/mixin/checksum.rb +0 -1
- data/lib/chef/mixin/openssl_helper.rb +4 -4
- data/lib/chef/mixin/powershell_exec.rb +10 -1
- data/lib/chef/mixin/powershell_out.rb +1 -1
- data/lib/chef/mixin/properties.rb +16 -2
- data/lib/chef/mixin/shell_out.rb +1 -5
- data/lib/chef/monkey_patches/net_http.rb +0 -4
- data/lib/chef/node.rb +18 -6
- data/lib/chef/node/attribute.rb +2 -2
- data/lib/chef/node/immutable_collections.rb +1 -1
- 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 +5 -31
- data/lib/chef/platform/priority_map.rb +4 -4
- data/lib/chef/platform/query_helpers.rb +6 -34
- data/lib/chef/policy_builder/policyfile.rb +1 -1
- data/lib/chef/powershell.rb +14 -0
- data/lib/chef/property.rb +24 -6
- data/lib/chef/provider.rb +40 -6
- data/lib/chef/provider/cron.rb +2 -2
- data/lib/chef/provider/directory.rb +3 -3
- data/lib/chef/provider/dsc_resource.rb +1 -1
- data/lib/chef/provider/dsc_script.rb +1 -1
- data/lib/chef/provider/execute.rb +3 -9
- data/lib/chef/provider/file.rb +6 -6
- 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 +45 -64
- data/lib/chef/provider/link.rb +2 -2
- data/lib/chef/provider/mount.rb +5 -5
- data/lib/chef/provider/osx_profile.rb +7 -3
- data/lib/chef/provider/package.rb +2 -2
- data/lib/chef/provider/package/cab.rb +5 -6
- 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 +85 -26
- 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/dpkg.rb +1 -1
- data/lib/chef/provider/package/freebsd/base.rb +2 -1
- data/lib/chef/provider/package/homebrew.rb +107 -43
- data/lib/chef/provider/package/macports.rb +0 -2
- data/lib/chef/provider/package/msu.rb +4 -1
- data/lib/chef/provider/package/pacman.rb +25 -34
- data/lib/chef/provider/package/portage.rb +1 -0
- data/lib/chef/provider/package/powershell.rb +1 -1
- data/lib/chef/provider/package/rubygems.rb +30 -3
- data/lib/chef/provider/package/windows.rb +29 -53
- data/lib/chef/provider/package/windows/msi.rb +2 -2
- data/lib/chef/provider/package/yum.rb +1 -9
- data/lib/chef/provider/package/yum/yum_cache.rb +1 -1
- data/lib/chef/provider/package/zypper.rb +0 -1
- data/lib/chef/provider/powershell_script.rb +5 -11
- data/lib/chef/provider/registry_key.rb +4 -4
- data/lib/chef/provider/remote_directory.rb +5 -5
- 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 +1 -1
- data/lib/chef/provider/service/debian.rb +30 -28
- data/lib/chef/provider/service/macosx.rb +16 -10
- 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/aix.rb +1 -1
- data/lib/chef/provider/user/dscl.rb +6 -6
- data/lib/chef/provider/user/mac.rb +20 -15
- 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 +10 -10
- data/lib/chef/providers.rb +0 -6
- data/lib/chef/recipe.rb +36 -0
- data/lib/chef/resource.rb +44 -57
- data/lib/chef/resource/action_class.rb +24 -22
- data/lib/chef/resource/alternatives.rb +210 -0
- data/lib/chef/resource/apt_package.rb +33 -3
- data/lib/chef/resource/apt_preference.rb +103 -7
- data/lib/chef/resource/apt_repository.rb +357 -18
- data/lib/chef/resource/apt_update.rb +58 -5
- data/lib/chef/resource/archive_file.rb +6 -5
- data/lib/chef/resource/bash.rb +3 -1
- data/lib/chef/resource/batch.rb +1 -1
- data/lib/chef/resource/bff_package.rb +10 -2
- data/lib/chef/resource/breakpoint.rb +1 -2
- data/lib/chef/resource/build_essential.rb +49 -51
- data/lib/chef/resource/cab_package.rb +9 -2
- data/lib/chef/resource/chef_client_cron.rb +228 -0
- data/lib/chef/resource/chef_client_scheduled_task.rb +201 -0
- data/lib/chef/resource/chef_client_systemd_timer.rb +180 -0
- data/lib/chef/resource/chef_gem.rb +15 -18
- data/lib/chef/resource/chef_handler.rb +5 -4
- data/lib/chef/resource/chef_sleep.rb +7 -5
- data/lib/chef/resource/chef_vault_secret.rb +135 -0
- data/lib/chef/resource/chocolatey_config.rb +8 -4
- data/lib/chef/resource/chocolatey_feature.rb +7 -4
- data/lib/chef/resource/chocolatey_package.rb +7 -4
- data/lib/chef/resource/chocolatey_source.rb +7 -4
- data/lib/chef/resource/cookbook_file.rb +4 -3
- data/lib/chef/resource/cron.rb +34 -80
- data/lib/chef/resource/cron_access.rb +10 -6
- data/lib/chef/resource/cron_d.rb +44 -95
- data/lib/chef/resource/csh.rb +3 -1
- data/lib/chef/resource/directory.rb +3 -3
- data/lib/chef/resource/dmg_package.rb +22 -19
- data/lib/chef/resource/dnf_package.rb +3 -4
- data/lib/chef/resource/dpkg_package.rb +3 -2
- data/lib/chef/resource/dsc_resource.rb +6 -4
- data/lib/chef/resource/dsc_script.rb +3 -2
- data/lib/chef/resource/execute.rb +15 -14
- data/lib/chef/resource/file.rb +14 -9
- data/lib/chef/resource/freebsd_package.rb +3 -2
- data/lib/chef/resource/gem_package.rb +19 -11
- data/lib/chef/resource/group.rb +5 -2
- data/lib/chef/resource/helpers/cron_validations.rb +98 -0
- data/lib/chef/resource/homebrew_cask.rb +3 -2
- data/lib/chef/resource/homebrew_package.rb +5 -3
- data/lib/chef/resource/homebrew_tap.rb +3 -2
- data/lib/chef/resource/hostname.rb +26 -20
- data/lib/chef/resource/http_request.rb +1 -2
- data/lib/chef/resource/ifconfig.rb +8 -8
- data/lib/chef/resource/ips_package.rb +11 -3
- data/lib/chef/resource/kernel_module.rb +30 -30
- data/lib/chef/resource/ksh.rb +3 -1
- data/lib/chef/resource/launchd.rb +3 -3
- data/lib/chef/resource/link.rb +5 -27
- data/lib/chef/resource/locale.rb +60 -26
- data/lib/chef/resource/log.rb +13 -2
- data/lib/chef/resource/lwrp_base.rb +1 -1
- data/lib/chef/resource/macos_userdefaults.rb +18 -10
- data/lib/chef/resource/macosx_service.rb +3 -2
- data/lib/chef/resource/macports_package.rb +10 -2
- data/lib/chef/resource/mdadm.rb +63 -3
- data/lib/chef/resource/mount.rb +4 -1
- data/lib/chef/resource/msu_package.rb +19 -2
- data/lib/chef/resource/notify_group.rb +8 -3
- data/lib/chef/resource/ohai.rb +20 -4
- data/lib/chef/resource/ohai_hint.rb +4 -13
- data/lib/chef/resource/openbsd_package.rb +10 -2
- data/lib/chef/resource/openssl_dhparam.rb +11 -2
- data/lib/chef/resource/openssl_ec_private_key.rb +24 -2
- data/lib/chef/resource/openssl_ec_public_key.rb +22 -2
- data/lib/chef/resource/openssl_rsa_private_key.rb +21 -2
- data/lib/chef/resource/openssl_rsa_public_key.rb +23 -2
- data/lib/chef/resource/openssl_x509_certificate.rb +38 -2
- data/lib/chef/resource/openssl_x509_crl.rb +13 -2
- data/lib/chef/resource/openssl_x509_request.rb +38 -2
- data/lib/chef/resource/osx_profile.rb +4 -3
- data/lib/chef/resource/package.rb +3 -2
- data/lib/chef/resource/pacman_package.rb +3 -2
- data/lib/chef/resource/paludis_package.rb +13 -4
- data/lib/chef/resource/perl.rb +3 -1
- data/lib/chef/resource/plist.rb +207 -0
- data/lib/chef/resource/portage_package.rb +14 -4
- data/lib/chef/resource/powershell_package.rb +2 -4
- data/lib/chef/resource/powershell_package_source.rb +4 -2
- data/lib/chef/resource/powershell_script.rb +8 -18
- data/lib/chef/resource/python.rb +3 -1
- data/lib/chef/resource/reboot.rb +1 -2
- data/lib/chef/resource/registry_key.rb +2 -3
- data/lib/chef/resource/remote_directory.rb +3 -1
- data/lib/chef/resource/remote_file.rb +3 -2
- data/lib/chef/resource/rhsm_errata.rb +1 -4
- data/lib/chef/resource/rhsm_errata_level.rb +1 -2
- data/lib/chef/resource/rhsm_register.rb +3 -3
- data/lib/chef/resource/rhsm_repo.rb +4 -3
- data/lib/chef/resource/rhsm_subscription.rb +5 -4
- data/lib/chef/resource/route.rb +6 -2
- data/lib/chef/resource/rpm_package.rb +13 -3
- data/lib/chef/resource/ruby.rb +3 -1
- data/lib/chef/resource/ruby_block.rb +2 -5
- data/lib/chef/resource/scm/_scm.rb +49 -0
- data/lib/chef/resource/{scm.rb → scm/git.rb} +16 -30
- data/lib/chef/resource/{subversion.rb → scm/subversion.rb} +10 -7
- data/lib/chef/resource/script.rb +7 -4
- data/lib/chef/resource/service.rb +7 -8
- data/lib/chef/resource/smartos_package.rb +10 -2
- data/lib/chef/resource/snap_package.rb +4 -2
- data/lib/chef/resource/solaris_package.rb +10 -2
- data/lib/chef/resource/ssh_known_hosts_entry.rb +6 -3
- data/lib/chef/resource/sudo.rb +11 -11
- 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 +7 -5
- data/lib/chef/resource/sysctl.rb +63 -4
- data/lib/chef/resource/systemd_unit.rb +6 -4
- data/lib/chef/resource/template.rb +0 -1
- data/lib/chef/resource/timezone.rb +8 -19
- data/lib/chef/resource/user.rb +3 -5
- 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 +116 -0
- data/lib/chef/resource/whyrun_safe_ruby_block.rb +1 -0
- data/lib/chef/resource/windows_ad_join.rb +20 -7
- data/lib/chef/resource/windows_auto_run.rb +2 -3
- data/lib/chef/resource/windows_certificate.rb +3 -3
- data/lib/chef/resource/windows_dfs_folder.rb +1 -2
- data/lib/chef/resource/windows_dfs_namespace.rb +1 -2
- data/lib/chef/resource/windows_dfs_server.rb +2 -3
- 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 +12 -4
- data/lib/chef/resource/windows_feature.rb +59 -4
- data/lib/chef/resource/windows_feature_dism.rb +24 -24
- data/lib/chef/resource/windows_feature_powershell.rb +44 -78
- data/lib/chef/resource/windows_firewall_rule.rb +121 -8
- data/lib/chef/resource/windows_font.rb +10 -2
- data/lib/chef/resource/windows_package.rb +76 -7
- data/lib/chef/resource/windows_pagefile.rb +31 -4
- data/lib/chef/resource/windows_path.rb +18 -2
- data/lib/chef/resource/windows_printer.rb +26 -7
- data/lib/chef/resource/windows_printer_port.rb +29 -2
- data/lib/chef/resource/windows_script.rb +3 -4
- data/lib/chef/resource/windows_security_policy.rb +119 -0
- data/lib/chef/resource/windows_service.rb +46 -32
- data/lib/chef/resource/windows_share.rb +22 -6
- data/lib/chef/resource/windows_shortcut.rb +13 -3
- data/lib/chef/resource/windows_task.rb +129 -16
- data/lib/chef/resource/windows_uac.rb +20 -2
- data/lib/chef/resource/windows_user_privilege.rb +199 -0
- data/lib/chef/resource/windows_workgroup.rb +19 -4
- data/lib/chef/resource/yum_package.rb +91 -7
- data/lib/chef/resource/yum_repository.rb +30 -12
- data/lib/chef/resource/zypper_package.rb +32 -5
- data/lib/chef/resource/zypper_repository.rb +19 -6
- data/lib/chef/resource_builder.rb +8 -0
- data/lib/chef/resource_inspector.rb +3 -2
- data/lib/chef/resource_resolver.rb +7 -14
- data/lib/chef/resources.rb +11 -3
- data/lib/chef/run_context/cookbook_compiler.rb +29 -5
- data/lib/chef/scan_access_control.rb +1 -1
- data/lib/chef/shell.rb +22 -0
- data/lib/chef/shell/ext.rb +1 -1
- data/lib/chef/version.rb +1 -1
- data/lib/chef/win32/api.rb +2 -2
- data/lib/chef/win32/api/error.rb +3 -1
- data/lib/chef/win32/api/file.rb +1 -1
- data/lib/chef/win32/api/net.rb +1 -0
- data/lib/chef/win32/api/security.rb +6 -0
- data/lib/chef/win32/file.rb +1 -9
- data/lib/chef/win32/mutex.rb +1 -1
- data/lib/chef/win32/net.rb +1 -0
- data/lib/chef/win32/security.rb +40 -2
- data/lib/chef/win32/security/sid.rb +4 -4
- data/spec/functional/assets/inittest +8 -7
- data/spec/functional/knife/ssh_spec.rb +23 -19
- data/spec/functional/resource/cron_spec.rb +10 -29
- data/spec/functional/resource/dnf_package_spec.rb +441 -156
- data/spec/functional/resource/git_spec.rb +184 -134
- data/spec/functional/resource/insserv_spec.rb +1 -1
- data/spec/functional/resource/launchd_spec.rb +232 -0
- data/spec/functional/resource/link_spec.rb +3 -3
- data/spec/functional/resource/locale_spec.rb +13 -2
- data/spec/functional/resource/msu_package_spec.rb +5 -2
- data/spec/functional/resource/powershell_script_spec.rb +7 -68
- data/spec/functional/resource/remote_file_spec.rb +1 -1
- data/spec/functional/resource/windows_security_policy_spec.rb +90 -0
- data/spec/functional/resource/windows_task_spec.rb +4 -4
- data/spec/functional/resource/windows_user_privilege_spec.rb +193 -0
- data/spec/functional/run_lock_spec.rb +1 -1
- data/spec/functional/shell_spec.rb +1 -1
- 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/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 +34 -6
- data/spec/integration/knife/redirection_spec.rb +2 -2
- data/spec/integration/knife/show_spec.rb +32 -3
- data/spec/integration/recipes/lwrp_inline_resources_spec.rb +3 -3
- data/spec/integration/recipes/noop_resource_spec.rb +1 -1
- data/spec/integration/recipes/notifies_spec.rb +49 -20
- data/spec/integration/recipes/notifying_block_spec.rb +8 -5
- data/spec/integration/recipes/provider_choice.rb +2 -0
- data/spec/integration/recipes/recipe_dsl_spec.rb +45 -143
- data/spec/integration/recipes/resource_action_spec.rb +16 -11
- data/spec/integration/recipes/resource_converge_if_changed_spec.rb +1 -1
- data/spec/integration/recipes/resource_load_spec.rb +133 -12
- data/spec/integration/recipes/use_partial_spec.rb +112 -0
- data/spec/integration/solo/solo_spec.rb +3 -3
- data/spec/spec_helper.rb +18 -3
- 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 +2 -20
- data/spec/support/recipe_dsl_helper.rb +83 -0
- data/spec/support/shared/functional/http.rb +2 -2
- data/spec/support/shared/functional/windows_script.rb +3 -16
- data/spec/support/shared/integration/knife_support.rb +9 -6
- data/spec/support/shared/unit/mock_shellout.rb +1 -1
- data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +4 -4
- 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 -2
- data/spec/unit/client_spec.rb +7 -5
- data/spec/unit/cookbook/gem_installer_spec.rb +2 -2
- data/spec/unit/cookbook/metadata_spec.rb +38 -19
- data/spec/unit/data_collector_spec.rb +39 -18
- data/spec/unit/file_access_control_spec.rb +1 -1
- data/spec/unit/json_compat_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 +20 -38
- data/spec/unit/knife/cookbook_show_spec.rb +1 -0
- data/spec/unit/knife/core/bootstrap_context_spec.rb +23 -43
- data/spec/unit/knife/core/ui_spec.rb +16 -0
- data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +9 -63
- data/spec/unit/knife/data_bag_secret_options_spec.rb +22 -14
- data/spec/unit/knife/ssh_spec.rb +8 -111
- data/spec/unit/knife/status_spec.rb +1 -1
- data/spec/unit/knife_spec.rb +18 -0
- data/spec/unit/mixin/openssl_helper_spec.rb +4 -4
- data/spec/unit/mixin/powershell_exec_spec.rb +10 -0
- data/spec/unit/mixin/shell_out_spec.rb +25 -31
- data/spec/unit/node/attribute_spec.rb +3 -3
- 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 +12 -9
- data/spec/unit/provider/apt_preference_spec.rb +14 -10
- data/spec/unit/provider/apt_repository_spec.rb +34 -36
- 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 +41 -1
- data/spec/unit/provider/group/groupadd_spec.rb +1 -1
- data/spec/unit/provider/launchd_spec.rb +8 -50
- 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/package/dnf/python_helper_spec.rb +1 -1
- data/spec/unit/provider/package/homebrew_spec.rb +280 -174
- data/spec/unit/provider/package/pacman_spec.rb +65 -147
- data/spec/unit/provider/package/portage_spec.rb +2 -2
- data/spec/unit/provider/package/powershell_spec.rb +3 -2
- data/spec/unit/provider/package/rubygems_spec.rb +211 -26
- data/spec/unit/provider/package/windows/exe_spec.rb +1 -1
- 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/debian_service_spec.rb +34 -13
- data/spec/unit/provider/service/macosx_spec.rb +210 -214
- data/spec/unit/provider/service/systemd_service_spec.rb +23 -23
- data/spec/unit/provider/subversion_spec.rb +4 -2
- data/spec/unit/provider/template_spec.rb +3 -4
- data/spec/unit/provider/zypper_repository_spec.rb +17 -17
- data/spec/unit/provider_resolver_spec.rb +4 -4
- 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/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/msu_package_spec.rb +4 -0
- 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_feature_dism_spec.rb +2 -17
- data/spec/unit/resource/windows_feature_powershell_spec.rb +2 -17
- data/spec/unit/resource/windows_firewall_rule_spec.rb +88 -41
- data/spec/unit/resource/windows_package_spec.rb +14 -0
- data/spec/unit/resource/windows_service_spec.rb +9 -0
- data/spec/unit/resource_reporter_spec.rb +2 -6
- data/spec/unit/resource_spec.rb +10 -3
- data/spec/unit/run_lock_spec.rb +1 -1
- data/spec/unit/scan_access_control_spec.rb +1 -1
- data/spec/unit/search/query_spec.rb +1 -1
- data/spec/unit/win32/registry_spec.rb +1 -1
- data/tasks/rspec.rb +6 -14
- metadata +92 -37
- 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/unit/provider/ohai_spec.rb +0 -84
@@ -21,13 +21,15 @@ 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
|
-
description "Use the apt_update resource to manage APT repository updates on Debian and Ubuntu platforms."
|
28
|
+
description "Use the **apt_update** resource to manage APT repository updates on Debian and Ubuntu platforms."
|
28
29
|
introduced "12.7"
|
29
30
|
examples <<~DOC
|
30
|
-
Update the Apt repository at a specified interval
|
31
|
+
**Update the Apt repository at a specified interval**:
|
32
|
+
|
31
33
|
```ruby
|
32
34
|
apt_update 'all platforms' do
|
33
35
|
frequency 86400
|
@@ -35,7 +37,8 @@ class Chef
|
|
35
37
|
end
|
36
38
|
```
|
37
39
|
|
38
|
-
Update the Apt repository at the start of a Chef Infra Client run
|
40
|
+
**Update the Apt repository at the start of a Chef Infra Client run**:
|
41
|
+
|
39
42
|
```ruby
|
40
43
|
apt_update 'update'
|
41
44
|
```
|
@@ -45,11 +48,61 @@ class Chef
|
|
45
48
|
property :name, String, default: ""
|
46
49
|
|
47
50
|
property :frequency, Integer,
|
48
|
-
description: "Determines how frequently (in seconds) APT repository updates are made. Use this property when the
|
51
|
+
description: "Determines how frequently (in seconds) APT repository updates are made. Use this property when the `:periodic` action is specified.",
|
49
52
|
default: 86_400
|
50
53
|
|
51
54
|
default_action :periodic
|
52
55
|
allowed_actions :update, :periodic
|
56
|
+
|
57
|
+
action_class do
|
58
|
+
APT_CONF_DIR = "/etc/apt/apt.conf.d".freeze
|
59
|
+
STAMP_DIR = "/var/lib/apt/periodic".freeze
|
60
|
+
|
61
|
+
# Determines whether we need to run `apt-get update`
|
62
|
+
#
|
63
|
+
# @return [Boolean]
|
64
|
+
def apt_up_to_date?
|
65
|
+
::File.exist?("#{STAMP_DIR}/update-success-stamp") &&
|
66
|
+
::File.mtime("#{STAMP_DIR}/update-success-stamp") > Time.now - new_resource.frequency
|
67
|
+
end
|
68
|
+
|
69
|
+
def do_update
|
70
|
+
[STAMP_DIR, APT_CONF_DIR].each do |d|
|
71
|
+
directory d do
|
72
|
+
recursive true
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
file "#{APT_CONF_DIR}/15update-stamp" do
|
77
|
+
content "APT::Update::Post-Invoke-Success {\"touch #{STAMP_DIR}/update-success-stamp 2>/dev/null || true\";};\n"
|
78
|
+
action :create_if_missing
|
79
|
+
end
|
80
|
+
|
81
|
+
execute "apt-get -q update" do
|
82
|
+
command [ "apt-get", "-q", "update" ]
|
83
|
+
default_env true
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
action :periodic do
|
89
|
+
return unless debian?
|
90
|
+
|
91
|
+
unless apt_up_to_date?
|
92
|
+
converge_by "update new lists of packages" do
|
93
|
+
do_update
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
action :update do
|
99
|
+
return unless debian?
|
100
|
+
|
101
|
+
converge_by "force update new lists of packages" do
|
102
|
+
do_update
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
53
106
|
end
|
54
107
|
end
|
55
108
|
end
|
@@ -23,15 +23,16 @@ require_relative "../resource"
|
|
23
23
|
class Chef
|
24
24
|
class Resource
|
25
25
|
class ArchiveFile < Chef::Resource
|
26
|
+
unified_mode true
|
26
27
|
|
27
|
-
resource_name :archive_file
|
28
28
|
provides :archive_file
|
29
29
|
provides :libarchive_file # legacy cookbook name
|
30
30
|
|
31
31
|
introduced "15.0"
|
32
|
-
description "Use the archive_file resource to extract archive files to disk. This resource uses the libarchive library to extract multiple archive formats including tar, gzip, bzip, and zip formats."
|
32
|
+
description "Use the **archive_file** resource to extract archive files to disk. This resource uses the libarchive library to extract multiple archive formats including tar, gzip, bzip, and zip formats."
|
33
33
|
examples <<~DOC
|
34
|
-
Extract a zip file to a specified directory
|
34
|
+
**Extract a zip file to a specified directory**:
|
35
|
+
|
35
36
|
```ruby
|
36
37
|
archive_file 'Precompiled.zip' do
|
37
38
|
path '/tmp/Precompiled.zip'
|
@@ -60,11 +61,11 @@ class Chef
|
|
60
61
|
required: true
|
61
62
|
|
62
63
|
property :options, [Array, Symbol],
|
63
|
-
description: "An array of symbols representing extraction flags. Example:
|
64
|
+
description: "An array of symbols representing extraction flags. Example: `:no_overwrite` to prevent overwriting files on disk. By default, this properly sets `:time` which preserves the modification timestamps of files in the archive when writing them to disk.",
|
64
65
|
default: lazy { [:time] }
|
65
66
|
|
66
67
|
property :overwrite, [TrueClass, FalseClass, :auto],
|
67
|
-
description: "Should the resource overwrite the destination file contents if they already exist? If set to
|
68
|
+
description: "Should the resource overwrite the destination file contents if they already exist? If set to `:auto` the date stamp of files within the archive will be compared to those on disk and disk contents will be overwritten if they differ. This may cause unintended consequences if disk date stamps are changed between runs, which will result in the files being overwritten during each client run. Make sure to properly test any change to this property.",
|
68
69
|
default: false
|
69
70
|
|
70
71
|
# backwards compatibility for the legacy cookbook names
|
data/lib/chef/resource/bash.rb
CHANGED
@@ -24,7 +24,9 @@ class Chef
|
|
24
24
|
class Bash < Chef::Resource::Script
|
25
25
|
unified_mode true
|
26
26
|
|
27
|
-
|
27
|
+
provides :bash
|
28
|
+
|
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)
|
30
32
|
super
|
data/lib/chef/resource/batch.rb
CHANGED
@@ -25,7 +25,7 @@ class Chef
|
|
25
25
|
|
26
26
|
provides :batch
|
27
27
|
|
28
|
-
description "Use the batch resource to execute a batch script using the cmd.exe interpreter on Windows. The batch resource creates and executes a temporary file (similar to how the script resource behaves), rather than running the command inline. 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
|
+
description "Use the **batch** resource to execute a batch script using the cmd.exe interpreter on Windows. The batch resource creates and executes a temporary file (similar to how the script resource behaves), rather than running the command inline. 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."
|
29
29
|
|
30
30
|
def initialize(name, run_context = nil)
|
31
31
|
super(name, run_context, nil, "cmd.exe")
|
@@ -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
|
-
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
|
+
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,9 +25,8 @@ class Chef
|
|
25
25
|
unified_mode true
|
26
26
|
|
27
27
|
provides :breakpoint, target_mode: true
|
28
|
-
resource_name :breakpoint
|
29
28
|
|
30
|
-
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."
|
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"
|
32
31
|
|
33
32
|
default_action :break
|
@@ -20,34 +20,42 @@ 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
|
-
description "Use the build_essential resource to install the packages required for compiling C software from source."
|
27
|
+
description "Use the **build_essential** resource to install the packages required for compiling C software from source."
|
27
28
|
introduced "14.0"
|
28
29
|
examples <<~DOC
|
29
|
-
Install compilation packages
|
30
|
+
**Install compilation packages**:
|
31
|
+
|
30
32
|
```ruby
|
31
33
|
build_essential
|
32
34
|
```
|
33
35
|
|
34
|
-
Install compilation packages during the compilation phase
|
36
|
+
**Install compilation packages during the compilation phase**:
|
37
|
+
|
35
38
|
```ruby
|
36
39
|
build_essential 'Install compilation tools' do
|
37
40
|
compile_time true
|
38
41
|
end
|
39
42
|
```
|
43
|
+
|
44
|
+
**Upgrade compilation packages on macOS systems**:
|
45
|
+
|
46
|
+
```ruby
|
47
|
+
build_essential 'Install compilation tools' do
|
48
|
+
action :upgrade
|
49
|
+
end
|
50
|
+
```
|
40
51
|
DOC
|
41
52
|
|
42
53
|
# this allows us to use build_essential without setting a name
|
43
54
|
property :name, String, default: ""
|
44
55
|
|
45
|
-
property :compile_time, [TrueClass, FalseClass],
|
46
|
-
description: "Install the build essential packages at compile time.",
|
47
|
-
default: false, desired_state: false
|
48
|
-
|
49
56
|
property :raise_if_unsupported, [TrueClass, FalseClass],
|
50
57
|
description: "Raise a hard error on platforms where this resource is unsupported.",
|
58
|
+
introduced: "15.5",
|
51
59
|
default: false, desired_state: false # FIXME: make this default to true
|
52
60
|
|
53
61
|
action :install do
|
@@ -57,11 +65,8 @@ class Chef
|
|
57
65
|
case
|
58
66
|
when debian?
|
59
67
|
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
|
68
|
+
when fedora_derived?
|
69
|
+
package %w{ autoconf bison flex gcc gcc-c++ gettext kernel-devel make m4 ncurses-devel patch }
|
65
70
|
when freebsd?
|
66
71
|
package "devel/gmake"
|
67
72
|
package "devel/autoconf"
|
@@ -88,11 +93,7 @@ class Chef
|
|
88
93
|
package "bison"
|
89
94
|
package "gnu-coreutils"
|
90
95
|
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"
|
96
|
+
package "gcc"
|
96
97
|
package "gnu-grep"
|
97
98
|
package "gnu-make"
|
98
99
|
package "gnu-patch"
|
@@ -109,22 +110,33 @@ class Chef
|
|
109
110
|
package "pkg-config"
|
110
111
|
when suse?
|
111
112
|
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
113
|
else
|
114
|
-
|
115
|
-
raise <<-EOH
|
114
|
+
msg = <<-EOH
|
116
115
|
The build_essential resource does not currently support the '#{node["platform_family"]}'
|
117
116
|
platform family. Skipping...
|
118
|
-
|
117
|
+
EOH
|
118
|
+
if new_resource.raise_if_unsupported
|
119
|
+
raise msg
|
119
120
|
else
|
120
|
-
Chef::Log.warn
|
121
|
-
The build_essential resource does not currently support the '#{node["platform_family"]}'
|
122
|
-
platform family. Skipping...
|
123
|
-
EOH
|
121
|
+
Chef::Log.warn msg
|
124
122
|
end
|
125
123
|
end
|
126
124
|
end
|
127
125
|
|
126
|
+
action :upgrade do
|
127
|
+
description "Upgrade build essential (Xcode Command Line) tools on macOS"
|
128
|
+
|
129
|
+
if macos?
|
130
|
+
pkg_label = xcode_cli_package_label
|
131
|
+
|
132
|
+
# With upgrade action we should install if it's not installed or if there's an available update.
|
133
|
+
# `xcode_cli_package_label` will be nil if there's no update.
|
134
|
+
install_xcode_cli_tools(pkg_label) if !xcode_cli_installed? || xcode_cli_package_label
|
135
|
+
else
|
136
|
+
Chef::Log.info "The build_essential resource :upgrade action is only supported on macOS systems. Skipping..."
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
128
140
|
action_class do
|
129
141
|
#
|
130
142
|
# Install Xcode Command Line tools via softwareupdate CLI
|
@@ -134,19 +146,16 @@ class Chef
|
|
134
146
|
def install_xcode_cli_tools(label)
|
135
147
|
# This script was graciously borrowed and modified from Tim Sutton's
|
136
148
|
# 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
|
149
|
+
execute "install Xcode Command Line tools" do
|
150
|
+
command <<-EOH
|
151
|
+
# create the placeholder file that's checked by CLI updates' .dist code
|
152
|
+
# in Apple's SUS catalog
|
153
|
+
touch /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
|
154
|
+
# install it
|
155
|
+
softwareupdate -i "#{label}" --verbose
|
156
|
+
# Remove the placeholder to prevent perpetual appearance in the update utility
|
157
|
+
rm -f /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
|
158
|
+
EOH
|
150
159
|
end
|
151
160
|
end
|
152
161
|
|
@@ -156,7 +165,7 @@ class Chef
|
|
156
165
|
#
|
157
166
|
# @return [true, false]
|
158
167
|
def xcode_cli_installed?
|
159
|
-
packages = Plist.parse_xml(::File.open("/Library/Receipts/InstallHistory.plist", "r"))
|
168
|
+
packages = ::Plist.parse_xml(::File.open("/Library/Receipts/InstallHistory.plist", "r"))
|
160
169
|
packages.select! { |package| package["displayName"].match? "Command Line Tools" }
|
161
170
|
!packages.empty?
|
162
171
|
end
|
@@ -176,17 +185,6 @@ class Chef
|
|
176
185
|
available_updates.stdout[/^\s*\* (?:Label: )?(Command Line Tools.*)/, 1]
|
177
186
|
end
|
178
187
|
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
188
|
end
|
191
189
|
end
|
192
190
|
end
|
@@ -23,15 +23,22 @@ 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
|
-
description "Use the cab_package resource to install or remove Microsoft Windows cabinet (.cab) packages."
|
30
|
+
description "Use the **cab_package** resource to install or remove Microsoft Windows cabinet (.cab) packages."
|
31
31
|
introduced "12.15"
|
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,228 @@
|
|
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
|
+
|
34
|
+
```ruby
|
35
|
+
chef_client_cron "Run #{Chef::Dist::PRODUCT} as a cron job"
|
36
|
+
```
|
37
|
+
|
38
|
+
**Run #{Chef::Dist::PRODUCT} twice a day**:
|
39
|
+
|
40
|
+
```ruby
|
41
|
+
chef_client_cron "Run #{Chef::Dist::PRODUCT} every 12 hours" do
|
42
|
+
minute 0
|
43
|
+
hour "0,12"
|
44
|
+
end
|
45
|
+
```
|
46
|
+
|
47
|
+
**Run #{Chef::Dist::PRODUCT} with extra options passed to the client**:
|
48
|
+
|
49
|
+
```ruby
|
50
|
+
chef_client_cron "Run an override recipe" do
|
51
|
+
daemon_options ["--override-runlist mycorp_base::default"]
|
52
|
+
end
|
53
|
+
```
|
54
|
+
DOC
|
55
|
+
|
56
|
+
extend Chef::ResourceHelpers::CronValidations
|
57
|
+
|
58
|
+
property :job_name, String,
|
59
|
+
default: Chef::Dist::CLIENT,
|
60
|
+
description: "The name of the cron job to create."
|
61
|
+
|
62
|
+
property :comment, String,
|
63
|
+
description: "A comment to place in the cron.d file."
|
64
|
+
|
65
|
+
property :user, String,
|
66
|
+
description: "The name of the user that #{Chef::Dist::PRODUCT} runs as.",
|
67
|
+
default: "root"
|
68
|
+
|
69
|
+
property :minute, [Integer, String],
|
70
|
+
description: "The minute at which #{Chef::Dist::PRODUCT} is to run (0 - 59) or a cron pattern such as '0,30'.",
|
71
|
+
default: "0,30", callbacks: {
|
72
|
+
"should be a valid minute spec" => method(:validate_minute),
|
73
|
+
}
|
74
|
+
|
75
|
+
property :hour, [Integer, String],
|
76
|
+
description: "The hour at which #{Chef::Dist::PRODUCT} is to run (0 - 23) or a cron pattern such as '0,12'.",
|
77
|
+
default: "*", callbacks: {
|
78
|
+
"should be a valid hour spec" => method(:validate_hour),
|
79
|
+
}
|
80
|
+
|
81
|
+
property :day, [Integer, String],
|
82
|
+
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'.",
|
83
|
+
default: "*", callbacks: {
|
84
|
+
"should be a valid day spec" => method(:validate_day),
|
85
|
+
}
|
86
|
+
|
87
|
+
property :month, [Integer, String],
|
88
|
+
description: "The month in the year on which #{Chef::Dist::PRODUCT} is to run (1 - 12, jan-dec, or *).",
|
89
|
+
default: "*", callbacks: {
|
90
|
+
"should be a valid month spec" => method(:validate_month),
|
91
|
+
}
|
92
|
+
|
93
|
+
property :weekday, [Integer, String],
|
94
|
+
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.",
|
95
|
+
default: "*", callbacks: {
|
96
|
+
"should be a valid weekday spec" => method(:validate_dow),
|
97
|
+
}
|
98
|
+
|
99
|
+
property :splay, [Integer, String],
|
100
|
+
default: 300,
|
101
|
+
coerce: proc { |x| Integer(x) },
|
102
|
+
callbacks: { "should be a positive number" => proc { |v| v > 0 } },
|
103
|
+
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."
|
104
|
+
|
105
|
+
property :mailto, String,
|
106
|
+
description: "The e-mail address to e-mail any cron task failures to."
|
107
|
+
|
108
|
+
property :accept_chef_license, [true, false],
|
109
|
+
description: "Accept the Chef Online Master License and Services Agreement. See <https://www.chef.io/online-master-agreement/>",
|
110
|
+
default: false
|
111
|
+
|
112
|
+
property :config_directory, String,
|
113
|
+
default: Chef::Dist::CONF_DIR,
|
114
|
+
description: "The path of the config directory."
|
115
|
+
|
116
|
+
property :log_directory, String,
|
117
|
+
default: lazy { platform?("mac_os_x") ? "/Library/Logs/#{Chef::Dist::DIR_SUFFIX.capitalize}" : "/var/log/#{Chef::Dist::DIR_SUFFIX}" },
|
118
|
+
default_description: "/Library/Logs/#{Chef::Dist::DIR_SUFFIX.capitalize} on macOS and /var/log/#{Chef::Dist::DIR_SUFFIX} otherwise",
|
119
|
+
description: "The path of the directory to create the log file in."
|
120
|
+
|
121
|
+
property :log_file_name, String,
|
122
|
+
default: "client.log",
|
123
|
+
description: "The name of the log file to use."
|
124
|
+
|
125
|
+
property :append_log_file, [true, false],
|
126
|
+
default: true,
|
127
|
+
description: "Append to the log file instead of overwriting the log file on each run."
|
128
|
+
|
129
|
+
property :chef_binary_path, String,
|
130
|
+
default: "/opt/#{Chef::Dist::DIR_SUFFIX}/bin/#{Chef::Dist::CLIENT}",
|
131
|
+
description: "The path to the #{Chef::Dist::CLIENT} binary."
|
132
|
+
|
133
|
+
property :daemon_options, Array,
|
134
|
+
default: lazy { [] },
|
135
|
+
description: "An array of options to pass to the #{Chef::Dist::CLIENT} command."
|
136
|
+
|
137
|
+
property :environment, Hash,
|
138
|
+
default: lazy { {} },
|
139
|
+
description: "A Hash containing additional arbitrary environment variables under which the cron job will be run in the form of `({'ENV_VARIABLE' => 'VALUE'})`."
|
140
|
+
|
141
|
+
action :add do
|
142
|
+
# TODO: Replace this with a :create_if_missing action on directory when that exists
|
143
|
+
unless ::Dir.exist?(new_resource.log_directory)
|
144
|
+
directory new_resource.log_directory do
|
145
|
+
owner new_resource.user
|
146
|
+
mode "0750"
|
147
|
+
recursive true
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
declare_resource(cron_resource_type, new_resource.job_name) do
|
152
|
+
minute new_resource.minute
|
153
|
+
hour new_resource.hour
|
154
|
+
day new_resource.day
|
155
|
+
weekday new_resource.weekday
|
156
|
+
month new_resource.month
|
157
|
+
environment new_resource.environment
|
158
|
+
mailto new_resource.mailto if new_resource.mailto
|
159
|
+
user new_resource.user
|
160
|
+
comment new_resource.comment if new_resource.comment
|
161
|
+
command cron_command
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
action :remove do
|
166
|
+
declare_resource(cron_resource_type, new_resource.job_name) do
|
167
|
+
action :delete
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
action_class do
|
172
|
+
#
|
173
|
+
# Generate a uniformly distributed unique number to sleep from 0 to the splay time
|
174
|
+
#
|
175
|
+
# @param [Integer] splay The number of seconds to splay
|
176
|
+
#
|
177
|
+
# @return [Integer]
|
178
|
+
#
|
179
|
+
def splay_sleep_time(splay)
|
180
|
+
seed = node["shard_seed"] || Digest::MD5.hexdigest(node.name).to_s.hex
|
181
|
+
random = Random.new(seed.to_i)
|
182
|
+
random.rand(splay)
|
183
|
+
end
|
184
|
+
|
185
|
+
#
|
186
|
+
# The complete cron command to run
|
187
|
+
#
|
188
|
+
# @return [String]
|
189
|
+
#
|
190
|
+
def cron_command
|
191
|
+
cmd = ""
|
192
|
+
cmd << "/bin/sleep #{splay_sleep_time(new_resource.splay)}; "
|
193
|
+
cmd << "#{new_resource.chef_binary_path} "
|
194
|
+
cmd << "#{new_resource.daemon_options.join(" ")} " unless new_resource.daemon_options.empty?
|
195
|
+
cmd << "-c #{::File.join(new_resource.config_directory, "client.rb")} "
|
196
|
+
cmd << "--chef-license accept " if new_resource.accept_chef_license
|
197
|
+
cmd << log_command
|
198
|
+
cmd << " || echo \"#{Chef::Dist::PRODUCT} execution failed\"" if new_resource.mailto
|
199
|
+
cmd
|
200
|
+
end
|
201
|
+
|
202
|
+
#
|
203
|
+
# The portion of the overall cron job that handles logging based on the append_log_file property
|
204
|
+
#
|
205
|
+
# @return [String]
|
206
|
+
#
|
207
|
+
def log_command
|
208
|
+
if new_resource.append_log_file
|
209
|
+
"-L #{::File.join(new_resource.log_directory, new_resource.log_file_name)}"
|
210
|
+
else
|
211
|
+
"> #{::File.join(new_resource.log_directory, new_resource.log_file_name)} 2>&1"
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
#
|
216
|
+
# The type of cron resource to run. Linux systems all support the /etc/cron.d directory
|
217
|
+
# and can use the cron_d resource, but Solaris / AIX / FreeBSD need to use the crontab
|
218
|
+
# via the legacy cron resource.
|
219
|
+
#
|
220
|
+
# @return [Symbol]
|
221
|
+
#
|
222
|
+
def cron_resource_type
|
223
|
+
linux? ? :cron_d : :cron
|
224
|
+
end
|
225
|
+
end
|
226
|
+
end
|
227
|
+
end
|
228
|
+
end
|