chef 12.0.0.alpha.2-x86-mingw32 → 12.0.0.rc.0-x86-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CONTRIBUTING.md +9 -0
- data/README.md +1 -1
- data/Rakefile +12 -0
- data/bin/chef-service-manager +1 -1
- data/bin/chef-windows-service +35 -0
- data/distro/common/html/_sources/ctl_chef_server.txt +307 -10
- data/distro/common/html/ctl_chef_client.html +3 -7
- data/distro/common/html/ctl_chef_server.html +609 -41
- data/distro/common/html/ctl_chef_shell.html +2 -2
- data/distro/common/html/ctl_chef_solo.html +1 -1
- data/distro/common/html/index.html +13 -13
- data/distro/common/html/knife.html +10 -10
- data/distro/common/html/knife_bootstrap.html +8 -8
- data/distro/common/html/knife_client.html +12 -12
- data/distro/common/html/knife_common_options.html +7 -7
- data/distro/common/html/knife_configure.html +3 -3
- data/distro/common/html/knife_cookbook.html +19 -19
- data/distro/common/html/knife_cookbook_site.html +28 -28
- data/distro/common/html/knife_data_bag.html +28 -13
- data/distro/common/html/knife_delete.html +2 -2
- data/distro/common/html/knife_deps.html +3 -3
- data/distro/common/html/knife_diff.html +4 -4
- data/distro/common/html/knife_download.html +3 -3
- data/distro/common/html/knife_edit.html +2 -2
- data/distro/common/html/knife_environment.html +14 -14
- data/distro/common/html/knife_exec.html +11 -11
- data/distro/common/html/knife_index_rebuild.html +2 -2
- data/distro/common/html/knife_list.html +3 -3
- data/distro/common/html/knife_node.html +23 -23
- data/distro/common/html/knife_raw.html +4 -4
- data/distro/common/html/knife_recipe_list.html +3 -3
- data/distro/common/html/knife_role.html +11 -11
- data/distro/common/html/knife_search.html +4 -4
- data/distro/common/html/knife_serve.html +3 -3
- data/distro/common/html/knife_show.html +3 -3
- data/distro/common/html/knife_ssh.html +7 -7
- data/distro/common/html/knife_ssl_check.html +7 -7
- data/distro/common/html/knife_ssl_fetch.html +9 -9
- data/distro/common/html/knife_status.html +3 -3
- data/distro/common/html/knife_tag.html +9 -9
- data/distro/common/html/knife_upload.html +3 -3
- data/distro/common/html/knife_user.html +9 -9
- data/distro/common/html/knife_using.html +11 -11
- data/distro/common/html/knife_xargs.html +14 -5
- data/distro/common/html/search.html +2 -2
- data/distro/common/html/searchindex.js +1 -1
- data/distro/common/man/man1/chef-shell.1 +2 -2
- data/distro/common/man/man1/knife-bootstrap.1 +7 -7
- data/distro/common/man/man1/knife-client.1 +10 -10
- data/distro/common/man/man1/knife-configure.1 +5 -5
- data/distro/common/man/man1/knife-cookbook-site.1 +24 -24
- data/distro/common/man/man1/knife-cookbook.1 +12 -12
- data/distro/common/man/man1/knife-data-bag.1 +34 -10
- data/distro/common/man/man1/knife-delete.1 +5 -5
- data/distro/common/man/man1/knife-deps.1 +5 -5
- data/distro/common/man/man1/knife-diff.1 +7 -7
- data/distro/common/man/man1/knife-download.1 +5 -5
- data/distro/common/man/man1/knife-edit.1 +5 -5
- data/distro/common/man/man1/knife-environment.1 +11 -11
- data/distro/common/man/man1/knife-exec.1 +11 -11
- data/distro/common/man/man1/knife-index-rebuild.1 +1 -1
- data/distro/common/man/man1/knife-list.1 +5 -5
- data/distro/common/man/man1/knife-node.1 +16 -16
- data/distro/common/man/man1/knife-raw.1 +6 -6
- data/distro/common/man/man1/knife-recipe-list.1 +1 -1
- data/distro/common/man/man1/knife-role.1 +7 -7
- data/distro/common/man/man1/knife-search.1 +6 -6
- data/distro/common/man/man1/knife-serve.1 +6 -6
- data/distro/common/man/man1/knife-show.1 +5 -5
- data/distro/common/man/man1/knife-ssh.1 +9 -9
- data/distro/common/man/man1/knife-ssl-check.1 +7 -7
- data/distro/common/man/man1/knife-ssl-fetch.1 +9 -9
- data/distro/common/man/man1/knife-status.1 +5 -5
- data/distro/common/man/man1/knife-tag.1 +8 -8
- data/distro/common/man/man1/knife-upload.1 +5 -5
- data/distro/common/man/man1/knife-user.1 +8 -8
- data/distro/common/man/man1/knife-xargs.1 +36 -10
- data/distro/common/man/man1/knife.1 +14 -14
- data/distro/common/man/man8/chef-client.8 +3 -10
- data/distro/common/man/man8/chef-solo.8 +1 -1
- data/ext/win32-eventlog/Rakefile +50 -0
- data/ext/win32-eventlog/chef-log.man +26 -0
- data/lib/chef/application.rb +313 -241
- data/lib/chef/application/apply.rb +10 -8
- data/lib/chef/application/client.rb +58 -33
- data/lib/chef/application/solo.rb +33 -12
- data/lib/chef/chef_fs/chef_fs_data_store.rb +1 -1
- data/lib/chef/chef_fs/command_line.rb +1 -1
- data/lib/chef/chef_fs/file_system/organization_invites_entry.rb +2 -1
- data/lib/chef/chef_fs/file_system/organization_members_entry.rb +2 -1
- data/lib/chef/chef_fs/file_system/rest_list_entry.rb +2 -1
- data/lib/chef/client.rb +18 -48
- data/lib/chef/config.rb +43 -11
- data/lib/chef/cookbook/cookbook_version_loader.rb +14 -7
- data/lib/chef/cookbook/metadata.rb +81 -38
- data/lib/chef/cookbook/syntax_check.rb +18 -52
- data/lib/chef/cookbook_loader.rb +1 -1
- data/lib/chef/cookbook_version.rb +58 -39
- data/lib/chef/data_bag.rb +2 -2
- data/lib/chef/deprecation/provider/file.rb +2 -1
- data/lib/chef/dsl/data_query.rb +2 -29
- data/lib/chef/dsl/recipe.rb +8 -22
- data/lib/chef/encrypted_data_bag_item/assertions.rb +1 -1
- data/lib/chef/encrypted_data_bag_item/check_encrypted.rb +56 -0
- data/lib/chef/encrypted_data_bag_item/encrypted_data_bag_item_assertions.rb +1 -1
- data/lib/chef/event_loggers/base.rb +62 -0
- data/lib/chef/event_loggers/windows_eventlog.rb +104 -0
- data/lib/chef/exceptions.rb +18 -1
- data/lib/chef/file_cache.rb +3 -2
- data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +15 -6
- data/lib/chef/http.rb +20 -13
- data/lib/chef/http/ssl_policies.rb +2 -1
- data/lib/chef/json_compat.rb +9 -3
- data/lib/chef/knife.rb +2 -1
- data/lib/chef/knife/bootstrap.rb +12 -18
- data/lib/chef/knife/bootstrap/archlinux-gems.erb +2 -2
- data/lib/chef/knife/bootstrap/chef-aix.erb +2 -2
- data/lib/chef/knife/bootstrap/chef-full.erb +2 -2
- data/lib/chef/knife/cookbook_create.rb +1 -1
- data/lib/chef/knife/cookbook_site_share.rb +43 -8
- data/lib/chef/knife/core/bootstrap_context.rb +6 -11
- data/lib/chef/knife/core/object_loader.rb +5 -5
- data/lib/chef/knife/core/status_presenter.rb +156 -0
- data/lib/chef/knife/core/subcommand_loader.rb +6 -5
- data/lib/chef/knife/core/ui.rb +4 -4
- data/lib/chef/knife/data_bag_create.rb +7 -32
- data/lib/chef/knife/data_bag_edit.rb +24 -43
- data/lib/chef/knife/data_bag_from_file.rb +6 -31
- data/lib/chef/knife/data_bag_secret_options.rb +142 -0
- data/lib/chef/knife/data_bag_show.rb +19 -33
- data/lib/chef/knife/node_from_file.rb +9 -8
- data/lib/chef/knife/ssh.rb +0 -7
- data/lib/chef/knife/ssl_check.rb +70 -6
- data/lib/chef/knife/status.rb +11 -58
- data/lib/chef/mixin/command/unix.rb +2 -2
- data/lib/chef/mixin/convert_to_class_name.rb +54 -0
- data/lib/chef/mixin/descendants_tracker.rb +82 -0
- data/lib/chef/mixin/homebrew_user.rb +68 -0
- data/lib/chef/mixin/shell_out.rb +0 -4
- data/lib/chef/mixin/windows_architecture_helper.rb +16 -0
- data/lib/chef/mixin/windows_env_helper.rb +56 -0
- data/lib/chef/node.rb +2 -2
- data/lib/chef/node_map.rb +146 -0
- data/lib/chef/platform/provider_mapping.rb +11 -39
- data/lib/chef/platform/provider_priority_map.rb +80 -0
- data/lib/chef/platform/query_helpers.rb +5 -1
- data/lib/chef/platform/service_helpers.rb +113 -0
- data/lib/chef/provider.rb +24 -0
- data/lib/chef/provider/breakpoint.rb +2 -0
- data/lib/chef/provider/cookbook_file.rb +2 -0
- data/lib/chef/provider/cron.rb +1 -1
- data/lib/chef/provider/cron/unix.rb +13 -9
- data/lib/chef/provider/deploy.rb +3 -2
- data/lib/chef/provider/deploy/revision.rb +4 -2
- data/lib/chef/provider/deploy/timestamped.rb +2 -0
- data/lib/chef/provider/directory.rb +2 -0
- data/lib/chef/provider/dsc_script.rb +179 -0
- data/lib/chef/provider/env.rb +25 -10
- data/lib/chef/provider/env/windows.rb +9 -16
- data/lib/chef/provider/erl_call.rb +2 -0
- data/lib/chef/provider/execute.rb +5 -2
- data/lib/chef/provider/file.rb +2 -0
- data/lib/chef/provider/git.rb +51 -23
- data/lib/chef/provider/group/dscl.rb +2 -2
- data/lib/chef/provider/group/pw.rb +9 -13
- data/lib/chef/provider/http_request.rb +2 -0
- data/lib/chef/provider/link.rb +3 -0
- data/lib/chef/provider/log.rb +2 -0
- data/lib/chef/provider/lwrp_base.rb +11 -9
- data/lib/chef/provider/mount/mount.rb +1 -1
- data/lib/chef/provider/package/aix.rb +2 -0
- data/lib/chef/provider/package/apt.rb +2 -0
- data/lib/chef/provider/package/dpkg.rb +2 -0
- data/lib/chef/provider/package/easy_install.rb +2 -0
- data/lib/chef/provider/package/freebsd/pkg.rb +2 -1
- data/lib/chef/provider/package/freebsd/pkgng.rb +1 -1
- data/lib/chef/provider/package/freebsd/port.rb +1 -9
- data/lib/chef/provider/package/homebrew.rb +127 -0
- data/lib/chef/provider/package/ips.rb +2 -0
- data/lib/chef/provider/package/macports.rb +3 -0
- data/lib/chef/provider/package/pacman.rb +5 -4
- data/lib/chef/provider/package/paludis.rb +4 -2
- data/lib/chef/provider/package/portage.rb +4 -1
- data/lib/chef/provider/package/rpm.rb +2 -0
- data/lib/chef/provider/package/rubygems.rb +4 -0
- data/lib/chef/provider/package/smartos.rb +2 -0
- data/lib/chef/provider/package/solaris.rb +2 -0
- data/lib/chef/provider/package/windows.rb +5 -2
- data/lib/chef/provider/package/yum.rb +2 -0
- data/lib/chef/provider/powershell_script.rb +3 -1
- data/lib/chef/provider/remote_directory.rb +25 -10
- data/lib/chef/provider/route.rb +2 -0
- data/lib/chef/provider/ruby_block.rb +2 -0
- data/lib/chef/provider/script.rb +6 -0
- data/lib/chef/provider/service/aix.rb +128 -0
- data/lib/chef/provider/service/aixinit.rb +117 -0
- data/lib/chef/provider/service/arch.rb +6 -0
- data/lib/chef/provider/service/debian.rb +35 -29
- data/lib/chef/provider/service/freebsd.rb +7 -1
- data/lib/chef/provider/service/gentoo.rb +5 -1
- data/lib/chef/provider/service/init.rb +2 -0
- data/lib/chef/provider/service/insserv.rb +15 -8
- data/lib/chef/provider/service/invokercd.rb +6 -0
- data/lib/chef/provider/service/macosx.rb +4 -1
- data/lib/chef/provider/service/redhat.rb +9 -3
- data/lib/chef/provider/service/simple.rb +2 -0
- data/lib/chef/provider/service/solaris.rb +2 -0
- data/lib/chef/provider/service/systemd.rb +7 -0
- data/lib/chef/provider/service/upstart.rb +7 -0
- data/lib/chef/provider/service/windows.rb +5 -0
- data/lib/chef/provider/subversion.rb +2 -0
- data/lib/chef/provider/template.rb +1 -0
- data/lib/chef/provider/user/dscl.rb +3 -2
- data/lib/chef/provider/whyrun_safe_ruby_block.rb +2 -0
- data/lib/chef/provider_resolver.rb +103 -0
- data/lib/chef/providers.rb +6 -2
- data/lib/chef/recipe.rb +2 -0
- data/lib/chef/resource.rb +69 -78
- data/lib/chef/resource/apt_package.rb +3 -1
- data/lib/chef/resource/bash.rb +1 -0
- data/lib/chef/resource/bff_package.rb +0 -1
- data/lib/chef/resource/breakpoint.rb +1 -1
- data/lib/chef/resource/chef_gem.rb +1 -2
- data/lib/chef/resource/conditional.rb +26 -6
- data/lib/chef/resource/cookbook_file.rb +2 -3
- data/lib/chef/resource/csh.rb +1 -0
- data/lib/chef/resource/deploy.rb +0 -1
- data/lib/chef/resource/deploy_revision.rb +6 -1
- data/lib/chef/resource/directory.rb +1 -2
- data/lib/chef/resource/dpkg_package.rb +2 -1
- data/lib/chef/resource/dsc_script.rb +125 -0
- data/lib/chef/resource/easy_install_package.rb +2 -1
- data/lib/chef/resource/erl_call.rb +1 -0
- data/lib/chef/resource/execute.rb +26 -9
- data/lib/chef/resource/file.rb +1 -3
- data/lib/chef/resource/freebsd_package.rb +10 -23
- data/lib/chef/resource/gem_package.rb +2 -1
- data/lib/chef/resource/git.rb +2 -1
- data/lib/chef/resource/homebrew_package.rb +46 -0
- data/lib/chef/resource/http_request.rb +1 -0
- data/lib/chef/resource/ips_package.rb +3 -1
- data/lib/chef/resource/link.rb +1 -2
- data/lib/chef/resource/log.rb +4 -0
- data/lib/chef/resource/lwrp_base.rb +24 -15
- data/lib/chef/resource/macports_package.rb +3 -1
- data/lib/chef/resource/pacman_package.rb +2 -1
- data/lib/chef/resource/paludis_package.rb +3 -1
- data/lib/chef/resource/perl.rb +1 -0
- data/lib/chef/resource/powershell_script.rb +0 -2
- data/lib/chef/resource/python.rb +1 -1
- data/lib/chef/resource/remote_directory.rb +1 -2
- data/lib/chef/resource/remote_file.rb +1 -1
- data/lib/chef/resource/rpm_package.rb +2 -1
- data/lib/chef/resource/ruby.rb +1 -0
- data/lib/chef/resource/ruby_block.rb +3 -0
- data/lib/chef/resource/script.rb +2 -25
- data/lib/chef/resource/service.rb +0 -4
- data/lib/chef/resource/smartos_package.rb +3 -4
- data/lib/chef/resource/solaris_package.rb +7 -1
- data/lib/chef/resource/subversion.rb +0 -1
- data/lib/chef/resource/template.rb +2 -3
- data/lib/chef/resource/timestamped_deploy.rb +1 -2
- data/lib/chef/resource/whyrun_safe_ruby_block.rb +0 -1
- data/lib/chef/resource/windows_package.rb +3 -4
- data/lib/chef/resource/windows_script.rb +3 -0
- data/lib/chef/resource/windows_service.rb +2 -2
- data/lib/chef/resource/yum_package.rb +3 -1
- data/lib/chef/resource_collection.rb +50 -227
- data/lib/chef/resource_collection/resource_collection_serialization.rb +59 -0
- data/lib/chef/resource_collection/resource_list.rb +89 -0
- data/lib/chef/resource_collection/resource_set.rb +170 -0
- data/lib/chef/resources.rb +2 -0
- data/lib/chef/role.rb +1 -1
- data/lib/chef/run_context.rb +5 -1
- data/lib/chef/shell/ext.rb +1 -1
- data/lib/chef/util/backup.rb +3 -2
- data/lib/chef/util/dsc/configuration_generator.rb +115 -0
- data/lib/chef/util/dsc/lcm_output_parser.rb +133 -0
- data/lib/chef/util/dsc/local_configuration_manager.rb +141 -0
- data/lib/chef/util/dsc/resource_info.rb +26 -0
- data/lib/chef/util/path_helper.rb +12 -0
- data/lib/chef/util/powershell/cmdlet.rb +136 -0
- data/lib/chef/util/powershell/cmdlet_result.rb +46 -0
- data/lib/chef/version.rb +1 -1
- data/lib/chef/win32/api/system.rb +9 -0
- data/lib/chef/win32/version.rb +2 -0
- data/spec/.DS_Store +0 -0
- data/spec/data/.DS_Store +0 -0
- data/spec/data/bootstrap/test-hints.erb +1 -1
- data/spec/data/bootstrap/test.erb +1 -1
- data/spec/data/cb_version_cookbooks/cookbook2/files/test.txt +0 -0
- data/spec/data/cb_version_cookbooks/cookbook2/templates/test.erb +0 -0
- data/spec/data/cookbooks/ignorken/files/default/not_me.rb +2 -0
- data/spec/data/cookbooks/ignorken/templates/ubuntu-12.10/not_me.rb +2 -0
- data/spec/data/cookbooks/openldap/libraries/openldap.rb +4 -0
- data/spec/data/cookbooks/openldap/libraries/openldap/version.rb +3 -0
- data/spec/data/lwrp/.DS_Store +0 -0
- data/spec/data/lwrp/providers/.DS_Store +0 -0
- data/spec/data/lwrp/providers/buck_passer.rb +9 -2
- data/spec/data/lwrp/resources/.DS_Store +0 -0
- data/spec/data/lwrp/resources/foo.rb +3 -2
- data/spec/data/lwrp_override/.DS_Store +0 -0
- data/spec/data/lwrp_override/providers/.DS_Store +0 -0
- data/spec/data/lwrp_override/providers/buck_passer.rb +5 -10
- data/spec/data/lwrp_override/resources/.DS_Store +0 -0
- data/spec/data/lwrp_override/resources/foo.rb +4 -3
- data/spec/functional/assets/chefinittest +34 -0
- data/spec/functional/assets/testchefsubsys +11 -0
- data/spec/functional/dsl/reboot_pending_spec.rb +19 -16
- data/spec/functional/event_loggers/windows_eventlog_spec.rb +82 -0
- data/spec/functional/knife/cookbook_delete_spec.rb +3 -3
- data/spec/functional/knife/exec_spec.rb +1 -1
- data/spec/functional/resource/aix_service_spec.rb +136 -0
- data/spec/functional/resource/aixinit_service_spec.rb +211 -0
- data/spec/functional/resource/base.rb +1 -0
- data/spec/functional/resource/batch_spec.rb +4 -11
- data/spec/functional/resource/cron_spec.rb +7 -1
- data/spec/functional/resource/dsc_script_spec.rb +382 -0
- data/spec/functional/resource/env_spec.rb +54 -0
- data/spec/functional/resource/execute_spec.rb +113 -0
- data/spec/functional/resource/file_spec.rb +2 -0
- data/spec/functional/resource/group_spec.rb +7 -4
- data/spec/functional/resource/powershell_spec.rb +198 -185
- data/spec/functional/resource/rpm_spec.rb +5 -4
- data/spec/functional/resource/user/dscl_spec.rb +2 -1
- data/spec/functional/util/path_helper_spec.rb +37 -0
- data/spec/functional/util/powershell/cmdlet_spec.rb +114 -0
- data/spec/integration/client/client_spec.rb +1 -1
- data/spec/integration/client/ipv6_spec.rb +1 -1
- data/spec/integration/knife/chef_fs_data_store_spec.rb +1 -1
- data/spec/integration/knife/chef_repo_path_spec.rb +1 -1
- data/spec/integration/knife/chef_repository_file_system_spec.rb +1 -1
- data/spec/integration/knife/chefignore_spec.rb +1 -1
- data/spec/integration/knife/common_options_spec.rb +1 -1
- data/spec/integration/knife/cookbook_api_ipv6_spec.rb +2 -2
- data/spec/integration/knife/delete_spec.rb +1 -1
- data/spec/integration/knife/deps_spec.rb +1 -1
- data/spec/integration/knife/diff_spec.rb +1 -1
- data/spec/integration/knife/download_spec.rb +1 -1
- data/spec/integration/knife/list_spec.rb +1 -1
- data/spec/integration/knife/raw_spec.rb +1 -1
- data/spec/integration/knife/redirection_spec.rb +1 -1
- data/spec/integration/knife/serve_spec.rb +1 -1
- data/spec/integration/knife/show_spec.rb +1 -1
- data/spec/integration/knife/upload_spec.rb +4 -3
- data/spec/integration/recipes/lwrp_inline_resources_spec.rb +1 -1
- data/spec/spec_helper.rb +15 -0
- data/spec/support/chef_helpers.rb +1 -0
- data/spec/support/lib/chef/provider/snakeoil.rb +1 -0
- data/spec/support/lib/chef/resource/zen_follower.rb +1 -7
- data/spec/support/platform_helpers.rb +28 -0
- data/spec/support/shared/functional/file_resource.rb +6 -0
- data/spec/support/shared/functional/windows_script.rb +118 -0
- data/spec/support/shared/integration/integration_helper.rb +5 -2
- data/spec/support/shared/matchers/exit_with_code.rb +28 -0
- data/spec/support/shared/matchers/match_environment_variable.rb +17 -0
- data/spec/support/shared/shared_examples.rb +14 -0
- data/spec/support/shared/unit/execute_resource.rb +0 -7
- data/spec/support/shared/unit/resource/static_provider_resolution.rb +71 -0
- data/spec/support/shared/unit/script_resource.rb +1 -1
- data/spec/support/shared/unit/windows_script_resource.rb +35 -2
- data/spec/tiny_server.rb +1 -2
- data/spec/unit/api_client_spec.rb +5 -1
- data/spec/unit/application/{apply.rb → apply_spec.rb} +13 -5
- data/spec/unit/application/client_spec.rb +106 -13
- data/spec/unit/application/solo_spec.rb +25 -1
- data/spec/unit/client_spec.rb +1 -26
- data/spec/unit/config_fetcher_spec.rb +2 -1
- data/spec/unit/config_spec.rb +91 -2
- data/spec/unit/cookbook/cookbook_version_loader_spec.rb +8 -0
- data/spec/unit/cookbook/metadata_spec.rb +43 -6
- data/spec/unit/cookbook/syntax_check_spec.rb +8 -2
- data/spec/unit/cookbook_loader_spec.rb +4 -2
- data/spec/unit/cookbook_version_spec.rb +83 -2
- data/spec/unit/data_bag_item_spec.rb +5 -1
- data/spec/unit/data_bag_spec.rb +6 -1
- data/spec/unit/dsl/data_query_spec.rb +8 -110
- data/spec/unit/encrypted_data_bag_item/check_encrypted_spec.rb +95 -0
- data/spec/unit/encrypted_data_bag_item_spec.rb +16 -23
- data/spec/unit/environment_spec.rb +6 -2
- data/spec/unit/exceptions_spec.rb +6 -0
- data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +16 -15
- data/spec/unit/json_compat_spec.rb +12 -2
- data/spec/unit/knife/bootstrap_spec.rb +16 -63
- data/spec/unit/knife/cookbook_site_share_spec.rb +59 -6
- data/spec/unit/knife/core/bootstrap_context_spec.rb +8 -37
- data/spec/unit/knife/core/subcommand_loader_spec.rb +1 -1
- data/spec/unit/knife/core/ui_spec.rb +28 -0
- data/spec/unit/knife/data_bag_create_spec.rb +63 -71
- data/spec/unit/knife/data_bag_edit_spec.rb +83 -49
- data/spec/unit/knife/data_bag_from_file_spec.rb +104 -126
- data/spec/unit/knife/data_bag_secret_options_spec.rb +165 -0
- data/spec/unit/knife/data_bag_show_spec.rb +74 -72
- data/spec/unit/knife/environment_from_file_spec.rb +3 -2
- data/spec/unit/knife/ssl_check_spec.rb +46 -1
- data/spec/unit/knife/status_spec.rb +1 -2
- data/spec/unit/knife_spec.rb +18 -1
- data/spec/unit/lwrp_spec.rb +29 -8
- data/spec/unit/mixin/homebrew_user_spec.rb +100 -0
- data/spec/unit/node_map_spec.rb +155 -0
- data/spec/unit/node_spec.rb +11 -0
- data/spec/unit/platform/query_helpers_spec.rb +23 -0
- data/spec/unit/platform_spec.rb +23 -0
- data/spec/unit/provider/breakpoint_spec.rb +9 -9
- data/spec/unit/provider/cookbook_file/content_spec.rb +3 -3
- data/spec/unit/provider/cookbook_file_spec.rb +1 -1
- data/spec/unit/provider/cron/unix_spec.rb +78 -60
- data/spec/unit/provider/cron_spec.rb +175 -175
- data/spec/unit/provider/deploy/revision_spec.rb +22 -21
- data/spec/unit/provider/deploy/timestamped_spec.rb +3 -3
- data/spec/unit/provider/deploy_spec.rb +231 -230
- data/spec/unit/provider/directory_spec.rb +55 -55
- data/spec/unit/provider/dsc_script_spec.rb +174 -0
- data/spec/unit/provider/env/windows_spec.rb +70 -34
- data/spec/unit/provider/env_spec.rb +95 -49
- data/spec/unit/provider/erl_call_spec.rb +9 -9
- data/spec/unit/provider/execute_spec.rb +43 -27
- data/spec/unit/provider/file/content_spec.rb +9 -9
- data/spec/unit/provider/file_spec.rb +1 -1
- data/spec/unit/provider/git_spec.rb +221 -159
- data/spec/unit/provider/group/dscl_spec.rb +64 -63
- data/spec/unit/provider/group/gpasswd_spec.rb +14 -14
- data/spec/unit/provider/group/groupadd_spec.rb +33 -33
- data/spec/unit/provider/group/groupmod_spec.rb +23 -23
- data/spec/unit/provider/group/pw_spec.rb +21 -21
- data/spec/unit/provider/group/usermod_spec.rb +20 -20
- data/spec/unit/provider/group/windows_spec.rb +15 -15
- data/spec/unit/provider/group_spec.rb +76 -76
- data/spec/unit/provider/http_request_spec.rb +30 -30
- data/spec/unit/provider/ifconfig/aix_spec.rb +20 -20
- data/spec/unit/provider/ifconfig/debian_spec.rb +25 -9
- data/spec/unit/provider/ifconfig/redhat_spec.rb +13 -13
- data/spec/unit/provider/ifconfig_spec.rb +43 -43
- data/spec/unit/provider/link_spec.rb +60 -60
- data/spec/unit/provider/log_spec.rb +0 -4
- data/spec/unit/provider/mdadm_spec.rb +23 -23
- data/spec/unit/provider/mount/aix_spec.rb +17 -17
- data/spec/unit/provider/mount/mount_spec.rb +115 -119
- data/spec/unit/provider/mount/solaris_spec.rb +72 -72
- data/spec/unit/provider/mount/windows_spec.rb +24 -24
- data/spec/unit/provider/ohai_spec.rb +11 -11
- data/spec/unit/provider/package/aix_spec.rb +34 -34
- data/spec/unit/provider/package/apt_spec.rb +36 -36
- data/spec/unit/provider/package/dpkg_spec.rb +27 -27
- data/spec/unit/provider/package/easy_install_spec.rb +16 -16
- data/spec/unit/provider/package/freebsd/pkg_spec.rb +53 -53
- data/spec/unit/provider/package/freebsd/pkgng_spec.rb +24 -24
- data/spec/unit/provider/package/freebsd/port_spec.rb +45 -35
- data/spec/unit/provider/package/homebrew_spec.rb +266 -0
- data/spec/unit/provider/package/ips_spec.rb +34 -34
- data/spec/unit/provider/package/macports_spec.rb +49 -49
- data/spec/unit/provider/package/pacman_spec.rb +35 -39
- data/spec/unit/provider/package/paludis_spec.rb +20 -20
- data/spec/unit/provider/package/portage_spec.rb +38 -38
- data/spec/unit/provider/package/rpm_spec.rb +29 -29
- data/spec/unit/provider/package/rubygems_spec.rb +284 -270
- data/spec/unit/provider/package/smartos_spec.rb +15 -15
- data/spec/unit/provider/package/solaris_spec.rb +35 -35
- data/spec/unit/provider/package/windows/msi_spec.rb +3 -3
- data/spec/unit/provider/package/windows_spec.rb +6 -6
- data/spec/unit/provider/package/yum_spec.rb +416 -416
- data/spec/unit/provider/package/zypper_spec.rb +47 -47
- data/spec/unit/provider/package_spec.rb +107 -107
- data/spec/unit/provider/powershell_spec.rb +1 -1
- data/spec/unit/provider/registry_key_spec.rb +61 -61
- data/spec/unit/provider/remote_directory_spec.rb +36 -36
- data/spec/unit/provider/remote_file/cache_control_data_spec.rb +24 -24
- data/spec/unit/provider/remote_file/content_spec.rb +45 -45
- data/spec/unit/provider/remote_file/fetcher_spec.rb +9 -9
- data/spec/unit/provider/remote_file/ftp_spec.rb +32 -32
- data/spec/unit/provider/remote_file/http_spec.rb +44 -44
- data/spec/unit/provider/remote_file/local_file_spec.rb +9 -9
- data/spec/unit/provider/remote_file_spec.rb +3 -3
- data/spec/unit/provider/route_spec.rb +63 -63
- data/spec/unit/provider/ruby_block_spec.rb +4 -4
- data/spec/unit/provider/script_spec.rb +12 -12
- data/spec/unit/provider/service/aix_service_spec.rb +181 -0
- data/spec/unit/provider/service/aixinit_service_spec.rb +269 -0
- data/spec/unit/provider/service/arch_service_spec.rb +48 -48
- data/spec/unit/provider/service/debian_service_spec.rb +40 -40
- data/spec/unit/provider/service/gentoo_service_spec.rb +28 -28
- data/spec/unit/provider/service/init_service_spec.rb +39 -39
- data/spec/unit/provider/service/insserv_service_spec.rb +8 -8
- data/spec/unit/provider/service/invokercd_service_spec.rb +35 -35
- data/spec/unit/provider/service/macosx_spec.rb +49 -49
- data/spec/unit/provider/service/redhat_spec.rb +27 -27
- data/spec/unit/provider/service/simple_service_spec.rb +28 -28
- data/spec/unit/provider/service/solaris_smf_service_spec.rb +43 -46
- data/spec/unit/provider/service/systemd_service_spec.rb +63 -63
- data/spec/unit/provider/service/upstart_service_spec.rb +78 -78
- data/spec/unit/provider/service/windows_spec.rb +92 -92
- data/spec/unit/provider/service_spec.rb +40 -40
- data/spec/unit/provider/subversion_spec.rb +80 -80
- data/spec/unit/provider/template/content_spec.rb +9 -9
- data/spec/unit/provider/template_spec.rb +6 -6
- data/spec/unit/provider/user/dscl_spec.rb +170 -167
- data/spec/unit/provider/user/pw_spec.rb +48 -48
- data/spec/unit/provider/user/solaris_spec.rb +8 -8
- data/spec/unit/provider/user/useradd_spec.rb +1 -1
- data/spec/unit/provider/user/windows_spec.rb +26 -26
- data/spec/unit/provider/user_spec.rb +72 -72
- data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +4 -4
- data/spec/unit/provider_resolver_spec.rb +387 -0
- data/spec/unit/recipe_spec.rb +33 -12
- data/spec/unit/resource/apt_package_spec.rb +10 -13
- data/spec/unit/resource/bash_spec.rb +4 -4
- data/spec/unit/resource/batch_spec.rb +1 -1
- data/spec/unit/resource/breakpoint_spec.rb +11 -7
- data/spec/unit/resource/chef_gem_spec.rb +8 -15
- data/spec/unit/resource/conditional_action_not_nothing_spec.rb +2 -2
- data/spec/unit/resource/conditional_spec.rb +35 -16
- data/spec/unit/resource/cookbook_file_spec.rb +13 -13
- data/spec/unit/resource/cron_spec.rb +37 -37
- data/spec/unit/resource/csh_spec.rb +4 -4
- data/spec/unit/resource/deploy_revision_spec.rb +13 -18
- data/spec/unit/resource/deploy_spec.rb +60 -55
- data/spec/unit/resource/directory_spec.rb +18 -18
- data/spec/unit/resource/dpkg_package_spec.rb +8 -14
- data/spec/unit/resource/dsc_script_spec.rb +98 -0
- data/spec/unit/resource/easy_install_package_spec.rb +9 -18
- data/spec/unit/resource/env_spec.rb +12 -12
- data/spec/unit/resource/erl_call_spec.rb +11 -11
- data/spec/unit/resource/execute_spec.rb +5 -0
- data/spec/unit/resource/file_spec.rb +29 -29
- data/spec/unit/resource/freebsd_package_spec.rb +11 -12
- data/spec/unit/resource/gem_package_spec.rb +8 -15
- data/spec/unit/resource/git_spec.rb +12 -8
- data/spec/unit/resource/group_spec.rb +27 -27
- data/spec/unit/resource/homebrew_package_spec.rb +50 -0
- data/spec/unit/resource/http_request_spec.rb +6 -6
- data/spec/unit/resource/ifconfig_spec.rb +8 -8
- data/spec/unit/resource/ips_package_spec.rb +10 -13
- data/spec/unit/resource/link_spec.rb +25 -25
- data/spec/unit/resource/log_spec.rb +9 -9
- data/spec/unit/resource/macports_package_spec.rb +8 -13
- data/spec/unit/resource/mdadm_spec.rb +18 -18
- data/spec/unit/resource/mount_spec.rb +45 -45
- data/spec/unit/resource/ohai_spec.rb +7 -7
- data/spec/unit/resource/package_spec.rb +12 -12
- data/spec/unit/resource/pacman_package_spec.rb +8 -14
- data/spec/unit/resource/perl_spec.rb +4 -4
- data/spec/unit/resource/portage_package_spec.rb +3 -3
- data/spec/unit/resource/powershell_spec.rb +7 -7
- data/spec/unit/resource/python_spec.rb +4 -4
- data/spec/unit/resource/registry_key_spec.rb +32 -32
- data/spec/unit/resource/remote_directory_spec.rb +17 -17
- data/spec/unit/resource/remote_file_spec.rb +41 -41
- data/spec/unit/resource/route_spec.rb +19 -19
- data/spec/unit/resource/rpm_package_spec.rb +9 -13
- data/spec/unit/resource/ruby_block_spec.rb +8 -8
- data/spec/unit/resource/ruby_spec.rb +4 -4
- data/spec/unit/resource/scm_spec.rb +40 -40
- data/spec/unit/resource/script_spec.rb +2 -2
- data/spec/unit/resource/service_spec.rb +37 -47
- data/spec/unit/resource/smartos_package_spec.rb +10 -15
- data/spec/unit/resource/solaris_package_spec.rb +13 -28
- data/spec/unit/resource/subversion_spec.rb +16 -12
- data/spec/unit/resource/template_spec.rb +35 -35
- data/spec/unit/resource/timestamped_deploy_spec.rb +30 -4
- data/spec/unit/resource/user_spec.rb +23 -23
- data/spec/unit/resource/windows_package_spec.rb +17 -10
- data/spec/unit/resource/windows_service_spec.rb +9 -6
- data/spec/unit/resource/yum_package_spec.rb +16 -21
- data/spec/unit/resource_collection/resource_list_spec.rb +137 -0
- data/spec/unit/resource_collection/resource_set_spec.rb +199 -0
- data/spec/unit/resource_collection_spec.rb +73 -92
- data/spec/unit/resource_definition_spec.rb +38 -40
- data/spec/unit/resource_reporter_spec.rb +3 -3
- data/spec/unit/resource_spec.rb +68 -33
- data/spec/unit/rest_spec.rb +83 -76
- data/spec/unit/role_spec.rb +5 -0
- data/spec/unit/run_list_spec.rb +5 -1
- data/spec/unit/runner_spec.rb +245 -238
- data/spec/unit/shell/shell_ext_spec.rb +1 -1
- data/spec/unit/user_spec.rb +5 -1
- data/spec/unit/util/dsc/configuration_generator_spec.rb +171 -0
- data/spec/unit/util/dsc/lcm_output_parser_spec.rb +169 -0
- data/spec/unit/util/dsc/local_configuration_manager_spec.rb +139 -0
- data/spec/unit/util/path_helper_spec.rb +23 -1
- data/spec/unit/util/powershell/cmdlet_spec.rb +106 -0
- data/spec/unit/workstation_config_loader_spec.rb +1 -1
- metadata +303 -196
- checksums.yaml +0 -7
- data/distro/README +0 -2
- data/distro/arch/etc/conf.d/chef-client.conf +0 -5
- data/distro/arch/etc/conf.d/chef-expander.conf +0 -8
- data/distro/arch/etc/conf.d/chef-server-webui.conf +0 -10
- data/distro/arch/etc/conf.d/chef-server.conf +0 -10
- data/distro/arch/etc/conf.d/chef-solr.conf +0 -8
- data/distro/arch/etc/rc.d/chef-client +0 -90
- data/distro/arch/etc/rc.d/chef-expander +0 -78
- data/distro/arch/etc/rc.d/chef-server +0 -78
- data/distro/arch/etc/rc.d/chef-server-webui +0 -78
- data/distro/arch/etc/rc.d/chef-solr +0 -78
- data/distro/debian/etc/default/chef-client +0 -4
- data/distro/debian/etc/default/chef-expander +0 -8
- data/distro/debian/etc/default/chef-server +0 -9
- data/distro/debian/etc/default/chef-server-webui +0 -9
- data/distro/debian/etc/default/chef-solr +0 -8
- data/distro/debian/etc/init.d/chef-client +0 -212
- data/distro/debian/etc/init.d/chef-expander +0 -176
- data/distro/debian/etc/init.d/chef-server +0 -122
- data/distro/debian/etc/init.d/chef-server-webui +0 -123
- data/distro/debian/etc/init.d/chef-solr +0 -176
- data/distro/debian/etc/init/chef-client.conf +0 -17
- data/distro/debian/etc/init/chef-expander.conf +0 -17
- data/distro/debian/etc/init/chef-server-webui.conf +0 -17
- data/distro/debian/etc/init/chef-server.conf +0 -17
- data/distro/debian/etc/init/chef-solr.conf +0 -17
- data/distro/redhat/etc/init.d/chef-client +0 -121
- data/distro/redhat/etc/init.d/chef-expander +0 -104
- data/distro/redhat/etc/init.d/chef-server +0 -112
- data/distro/redhat/etc/init.d/chef-server-webui +0 -112
- data/distro/redhat/etc/init.d/chef-solr +0 -104
- data/distro/redhat/etc/logrotate.d/chef-client +0 -8
- data/distro/redhat/etc/logrotate.d/chef-expander +0 -8
- data/distro/redhat/etc/logrotate.d/chef-server +0 -8
- data/distro/redhat/etc/logrotate.d/chef-server-webui +0 -8
- data/distro/redhat/etc/logrotate.d/chef-solr +0 -8
- data/distro/redhat/etc/sysconfig/chef-client +0 -15
- data/distro/redhat/etc/sysconfig/chef-expander +0 -7
- data/distro/redhat/etc/sysconfig/chef-server +0 -14
- data/distro/redhat/etc/sysconfig/chef-server-webui +0 -14
- data/distro/redhat/etc/sysconfig/chef-solr +0 -8
- data/distro/windows/service_manager.rb +0 -20
- data/lib/chef/resource_platform_map.rb +0 -151
- data/spec/support/shared/matchers.rb +0 -17
- data/spec/unit/resource_platform_map_spec.rb +0 -164
@@ -18,10 +18,12 @@
|
|
18
18
|
#
|
19
19
|
|
20
20
|
require 'chef/knife'
|
21
|
+
require 'chef/knife/data_bag_secret_options'
|
21
22
|
|
22
23
|
class Chef
|
23
24
|
class Knife
|
24
25
|
class DataBagEdit < Knife
|
26
|
+
include DataBagSecretOptions
|
25
27
|
|
26
28
|
deps do
|
27
29
|
require 'chef/data_bag_item'
|
@@ -31,48 +33,17 @@ class Chef
|
|
31
33
|
banner "knife data bag edit BAG ITEM (options)"
|
32
34
|
category "data bag"
|
33
35
|
|
34
|
-
option :secret,
|
35
|
-
:short => "-s SECRET",
|
36
|
-
:long => "--secret ",
|
37
|
-
:description => "The secret key to use to encrypt data bag item values",
|
38
|
-
:proc => Proc.new { |s| Chef::Config[:knife][:secret] = s }
|
39
|
-
|
40
|
-
option :secret_file,
|
41
|
-
:long => "--secret-file SECRET_FILE",
|
42
|
-
:description => "A file containing the secret key to use to encrypt data bag item values",
|
43
|
-
:proc => Proc.new { |sf| Chef::Config[:knife][:secret_file] = sf }
|
44
|
-
|
45
|
-
def read_secret
|
46
|
-
if config[:secret]
|
47
|
-
config[:secret]
|
48
|
-
else
|
49
|
-
Chef::EncryptedDataBagItem.load_secret(config[:secret_file])
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def use_encryption
|
54
|
-
if config[:secret] && config[:secret_file]
|
55
|
-
stdout.puts "please specify only one of --secret, --secret-file"
|
56
|
-
exit(1)
|
57
|
-
end
|
58
|
-
config[:secret] || config[:secret_file]
|
59
|
-
end
|
60
|
-
|
61
36
|
def load_item(bag, item_name)
|
62
37
|
item = Chef::DataBagItem.load(bag, item_name)
|
63
|
-
if
|
64
|
-
|
38
|
+
if encrypted?(item.raw_data)
|
39
|
+
if encryption_secret_provided_ignore_encrypt_flag?
|
40
|
+
return Chef::EncryptedDataBagItem.new(item, read_secret).to_hash, true
|
41
|
+
else
|
42
|
+
ui.fatal("You cannot edit an encrypted data bag without providing the secret.")
|
43
|
+
exit(1)
|
44
|
+
end
|
65
45
|
else
|
66
|
-
item
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
def edit_item(item)
|
71
|
-
output = edit_data(item)
|
72
|
-
if use_encryption
|
73
|
-
Chef::EncryptedDataBagItem.encrypt_data_bag_item(output, read_secret)
|
74
|
-
else
|
75
|
-
output
|
46
|
+
return item, false
|
76
47
|
end
|
77
48
|
end
|
78
49
|
|
@@ -82,11 +53,21 @@ class Chef
|
|
82
53
|
stdout.puts opt_parser
|
83
54
|
exit 1
|
84
55
|
end
|
85
|
-
|
86
|
-
|
87
|
-
|
56
|
+
|
57
|
+
item, was_encrypted = load_item(@name_args[0], @name_args[1])
|
58
|
+
edited_item = edit_data(item)
|
59
|
+
|
60
|
+
if was_encrypted || encryption_secret_provided?
|
61
|
+
ui.info("Encrypting data bag using provided secret.")
|
62
|
+
item_to_save = Chef::EncryptedDataBagItem.encrypt_data_bag_item(edited_item, read_secret)
|
63
|
+
else
|
64
|
+
ui.info("Saving data bag unencrypted. To encrypt it, provide an appropriate secret.")
|
65
|
+
item_to_save = edited_item
|
66
|
+
end
|
67
|
+
|
68
|
+
rest.put_rest("data/#{@name_args[0]}/#{@name_args[1]}", item_to_save)
|
88
69
|
stdout.puts("Saved data_bag_item[#{@name_args[1]}]")
|
89
|
-
ui.output(
|
70
|
+
ui.output(edited_item) if config[:print_after]
|
90
71
|
end
|
91
72
|
end
|
92
73
|
end
|
@@ -18,10 +18,13 @@
|
|
18
18
|
#
|
19
19
|
|
20
20
|
require 'chef/knife'
|
21
|
+
require 'chef/util/path_helper'
|
22
|
+
require 'chef/knife/data_bag_secret_options'
|
21
23
|
|
22
24
|
class Chef
|
23
25
|
class Knife
|
24
26
|
class DataBagFromFile < Knife
|
27
|
+
include DataBagSecretOptions
|
25
28
|
|
26
29
|
deps do
|
27
30
|
require 'chef/data_bag'
|
@@ -34,38 +37,11 @@ class Chef
|
|
34
37
|
banner "knife data bag from file BAG FILE|FOLDER [FILE|FOLDER..] (options)"
|
35
38
|
category "data bag"
|
36
39
|
|
37
|
-
option :secret,
|
38
|
-
:short => "-s SECRET",
|
39
|
-
:long => "--secret ",
|
40
|
-
:description => "The secret key to use to encrypt data bag item values",
|
41
|
-
:proc => Proc.new { |s| Chef::Config[:knife][:secret] = s }
|
42
|
-
|
43
|
-
option :secret_file,
|
44
|
-
:long => "--secret-file SECRET_FILE",
|
45
|
-
:description => "A file containing the secret key to use to encrypt data bag item values",
|
46
|
-
:proc => Proc.new { |sf| Chef::Config[:knife][:secret_file] = sf }
|
47
|
-
|
48
40
|
option :all,
|
49
41
|
:short => "-a",
|
50
42
|
:long => "--all",
|
51
43
|
:description => "Upload all data bags or all items for specified data bags"
|
52
44
|
|
53
|
-
def read_secret
|
54
|
-
if config[:secret]
|
55
|
-
config[:secret]
|
56
|
-
else
|
57
|
-
Chef::EncryptedDataBagItem.load_secret(config[:secret_file])
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def use_encryption
|
62
|
-
if config[:secret] && config[:secret_file]
|
63
|
-
ui.fatal("please specify only one of --secret, --secret-file")
|
64
|
-
exit(1)
|
65
|
-
end
|
66
|
-
config[:secret] || config[:secret_file]
|
67
|
-
end
|
68
|
-
|
69
45
|
def loader
|
70
46
|
@loader ||= Knife::Core::ObjectLoader.new(DataBagItem, ui)
|
71
47
|
end
|
@@ -108,9 +84,8 @@ class Chef
|
|
108
84
|
item_paths = normalize_item_paths(items)
|
109
85
|
item_paths.each do |item_path|
|
110
86
|
item = loader.load_from("#{data_bags_path}", data_bag, item_path)
|
111
|
-
item = if
|
112
|
-
|
113
|
-
Chef::EncryptedDataBagItem.encrypt_data_bag_item(item, secret)
|
87
|
+
item = if encryption_secret_provided?
|
88
|
+
Chef::EncryptedDataBagItem.encrypt_data_bag_item(item, read_secret)
|
114
89
|
else
|
115
90
|
item
|
116
91
|
end
|
@@ -126,7 +101,7 @@ class Chef
|
|
126
101
|
paths = Array.new
|
127
102
|
args.each do |path|
|
128
103
|
if File.directory?(path)
|
129
|
-
paths.concat(Dir.glob(File.join(path, "*.json")))
|
104
|
+
paths.concat(Dir.glob(File.join(Chef::Util::PathHelper.escape_glob(path), "*.json")))
|
130
105
|
else
|
131
106
|
paths << path
|
132
107
|
end
|
@@ -0,0 +1,142 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Tyler Ball (<tball@opscode.com>)
|
3
|
+
# Copyright:: Copyright (c) 2014 Opscode, Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
require 'mixlib/cli'
|
20
|
+
require 'chef/config'
|
21
|
+
require 'chef/encrypted_data_bag_item/check_encrypted'
|
22
|
+
|
23
|
+
class Chef
|
24
|
+
class Knife
|
25
|
+
module DataBagSecretOptions
|
26
|
+
include Mixlib::CLI
|
27
|
+
include Chef::EncryptedDataBagItem::CheckEncrypted
|
28
|
+
|
29
|
+
# The config object is populated by knife#merge_configs with knife.rb `knife[:*]` config values, but they do
|
30
|
+
# not overwrite the command line properties. It does mean, however, that `knife[:secret]` and `--secret-file`
|
31
|
+
# passed at the same time populate both `config[:secret]` and `config[:secret_file]`. We cannot differentiate
|
32
|
+
# the valid case (`knife[:secret]` in config file and `--secret-file` on CL) and the invalid case (`--secret`
|
33
|
+
# and `--secret-file` on the CL) - thats why I'm storing the CL options in a different config key if they
|
34
|
+
# are provided.
|
35
|
+
|
36
|
+
def self.included(base)
|
37
|
+
base.option :secret,
|
38
|
+
:short => "-s SECRET",
|
39
|
+
:long => "--secret ",
|
40
|
+
:description => "The secret key to use to encrypt data bag item values. Can also be defaulted in your config with the key 'secret'",
|
41
|
+
# Need to store value from command line in separate variable - knife#merge_configs populates same keys
|
42
|
+
# on config object from
|
43
|
+
:proc => Proc.new { |s| set_cl_secret(s) }
|
44
|
+
|
45
|
+
base.option :secret_file,
|
46
|
+
:long => "--secret-file SECRET_FILE",
|
47
|
+
:description => "A file containing the secret key to use to encrypt data bag item values. Can also be defaulted in your config with the key 'secret_file'",
|
48
|
+
:proc => Proc.new { |sf| set_cl_secret_file(sf) }
|
49
|
+
|
50
|
+
base.option :encrypt,
|
51
|
+
:long => "--encrypt",
|
52
|
+
:description => "If 'secret' or 'secret_file' is present in your config, then encrypt data bags using it",
|
53
|
+
:boolean => true,
|
54
|
+
:default => false
|
55
|
+
end
|
56
|
+
|
57
|
+
def encryption_secret_provided?
|
58
|
+
base_encryption_secret_provided?
|
59
|
+
end
|
60
|
+
|
61
|
+
def encryption_secret_provided_ignore_encrypt_flag?
|
62
|
+
base_encryption_secret_provided?(false)
|
63
|
+
end
|
64
|
+
|
65
|
+
def read_secret
|
66
|
+
# Moving the non 'compile-time' requires into here to speed up knife command loading
|
67
|
+
# IE, if we are not running 'knife data bag *' we don't need to load 'chef/encrypted_data_bag_item'
|
68
|
+
require 'chef/encrypted_data_bag_item'
|
69
|
+
|
70
|
+
if has_cl_secret?
|
71
|
+
config[:secret]
|
72
|
+
elsif has_cl_secret_file?
|
73
|
+
Chef::EncryptedDataBagItem.load_secret(config[:secret_file])
|
74
|
+
elsif secret = knife_config[:secret]
|
75
|
+
secret
|
76
|
+
else
|
77
|
+
secret_file = knife_config[:secret_file]
|
78
|
+
Chef::EncryptedDataBagItem.load_secret(secret_file)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def validate_secrets
|
83
|
+
if has_cl_secret? && has_cl_secret_file?
|
84
|
+
ui.fatal("Please specify only one of --secret, --secret-file")
|
85
|
+
exit(1)
|
86
|
+
end
|
87
|
+
|
88
|
+
if knife_config[:secret] && knife_config[:secret_file]
|
89
|
+
ui.fatal("Please specify only one of 'secret' or 'secret_file' in your config file")
|
90
|
+
exit(1)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
private
|
95
|
+
|
96
|
+
##
|
97
|
+
# Determine if the user has specified an appropriate secret for encrypting data bag items.
|
98
|
+
# @returns boolean
|
99
|
+
def base_encryption_secret_provided?(need_encrypt_flag = true)
|
100
|
+
validate_secrets
|
101
|
+
|
102
|
+
return true if has_cl_secret? || has_cl_secret_file?
|
103
|
+
|
104
|
+
if need_encrypt_flag
|
105
|
+
if config[:encrypt]
|
106
|
+
unless knife_config[:secret] || knife_config[:secret_file]
|
107
|
+
ui.fatal("No secret or secret_file specified in config, unable to encrypt item.")
|
108
|
+
exit(1)
|
109
|
+
end
|
110
|
+
return true
|
111
|
+
end
|
112
|
+
return false
|
113
|
+
elsif knife_config[:secret] || knife_config[:secret_file]
|
114
|
+
# Certain situations (show and bootstrap) don't need a --encrypt flag to use the config file secret
|
115
|
+
return true
|
116
|
+
end
|
117
|
+
return false
|
118
|
+
end
|
119
|
+
|
120
|
+
def has_cl_secret?
|
121
|
+
Chef::Config[:knife].has_key?(:cl_secret)
|
122
|
+
end
|
123
|
+
|
124
|
+
def self.set_cl_secret(s)
|
125
|
+
Chef::Config[:knife][:cl_secret] = s
|
126
|
+
end
|
127
|
+
|
128
|
+
def has_cl_secret_file?
|
129
|
+
Chef::Config[:knife].has_key?(:cl_secret_file)
|
130
|
+
end
|
131
|
+
|
132
|
+
def self.set_cl_secret_file(sf)
|
133
|
+
Chef::Config[:knife][:cl_secret_file] = sf
|
134
|
+
end
|
135
|
+
|
136
|
+
def knife_config
|
137
|
+
Chef::Config.key?(:knife) ? Chef::Config[:knife] : {}
|
138
|
+
end
|
139
|
+
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
@@ -18,10 +18,12 @@
|
|
18
18
|
#
|
19
19
|
|
20
20
|
require 'chef/knife'
|
21
|
+
require 'chef/knife/data_bag_secret_options'
|
21
22
|
|
22
23
|
class Chef
|
23
24
|
class Knife
|
24
25
|
class DataBagShow < Knife
|
26
|
+
include DataBagSecretOptions
|
25
27
|
|
26
28
|
deps do
|
27
29
|
require 'chef/data_bag'
|
@@ -31,45 +33,29 @@ class Chef
|
|
31
33
|
banner "knife data bag show BAG [ITEM] (options)"
|
32
34
|
category "data bag"
|
33
35
|
|
34
|
-
option :secret,
|
35
|
-
:short => "-s SECRET",
|
36
|
-
:long => "--secret ",
|
37
|
-
:description => "The secret key to use to decrypt data bag item values",
|
38
|
-
:proc => Proc.new { |s| Chef::Config[:knife][:secret] = s }
|
39
|
-
|
40
|
-
option :secret_file,
|
41
|
-
:long => "--secret-file SECRET_FILE",
|
42
|
-
:description => "A file containing the secret key to use to decrypt data bag item values",
|
43
|
-
:proc => Proc.new { |sf| Chef::Config[:knife][:secret_file] = sf }
|
44
|
-
|
45
|
-
def read_secret
|
46
|
-
if config[:secret]
|
47
|
-
config[:secret]
|
48
|
-
else
|
49
|
-
Chef::EncryptedDataBagItem.load_secret(config[:secret_file])
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def use_encryption
|
54
|
-
if config[:secret] && config[:secret_file]
|
55
|
-
stdout.puts "please specify only one of --secret, --secret-file"
|
56
|
-
exit(1)
|
57
|
-
end
|
58
|
-
config[:secret] || config[:secret_file]
|
59
|
-
end
|
60
|
-
|
61
36
|
def run
|
62
37
|
display = case @name_args.length
|
63
|
-
when 2
|
64
|
-
|
38
|
+
when 2 # Bag and Item names provided
|
39
|
+
secret = encryption_secret_provided_ignore_encrypt_flag? ? read_secret : nil
|
40
|
+
raw_data = Chef::DataBagItem.load(@name_args[0], @name_args[1]).raw_data
|
41
|
+
encrypted = encrypted?(raw_data)
|
42
|
+
|
43
|
+
if encrypted && secret
|
44
|
+
# Users do not need to pass --encrypt to read data, we simply try to use the provided secret
|
45
|
+
ui.info("Encrypted data bag detected, decrypting with provided secret.")
|
65
46
|
raw = Chef::EncryptedDataBagItem.load(@name_args[0],
|
66
47
|
@name_args[1],
|
67
|
-
|
48
|
+
secret)
|
68
49
|
format_for_display(raw.to_hash)
|
50
|
+
elsif encrypted && !secret
|
51
|
+
ui.warn("Encrypted data bag detected, but no secret provided for decoding. Displaying encrypted data.")
|
52
|
+
format_for_display(raw_data)
|
69
53
|
else
|
70
|
-
|
54
|
+
ui.info("Unencrypted data bag detected, ignoring any provided secret options.")
|
55
|
+
format_for_display(raw_data)
|
71
56
|
end
|
72
|
-
|
57
|
+
|
58
|
+
when 1 # Only Bag name provided
|
73
59
|
format_list_for_display(Chef::DataBag.load(@name_args[0]))
|
74
60
|
else
|
75
61
|
stdout.puts opt_parser
|
@@ -77,7 +63,7 @@ class Chef
|
|
77
63
|
end
|
78
64
|
output(display)
|
79
65
|
end
|
66
|
+
|
80
67
|
end
|
81
68
|
end
|
82
69
|
end
|
83
|
-
|
@@ -35,16 +35,17 @@ class Chef
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def run
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
38
|
+
@name_args.each do |arg|
|
39
|
+
updated = loader.load_from('nodes', arg)
|
40
|
+
|
41
|
+
updated.save
|
42
|
+
|
43
|
+
output(format_for_display(updated)) if config[:print_after]
|
44
|
+
|
45
|
+
ui.info("Updated Node #{updated.name}!")
|
46
|
+
end
|
45
47
|
end
|
46
48
|
|
47
49
|
end
|
48
50
|
end
|
49
51
|
end
|
50
|
-
|
data/lib/chef/knife/ssh.rb
CHANGED
@@ -106,13 +106,6 @@ class Chef
|
|
106
106
|
def session
|
107
107
|
config[:on_error] ||= :skip
|
108
108
|
ssh_error_handler = Proc.new do |server|
|
109
|
-
if config[:manual]
|
110
|
-
node_name = server.host
|
111
|
-
else
|
112
|
-
@action_nodes.each do |n|
|
113
|
-
node_name = n if format_for_display(n)[config[:attribute]] == server.host
|
114
|
-
end
|
115
|
-
end
|
116
109
|
case config[:on_error]
|
117
110
|
when :skip
|
118
111
|
ui.warn "Failed to connect to #{server.host} -- #{$!.class.name}: #{$!.message}"
|
data/lib/chef/knife/ssl_check.rb
CHANGED
@@ -106,6 +106,22 @@ class Chef
|
|
106
106
|
end
|
107
107
|
end
|
108
108
|
|
109
|
+
def verify_X509
|
110
|
+
cert_debug_msg = ""
|
111
|
+
trusted_certificates.each do |cert_name|
|
112
|
+
message = check_X509_certificate(cert_name)
|
113
|
+
unless message.nil?
|
114
|
+
cert_debug_msg << File.expand_path(cert_name) + ": " + message + "\n"
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
unless cert_debug_msg.empty?
|
119
|
+
debug_invalid_X509(cert_debug_msg)
|
120
|
+
end
|
121
|
+
|
122
|
+
true # Maybe the bad certs won't hurt...
|
123
|
+
end
|
124
|
+
|
109
125
|
def verify_cert
|
110
126
|
ui.msg("Connecting to host #{host}:#{port}")
|
111
127
|
verify_peer_socket.connect
|
@@ -127,6 +143,35 @@ class Chef
|
|
127
143
|
false
|
128
144
|
end
|
129
145
|
|
146
|
+
def debug_invalid_X509(cert_debug_msg)
|
147
|
+
ui.msg("\n#{ui.color("Configuration Info:", :bold)}\n\n")
|
148
|
+
debug_ssl_settings
|
149
|
+
debug_chef_ssl_config
|
150
|
+
|
151
|
+
ui.warn(<<-BAD_CERTS)
|
152
|
+
There are invalid certificates in your trusted_certs_dir.
|
153
|
+
OpenSSL will not use the following certificates when verifying SSL connections:
|
154
|
+
|
155
|
+
#{cert_debug_msg}
|
156
|
+
|
157
|
+
#{ui.color("TO FIX THESE WARNINGS:", :bold)}
|
158
|
+
|
159
|
+
We are working on documentation for resolving common issues uncovered here.
|
160
|
+
|
161
|
+
* If the certificate is generated by the server, you may try redownloading the
|
162
|
+
server's certificate. By default, the certificate is stored in the following
|
163
|
+
location on the host where your chef-server runs:
|
164
|
+
|
165
|
+
/var/opt/chef-server/nginx/ca/SERVER_HOSTNAME.crt
|
166
|
+
|
167
|
+
Copy that file to your trusted_certs_dir (currently: #{configuration.trusted_certs_dir})
|
168
|
+
using SSH/SCP or some other secure method, then re-run this command to confirm
|
169
|
+
that the server's certificate is now trusted.
|
170
|
+
|
171
|
+
BAD_CERTS
|
172
|
+
# @TODO: ^ needs URL once documentation is posted.
|
173
|
+
end
|
174
|
+
|
130
175
|
def debug_invalid_cert
|
131
176
|
noverify_socket.connect
|
132
177
|
issuer_info = noverify_socket.peer_cert.issuer
|
@@ -148,7 +193,7 @@ where your chef-server runs:
|
|
148
193
|
|
149
194
|
/var/opt/chef-server/nginx/ca/SERVER_HOSTNAME.crt
|
150
195
|
|
151
|
-
Copy that file to
|
196
|
+
Copy that file to your trusted_certs_dir (currently: #{configuration.trusted_certs_dir})
|
152
197
|
using SSH/SCP or some other secure method, then re-run this command to confirm
|
153
198
|
that the server's certificate is now trusted.
|
154
199
|
|
@@ -197,17 +242,36 @@ ADVICE
|
|
197
242
|
|
198
243
|
def run
|
199
244
|
validate_uri
|
200
|
-
if verify_cert && verify_cert_host
|
245
|
+
if verify_X509 && verify_cert && verify_cert_host
|
201
246
|
ui.msg "Successfully verified certificates from `#{host}'"
|
202
247
|
else
|
203
248
|
exit 1
|
204
249
|
end
|
205
250
|
end
|
206
251
|
|
252
|
+
private
|
253
|
+
def trusted_certificates
|
254
|
+
if configuration.trusted_certs_dir && Dir.exist?(configuration.trusted_certs_dir)
|
255
|
+
Dir.glob(File.join(configuration.trusted_certs_dir, "*.{crt,pem}"))
|
256
|
+
else
|
257
|
+
[]
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
def check_X509_certificate(cert_file)
|
262
|
+
store = OpenSSL::X509::Store.new
|
263
|
+
cert = OpenSSL::X509::Certificate.new(IO.read(File.expand_path(cert_file)))
|
264
|
+
begin
|
265
|
+
store.add_cert(cert)
|
266
|
+
# test if the store can verify the cert we just added
|
267
|
+
unless store.verify(cert) # true if verified, false if not
|
268
|
+
return store.error_string
|
269
|
+
end
|
270
|
+
rescue OpenSSL::X509::StoreError => e
|
271
|
+
return e.message
|
272
|
+
end
|
273
|
+
return nil
|
274
|
+
end
|
207
275
|
end
|
208
276
|
end
|
209
277
|
end
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|