chef 12.0.3-x86-mingw32 → 12.1.0.rc.0-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +4 -1
- data/README.md +42 -18
- data/distro/common/html/_sources/ctl_chef_client.txt +1 -1
- data/distro/common/html/_sources/ctl_chef_server.txt +53 -35
- data/distro/common/html/_sources/ctl_chef_solo.txt +1 -1
- data/distro/common/html/_sources/knife_bootstrap.txt +1 -1
- data/distro/common/html/_sources/knife_cookbook_site.txt +1 -1
- data/distro/common/html/_sources/knife_data_bag.txt +4 -4
- data/distro/common/html/_sources/knife_status.txt +1 -1
- data/distro/common/html/_static/searchtools.js +1 -1
- data/distro/common/html/ctl_chef_client.html +55 -7
- data/distro/common/html/ctl_chef_server.html +84 -41
- data/distro/common/html/ctl_chef_shell.html +45 -1
- data/distro/common/html/ctl_chef_solo.html +51 -5
- data/distro/common/html/index.html +2 -2
- data/distro/common/html/knife.html +1 -1
- data/distro/common/html/knife_bootstrap.html +30 -10
- data/distro/common/html/knife_cookbook_site.html +2 -0
- data/distro/common/html/knife_data_bag.html +4 -4
- data/distro/common/html/knife_node.html +2 -2
- data/distro/common/html/knife_raw.html +1 -1
- data/distro/common/html/knife_role.html +1 -1
- data/distro/common/html/knife_search.html +3 -3
- data/distro/common/html/knife_status.html +4 -0
- data/distro/common/html/searchindex.js +1 -1
- data/distro/common/man/man1/chef-shell.1 +72 -1
- data/distro/common/man/man1/knife-bootstrap.1 +71 -63
- data/distro/common/man/man1/knife-client.1 +1 -1
- data/distro/common/man/man1/knife-configure.1 +1 -1
- data/distro/common/man/man1/knife-cookbook-site.1 +4 -1
- data/distro/common/man/man1/knife-cookbook.1 +1 -1
- data/distro/common/man/man1/knife-data-bag.1 +5 -5
- data/distro/common/man/man1/knife-delete.1 +1 -1
- data/distro/common/man/man1/knife-deps.1 +1 -1
- data/distro/common/man/man1/knife-diff.1 +1 -1
- data/distro/common/man/man1/knife-download.1 +1 -1
- data/distro/common/man/man1/knife-edit.1 +1 -1
- data/distro/common/man/man1/knife-environment.1 +1 -1
- data/distro/common/man/man1/knife-exec.1 +1 -1
- data/distro/common/man/man1/knife-index-rebuild.1 +1 -1
- data/distro/common/man/man1/knife-list.1 +1 -1
- data/distro/common/man/man1/knife-node.1 +3 -3
- data/distro/common/man/man1/knife-raw.1 +2 -2
- data/distro/common/man/man1/knife-recipe-list.1 +1 -1
- data/distro/common/man/man1/knife-role.1 +2 -2
- data/distro/common/man/man1/knife-search.1 +4 -4
- data/distro/common/man/man1/knife-serve.1 +1 -1
- data/distro/common/man/man1/knife-show.1 +1 -1
- data/distro/common/man/man1/knife-ssh.1 +1 -1
- data/distro/common/man/man1/knife-ssl-check.1 +1 -1
- data/distro/common/man/man1/knife-ssl-fetch.1 +1 -1
- data/distro/common/man/man1/knife-status.1 +1 -1
- data/distro/common/man/man1/knife-tag.1 +1 -1
- data/distro/common/man/man1/knife-upload.1 +1 -1
- data/distro/common/man/man1/knife-user.1 +1 -1
- data/distro/common/man/man1/knife-xargs.1 +1 -1
- data/distro/common/man/man1/knife.1 +1 -1
- data/distro/common/man/man8/chef-apply.8 +86 -0
- data/distro/common/man/man8/chef-client.8 +76 -5
- data/distro/common/man/man8/chef-solo.8 +79 -6
- data/distro/common/markdown/man1/knife-bootstrap.mkd +1 -1
- data/distro/common/markdown/man1/knife-cookbook-site.mkd +1 -1
- data/distro/common/markdown/man1/knife-data-bag.mkd +1 -1
- data/distro/common/markdown/man1/knife-environment.mkd +1 -1
- data/distro/common/markdown/man1/knife.mkd +1 -1
- data/lib/chef.rb +0 -7
- data/lib/chef/api_client.rb +10 -2
- data/lib/chef/api_client/registration.rb +7 -9
- data/lib/chef/application.rb +28 -12
- data/lib/chef/application/apply.rb +17 -1
- data/lib/chef/application/client.rb +74 -6
- data/lib/chef/application/knife.rb +1 -2
- data/lib/chef/application/solo.rb +30 -0
- data/lib/chef/application/windows_service.rb +1 -0
- data/lib/chef/application/windows_service_manager.rb +8 -2
- data/lib/chef/applications.rb +0 -1
- data/lib/chef/audit/audit_event_proxy.rb +93 -0
- data/lib/chef/audit/audit_reporter.rb +169 -0
- data/lib/chef/audit/control_group_data.rb +140 -0
- data/lib/chef/audit/rspec_formatter.rb +37 -0
- data/lib/chef/audit/runner.rb +178 -0
- data/lib/chef/chef_fs/chef_fs_data_store.rb +11 -2
- data/lib/chef/chef_fs/config.rb +25 -4
- data/lib/chef/chef_fs/data_handler/policy_data_handler.rb +15 -0
- data/lib/chef/chef_fs/data_handler/user_data_handler.rb +1 -0
- data/lib/chef/chef_fs/file_system.rb +1 -1
- data/lib/chef/chef_fs/file_system/base_fs_dir.rb +5 -0
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb +3 -2
- data/lib/chef/{shef/ext.rb → chef_fs/file_system/chef_repository_file_system_policies_dir.rb} +22 -3
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +4 -0
- data/lib/chef/client.rb +81 -52
- data/lib/chef/config.rb +35 -3
- data/lib/chef/cookbook/metadata.rb +3 -3
- data/lib/chef/cookbook_manifest.rb +275 -0
- data/lib/chef/cookbook_site_streaming_uploader.rb +24 -23
- data/lib/chef/cookbook_uploader.rb +11 -2
- data/lib/chef/cookbook_version.rb +71 -194
- data/lib/chef/data_bag.rb +5 -2
- data/lib/chef/data_bag_item.rb +6 -3
- data/lib/chef/deprecation/warnings.rb +5 -4
- data/lib/chef/dsl/audit.rb +51 -0
- data/lib/chef/dsl/include_recipe.rb +2 -3
- data/lib/chef/dsl/reboot_pending.rb +1 -1
- data/lib/chef/dsl/recipe.rb +49 -31
- data/lib/chef/encrypted_data_bag_item/assertions.rb +0 -3
- data/lib/chef/environment.rb +5 -2
- data/lib/chef/event_dispatch/base.rb +36 -1
- data/lib/chef/event_dispatch/dispatcher.rb +3 -5
- data/lib/chef/exceptions.rb +61 -2
- data/lib/chef/file_access_control/unix.rb +12 -0
- data/lib/chef/file_access_control/windows.rb +14 -0
- data/lib/chef/formatters/doc.rb +47 -1
- data/{spec/unit/monkey_patches/string_spec.rb → lib/chef/guard_interpreter.rb} +11 -16
- data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +3 -2
- data/lib/chef/http.rb +1 -2
- data/lib/chef/knife.rb +5 -3
- data/lib/chef/knife/bootstrap.rb +84 -15
- data/lib/chef/knife/bootstrap/chef_vault_handler.rb +165 -0
- data/lib/chef/knife/bootstrap/client_builder.rb +190 -0
- data/lib/chef/knife/bootstrap/{README.md → templates/README.md} +0 -0
- data/lib/chef/knife/bootstrap/{archlinux-gems.erb → templates/archlinux-gems.erb} +9 -0
- data/lib/chef/knife/bootstrap/{chef-aix.erb → templates/chef-aix.erb} +9 -0
- data/lib/chef/knife/bootstrap/{chef-full.erb → templates/chef-full.erb} +10 -1
- data/lib/chef/knife/client_create.rb +8 -7
- data/lib/chef/knife/cookbook_site_download.rb +1 -1
- data/lib/chef/knife/cookbook_site_install.rb +1 -1
- data/lib/chef/knife/cookbook_site_list.rb +1 -1
- data/lib/chef/knife/cookbook_site_search.rb +1 -1
- data/lib/chef/knife/cookbook_site_share.rb +39 -28
- data/lib/chef/knife/cookbook_site_show.rb +3 -3
- data/lib/chef/knife/cookbook_site_unshare.rb +1 -1
- data/lib/chef/knife/cookbook_test.rb +1 -0
- data/lib/chef/knife/cookbook_upload.rb +13 -8
- data/lib/chef/knife/core/bootstrap_context.rb +14 -3
- data/lib/chef/knife/core/generic_presenter.rb +5 -2
- data/lib/chef/knife/core/object_loader.rb +1 -1
- data/lib/chef/knife/core/subcommand_loader.rb +24 -0
- data/lib/chef/knife/core/ui.rb +9 -1
- data/lib/chef/knife/node_run_list_remove.rb +11 -3
- data/lib/chef/knife/raw.rb +14 -3
- data/lib/chef/knife/role_env_run_list_add.rb +86 -0
- data/lib/chef/knife/role_env_run_list_clear.rb +55 -0
- data/lib/chef/knife/role_env_run_list_remove.rb +57 -0
- data/lib/chef/knife/role_env_run_list_replace.rb +59 -0
- data/lib/chef/knife/role_env_run_list_set.rb +70 -0
- data/lib/chef/knife/role_run_list_add.rb +86 -0
- data/lib/chef/knife/role_run_list_clear.rb +55 -0
- data/lib/chef/knife/role_run_list_remove.rb +57 -0
- data/lib/chef/knife/role_run_list_replace.rb +59 -0
- data/lib/chef/knife/role_run_list_set.rb +70 -0
- data/lib/chef/knife/search.rb +4 -4
- data/lib/chef/knife/serve.rb +3 -0
- data/lib/chef/knife/ssh.rb +1 -1
- data/lib/chef/knife/ssl_check.rb +2 -2
- data/lib/chef/knife/ssl_fetch.rb +14 -1
- data/lib/chef/log.rb +10 -1
- data/lib/chef/mixin/command.rb +1 -1
- data/lib/chef/mixin/command/windows.rb +1 -5
- data/lib/chef/mixin/get_source_from_package.rb +1 -0
- data/lib/chef/mixin/params_validate.rb +2 -2
- data/lib/chef/mixin/securable.rb +1 -7
- data/lib/chef/mixin/shell_out.rb +7 -1
- data/lib/chef/mixin/template.rb +2 -14
- data/lib/chef/mixin/why_run.rb +1 -1
- data/lib/chef/monkey_patches/net_http.rb +4 -0
- data/lib/chef/monologger.rb +0 -2
- data/lib/chef/node.rb +5 -2
- data/lib/chef/node/attribute.rb +11 -9
- data/lib/chef/node/attribute_collections.rb +8 -12
- data/lib/chef/node/immutable_collections.rb +4 -10
- data/lib/chef/org.rb +148 -0
- data/lib/chef/platform/provider_mapping.rb +3 -2
- data/lib/chef/platform/provider_priority_map.rb +2 -0
- data/lib/chef/platform/query_helpers.rb +0 -3
- data/lib/chef/policy_builder/policyfile.rb +51 -8
- data/lib/chef/provider/deploy.rb +1 -2
- data/lib/chef/provider/directory.rb +3 -3
- data/lib/chef/provider/dsc_script.rb +13 -7
- data/lib/chef/provider/env.rb +8 -8
- data/lib/chef/provider/execute.rb +55 -36
- data/lib/chef/provider/file.rb +8 -0
- data/lib/chef/provider/group.rb +2 -0
- data/lib/chef/provider/group/dscl.rb +3 -4
- data/lib/chef/provider/ifconfig.rb +25 -25
- data/lib/chef/provider/ifconfig/aix.rb +25 -27
- data/lib/chef/provider/lwrp_base.rb +1 -1
- data/lib/chef/provider/mount.rb +2 -2
- data/lib/chef/provider/mount/mount.rb +3 -4
- data/lib/chef/provider/mount/solaris.rb +1 -1
- data/lib/chef/provider/package.rb +297 -48
- data/lib/chef/provider/package/aix.rb +25 -30
- data/lib/chef/provider/package/apt.rb +63 -19
- data/lib/chef/provider/package/dpkg.rb +15 -16
- data/lib/chef/provider/package/macports.rb +7 -7
- data/lib/chef/provider/package/openbsd.rb +107 -0
- data/lib/chef/provider/package/pacman.rb +13 -15
- data/lib/chef/provider/package/portage.rb +3 -4
- data/lib/chef/provider/package/rpm.rb +28 -17
- data/lib/chef/provider/package/rubygems.rb +9 -9
- data/lib/chef/provider/package/solaris.rb +17 -21
- data/lib/chef/provider/package/windows/msi.rb +1 -1
- data/lib/chef/provider/package/yum-dump.py +2 -2
- data/lib/chef/provider/package/yum.rb +117 -51
- data/lib/chef/provider/package/zypper.rb +17 -18
- data/lib/chef/provider/powershell_script.rb +4 -4
- data/lib/chef/provider/registry_key.rb +2 -2
- data/lib/chef/provider/remote_directory.rb +1 -1
- data/lib/chef/provider/script.rb +25 -16
- data/lib/chef/provider/service.rb +1 -1
- data/lib/chef/provider/service/freebsd.rb +1 -1
- data/lib/chef/provider/service/openbsd.rb +216 -0
- data/lib/chef/provider/service/upstart.rb +1 -1
- data/lib/chef/provider/service/windows.rb +99 -1
- data/lib/chef/provider/user.rb +1 -1
- data/lib/chef/provider/user/dscl.rb +19 -4
- data/lib/chef/providers.rb +2 -0
- data/lib/chef/recipe.rb +11 -5
- data/lib/chef/request_id.rb +1 -1
- data/lib/chef/resource.rb +839 -444
- data/lib/chef/resource/chef_gem.rb +20 -3
- data/lib/chef/resource/conditional.rb +3 -14
- data/lib/chef/resource/dsc_script.rb +14 -0
- data/lib/chef/resource/execute.rb +14 -7
- data/lib/chef/resource/file.rb +14 -0
- data/lib/chef/resource/file/verification.rb +122 -0
- data/lib/chef/resource/ips_package.rb +1 -1
- data/lib/chef/resource/lwrp_base.rb +2 -11
- data/lib/chef/resource/macports_package.rb +2 -1
- data/lib/chef/resource/openbsd_package.rb +51 -0
- data/lib/chef/resource/package.rb +2 -2
- data/lib/chef/resource/paludis_package.rb +1 -1
- data/lib/chef/resource/reboot.rb +1 -1
- data/lib/chef/resource/remote_file.rb +1 -0
- data/lib/chef/resource/rpm_package.rb +9 -0
- data/lib/chef/resource/script.rb +11 -0
- data/lib/chef/resource/template.rb +2 -3
- data/lib/chef/resource/windows_package.rb +1 -1
- data/lib/chef/resource/windows_service.rb +18 -0
- data/lib/chef/resource_builder.rb +137 -0
- data/lib/chef/resource_definition.rb +1 -1
- data/lib/chef/resource_reporter.rb +1 -1
- data/lib/chef/resources.rb +1 -0
- data/lib/chef/role.rb +17 -4
- data/lib/chef/run_context.rb +10 -6
- data/lib/chef/search/query.rb +66 -87
- data/lib/chef/shell/ext.rb +2 -2
- data/lib/chef/util/diff.rb +1 -4
- data/lib/chef/util/dsc/configuration_generator.rb +30 -6
- data/lib/chef/util/dsc/lcm_output_parser.rb +7 -3
- data/lib/chef/util/dsc/local_configuration_manager.rb +8 -8
- data/lib/chef/util/file_edit.rb +2 -2
- data/lib/chef/util/path_helper.rb +1 -4
- data/lib/chef/util/windows/net_use.rb +3 -3
- data/lib/chef/version.rb +1 -1
- data/lib/chef/win32/api.rb +1 -0
- data/lib/chef/win32/api/security.rb +26 -0
- data/lib/chef/win32/file.rb +21 -0
- data/lib/chef/win32/security.rb +46 -0
- data/lib/chef/win32/security/token.rb +8 -0
- data/lib/chef/win32/version.rb +0 -4
- data/spec/data/recipes.tgz +0 -0
- data/spec/functional/application_spec.rb +1 -1
- data/spec/functional/audit/rspec_formatter_spec.rb +54 -0
- data/spec/functional/audit/runner_spec.rb +137 -0
- data/spec/functional/dsl/reboot_pending_spec.rb +10 -10
- data/spec/functional/dsl/registry_helper_spec.rb +6 -6
- data/spec/functional/event_loggers/windows_eventlog_spec.rb +5 -5
- data/spec/functional/file_content_management/deploy_strategies_spec.rb +12 -21
- data/spec/functional/http/simple_spec.rb +1 -1
- data/spec/functional/knife/cookbook_delete_spec.rb +24 -24
- data/spec/functional/knife/exec_spec.rb +2 -4
- data/spec/functional/knife/smoke_test.rb +1 -1
- data/spec/functional/knife/ssh_spec.rb +23 -23
- data/spec/functional/provider/remote_file/cache_control_data_spec.rb +8 -8
- data/spec/functional/provider/whyrun_safe_ruby_block_spec.rb +2 -2
- data/spec/functional/rebooter_spec.rb +1 -1
- data/spec/functional/resource/aix_service_spec.rb +3 -0
- data/spec/functional/resource/aixinit_service_spec.rb +3 -3
- data/spec/functional/resource/bash_spec.rb +88 -0
- data/spec/functional/resource/deploy_revision_spec.rb +99 -100
- data/spec/functional/resource/env_spec.rb +3 -3
- data/spec/functional/resource/execute_spec.rb +97 -63
- data/spec/functional/resource/file_spec.rb +7 -7
- data/spec/functional/resource/git_spec.rb +13 -13
- data/spec/functional/resource/group_spec.rb +28 -25
- data/spec/functional/resource/ifconfig_spec.rb +2 -2
- data/spec/functional/resource/link_spec.rb +77 -78
- data/spec/functional/resource/mount_spec.rb +5 -5
- data/spec/functional/resource/ohai_spec.rb +1 -1
- data/spec/functional/resource/package_spec.rb +22 -22
- data/spec/functional/resource/powershell_spec.rb +57 -42
- data/spec/functional/resource/reboot_spec.rb +2 -2
- data/spec/functional/resource/registry_spec.rb +91 -91
- data/spec/functional/resource/remote_directory_spec.rb +19 -19
- data/spec/functional/resource/remote_file_spec.rb +18 -18
- data/spec/functional/resource/template_spec.rb +4 -4
- data/spec/functional/resource/user/dscl_spec.rb +4 -4
- data/spec/functional/resource/user/useradd_spec.rb +64 -51
- data/spec/functional/resource/windows_service_spec.rb +98 -0
- data/spec/functional/run_lock_spec.rb +9 -9
- data/spec/functional/shell_spec.rb +3 -3
- data/spec/functional/tiny_server_spec.rb +12 -12
- data/spec/functional/util/path_helper_spec.rb +1 -1
- data/spec/functional/version_spec.rb +1 -1
- data/spec/functional/win32/registry_helper_spec.rb +125 -125
- data/spec/functional/win32/security_spec.rb +65 -2
- data/spec/functional/win32/service_manager_spec.rb +30 -84
- data/spec/functional/win32/versions_spec.rb +6 -6
- data/spec/integration/client/client_spec.rb +102 -9
- data/spec/integration/knife/chef_fs_data_store_spec.rb +12 -8
- data/spec/integration/knife/common_options_spec.rb +3 -3
- data/spec/integration/knife/cookbook_api_ipv6_spec.rb +2 -2
- data/spec/integration/knife/deps_spec.rb +4 -4
- data/spec/integration/knife/diff_spec.rb +6 -6
- data/spec/integration/knife/download_spec.rb +6 -6
- data/spec/integration/knife/list_spec.rb +2 -2
- data/spec/integration/knife/raw_spec.rb +5 -5
- data/spec/integration/knife/serve_spec.rb +3 -3
- data/spec/integration/knife/show_spec.rb +3 -3
- data/spec/integration/knife/upload_spec.rb +18 -18
- data/spec/integration/recipes/lwrp_inline_resources_spec.rb +1 -1
- data/spec/integration/solo/solo_spec.rb +11 -12
- data/spec/spec_helper.rb +27 -15
- data/spec/stress/win32/file_spec.rb +4 -4
- data/spec/stress/win32/security_spec.rb +4 -4
- data/spec/support/chef_helpers.rb +3 -3
- data/spec/support/matchers/leak.rb +2 -2
- data/spec/support/mock/platform.rb +1 -1
- data/spec/support/pedant/Gemfile +3 -0
- data/spec/support/pedant/pedant_config.rb +9 -2
- data/spec/support/pedant/run_pedant.rb +15 -16
- data/spec/support/platform_helpers.rb +8 -12
- data/spec/support/shared/functional/directory_resource.rb +13 -13
- data/spec/support/shared/functional/file_resource.rb +83 -83
- data/spec/support/shared/functional/http.rb +1 -1
- data/spec/support/shared/functional/securable_resource.rb +64 -64
- data/spec/support/shared/functional/securable_resource_with_reporting.rb +43 -41
- data/spec/support/shared/functional/win32_service.rb +60 -0
- data/spec/support/shared/functional/windows_script.rb +8 -8
- data/spec/support/shared/integration/knife_support.rb +8 -5
- data/spec/support/shared/matchers/exit_with_code.rb +6 -2
- data/spec/support/shared/unit/api_error_inspector.rb +8 -8
- data/spec/support/shared/unit/execute_resource.rb +24 -20
- data/spec/support/shared/unit/file_system_support.rb +2 -2
- data/spec/support/shared/unit/platform_introspector.rb +21 -21
- data/spec/support/shared/unit/provider/file.rb +239 -210
- data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +69 -69
- data/spec/support/shared/unit/script_resource.rb +40 -32
- data/spec/support/shared/unit/windows_script_resource.rb +8 -8
- data/spec/unit/api_client/registration_spec.rb +47 -47
- data/spec/unit/api_client_spec.rb +107 -69
- data/spec/unit/application/apply_spec.rb +31 -15
- data/spec/unit/application/client_spec.rb +146 -45
- data/spec/unit/application/knife_spec.rb +31 -31
- data/spec/unit/application/solo_spec.rb +59 -43
- data/spec/unit/application_spec.rb +109 -74
- data/spec/unit/audit/audit_event_proxy_spec.rb +311 -0
- data/spec/unit/audit/audit_reporter_spec.rb +393 -0
- data/spec/unit/audit/control_group_data_spec.rb +478 -0
- data/{lib/chef/monkey_patches/file.rb → spec/unit/audit/rspec_formatter_spec.rb} +11 -8
- data/spec/unit/audit/runner_spec.rb +135 -0
- data/spec/unit/chef_fs/config_spec.rb +52 -0
- data/spec/unit/chef_fs/diff_spec.rb +12 -12
- data/spec/unit/chef_fs/file_pattern_spec.rb +276 -277
- data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +6 -6
- data/spec/unit/chef_fs/file_system_spec.rb +26 -13
- data/spec/unit/chef_fs/parallelizer.rb +87 -87
- data/spec/unit/chef_spec.rb +1 -1
- data/spec/unit/client_spec.rb +263 -97
- data/spec/unit/config_fetcher_spec.rb +13 -13
- data/spec/unit/config_spec.rb +105 -66
- data/spec/unit/cookbook/chefignore_spec.rb +6 -6
- data/spec/unit/cookbook/cookbook_version_loader_spec.rb +3 -3
- data/spec/unit/cookbook/metadata_spec.rb +149 -149
- data/spec/unit/cookbook/syntax_check_spec.rb +36 -31
- data/spec/unit/cookbook_loader_spec.rb +62 -58
- data/spec/unit/cookbook_manifest_spec.rb +141 -468
- data/spec/unit/cookbook_site_streaming_uploader_spec.rb +27 -27
- data/spec/unit/cookbook_spec.rb +15 -15
- data/spec/unit/cookbook_uploader_spec.rb +37 -3
- data/spec/unit/cookbook_version_file_specificity_spec.rb +554 -0
- data/spec/unit/cookbook_version_spec.rb +98 -240
- data/spec/unit/daemon_spec.rb +31 -31
- data/spec/unit/data_bag_item_spec.rb +121 -89
- data/spec/unit/data_bag_spec.rb +35 -35
- data/spec/unit/deprecation_spec.rb +27 -14
- data/spec/unit/digester_spec.rb +3 -3
- data/spec/unit/dsl/audit_spec.rb +43 -0
- data/spec/unit/dsl/data_query_spec.rb +1 -1
- data/spec/unit/dsl/platform_introspection_spec.rb +14 -14
- data/spec/unit/dsl/reboot_pending_spec.rb +18 -18
- data/spec/unit/dsl/regsitry_helper_spec.rb +6 -6
- data/spec/unit/encrypted_data_bag_item_spec.rb +58 -82
- data/spec/unit/environment_spec.rb +105 -105
- data/spec/unit/exceptions_spec.rb +47 -1
- data/spec/unit/file_access_control_spec.rb +62 -56
- data/spec/unit/file_cache_spec.rb +11 -11
- data/spec/unit/file_content_management/deploy/cp_spec.rb +2 -2
- data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +10 -10
- data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +23 -23
- data/spec/unit/formatters/error_inspectors/compile_error_inspector_spec.rb +14 -14
- data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +12 -12
- data/spec/unit/formatters/error_inspectors/cookbook_sync_error_inspector_spec.rb +1 -1
- data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +16 -16
- data/spec/unit/formatters/error_inspectors/run_list_expansion_error_inspector_spec.rb +4 -4
- data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +103 -13
- data/spec/unit/guard_interpreter_spec.rb +41 -0
- data/spec/unit/handler/json_file_spec.rb +10 -10
- data/spec/unit/handler_spec.rb +39 -39
- data/spec/unit/http/basic_client_spec.rb +3 -3
- data/spec/unit/http/http_request_spec.rb +10 -10
- data/spec/unit/http/simple_spec.rb +3 -3
- data/spec/unit/http/ssl_policies_spec.rb +15 -15
- data/spec/unit/http/validate_content_length_spec.rb +18 -13
- data/spec/unit/http_spec.rb +16 -9
- data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +153 -0
- data/spec/unit/knife/bootstrap/client_builder_spec.rb +178 -0
- data/spec/unit/knife/bootstrap_spec.rb +144 -91
- data/spec/unit/knife/client_bulk_delete_spec.rb +24 -24
- data/spec/unit/knife/client_create_spec.rb +57 -43
- data/spec/unit/knife/client_delete_spec.rb +15 -15
- data/spec/unit/knife/client_edit_spec.rb +4 -4
- data/spec/unit/knife/client_list_spec.rb +2 -2
- data/spec/unit/knife/client_reregister_spec.rb +9 -9
- data/spec/unit/knife/configure_client_spec.rb +20 -20
- data/spec/unit/knife/configure_spec.rb +85 -85
- data/spec/unit/knife/cookbook_bulk_delete_spec.rb +15 -15
- data/spec/unit/knife/cookbook_create_spec.rb +59 -59
- data/spec/unit/knife/cookbook_delete_spec.rb +49 -49
- data/spec/unit/knife/cookbook_download_spec.rb +56 -56
- data/spec/unit/knife/cookbook_list_spec.rb +9 -9
- data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +8 -8
- data/spec/unit/knife/cookbook_metadata_spec.rb +44 -44
- data/spec/unit/knife/cookbook_show_spec.rb +29 -29
- data/spec/unit/knife/cookbook_site_download_spec.rb +26 -26
- data/spec/unit/knife/cookbook_site_install_spec.rb +5 -1
- data/spec/unit/knife/cookbook_site_share_spec.rb +68 -59
- data/spec/unit/knife/cookbook_site_unshare_spec.rb +15 -15
- data/spec/unit/knife/cookbook_test_spec.rb +16 -16
- data/spec/unit/knife/cookbook_upload_spec.rb +105 -71
- data/spec/unit/knife/core/bootstrap_context_spec.rb +37 -22
- data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +36 -36
- data/spec/unit/knife/core/object_loader_spec.rb +3 -3
- data/spec/unit/knife/core/subcommand_loader_spec.rb +107 -33
- data/spec/unit/knife/core/ui_spec.rb +84 -72
- data/spec/unit/knife/data_bag_from_file_spec.rb +1 -1
- data/spec/unit/knife/environment_compare_spec.rb +12 -12
- data/spec/unit/knife/environment_create_spec.rb +16 -16
- data/spec/unit/knife/environment_delete_spec.rb +14 -14
- data/spec/unit/knife/environment_edit_spec.rb +15 -15
- data/spec/unit/knife/environment_from_file_spec.rb +17 -17
- data/spec/unit/knife/environment_list_spec.rb +7 -7
- data/spec/unit/knife/environment_show_spec.rb +10 -10
- data/spec/unit/knife/index_rebuild_spec.rb +17 -17
- data/spec/unit/knife/knife_help.rb +24 -24
- data/spec/unit/knife/node_bulk_delete_spec.rb +14 -14
- data/spec/unit/knife/node_delete_spec.rb +11 -11
- data/spec/unit/knife/node_edit_spec.rb +17 -17
- data/spec/unit/knife/node_environment_set_spec.rb +12 -12
- data/spec/unit/knife/node_from_file_spec.rb +8 -8
- data/spec/unit/knife/node_list_spec.rb +9 -9
- data/spec/unit/knife/node_run_list_add_spec.rb +29 -29
- data/spec/unit/knife/node_run_list_remove_spec.rb +28 -13
- data/spec/unit/knife/node_run_list_set_spec.rb +27 -27
- data/spec/unit/knife/raw_spec.rb +43 -0
- data/spec/unit/knife/role_bulk_delete_spec.rb +12 -12
- data/spec/unit/knife/role_create_spec.rb +12 -12
- data/spec/unit/knife/role_delete_spec.rb +10 -10
- data/spec/unit/knife/role_edit_spec.rb +13 -13
- data/spec/unit/knife/role_env_run_list_add_spec.rb +217 -0
- data/spec/unit/knife/role_env_run_list_clear_spec.rb +100 -0
- data/spec/unit/knife/role_env_run_list_remove_spec.rb +108 -0
- data/spec/unit/knife/role_env_run_list_replace_spec.rb +108 -0
- data/spec/unit/knife/role_env_run_list_set_spec.rb +102 -0
- data/spec/unit/knife/role_from_file_spec.rb +10 -10
- data/spec/unit/knife/role_list_spec.rb +7 -7
- data/spec/unit/knife/role_run_list_add_spec.rb +179 -0
- data/spec/unit/knife/role_run_list_clear_spec.rb +90 -0
- data/spec/unit/knife/role_run_list_remove_spec.rb +98 -0
- data/spec/unit/knife/role_run_list_replace_spec.rb +101 -0
- data/spec/unit/knife/role_run_list_set_spec.rb +92 -0
- data/spec/unit/knife/ssh_spec.rb +66 -66
- data/spec/unit/knife/ssl_check_spec.rb +27 -27
- data/spec/unit/knife/ssl_fetch_spec.rb +45 -12
- data/spec/unit/knife/status_spec.rb +5 -5
- data/spec/unit/knife/tag_create_spec.rb +5 -5
- data/spec/unit/knife/tag_delete_spec.rb +6 -6
- data/spec/unit/knife/tag_list_spec.rb +4 -4
- data/spec/unit/knife/user_create_spec.rb +18 -18
- data/spec/unit/knife/user_delete_spec.rb +4 -4
- data/spec/unit/knife/user_edit_spec.rb +7 -7
- data/spec/unit/knife/user_list_spec.rb +2 -2
- data/spec/unit/knife/user_reregister_spec.rb +10 -10
- data/spec/unit/knife/user_show_spec.rb +5 -5
- data/spec/unit/knife_spec.rb +36 -36
- data/spec/unit/lwrp_spec.rb +63 -39
- data/spec/unit/mash_spec.rb +6 -6
- data/spec/unit/mixin/checksum_spec.rb +2 -2
- data/spec/unit/mixin/command_spec.rb +13 -13
- data/spec/unit/mixin/convert_to_class_name_spec.rb +6 -6
- data/spec/unit/mixin/deep_merge_spec.rb +49 -49
- data/spec/unit/mixin/deprecation_spec.rb +5 -5
- data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +14 -14
- data/spec/unit/mixin/homebrew_user_spec.rb +3 -3
- data/spec/unit/mixin/params_validate_spec.rb +71 -71
- data/spec/unit/mixin/path_sanity_spec.rb +14 -14
- data/spec/unit/mixin/securable_spec.rb +177 -177
- data/spec/unit/mixin/shell_out_spec.rb +56 -27
- data/spec/unit/mixin/template_spec.rb +31 -31
- data/spec/unit/mixin/windows_architecture_helper_spec.rb +5 -5
- data/spec/unit/mixin/xml_escape_spec.rb +7 -7
- data/spec/unit/monkey_patches/uri_spec.rb +1 -1
- data/spec/unit/monologger_spec.rb +3 -3
- data/spec/unit/node/attribute_spec.rb +185 -136
- data/spec/unit/node/immutable_collections_spec.rb +22 -22
- data/spec/unit/node_spec.rb +210 -179
- data/spec/unit/org_spec.rb +196 -0
- data/spec/unit/platform/query_helpers_spec.rb +5 -5
- data/spec/unit/platform_spec.rb +46 -46
- data/spec/unit/policy_builder/expand_node_object_spec.rb +17 -18
- data/spec/unit/policy_builder/policyfile_spec.rb +159 -71
- data/spec/unit/provider/directory_spec.rb +5 -5
- data/spec/unit/provider/dsc_script_spec.rb +6 -6
- data/spec/unit/provider/env_spec.rb +27 -14
- data/spec/unit/provider/execute_spec.rb +139 -68
- data/spec/unit/provider/file/content_spec.rb +8 -8
- data/spec/unit/provider/git_spec.rb +10 -5
- data/spec/unit/provider/group/dscl_spec.rb +8 -11
- data/spec/unit/provider/group_spec.rb +13 -13
- data/spec/unit/provider/ifconfig/aix_spec.rb +3 -2
- data/spec/unit/provider/ifconfig/debian_spec.rb +19 -19
- data/spec/unit/provider/ifconfig_spec.rb +2 -2
- data/spec/unit/provider/mdadm_spec.rb +2 -2
- data/spec/unit/provider/mount/aix_spec.rb +5 -5
- data/spec/unit/provider/mount/mount_spec.rb +22 -22
- data/spec/unit/provider/mount/solaris_spec.rb +20 -20
- data/spec/unit/provider/package/aix_spec.rb +23 -22
- data/spec/unit/provider/package/apt_spec.rb +23 -4
- data/spec/unit/provider/package/dpkg_spec.rb +14 -15
- data/spec/unit/provider/package/freebsd/pkgng_spec.rb +1 -1
- data/spec/unit/provider/package/freebsd/port_spec.rb +1 -1
- data/spec/unit/provider/package/ips_spec.rb +1 -2
- data/spec/unit/provider/package/macports_spec.rb +14 -14
- data/spec/unit/provider/package/openbsd_spec.rb +66 -0
- data/spec/unit/provider/package/pacman_spec.rb +15 -14
- data/spec/unit/provider/package/portage_spec.rb +11 -11
- data/spec/unit/provider/package/rpm_spec.rb +132 -84
- data/spec/unit/provider/package/rubygems_spec.rb +54 -25
- data/spec/unit/provider/package/solaris_spec.rb +22 -25
- data/spec/unit/provider/package/yum_spec.rb +237 -36
- data/spec/unit/provider/package/zypper_spec.rb +9 -12
- data/spec/unit/provider/package_spec.rb +276 -2
- data/spec/unit/provider/package_spec.rbe +0 -0
- data/spec/unit/provider/remote_directory_spec.rb +25 -25
- data/spec/unit/provider/remote_file/ftp_spec.rb +3 -3
- data/spec/unit/provider/route_spec.rb +3 -3
- data/spec/unit/provider/script_spec.rb +61 -43
- data/spec/unit/provider/service/aix_service_spec.rb +5 -5
- data/spec/unit/provider/service/arch_service_spec.rb +5 -5
- data/spec/unit/provider/service/debian_service_spec.rb +8 -8
- data/spec/unit/provider/service/freebsd_service_spec.rb +16 -2
- data/spec/unit/provider/service/gentoo_service_spec.rb +8 -8
- data/spec/unit/provider/service/init_service_spec.rb +5 -5
- data/spec/unit/provider/service/insserv_service_spec.rb +2 -2
- data/spec/unit/provider/service/invokercd_service_spec.rb +5 -5
- data/spec/unit/provider/service/macosx_spec.rb +7 -7
- data/spec/unit/provider/service/openbsd_service_spec.rb +543 -0
- data/spec/unit/provider/service/redhat_spec.rb +4 -4
- data/spec/unit/provider/service/simple_service_spec.rb +2 -2
- data/spec/unit/provider/service/solaris_smf_service_spec.rb +14 -14
- data/spec/unit/provider/service/systemd_service_spec.rb +15 -7
- data/spec/unit/provider/service/upstart_service_spec.rb +4 -4
- data/spec/unit/provider/service/windows_spec.rb +119 -25
- data/spec/unit/provider/service_spec.rb +1 -1
- data/spec/unit/provider/user/dscl_spec.rb +38 -30
- data/spec/unit/provider/user_spec.rb +1 -1
- data/spec/unit/provider_resolver_spec.rb +7 -7
- data/spec/unit/provider_spec.rb +23 -23
- data/spec/unit/recipe_spec.rb +194 -83
- data/spec/unit/registry_helper_spec.rb +143 -143
- data/spec/unit/resource/chef_gem_spec.rb +117 -3
- data/spec/unit/resource/conditional_action_not_nothing_spec.rb +2 -2
- data/spec/unit/resource/conditional_spec.rb +56 -15
- data/spec/unit/resource/deploy_spec.rb +2 -2
- data/spec/unit/resource/dsc_script_spec.rb +32 -0
- data/spec/unit/resource/execute_spec.rb +4 -0
- data/spec/unit/resource/file/verification_spec.rb +111 -0
- data/spec/unit/resource/file_spec.rb +14 -0
- data/spec/unit/resource/openbsd_package_spec.rb +49 -0
- data/spec/unit/resource/remote_file_spec.rb +12 -12
- data/spec/unit/resource/resource_notification_spec.rb +18 -18
- data/spec/unit/resource/rpm_package_spec.rb +12 -0
- data/spec/unit/resource/scm_spec.rb +4 -4
- data/spec/unit/resource/script_spec.rb +3 -5
- data/spec/unit/resource/subversion_spec.rb +1 -1
- data/spec/unit/resource_builder_spec.rb +1 -0
- data/spec/unit/resource_collection/resource_list_spec.rb +2 -2
- data/spec/unit/resource_collection/resource_set_spec.rb +3 -3
- data/spec/unit/resource_collection/stepable_iterator_spec.rb +24 -24
- data/spec/unit/resource_collection_spec.rb +52 -52
- data/spec/unit/resource_definition_spec.rb +1 -1
- data/spec/unit/resource_reporter_spec.rb +118 -118
- data/spec/unit/resource_spec.rb +131 -125
- data/spec/unit/rest/auth_credentials_spec.rb +73 -73
- data/spec/unit/rest_spec.rb +12 -12
- data/spec/unit/role_spec.rb +85 -84
- data/spec/unit/run_context/cookbook_compiler_spec.rb +18 -18
- data/spec/unit/run_context_spec.rb +39 -68
- data/spec/unit/run_list/run_list_expansion_spec.rb +21 -21
- data/spec/unit/run_list/run_list_item_spec.rb +28 -28
- data/spec/unit/run_list/versioned_recipe_list_spec.rb +14 -14
- data/spec/unit/run_list_spec.rb +55 -55
- data/spec/unit/run_lock_spec.rb +14 -14
- data/spec/unit/run_status_spec.rb +24 -24
- data/spec/unit/scan_access_control_spec.rb +23 -23
- data/spec/unit/search/query_spec.rb +54 -66
- data/spec/unit/shell/model_wrapper_spec.rb +13 -13
- data/spec/unit/shell/shell_ext_spec.rb +32 -32
- data/spec/unit/shell/shell_session_spec.rb +24 -24
- data/spec/unit/shell_out_spec.rb +4 -4
- data/spec/unit/shell_spec.rb +27 -27
- data/spec/unit/user_spec.rb +50 -50
- data/spec/unit/util/backup_spec.rb +32 -32
- data/spec/unit/util/diff_spec.rb +31 -31
- data/spec/unit/util/dsc/configuration_generator_spec.rb +38 -16
- data/spec/unit/util/dsc/lcm_output_parser_spec.rb +21 -26
- data/spec/unit/util/dsc/local_configuration_manager_spec.rb +10 -10
- data/spec/unit/util/editor_spec.rb +10 -10
- data/spec/unit/util/file_edit_spec.rb +10 -10
- data/spec/unit/util/path_helper_spec.rb +38 -46
- data/spec/unit/util/powershell/cmdlet_spec.rb +9 -9
- data/spec/unit/util/selinux_spec.rb +30 -30
- data/spec/unit/util/threaded_job_queue_spec.rb +6 -6
- data/spec/unit/version/platform_spec.rb +5 -5
- data/spec/unit/version_class_spec.rb +15 -15
- data/spec/unit/version_constraint/platform_spec.rb +7 -7
- data/spec/unit/version_constraint_spec.rb +43 -43
- data/spec/unit/windows_service_spec.rb +15 -15
- data/spec/unit/workstation_config_loader_spec.rb +2 -2
- data/tasks/rspec.rb +16 -18
- metadata +126 -49
- data/bin/shef +0 -35
- data/lib/chef/application/agent.rb +0 -18
- data/lib/chef/monkey_patches/fileutils.rb +0 -65
- data/lib/chef/monkey_patches/numeric.rb +0 -15
- data/lib/chef/monkey_patches/object.rb +0 -9
- data/lib/chef/monkey_patches/pathname.rb +0 -32
- data/lib/chef/monkey_patches/regexp.rb +0 -34
- data/lib/chef/monkey_patches/securerandom.rb +0 -44
- data/lib/chef/monkey_patches/string.rb +0 -49
- data/lib/chef/monkey_patches/tempfile.rb +0 -64
- data/lib/chef/monkey_patches/uri.rb +0 -70
@@ -1,6 +1,6 @@
|
|
1
1
|
.\" Man page generated from reStructuredText.
|
2
2
|
.
|
3
|
-
.TH "CHEF-SOLO" "8" "Chef
|
3
|
+
.TH "CHEF-SOLO" "8" "Chef 12.0" "" "chef-solo"
|
4
4
|
.SH NAME
|
5
5
|
chef-solo \- The man page for the chef-solo command line tool.
|
6
6
|
.
|
@@ -77,13 +77,15 @@ This command has the following options:
|
|
77
77
|
The configuration file to use.
|
78
78
|
.TP
|
79
79
|
.B \fB\-d\fP, \fB\-\-daemonize\fP
|
80
|
-
Use to run the executable as a daemon.
|
80
|
+
Use to run the executable as a daemon. This option may not be used in the same command with the \fB\-\-[no\-]fork\fP option.
|
81
|
+
.sp
|
82
|
+
This option is only available on machines that run in UNIX or Linux environments. For machines that are running Microsoft Windows that require similar functionality, use the \fBchef\-client::service\fP recipe in the \fBchef\-client\fP cookbook: \fI\%http://community.opscode.com/cookbooks/chef\-client\fP\&. This will install a chef\-client service under Microsoft Windows using the Windows Service Wrapper\&.
|
81
83
|
.TP
|
82
84
|
.B \fB\-E ENVIRONMENT_NAME\fP, \fB\-\-environment ENVIRONMENT_NAME\fP
|
83
85
|
The name of the environment.
|
84
86
|
.TP
|
85
87
|
.B \fB\-f\fP, \fB\-\-[no\-]fork\fP
|
86
|
-
Use to contain the chef\-client run in a secondary process with dedicated RAM. When the chef\-client run is complete the RAM will be returned to the master process. This option helps ensure that a chef\-client will use a steady amount of RAM over time because the master process will not run recipes. This option will also help prevent memory leaks (such as those that can be introduced by the code contained within a poorly designed cookbook). Use \fB\-\-no\-fork\fP to disable running the chef\-client in fork node. Default value: \fB\-\-fork\fP\&.
|
88
|
+
Use to contain the chef\-client run in a secondary process with dedicated RAM. When the chef\-client run is complete the RAM will be returned to the master process. This option helps ensure that a chef\-client will use a steady amount of RAM over time because the master process will not run recipes. This option will also help prevent memory leaks (such as those that can be introduced by the code contained within a poorly designed cookbook). Use \fB\-\-no\-fork\fP to disable running the chef\-client in fork node. Default value: \fB\-\-fork\fP\&. This option may not be used in the same command with the \fB\-\-daemonize\fP and \fB\-\-interval\fP options.
|
87
89
|
.TP
|
88
90
|
.B \fB\-F FORMAT\fP, \fB\-\-format FORMAT\fP
|
89
91
|
The output format: \fBdoc\fP (default) or \fBmin\fP\&.
|
@@ -107,10 +109,81 @@ The name of the group that owns a process. This is required when starting any ex
|
|
107
109
|
Shows help for the command.
|
108
110
|
.TP
|
109
111
|
.B \fB\-i SECONDS\fP, \fB\-\-interval SECONDS\fP
|
110
|
-
The frequency (in seconds) at which the chef\-client runs.
|
112
|
+
The frequency (in seconds) at which the chef\-client runs. When the chef\-client is run at intervals, \fB\-\-splay\fP and \fB\-\-interval\fP values are applied before the chef\-client run. This option may not be used in the same command with the \fB\-\-[no\-]fork\fP option.
|
111
113
|
.TP
|
112
114
|
.B \fB\-j PATH\fP, \fB\-\-json\-attributes PATH\fP
|
113
|
-
The path to a file that contains JSON data.
|
115
|
+
The path to a file that contains JSON data.
|
116
|
+
.sp
|
117
|
+
Use this option to define a \fBrun_list\fP object. For example, a JSON file similar to:
|
118
|
+
.INDENT 7.0
|
119
|
+
.INDENT 3.5
|
120
|
+
.sp
|
121
|
+
.nf
|
122
|
+
.ft C
|
123
|
+
"run_list": [
|
124
|
+
"recipe[base]",
|
125
|
+
"recipe[foo]",
|
126
|
+
"recipe[bar]",
|
127
|
+
"role[webserver]"
|
128
|
+
],
|
129
|
+
.ft P
|
130
|
+
.fi
|
131
|
+
.UNINDENT
|
132
|
+
.UNINDENT
|
133
|
+
.sp
|
134
|
+
may be used by running \fBchef\-client \-j path/to/file.json\fP\&.
|
135
|
+
.sp
|
136
|
+
In certain situations this option may be used to update \fBnormal\fP attributes.
|
137
|
+
.sp
|
138
|
+
\fBWARNING:\fP
|
139
|
+
.INDENT 7.0
|
140
|
+
.INDENT 3.5
|
141
|
+
Any other attribute type that is contained in this JSON file will be treated as a \fBnormal\fP attribute. For example, attempting to update \fBoverride\fP attributes using the \fB\-j\fP option:
|
142
|
+
.INDENT 0.0
|
143
|
+
.INDENT 3.5
|
144
|
+
.sp
|
145
|
+
.nf
|
146
|
+
.ft C
|
147
|
+
{
|
148
|
+
"name": "dev\-99",
|
149
|
+
"description": "Install some stuff",
|
150
|
+
"override_attributes": {
|
151
|
+
"apptastic": {
|
152
|
+
"enable_apptastic": "false",
|
153
|
+
"apptastic_tier_name": "dev\-99.bomb.com"
|
154
|
+
}
|
155
|
+
}
|
156
|
+
}
|
157
|
+
.ft P
|
158
|
+
.fi
|
159
|
+
.UNINDENT
|
160
|
+
.UNINDENT
|
161
|
+
.sp
|
162
|
+
will result in a node object similar to:
|
163
|
+
.INDENT 0.0
|
164
|
+
.INDENT 3.5
|
165
|
+
.sp
|
166
|
+
.nf
|
167
|
+
.ft C
|
168
|
+
{
|
169
|
+
"name": "maybe\-dev\-99",
|
170
|
+
"normal": {
|
171
|
+
"name": "dev\-99",
|
172
|
+
"description": "Install some stuff",
|
173
|
+
"override_attributes": {
|
174
|
+
"apptastic": {
|
175
|
+
"enable_apptastic": "false",
|
176
|
+
"apptastic_tier_name": "dev\-99.bomb.com"
|
177
|
+
}
|
178
|
+
}
|
179
|
+
}
|
180
|
+
}
|
181
|
+
.ft P
|
182
|
+
.fi
|
183
|
+
.UNINDENT
|
184
|
+
.UNINDENT
|
185
|
+
.UNINDENT
|
186
|
+
.UNINDENT
|
114
187
|
.TP
|
115
188
|
.B \fB\-l LEVEL\fP, \fB\-\-log_level LEVEL\fP
|
116
189
|
The level of logging that will be stored in a log file.
|
@@ -134,7 +207,7 @@ The URL location from which a remote cookbook tar.gz will be downloaded.
|
|
134
207
|
The amount of time (in seconds) to wait for a chef\-client run to finish. Default value: not set (indefinite). Set to \fB0\fP to cause a second chef\-client to exit immediately.
|
135
208
|
.TP
|
136
209
|
.B \fB\-s SECONDS\fP, \fB\-\-splay SECONDS\fP
|
137
|
-
A number (in seconds) to add to the \fBinterval\fP that is used to determine the frequency of chef\-client runs. This number can help prevent server load when there are many clients running at the same time.
|
210
|
+
A number (in seconds) to add to the \fBinterval\fP that is used to determine the frequency of chef\-client runs. This number can help prevent server load when there are many clients running at the same time. When the chef\-client is run at intervals, \fB\-\-splay\fP and \fB\-\-interval\fP values are applied before the chef\-client run.
|
138
211
|
.TP
|
139
212
|
.B \fB\-u USER\fP, \fB\-\-user USER\fP
|
140
213
|
The user that owns a process. This is required when starting any executable as a daemon.
|
@@ -84,7 +84,7 @@ When this is complete, the bootstrapped node will have:
|
|
84
84
|
|
85
85
|
- Latest Chef version installed from RubyGems or APT Packages from Opscode. This may be a later version than the local system.
|
86
86
|
- Be validated with the configured Chef Server.
|
87
|
-
- Have run Chef with its default run list if one is
|
87
|
+
- Have run Chef with its default run list if one is specified.
|
88
88
|
|
89
89
|
Additional custom bootstrap templates can be created and stored in
|
90
90
|
`.chef/bootstrap/DISTRO.erb`, replacing __DISTRO__ with the value passed
|
@@ -26,7 +26,7 @@ repository. Running `knife cookbook site install` does the following:
|
|
26
26
|
upstream;
|
27
27
|
2. All existing cookbooks are removed from the branch;
|
28
28
|
3. The cookbook is downloaded from the cookbook site in tarball form;
|
29
|
-
4. The downloaded cookbook is untarred, and its contents
|
29
|
+
4. The downloaded cookbook is untarred, and its contents committed via git;
|
30
30
|
5. The pristine copy branch is merged into the master branch.
|
31
31
|
|
32
32
|
By installing cookbook with this process, you can locally modify the
|
@@ -90,7 +90,7 @@ formatted according to the --format option.
|
|
90
90
|
|
91
91
|
## ENCRYPTION SUPPORT
|
92
92
|
Data Bag Items may be encrypted to keep their contents secret. This may
|
93
|
-
be
|
93
|
+
be desirable when storing sensitive information such as database
|
94
94
|
passwords, API keys, etc.
|
95
95
|
|
96
96
|
Data Bag Item encryption uses the AES-256 CBC symmetric key algorithm.
|
@@ -73,7 +73,7 @@ represented as a single JSON object, like this:
|
|
73
73
|
|
74
74
|
{"apache2": ">= 1.5.0"}
|
75
75
|
|
76
|
-
In the Ruby format, the cookbook version
|
76
|
+
In the Ruby format, the cookbook version constraints for an environment
|
77
77
|
are represented as a Ruby Hash, like this:
|
78
78
|
|
79
79
|
{"apache2" => ">= 1.5.0"}
|
@@ -174,7 +174,7 @@ recommended though, and git fits with a lot of the workflow paradigms.
|
|
174
174
|
## ENVIRONMENT
|
175
175
|
* `EDITOR`:
|
176
176
|
The text editor to use for editing data. The --editor option takes
|
177
|
-
precedence over this value, and the --disable-editing option
|
177
|
+
precedence over this value, and the --disable-editing option suppresses
|
178
178
|
data editing entirely.
|
179
179
|
|
180
180
|
## SEE ALSO
|
data/lib/chef.rb
CHANGED
@@ -32,10 +32,3 @@ require 'chef/run_status'
|
|
32
32
|
require 'chef/handler'
|
33
33
|
require 'chef/handler/json_file'
|
34
34
|
|
35
|
-
require 'chef/monkey_patches/tempfile'
|
36
|
-
require 'chef/monkey_patches/string'
|
37
|
-
require 'chef/monkey_patches/numeric'
|
38
|
-
require 'chef/monkey_patches/object'
|
39
|
-
require 'chef/monkey_patches/file'
|
40
|
-
require 'chef/monkey_patches/uri'
|
41
|
-
|
data/lib/chef/api_client.rb
CHANGED
@@ -96,7 +96,7 @@ class Chef
|
|
96
96
|
set_or_return(
|
97
97
|
:private_key,
|
98
98
|
arg,
|
99
|
-
:kind_of => String
|
99
|
+
:kind_of => [String, FalseClass]
|
100
100
|
)
|
101
101
|
end
|
102
102
|
|
@@ -124,7 +124,7 @@ class Chef
|
|
124
124
|
Chef::JSONCompat.to_json(to_hash, *a)
|
125
125
|
end
|
126
126
|
|
127
|
-
def self.
|
127
|
+
def self.from_hash(o)
|
128
128
|
client = Chef::ApiClient.new
|
129
129
|
client.name(o["name"] || o["clientname"])
|
130
130
|
client.private_key(o["private_key"]) if o.key?("private_key")
|
@@ -134,6 +134,14 @@ class Chef
|
|
134
134
|
client
|
135
135
|
end
|
136
136
|
|
137
|
+
def self.json_create(data)
|
138
|
+
from_hash(data)
|
139
|
+
end
|
140
|
+
|
141
|
+
def self.from_json(j)
|
142
|
+
from_hash(Chef::JSONCompat.parse(j))
|
143
|
+
end
|
144
|
+
|
137
145
|
def self.http_api
|
138
146
|
Chef::REST.new(Chef::Config[:chef_server_url])
|
139
147
|
end
|
@@ -33,9 +33,10 @@ class Chef
|
|
33
33
|
attr_reader :destination
|
34
34
|
attr_reader :name
|
35
35
|
|
36
|
-
def initialize(name, destination)
|
37
|
-
@name
|
38
|
-
@destination
|
36
|
+
def initialize(name, destination, http_api: nil)
|
37
|
+
@name = name
|
38
|
+
@destination = destination
|
39
|
+
@http_api = http_api
|
39
40
|
@server_generated_private_key = nil
|
40
41
|
end
|
41
42
|
|
@@ -120,11 +121,10 @@ class Chef
|
|
120
121
|
post_data
|
121
122
|
end
|
122
123
|
|
123
|
-
|
124
124
|
def http_api
|
125
|
-
@
|
126
|
-
|
127
|
-
|
125
|
+
@http_api ||= Chef::REST.new(Chef::Config[:chef_server_url],
|
126
|
+
Chef::Config[:validation_client_name],
|
127
|
+
Chef::Config[:validation_key])
|
128
128
|
end
|
129
129
|
|
130
130
|
# Whether or not to generate keys locally and post the public key to the
|
@@ -161,5 +161,3 @@ class Chef
|
|
161
161
|
end
|
162
162
|
end
|
163
163
|
end
|
164
|
-
|
165
|
-
|
data/lib/chef/application.rb
CHANGED
@@ -17,6 +17,7 @@
|
|
17
17
|
# limitations under the License.
|
18
18
|
|
19
19
|
require 'pp'
|
20
|
+
require 'uri'
|
20
21
|
require 'socket'
|
21
22
|
require 'chef/config'
|
22
23
|
require 'chef/config_fetcher'
|
@@ -48,6 +49,7 @@ class Chef
|
|
48
49
|
configure_logging
|
49
50
|
configure_proxy_environment_variables
|
50
51
|
configure_encoding
|
52
|
+
emit_warnings
|
51
53
|
end
|
52
54
|
|
53
55
|
# Get this party started
|
@@ -102,6 +104,12 @@ class Chef
|
|
102
104
|
Chef::Config.merge!(config)
|
103
105
|
end
|
104
106
|
|
107
|
+
def set_specific_recipes
|
108
|
+
Chef::Config[:specific_recipes] =
|
109
|
+
cli_arguments.map { |file| File.expand_path(file) } if
|
110
|
+
cli_arguments.respond_to?(:map)
|
111
|
+
end
|
112
|
+
|
105
113
|
# Initialize and configure the logger.
|
106
114
|
# === Loggers and Formatters
|
107
115
|
# In Chef 10.x and previous, the Logger was the primary/only way that Chef
|
@@ -198,16 +206,18 @@ class Chef
|
|
198
206
|
|
199
207
|
# Initializes Chef::Client instance and runs it
|
200
208
|
def run_chef_client(specific_recipes = [])
|
209
|
+
unless specific_recipes.respond_to?(:size)
|
210
|
+
raise ArgumentError, 'received non-Array like specific_recipes argument'
|
211
|
+
end
|
212
|
+
|
201
213
|
Chef::LocalMode.with_server_connectivity do
|
202
214
|
override_runlist = config[:override_runlist]
|
203
|
-
if specific_recipes.size > 0
|
204
|
-
override_runlist ||= []
|
205
|
-
end
|
215
|
+
override_runlist ||= [] if specific_recipes.size > 0
|
206
216
|
@chef_client = Chef::Client.new(
|
207
217
|
@chef_client_json,
|
208
|
-
:
|
209
|
-
:
|
210
|
-
:
|
218
|
+
override_runlist: override_runlist,
|
219
|
+
specific_recipes: specific_recipes,
|
220
|
+
runlist: config[:runlist]
|
211
221
|
)
|
212
222
|
@chef_client_json = nil
|
213
223
|
|
@@ -226,7 +236,7 @@ class Chef
|
|
226
236
|
private
|
227
237
|
def can_fork?
|
228
238
|
# win32-process gem exposes some form of :fork for Process
|
229
|
-
# class. So we are
|
239
|
+
# class. So we are separately ensuring that the platform we're
|
230
240
|
# running on is not windows before forking.
|
231
241
|
Chef::Config[:client_fork] && Process.respond_to?(:fork) && !Chef::Platform.windows?
|
232
242
|
end
|
@@ -237,7 +247,7 @@ class Chef
|
|
237
247
|
# Override the TERM signal.
|
238
248
|
trap('TERM') do
|
239
249
|
Chef::Log.debug("SIGTERM received during converge," +
|
240
|
-
|
250
|
+
" finishing converge to exit normally (send SIGINT to terminate immediately)")
|
241
251
|
end
|
242
252
|
|
243
253
|
@chef_client.run
|
@@ -251,7 +261,7 @@ class Chef
|
|
251
261
|
# TERM singal is received (exit gracefully)
|
252
262
|
trap('TERM') do
|
253
263
|
Chef::Log.debug("SIGTERM received during converge," +
|
254
|
-
|
264
|
+
" finishing converge to exit normally (send SIGINT to terminate immediately)")
|
255
265
|
end
|
256
266
|
|
257
267
|
client_solo = Chef::Config[:solo] ? "chef-solo" : "chef-client"
|
@@ -297,7 +307,7 @@ class Chef
|
|
297
307
|
def configure_http_proxy
|
298
308
|
if http_proxy = Chef::Config[:http_proxy]
|
299
309
|
http_proxy_string = configure_proxy("http", http_proxy,
|
300
|
-
|
310
|
+
Chef::Config[:http_proxy_user], Chef::Config[:http_proxy_pass])
|
301
311
|
env['http_proxy'] = http_proxy_string unless env['http_proxy']
|
302
312
|
env['HTTP_PROXY'] = http_proxy_string unless env['HTTP_PROXY']
|
303
313
|
end
|
@@ -307,7 +317,7 @@ class Chef
|
|
307
317
|
def configure_https_proxy
|
308
318
|
if https_proxy = Chef::Config[:https_proxy]
|
309
319
|
https_proxy_string = configure_proxy("https", https_proxy,
|
310
|
-
|
320
|
+
Chef::Config[:https_proxy_user], Chef::Config[:https_proxy_pass])
|
311
321
|
env['https_proxy'] = https_proxy_string unless env['https_proxy']
|
312
322
|
env['HTTPS_PROXY'] = https_proxy_string unless env['HTTPS_PROXY']
|
313
323
|
end
|
@@ -317,7 +327,7 @@ class Chef
|
|
317
327
|
def configure_ftp_proxy
|
318
328
|
if ftp_proxy = Chef::Config[:ftp_proxy]
|
319
329
|
ftp_proxy_string = configure_proxy("ftp", ftp_proxy,
|
320
|
-
|
330
|
+
Chef::Config[:ftp_proxy_user], Chef::Config[:ftp_proxy_pass])
|
321
331
|
env['ftp_proxy'] = ftp_proxy_string unless env['ftp_proxy']
|
322
332
|
env['FTP_PROXY'] = ftp_proxy_string unless env['FTP_PROXY']
|
323
333
|
end
|
@@ -371,6 +381,12 @@ class Chef
|
|
371
381
|
ENV
|
372
382
|
end
|
373
383
|
|
384
|
+
def emit_warnings
|
385
|
+
if Chef::Config[:chef_gem_compile_time]
|
386
|
+
Chef::Log.deprecation "setting chef_gem_compile_time to true is deprecated"
|
387
|
+
end
|
388
|
+
end
|
389
|
+
|
374
390
|
class << self
|
375
391
|
def debug_stacktrace(e)
|
376
392
|
message = "#{e.class}: #{e}\n#{e.backtrace.join("\n")}"
|
@@ -43,6 +43,12 @@ class Chef::Application::Apply < Chef::Application
|
|
43
43
|
:description => "Execute resources read from STDIN",
|
44
44
|
:boolean => true
|
45
45
|
|
46
|
+
option :json_attribs,
|
47
|
+
:short => "-j JSON_ATTRIBS",
|
48
|
+
:long => "--json-attributes JSON_ATTRIBS",
|
49
|
+
:description => "Load attributes from a JSON file or URL",
|
50
|
+
:proc => nil
|
51
|
+
|
46
52
|
option :log_level,
|
47
53
|
:short => "-l LEVEL",
|
48
54
|
:long => "--log_level LEVEL",
|
@@ -79,6 +85,8 @@ class Chef::Application::Apply < Chef::Application
|
|
79
85
|
:default => !Chef::Platform.windows?,
|
80
86
|
:description => "Use colored output, defaults to enabled"
|
81
87
|
|
88
|
+
attr_reader :json_attribs
|
89
|
+
|
82
90
|
def initialize
|
83
91
|
super
|
84
92
|
end
|
@@ -88,6 +96,14 @@ class Chef::Application::Apply < Chef::Application
|
|
88
96
|
Chef::Config.merge!(config)
|
89
97
|
configure_logging
|
90
98
|
configure_proxy_environment_variables
|
99
|
+
parse_json
|
100
|
+
end
|
101
|
+
|
102
|
+
def parse_json
|
103
|
+
if Chef::Config[:json_attribs]
|
104
|
+
config_fetcher = Chef::ConfigFetcher.new(Chef::Config[:json_attribs])
|
105
|
+
@json_attribs = config_fetcher.fetch_json
|
106
|
+
end
|
91
107
|
end
|
92
108
|
|
93
109
|
def read_recipe_file(file_name)
|
@@ -106,7 +122,7 @@ class Chef::Application::Apply < Chef::Application
|
|
106
122
|
|
107
123
|
def get_recipe_and_run_context
|
108
124
|
Chef::Config[:solo] = true
|
109
|
-
@chef_client = Chef::Client.new
|
125
|
+
@chef_client = Chef::Client.new(@json_attribs)
|
110
126
|
@chef_client.run_ohai
|
111
127
|
@chef_client.load_node
|
112
128
|
@chef_client.build_node
|
@@ -27,6 +27,7 @@ require 'chef/handler/error_report'
|
|
27
27
|
require 'chef/workstation_config_loader'
|
28
28
|
|
29
29
|
class Chef::Application::Client < Chef::Application
|
30
|
+
include Chef::Mixin::ShellOut
|
30
31
|
|
31
32
|
# Mimic self_pipe sleep from Unicorn to capture signals safely
|
32
33
|
SELF_PIPE = []
|
@@ -63,7 +64,7 @@ class Chef::Application::Client < Chef::Application
|
|
63
64
|
option :log_level,
|
64
65
|
:short => "-l LEVEL",
|
65
66
|
:long => "--log_level LEVEL",
|
66
|
-
:description => "Set the log level (debug, info, warn, error, fatal)",
|
67
|
+
:description => "Set the log level (auto, debug, info, warn, error, fatal)",
|
67
68
|
:proc => lambda { |l| l.to_sym }
|
68
69
|
|
69
70
|
option :log_location,
|
@@ -104,7 +105,12 @@ class Chef::Application::Client < Chef::Application
|
|
104
105
|
option :pid_file,
|
105
106
|
:short => "-P PID_FILE",
|
106
107
|
:long => "--pid PIDFILE",
|
107
|
-
:description => "Set the PID file location,
|
108
|
+
:description => "Set the PID file location, for the chef-client daemon process. Defaults to /tmp/chef-client.pid",
|
109
|
+
:proc => nil
|
110
|
+
|
111
|
+
option :lockfile,
|
112
|
+
:long => "--lockfile LOCKFILE",
|
113
|
+
:description => "Set the lockfile location. Prevents multiple client processes from converging at the same time",
|
108
114
|
:proc => nil
|
109
115
|
|
110
116
|
option :interval,
|
@@ -200,6 +206,10 @@ class Chef::Application::Client < Chef::Application
|
|
200
206
|
:description => "Fork client",
|
201
207
|
:boolean => true
|
202
208
|
|
209
|
+
option :recipe_url,
|
210
|
+
:long => "--recipe-url=RECIPE_URL",
|
211
|
+
:description => "Pull down a remote archive of recipes and unpack it to the cookbook cache. Only used in local mode."
|
212
|
+
|
203
213
|
option :enable_reporting,
|
204
214
|
:short => "-R",
|
205
215
|
:long => "--enable-reporting",
|
@@ -239,9 +249,9 @@ class Chef::Application::Client < Chef::Application
|
|
239
249
|
end
|
240
250
|
|
241
251
|
option :audit_mode,
|
242
|
-
:long => "--
|
243
|
-
:description => "
|
244
|
-
:
|
252
|
+
:long => "--audit-mode MODE",
|
253
|
+
:description => "Enable audit-mode with `enabled`. Disable audit-mode with `disabled`. Skip converge and only perform audits with `audit-only`",
|
254
|
+
:proc => lambda { |mo| mo.gsub("-", "_").to_sym }
|
245
255
|
|
246
256
|
IMMEDIATE_RUN_SIGNAL = "1".freeze
|
247
257
|
|
@@ -252,7 +262,9 @@ class Chef::Application::Client < Chef::Application
|
|
252
262
|
def reconfigure
|
253
263
|
super
|
254
264
|
|
255
|
-
Chef::Config[:
|
265
|
+
raise Chef::Exceptions::PIDFileLockfileMatch if Chef::Util::PathHelper.paths_eql? (Chef::Config[:pid_file] || '' ), (Chef::Config[:lockfile] || '')
|
266
|
+
|
267
|
+
set_specific_recipes
|
256
268
|
|
257
269
|
Chef::Config[:chef_server_url] = config[:chef_server_url] if config.has_key? :chef_server_url
|
258
270
|
|
@@ -260,6 +272,18 @@ class Chef::Application::Client < Chef::Application
|
|
260
272
|
if Chef::Config.local_mode && !Chef::Config.has_key?(:cookbook_path) && !Chef::Config.has_key?(:chef_repo_path)
|
261
273
|
Chef::Config.chef_repo_path = Chef::Config.find_chef_repo_path(Dir.pwd)
|
262
274
|
end
|
275
|
+
|
276
|
+
if !Chef::Config.local_mode && Chef::Config.has_key?(:recipe_url)
|
277
|
+
Chef::Application.fatal!("chef-client recipe-url can be used only in local-mode", 1)
|
278
|
+
elsif Chef::Config.local_mode && Chef::Config.has_key?(:recipe_url)
|
279
|
+
Chef::Log.debug "Creating path #{Chef::Config.chef_repo_path} to extract recipes into"
|
280
|
+
FileUtils.mkdir_p(Chef::Config.chef_repo_path)
|
281
|
+
tarball_path = File.join(Chef::Config.chef_repo_path, 'recipes.tgz')
|
282
|
+
fetch_recipe_tarball(Chef::Config[:recipe_url], tarball_path)
|
283
|
+
result = shell_out!("tar zxvf #{tarball_path} -C #{Chef::Config.chef_repo_path}")
|
284
|
+
Chef::Log.debug "#{result.stdout}"
|
285
|
+
end
|
286
|
+
|
263
287
|
Chef::Config.chef_zero.host = config[:chef_zero_host] if config[:chef_zero_host]
|
264
288
|
Chef::Config.chef_zero.port = config[:chef_zero_port] if config[:chef_zero_port]
|
265
289
|
|
@@ -280,6 +304,19 @@ class Chef::Application::Client < Chef::Application
|
|
280
304
|
config_fetcher = Chef::ConfigFetcher.new(Chef::Config[:json_attribs])
|
281
305
|
@chef_client_json = config_fetcher.fetch_json
|
282
306
|
end
|
307
|
+
|
308
|
+
if mode = config[:audit_mode] || Chef::Config[:audit_mode]
|
309
|
+
expected_modes = [:enabled, :disabled, :audit_only]
|
310
|
+
unless expected_modes.include?(mode)
|
311
|
+
Chef::Application.fatal!(unrecognized_audit_mode(mode))
|
312
|
+
end
|
313
|
+
|
314
|
+
unless mode == :disabled
|
315
|
+
# This should be removed when audit-mode is enabled by default/no longer
|
316
|
+
# an experimental feature.
|
317
|
+
Chef::Log.warn(audit_mode_experimental_message)
|
318
|
+
end
|
319
|
+
end
|
283
320
|
end
|
284
321
|
|
285
322
|
def load_config_file
|
@@ -400,4 +437,35 @@ class Chef::Application::Client < Chef::Application
|
|
400
437
|
"#{"\n interval = #{Chef::Config[:interval]} seconds" if Chef::Config[:interval]}" +
|
401
438
|
"\nEnable chef-client interval runs by setting `:client_fork = true` in your config file or adding `--fork` to your command line options."
|
402
439
|
end
|
440
|
+
|
441
|
+
def audit_mode_settings_explaination
|
442
|
+
"\n* To enable audit mode after converge, use command line option `--audit-mode enabled` or set `:audit_mode = :enabled` in your config file." +
|
443
|
+
"\n* To disable audit mode, use command line option `--audit-mode disabled` or set `:audit_mode = :disabled` in your config file." +
|
444
|
+
"\n* To only run audit mode, use command line option `--audit-mode audit-only` or set `:audit_mode = :audit_only` in your config file." +
|
445
|
+
"\nAudit mode is disabled by default."
|
446
|
+
end
|
447
|
+
|
448
|
+
def unrecognized_audit_mode(mode)
|
449
|
+
"Unrecognized setting #{mode} for audit mode." + audit_mode_settings_explaination
|
450
|
+
end
|
451
|
+
|
452
|
+
def audit_mode_experimental_message
|
453
|
+
msg = if Chef::Config[:audit_mode] == :audit_only
|
454
|
+
"Chef-client has been configured to skip converge and run only audits."
|
455
|
+
else
|
456
|
+
"Chef-client has been configured to run audits after it converges."
|
457
|
+
end
|
458
|
+
msg += " Audit mode is an experimental feature currently under development. API changes may occur. Use at your own risk."
|
459
|
+
msg += audit_mode_settings_explaination
|
460
|
+
return msg
|
461
|
+
end
|
462
|
+
|
463
|
+
def fetch_recipe_tarball(url, path)
|
464
|
+
Chef::Log.debug("Download recipes tarball from #{url} to #{path}")
|
465
|
+
File.open(path, 'wb') do |f|
|
466
|
+
open(url) do |r|
|
467
|
+
f.write(r.read)
|
468
|
+
end
|
469
|
+
end
|
470
|
+
end
|
403
471
|
end
|