chef 12.4.3-universal-mingw32 → 12.5.1-universal-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +21 -25
- data/Gemfile +46 -0
- data/README.md +4 -4
- data/Rakefile +4 -110
- data/bin/chef-service-manager +3 -1
- data/distro/common/html/knife_cookbook_site.html +18 -18
- data/distro/common/man/man1/knife-cookbook-site.1 +11 -11
- data/lib/chef.rb +1 -1
- data/lib/chef/application.rb +1 -1
- data/lib/chef/application/apply.rb +19 -1
- data/lib/chef/application/client.rb +11 -5
- data/lib/chef/application/knife.rb +2 -2
- data/lib/chef/application/solo.rb +1 -1
- data/lib/chef/application/windows_service_manager.rb +19 -12
- data/lib/chef/chef_class.rb +46 -0
- data/lib/chef/chef_fs/config.rb +22 -24
- data/lib/chef/chef_fs/data_handler/client_data_handler.rb +3 -1
- data/lib/chef/chef_fs/file_pattern.rb +4 -15
- data/lib/chef/chef_fs/file_system/acl_dir.rb +3 -4
- data/lib/chef/chef_fs/file_system/acls_dir.rb +5 -1
- data/lib/chef/chef_fs/file_system/base_fs_dir.rb +0 -5
- data/lib/chef/chef_fs/file_system/base_fs_object.rb +5 -2
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_dir.rb +2 -9
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb +2 -9
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbooks_dir.rb +10 -17
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +1 -12
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +15 -11
- data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +8 -2
- data/lib/chef/chef_fs/file_system/cookbook_dir.rb +4 -4
- data/lib/chef/chef_fs/file_system/cookbooks_acl_dir.rb +1 -1
- data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +3 -11
- data/lib/chef/chef_fs/file_system/data_bags_dir.rb +3 -5
- data/lib/chef/chef_fs/file_system/environments_dir.rb +1 -1
- data/lib/chef/chef_fs/file_system/file_system_entry.rb +7 -4
- data/lib/chef/chef_fs/file_system/memory_dir.rb +2 -3
- data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +15 -0
- data/lib/chef/chef_fs/file_system/nodes_dir.rb +1 -1
- data/lib/chef/chef_fs/file_system/organization_members_entry.rb +2 -2
- data/lib/chef/chef_fs/file_system/rest_list_dir.rb +4 -9
- data/lib/chef/chef_fs/knife.rb +35 -7
- data/lib/chef/chef_fs/path_utils.rb +65 -34
- data/lib/chef/client.rb +2 -3
- data/lib/chef/config.rb +34 -2
- data/lib/chef/{mixin/wstring.rb → constants.rb} +9 -13
- data/lib/chef/cookbook/metadata.rb +25 -3
- data/lib/chef/cookbook/synchronizer.rb +1 -1
- data/lib/chef/cookbook_site_streaming_uploader.rb +1 -1
- data/lib/chef/cookbook_version.rb +3 -3
- data/lib/chef/delayed_evaluator.rb +21 -0
- data/lib/chef/deprecation/mixin/template.rb +1 -2
- data/lib/chef/deprecation/provider/cookbook_file.rb +1 -1
- data/lib/chef/deprecation/provider/file.rb +1 -1
- data/lib/chef/deprecation/provider/remote_directory.rb +52 -0
- data/lib/chef/deprecation/provider/remote_file.rb +1 -2
- data/lib/chef/deprecation/provider/template.rb +1 -1
- data/lib/chef/deprecation/warnings.rb +3 -4
- data/lib/chef/dsl/reboot_pending.rb +3 -2
- data/lib/chef/dsl/recipe.rb +26 -7
- data/lib/chef/dsl/resources.rb +2 -2
- data/lib/chef/event_dispatch/base.rb +51 -22
- data/lib/chef/event_dispatch/dispatcher.rb +21 -6
- data/lib/chef/event_dispatch/dsl.rb +64 -0
- data/lib/chef/exceptions.rb +28 -1
- data/lib/chef/file_content_management/tempfile.rb +1 -1
- data/lib/chef/formatters/base.rb +3 -0
- data/lib/chef/formatters/doc.rb +56 -6
- data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +36 -0
- data/lib/chef/formatters/minimal.rb +2 -2
- data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +3 -1
- data/lib/chef/http/http_request.rb +1 -1
- data/lib/chef/knife.rb +35 -55
- data/lib/chef/knife/bootstrap.rb +41 -0
- data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -0
- data/lib/chef/knife/bootstrap/client_builder.rb +16 -0
- data/lib/chef/knife/bootstrap/templates/README.md +3 -4
- data/lib/chef/knife/bootstrap/templates/chef-full.erb +1 -1
- data/lib/chef/knife/cookbook_create.rb +1 -1
- 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_share.rb +6 -6
- data/lib/chef/knife/cookbook_site_unshare.rb +2 -2
- data/lib/chef/knife/core/bootstrap_context.rb +12 -4
- data/lib/chef/knife/core/custom_manifest_loader.rb +69 -0
- data/lib/chef/knife/core/gem_glob_loader.rb +138 -0
- data/lib/chef/knife/core/hashed_command_loader.rb +80 -0
- data/lib/chef/knife/core/node_presenter.rb +24 -1
- data/lib/chef/knife/core/object_loader.rb +1 -0
- data/lib/chef/knife/core/subcommand_loader.rb +131 -146
- data/lib/chef/knife/node_run_list_remove.rb +12 -1
- data/lib/chef/knife/null.rb +10 -0
- data/lib/chef/knife/rehash.rb +62 -0
- data/lib/chef/knife/search.rb +3 -3
- data/lib/chef/knife/ssh.rb +52 -30
- data/lib/chef/knife/ssl_check.rb +3 -2
- data/lib/chef/knife/user_edit.rb +1 -2
- data/lib/chef/local_mode.rb +5 -0
- data/lib/chef/log.rb +5 -1
- data/lib/chef/mixin/deprecation.rb +8 -8
- data/lib/chef/mixin/params_validate.rb +362 -135
- data/lib/chef/mixin/template.rb +48 -0
- data/lib/chef/mixin/which.rb +1 -1
- data/lib/chef/mixin/wide_string.rb +72 -0
- data/lib/chef/mixin/windows_architecture_helper.rb +15 -39
- data/lib/chef/mixin/windows_env_helper.rb +4 -1
- data/lib/chef/monkey_patches/webrick-utils.rb +51 -0
- data/lib/chef/monkey_patches/win32/registry.rb +72 -0
- data/lib/chef/node.rb +116 -3
- data/lib/chef/node_map.rb +2 -2
- data/lib/chef/platform/handler_map.rb +0 -5
- data/lib/chef/platform/provider_mapping.rb +5 -6
- data/lib/chef/platform/query_helpers.rb +46 -4
- data/lib/chef/platform/rebooter.rb +1 -1
- data/lib/chef/platform/service_helpers.rb +30 -32
- data/lib/chef/policy_builder.rb +1 -8
- data/lib/chef/policy_builder/dynamic.rb +186 -0
- data/lib/chef/policy_builder/expand_node_object.rb +30 -15
- data/lib/chef/policy_builder/policyfile.rb +155 -18
- data/lib/chef/property.rb +568 -0
- data/lib/chef/provider.rb +222 -13
- data/lib/chef/provider/batch.rb +8 -0
- data/lib/chef/provider/deploy.rb +5 -7
- data/lib/chef/provider/directory.rb +14 -2
- data/lib/chef/provider/dsc_resource.rb +5 -9
- data/lib/chef/provider/group/pw.rb +1 -1
- data/lib/chef/provider/ifconfig.rb +2 -2
- data/lib/chef/provider/lwrp_base.rb +1 -75
- data/lib/chef/provider/mount.rb +7 -3
- data/lib/chef/provider/package.rb +1 -1
- data/lib/chef/provider/package/dpkg.rb +5 -11
- data/lib/chef/provider/package/rpm.rb +2 -2
- data/lib/chef/provider/package/rubygems.rb +1 -1
- data/lib/chef/provider/package/windows/msi.rb +2 -2
- data/lib/chef/provider/package/yum.rb +17 -5
- data/lib/chef/provider/powershell_script.rb +59 -23
- data/lib/chef/provider/registry_key.rb +5 -5
- data/lib/chef/provider/remote_directory.rb +190 -102
- data/lib/chef/provider/service.rb +12 -2
- data/lib/chef/provider/service/aix.rb +1 -1
- data/lib/chef/provider/service/debian.rb +3 -5
- data/lib/chef/provider/service/freebsd.rb +1 -1
- data/lib/chef/provider/service/gentoo.rb +3 -3
- data/lib/chef/provider/service/init.rb +3 -3
- data/lib/chef/provider/service/insserv.rb +2 -4
- data/lib/chef/provider/service/invokercd.rb +2 -4
- data/lib/chef/provider/service/macosx.rb +5 -1
- data/lib/chef/provider/service/openbsd.rb +2 -1
- data/lib/chef/provider/service/redhat.rb +52 -16
- data/lib/chef/provider/service/simple.rb +2 -2
- data/lib/chef/provider/service/systemd.rb +3 -5
- data/lib/chef/provider/service/upstart.rb +4 -6
- data/lib/chef/provider/subversion.rb +13 -7
- data/lib/chef/provider/template/content.rb +16 -6
- data/lib/chef/provider/user/solaris.rb +32 -4
- data/lib/chef/provider/windows_script.rb +3 -5
- data/lib/chef/provider_resolver.rb +2 -2
- data/lib/chef/recipe.rb +1 -8
- data/lib/chef/resource.rb +563 -90
- data/lib/chef/resource/action_class.rb +83 -0
- data/lib/chef/resource/chef_gem.rb +3 -3
- data/lib/chef/resource/deploy.rb +8 -2
- data/lib/chef/resource/dsc_script.rb +2 -0
- data/lib/chef/resource/file/verification.rb +7 -1
- data/lib/chef/resource/lwrp_base.rb +1 -7
- data/lib/chef/resource/registry_key.rb +1 -1
- data/lib/chef/resource/service.rb +10 -2
- data/lib/chef/resource/subversion.rb +5 -0
- data/lib/chef/resource/windows_script.rb +6 -2
- data/lib/chef/resource/yum_package.rb +10 -1
- data/lib/chef/resource_resolver.rb +3 -3
- data/lib/chef/run_context.rb +402 -83
- data/lib/chef/run_list/versioned_recipe_list.rb +15 -0
- data/lib/chef/run_lock.rb +30 -21
- data/lib/chef/util/powershell/ps_credential.rb +4 -0
- data/lib/chef/util/windows.rb +0 -32
- data/lib/chef/util/windows/net_group.rb +85 -106
- data/lib/chef/util/windows/net_use.rb +35 -71
- data/lib/chef/util/windows/net_user.rb +0 -1
- data/lib/chef/util/windows/volume.rb +19 -19
- data/lib/chef/version.rb +3 -3
- data/lib/chef/win32/api.rb +1 -0
- data/lib/chef/win32/api/file.rb +20 -0
- data/lib/chef/win32/api/net.rb +163 -43
- data/lib/chef/win32/api/registry.rb +51 -0
- data/lib/chef/win32/api/system.rb +23 -0
- data/lib/chef/win32/api/unicode.rb +0 -43
- data/lib/chef/win32/crypto.rb +2 -1
- data/lib/chef/win32/file.rb +28 -3
- data/lib/chef/win32/mutex.rb +1 -2
- data/lib/chef/win32/net.rb +162 -8
- data/lib/chef/win32/process.rb +13 -0
- data/lib/chef/win32/registry.rb +35 -30
- data/lib/chef/win32/security.rb +1 -1
- data/lib/chef/win32/security/token.rb +1 -1
- data/lib/chef/win32/system.rb +62 -0
- data/lib/chef/win32/unicode.rb +7 -2
- data/lib/chef/win32/version.rb +0 -4
- data/lib/chef/workstation_config_loader.rb +3 -158
- data/spec/data/cookbooks/openldap/templates/default/helpers.erb +14 -0
- data/spec/data/cookbooks/openldap/templates/default/nested_openldap_partials.erb +1 -0
- data/spec/data/cookbooks/openldap/templates/default/nested_partial.erb +1 -0
- data/spec/data/dsc_lcm.pfx +0 -0
- data/spec/data/run_context/cookbooks/include/recipes/default.rb +24 -0
- data/spec/data/run_context/cookbooks/include/recipes/includee.rb +3 -0
- data/spec/functional/dsl/reboot_pending_spec.rb +33 -43
- data/spec/functional/knife/cookbook_delete_spec.rb +17 -7
- data/spec/functional/knife/ssh_spec.rb +16 -0
- data/spec/functional/rebooter_spec.rb +1 -1
- data/spec/functional/resource/deploy_revision_spec.rb +1 -1
- data/spec/functional/resource/dsc_resource_spec.rb +2 -0
- data/spec/functional/resource/dsc_script_spec.rb +91 -2
- data/spec/functional/resource/group_spec.rb +67 -44
- data/spec/functional/resource/{powershell_spec.rb → powershell_script_spec.rb} +107 -18
- data/spec/functional/resource/windows_service_spec.rb +1 -1
- data/spec/functional/run_lock_spec.rb +368 -189
- data/spec/functional/win32/{registry_helper_spec.rb → registry_spec.rb} +16 -23
- data/spec/functional/win32/service_manager_spec.rb +2 -2
- data/spec/integration/client/client_spec.rb +51 -0
- data/spec/integration/knife/chef_repo_path_spec.rb +13 -11
- data/spec/integration/knife/download_spec.rb +4 -0
- data/spec/integration/knife/list_spec.rb +8 -0
- data/spec/integration/knife/upload_spec.rb +1 -1
- data/spec/integration/recipes/recipe_dsl_spec.rb +1 -16
- data/spec/integration/recipes/remote_directory.rb +74 -0
- data/spec/integration/recipes/resource_action_spec.rb +363 -0
- data/spec/integration/recipes/resource_converge_if_changed_spec.rb +423 -0
- data/spec/integration/recipes/resource_load_spec.rb +206 -0
- data/spec/spec_helper.rb +9 -0
- data/spec/support/platform_helpers.rb +13 -0
- data/spec/support/shared/context/win32.rb +34 -0
- data/spec/support/shared/functional/win32_service.rb +2 -1
- data/spec/support/shared/functional/windows_script.rb +63 -26
- data/spec/support/shared/unit/mock_shellout.rb +46 -0
- data/spec/support/shared/unit/provider/file.rb +10 -4
- data/spec/unit/application/client_spec.rb +16 -3
- data/spec/unit/application/knife_spec.rb +2 -2
- data/spec/unit/application/solo_spec.rb +4 -3
- data/spec/unit/chef_class_spec.rb +23 -4
- data/spec/unit/chef_fs/path_util_spec.rb +108 -0
- data/spec/unit/client_spec.rb +6 -1
- data/spec/unit/config_spec.rb +31 -0
- data/spec/unit/cookbook/metadata_spec.rb +23 -3
- data/spec/unit/cookbook/syntax_check_spec.rb +3 -0
- data/spec/unit/deprecation_spec.rb +3 -6
- data/spec/unit/dsl/reboot_pending_spec.rb +12 -6
- data/spec/unit/event_dispatch/dispatcher_spec.rb +65 -3
- data/spec/unit/event_dispatch/dsl_spec.rb +83 -0
- data/spec/unit/formatters/doc_spec.rb +32 -0
- data/spec/unit/formatters/error_inspectors/compile_error_inspector_spec.rb +26 -0
- data/spec/unit/json_compat_spec.rb +4 -3
- data/spec/unit/knife/bootstrap/client_builder_spec.rb +27 -0
- data/spec/unit/knife/bootstrap_spec.rb +55 -3
- data/spec/unit/knife/cookbook_site_share_spec.rb +3 -3
- data/spec/unit/knife/core/bootstrap_context_spec.rb +21 -4
- data/spec/unit/knife/core/custom_manifest_loader_spec.rb +41 -0
- data/spec/unit/knife/core/gem_glob_loader_spec.rb +210 -0
- data/spec/unit/knife/core/hashed_command_loader_spec.rb +93 -0
- data/spec/unit/knife/core/subcommand_loader_spec.rb +16 -192
- data/spec/unit/knife/node_run_list_remove_spec.rb +17 -0
- data/spec/unit/knife/ssl_check_spec.rb +4 -0
- data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +10 -10
- data/spec/unit/mixin/params_validate_spec.rb +4 -2
- data/spec/unit/mixin/template_spec.rb +5 -1
- data/spec/unit/mixin/windows_architecture_helper_spec.rb +13 -8
- data/spec/unit/node_spec.rb +220 -0
- data/spec/unit/platform/query_helpers_spec.rb +146 -3
- data/spec/unit/policy_builder/dynamic_spec.rb +275 -0
- data/spec/unit/policy_builder/expand_node_object_spec.rb +37 -38
- data/spec/unit/policy_builder/policyfile_spec.rb +260 -46
- data/spec/unit/property/state_spec.rb +506 -0
- data/spec/unit/property/validation_spec.rb +663 -0
- data/spec/unit/property_spec.rb +1094 -0
- data/spec/unit/provider/deploy_spec.rb +5 -5
- data/spec/unit/provider/directory_spec.rb +35 -0
- data/spec/unit/provider/dsc_resource_spec.rb +3 -10
- data/spec/unit/provider/ifconfig_spec.rb +22 -2
- data/spec/unit/provider/mount/aix_spec.rb +2 -1
- data/spec/unit/provider/mount/mount_spec.rb +6 -0
- data/spec/unit/provider/mount/windows_spec.rb +14 -0
- data/spec/unit/provider/mount_spec.rb +12 -1
- data/spec/unit/provider/package/dpkg_spec.rb +8 -1
- data/spec/unit/provider/package/rpm_spec.rb +18 -1
- data/spec/unit/provider/package/rubygems_spec.rb +18 -0
- data/spec/unit/provider/package/yum_spec.rb +97 -24
- data/spec/unit/provider/powershell_script_spec.rb +106 -0
- data/spec/unit/provider/registry_key_spec.rb +12 -0
- data/spec/unit/provider/remote_directory_spec.rb +1 -2
- data/spec/unit/provider/service/aix_service_spec.rb +3 -3
- data/spec/unit/provider/service/gentoo_service_spec.rb +4 -4
- data/spec/unit/provider/service/macosx_spec.rb +4 -4
- data/spec/unit/provider/service/openbsd_service_spec.rb +10 -8
- data/spec/unit/provider/service/redhat_spec.rb +88 -8
- data/spec/unit/provider/service/upstart_service_spec.rb +11 -7
- data/spec/unit/provider/service/windows_spec.rb +211 -200
- data/spec/unit/provider/subversion_spec.rb +50 -31
- data/spec/unit/provider/template/content_spec.rb +93 -2
- data/spec/unit/provider/user/solaris_spec.rb +66 -9
- data/spec/unit/provider_resolver_spec.rb +707 -650
- data/spec/unit/provider_spec.rb +1 -3
- data/spec/unit/recipe_spec.rb +0 -4
- data/spec/unit/resource/deploy_spec.rb +7 -1
- data/spec/unit/resource/dsc_script_spec.rb +4 -0
- data/spec/unit/resource/file/verification_spec.rb +33 -5
- data/spec/unit/resource/{powershell_spec.rb → powershell_script_spec.rb} +17 -13
- data/spec/unit/resource/service_spec.rb +4 -4
- data/spec/unit/resource/subversion_spec.rb +4 -0
- data/spec/unit/resource/yum_package_spec.rb +10 -1
- data/spec/unit/resource_spec.rb +2 -2
- data/spec/unit/run_context/child_run_context_spec.rb +133 -0
- data/spec/unit/run_context_spec.rb +7 -0
- data/spec/unit/run_list/versioned_recipe_list_spec.rb +5 -0
- data/spec/unit/win32/registry_spec.rb +394 -0
- data/tasks/external_tests.rb +47 -23
- data/tasks/maintainers.rb +155 -14
- metadata +64 -53
- data/lib/chef/knife/bootstrap/templates/archlinux-gems.erb +0 -76
- data/lib/chef/knife/bootstrap/templates/chef-aix.erb +0 -72
- data/spec/unit/provider/powershell_spec.rb +0 -80
- data/spec/unit/registry_helper_spec.rb +0 -376
- data/spec/unit/workstation_config_loader_spec.rb +0 -283
@@ -20,6 +20,7 @@ require 'chef/node'
|
|
20
20
|
require 'chef/rest'
|
21
21
|
require 'chef/api_client/registration'
|
22
22
|
require 'chef/api_client'
|
23
|
+
require 'chef/knife/bootstrap'
|
23
24
|
require 'tmpdir'
|
24
25
|
|
25
26
|
class Chef
|
@@ -90,6 +91,16 @@ class Chef
|
|
90
91
|
knife_config[:run_list]
|
91
92
|
end
|
92
93
|
|
94
|
+
# @return [String] policy_name from the knife_config
|
95
|
+
def policy_name
|
96
|
+
knife_config[:policy_name]
|
97
|
+
end
|
98
|
+
|
99
|
+
# @return [String] policy_group from the knife_config
|
100
|
+
def policy_group
|
101
|
+
knife_config[:policy_group]
|
102
|
+
end
|
103
|
+
|
93
104
|
# @return [Hash,Array] Object representation of json first-boot attributes from the knife_config
|
94
105
|
def first_boot_attributes
|
95
106
|
knife_config[:first_boot_attributes]
|
@@ -140,6 +151,11 @@ class Chef
|
|
140
151
|
node.run_list(normalized_run_list)
|
141
152
|
node.normal_attrs = first_boot_attributes if first_boot_attributes
|
142
153
|
node.environment(environment) if environment
|
154
|
+
node.policy_name = policy_name if policy_name
|
155
|
+
node.policy_group = policy_group if policy_group
|
156
|
+
(knife_config[:tags] || []).each do |tag|
|
157
|
+
node.tags << tag
|
158
|
+
end
|
143
159
|
node
|
144
160
|
end
|
145
161
|
end
|
@@ -1,12 +1,11 @@
|
|
1
1
|
This directory contains bootstrap templates which can be used with the -d flag
|
2
2
|
to 'knife bootstrap' to install Chef in different ways. To simplify installation,
|
3
3
|
and reduce the matrix of common installation patterns to support, we have
|
4
|
-
standardized on the [Omnibus](https://github.com/
|
4
|
+
standardized on the [Omnibus](https://github.com/chef/omnibus) built installation
|
5
5
|
packages.
|
6
6
|
|
7
7
|
The 'chef-full' template downloads a script which is used to determine the correct
|
8
|
-
Omnibus package for this system from the [Omnitruck](https://
|
9
|
-
in the future.
|
8
|
+
Omnibus package for this system from the [Omnitruck](https://docs.chef.io/api_omnitruck.html) API.
|
10
9
|
|
11
10
|
You can still utilize custom bootstrap templates on your system if your installation
|
12
|
-
needs are unique. Additional information can be found on the [docs site](
|
11
|
+
needs are unique. Additional information can be found on the [docs site](https://docs.chef.io/knife_bootstrap.html#custom-templates).
|
@@ -84,7 +84,7 @@ class Chef
|
|
84
84
|
end
|
85
85
|
|
86
86
|
def download_cookbook
|
87
|
-
ui.info "Downloading #{@name_args[0]} from
|
87
|
+
ui.info "Downloading #{@name_args[0]} from Supermarket at version #{version} to #{download_location}"
|
88
88
|
noauth_rest.sign_on_redirect = false
|
89
89
|
tf = noauth_rest.get_rest desired_cookbook_data["file"], true
|
90
90
|
|
@@ -93,7 +93,7 @@ class Chef
|
|
93
93
|
|
94
94
|
# TODO: it'd be better to store these outside the cookbook repo and
|
95
95
|
# keep them around, e.g., in ~/Library/Caches on OS X.
|
96
|
-
ui.info("
|
96
|
+
ui.info("Removing downloaded tarball")
|
97
97
|
File.unlink(upstream_file)
|
98
98
|
|
99
99
|
if @repo.finalize_updates_to(@cookbook_name, downloader.version)
|
@@ -48,7 +48,7 @@ class Chef
|
|
48
48
|
:short => '-n',
|
49
49
|
:boolean => true,
|
50
50
|
:default => false,
|
51
|
-
:description => "Don't take action, only print what files will be
|
51
|
+
:description => "Don't take action, only print what files will be uploaded to Supermarket."
|
52
52
|
|
53
53
|
def run
|
54
54
|
config[:cookbook_path] ||= Chef::Config[:cookbook_path]
|
@@ -94,7 +94,7 @@ class Chef
|
|
94
94
|
Chef::Log.debug("Removing local staging directory at #{tmp_cookbook_dir}")
|
95
95
|
FileUtils.rm_rf tmp_cookbook_dir
|
96
96
|
rescue => e
|
97
|
-
ui.error("Error uploading cookbook #{cookbook_name} to
|
97
|
+
ui.error("Error uploading cookbook #{cookbook_name} to Supermarket: #{e.message}. Increase log verbosity (-VV) for more information.")
|
98
98
|
Chef::Log.debug("\n#{e.backtrace.join("\n")}")
|
99
99
|
exit(1)
|
100
100
|
end
|
@@ -108,15 +108,15 @@ class Chef
|
|
108
108
|
|
109
109
|
def get_category(cookbook_name)
|
110
110
|
begin
|
111
|
-
data = noauth_rest.get_rest("
|
111
|
+
data = noauth_rest.get_rest("https://supermarket.chef.io/api/v1/cookbooks/#{@name_args[0]}")
|
112
112
|
if !data["category"] && data["error_code"]
|
113
|
-
ui.fatal("Received an error from
|
113
|
+
ui.fatal("Received an error from Supermarket: #{data["error_code"]}. On the first time you upload it, you are required to specify the category you want to share this cookbook to.")
|
114
114
|
exit(1)
|
115
115
|
else
|
116
116
|
data['category']
|
117
117
|
end
|
118
118
|
rescue => e
|
119
|
-
ui.fatal("Unable to reach
|
119
|
+
ui.fatal("Unable to reach Supermarket: #{e.message}. Increase log verbosity (-VV) for more information.")
|
120
120
|
Chef::Log.debug("\n#{e.backtrace.join("\n")}")
|
121
121
|
exit(1)
|
122
122
|
end
|
@@ -136,7 +136,7 @@ class Chef
|
|
136
136
|
if http_resp.code.to_i != 201
|
137
137
|
if res['error_messages']
|
138
138
|
if res['error_messages'][0] =~ /Version already exists/
|
139
|
-
ui.error "The same version of this cookbook already exists on
|
139
|
+
ui.error "The same version of this cookbook already exists on Supermarket."
|
140
140
|
exit(1)
|
141
141
|
else
|
142
142
|
ui.error "#{res['error_messages'][0]}"
|
@@ -38,7 +38,7 @@ class Chef
|
|
38
38
|
exit 1
|
39
39
|
end
|
40
40
|
|
41
|
-
confirm "Do you really want to unshare the cookbook #{@cookbook_name}"
|
41
|
+
confirm "Do you really want to unshare all versions of the cookbook #{@cookbook_name}"
|
42
42
|
|
43
43
|
begin
|
44
44
|
rest.delete_rest "https://supermarket.chef.io/api/v1/cookbooks/#{@name_args[0]}"
|
@@ -48,7 +48,7 @@ class Chef
|
|
48
48
|
exit 1
|
49
49
|
end
|
50
50
|
|
51
|
-
ui.info "Unshared cookbook #{@cookbook_name}"
|
51
|
+
ui.info "Unshared all versions of the cookbook #{@cookbook_name}"
|
52
52
|
end
|
53
53
|
|
54
54
|
end
|
@@ -40,7 +40,7 @@ class Chef
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def bootstrap_environment
|
43
|
-
@chef_config[:environment]
|
43
|
+
@chef_config[:environment]
|
44
44
|
end
|
45
45
|
|
46
46
|
def validation_key
|
@@ -128,7 +128,7 @@ CONFIG
|
|
128
128
|
client_path = @chef_config[:chef_client_path] || 'chef-client'
|
129
129
|
s = "#{client_path} -j /etc/chef/first-boot.json"
|
130
130
|
s << ' -l debug' if @config[:verbosity] and @config[:verbosity] >= 2
|
131
|
-
s << " -E #{bootstrap_environment}"
|
131
|
+
s << " -E #{bootstrap_environment}" unless bootstrap_environment.nil?
|
132
132
|
s
|
133
133
|
end
|
134
134
|
|
@@ -163,11 +163,19 @@ CONFIG
|
|
163
163
|
end
|
164
164
|
|
165
165
|
def first_boot
|
166
|
-
(@config[:first_boot_attributes] || {}).
|
166
|
+
(@config[:first_boot_attributes] || {}).tap do |attributes|
|
167
|
+
if @config[:policy_name] && @config[:policy_group]
|
168
|
+
attributes.merge!(:policy_name => @config[:policy_name], :policy_group => @config[:policy_group])
|
169
|
+
else
|
170
|
+
attributes.merge!(:run_list => @run_list)
|
171
|
+
end
|
172
|
+
|
173
|
+
attributes.merge!(:tags => @config[:tags]) if @config[:tags] && !@config[:tags].empty?
|
174
|
+
end
|
167
175
|
end
|
168
176
|
|
169
177
|
private
|
170
|
-
|
178
|
+
|
171
179
|
# Returns a string for copying the trusted certificates on the workstation to the system being bootstrapped
|
172
180
|
# This string should contain both the commands necessary to both create the files, as well as their content
|
173
181
|
def trusted_certs_content
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# Copyright:: Copyright (c) 2015 Chef Software, Inc
|
2
|
+
# License:: Apache License, Version 2.0
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
require 'chef/version'
|
18
|
+
class Chef
|
19
|
+
class Knife
|
20
|
+
class SubcommandLoader
|
21
|
+
|
22
|
+
#
|
23
|
+
# Load a subcommand from a user-supplied
|
24
|
+
# manifest file
|
25
|
+
#
|
26
|
+
class CustomManifestLoader < Chef::Knife::SubcommandLoader
|
27
|
+
attr_accessor :manifest
|
28
|
+
def initialize(chef_config_dir, plugin_manifest)
|
29
|
+
super(chef_config_dir)
|
30
|
+
@manifest = plugin_manifest
|
31
|
+
end
|
32
|
+
|
33
|
+
# If the user has created a ~/.chef/plugin_manifest.json file, we'll use
|
34
|
+
# that instead of inspecting the on-system gems to find the plugins. The
|
35
|
+
# file format is expected to look like:
|
36
|
+
#
|
37
|
+
# { "plugins": {
|
38
|
+
# "knife-ec2": {
|
39
|
+
# "paths": [
|
40
|
+
# "/home/alice/.rubymanagerthing/gems/knife-ec2-x.y.z/lib/chef/knife/ec2_server_create.rb",
|
41
|
+
# "/home/alice/.rubymanagerthing/gems/knife-ec2-x.y.z/lib/chef/knife/ec2_server_delete.rb"
|
42
|
+
# ]
|
43
|
+
# }
|
44
|
+
# }
|
45
|
+
# }
|
46
|
+
#
|
47
|
+
# Extraneous content in this file is ignored. This is intentional so that we
|
48
|
+
# can adapt the file format for potential behavior changes to knife in
|
49
|
+
# the future.
|
50
|
+
def find_subcommands_via_manifest
|
51
|
+
# Format of subcommand_files is "relative_path" (something you can
|
52
|
+
# Kernel.require()) => full_path. The relative path isn't used
|
53
|
+
# currently, so we just map full_path => full_path.
|
54
|
+
subcommand_files = {}
|
55
|
+
manifest["plugins"].each do |plugin_name, plugin_manifest|
|
56
|
+
plugin_manifest["paths"].each do |cmd_path|
|
57
|
+
subcommand_files[cmd_path] = cmd_path
|
58
|
+
end
|
59
|
+
end
|
60
|
+
subcommand_files.merge(find_subcommands_via_dirglob)
|
61
|
+
end
|
62
|
+
|
63
|
+
def subcommand_files
|
64
|
+
subcommand_files ||= (find_subcommands_via_manifest.values + site_subcommands).flatten.uniq
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,138 @@
|
|
1
|
+
# Author:: Christopher Brown (<cb@opscode.com>)
|
2
|
+
# Author:: Daniel DeLeo (<dan@opscode.com>)
|
3
|
+
# Copyright:: Copyright (c) 2009-2015 Chef Software, 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 'chef/version'
|
20
|
+
require 'chef/util/path_helper'
|
21
|
+
class Chef
|
22
|
+
class Knife
|
23
|
+
class SubcommandLoader
|
24
|
+
class GemGlobLoader < Chef::Knife::SubcommandLoader
|
25
|
+
MATCHES_CHEF_GEM = %r{/chef-[\d]+\.[\d]+\.[\d]+}.freeze
|
26
|
+
MATCHES_THIS_CHEF_GEM = %r{/chef-#{Chef::VERSION}(-\w+)?(-\w+)?/}.freeze
|
27
|
+
|
28
|
+
def subcommand_files
|
29
|
+
@subcommand_files ||= (gem_and_builtin_subcommands.values + site_subcommands).flatten.uniq
|
30
|
+
end
|
31
|
+
|
32
|
+
# Returns a Hash of paths to knife commands built-in to chef, or installed via gem.
|
33
|
+
# If rubygems is not installed, falls back to globbing the knife directory.
|
34
|
+
# The Hash is of the form {"relative/path" => "/absolute/path"}
|
35
|
+
#--
|
36
|
+
# Note: the "right" way to load the plugins is to require the relative path, i.e.,
|
37
|
+
# require 'chef/knife/command'
|
38
|
+
# but we're getting frustrated by bugs at every turn, and it's slow besides. So
|
39
|
+
# subcommand loader has been modified to load the plugins by using Kernel.load
|
40
|
+
# with the absolute path.
|
41
|
+
def gem_and_builtin_subcommands
|
42
|
+
require 'rubygems'
|
43
|
+
find_subcommands_via_rubygems
|
44
|
+
rescue LoadError
|
45
|
+
find_subcommands_via_dirglob
|
46
|
+
end
|
47
|
+
|
48
|
+
def find_subcommands_via_dirglob
|
49
|
+
# The "require paths" of the core knife subcommands bundled with chef
|
50
|
+
files = Dir[File.join(Chef::Util::PathHelper.escape_glob(File.expand_path('../../../knife', __FILE__)), '*.rb')]
|
51
|
+
subcommand_files = {}
|
52
|
+
files.each do |knife_file|
|
53
|
+
rel_path = knife_file[/#{CHEF_ROOT}#{Regexp.escape(File::SEPARATOR)}(.*)\.rb/,1]
|
54
|
+
subcommand_files[rel_path] = knife_file
|
55
|
+
end
|
56
|
+
subcommand_files
|
57
|
+
end
|
58
|
+
|
59
|
+
def find_subcommands_via_rubygems
|
60
|
+
files = find_files_latest_gems 'chef/knife/*.rb'
|
61
|
+
subcommand_files = {}
|
62
|
+
files.each do |file|
|
63
|
+
rel_path = file[/(#{Regexp.escape File.join('chef', 'knife', '')}.*)\.rb/, 1]
|
64
|
+
|
65
|
+
# When not installed as a gem (ChefDK/appbundler in particular), AND
|
66
|
+
# a different version of Chef is installed via gems, `files` will
|
67
|
+
# include some files from the 'other' Chef install. If this contains
|
68
|
+
# a knife command that doesn't exist in this version of Chef, we will
|
69
|
+
# get a LoadError later when we try to require it.
|
70
|
+
next if from_different_chef_version?(file)
|
71
|
+
|
72
|
+
subcommand_files[rel_path] = file
|
73
|
+
end
|
74
|
+
|
75
|
+
subcommand_files.merge(find_subcommands_via_dirglob)
|
76
|
+
end
|
77
|
+
|
78
|
+
private
|
79
|
+
|
80
|
+
def find_files_latest_gems(glob, check_load_path=true)
|
81
|
+
files = []
|
82
|
+
|
83
|
+
if check_load_path
|
84
|
+
files = $LOAD_PATH.map { |load_path|
|
85
|
+
Dir["#{File.expand_path glob, Chef::Util::PathHelper.escape_glob(load_path)}#{Gem.suffix_pattern}"]
|
86
|
+
}.flatten.select { |file| File.file? file.untaint }
|
87
|
+
end
|
88
|
+
|
89
|
+
gem_files = latest_gem_specs.map do |spec|
|
90
|
+
# Gem::Specification#matches_for_glob wasn't added until RubyGems 1.8
|
91
|
+
if spec.respond_to? :matches_for_glob
|
92
|
+
spec.matches_for_glob("#{glob}#{Gem.suffix_pattern}")
|
93
|
+
else
|
94
|
+
check_spec_for_glob(spec, glob)
|
95
|
+
end
|
96
|
+
end.flatten
|
97
|
+
|
98
|
+
files.concat gem_files
|
99
|
+
files.uniq! if check_load_path
|
100
|
+
|
101
|
+
return files
|
102
|
+
end
|
103
|
+
|
104
|
+
def latest_gem_specs
|
105
|
+
@latest_gem_specs ||= if Gem::Specification.respond_to? :latest_specs
|
106
|
+
Gem::Specification.latest_specs(true) # find prerelease gems
|
107
|
+
else
|
108
|
+
Gem.source_index.latest_specs(true)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def check_spec_for_glob(spec, glob)
|
113
|
+
dirs = if spec.require_paths.size > 1 then
|
114
|
+
"{#{spec.require_paths.join(',')}}"
|
115
|
+
else
|
116
|
+
spec.require_paths.first
|
117
|
+
end
|
118
|
+
|
119
|
+
glob = File.join(Chef::Util::PathHelper.escape_glob(spec.full_gem_path, dirs), glob)
|
120
|
+
|
121
|
+
Dir[glob].map { |f| f.untaint }
|
122
|
+
end
|
123
|
+
|
124
|
+
def from_different_chef_version?(path)
|
125
|
+
matches_any_chef_gem?(path) && !matches_this_chef_gem?(path)
|
126
|
+
end
|
127
|
+
|
128
|
+
def matches_any_chef_gem?(path)
|
129
|
+
path =~ MATCHES_CHEF_GEM
|
130
|
+
end
|
131
|
+
|
132
|
+
def matches_this_chef_gem?(path)
|
133
|
+
path =~ MATCHES_THIS_CHEF_GEM
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
# Author:: Steven Danna (<steve@chef.io>)
|
2
|
+
# Copyright:: Copyright (c) 2015 Chef Software, Inc
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
|
18
|
+
require 'chef/version'
|
19
|
+
class Chef
|
20
|
+
class Knife
|
21
|
+
class SubcommandLoader
|
22
|
+
#
|
23
|
+
# Load a subcommand from a pre-computed path
|
24
|
+
# for the given command.
|
25
|
+
#
|
26
|
+
class HashedCommandLoader < Chef::Knife::SubcommandLoader
|
27
|
+
KEY = '_autogenerated_command_paths'
|
28
|
+
|
29
|
+
attr_accessor :manifest
|
30
|
+
def initialize(chef_config_dir, plugin_manifest)
|
31
|
+
super(chef_config_dir)
|
32
|
+
@manifest = plugin_manifest
|
33
|
+
end
|
34
|
+
|
35
|
+
def guess_category(args)
|
36
|
+
category_words = positional_arguments(args)
|
37
|
+
category_words.map! { |w| w.split('-') }.flatten!
|
38
|
+
find_longest_key(manifest[KEY]["plugins_by_category"], category_words, ' ')
|
39
|
+
end
|
40
|
+
|
41
|
+
def list_commands(pref_category=nil)
|
42
|
+
if pref_category || manifest[KEY]["plugins_by_category"].key?(pref_category)
|
43
|
+
{ pref_category => manifest[KEY]["plugins_by_category"][pref_category] }
|
44
|
+
else
|
45
|
+
manifest[KEY]["plugins_by_category"]
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def subcommand_files
|
50
|
+
manifest[KEY]["plugins_paths"].values.flatten
|
51
|
+
end
|
52
|
+
|
53
|
+
def load_command(args)
|
54
|
+
paths = manifest[KEY]["plugins_paths"][subcommand_for_args(args)]
|
55
|
+
if paths.nil? || paths.empty? || (! paths.is_a? Array)
|
56
|
+
false
|
57
|
+
else
|
58
|
+
paths.each do |sc|
|
59
|
+
if File.exists?(sc)
|
60
|
+
Kernel.load sc
|
61
|
+
else
|
62
|
+
Chef::Log.error "The file #{sc} is missing for subcommand '#{subcommand_for_args(args)}'. Please rehash to update the subcommands cache."
|
63
|
+
return false
|
64
|
+
end
|
65
|
+
end
|
66
|
+
true
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def subcommand_for_args(args)
|
71
|
+
if manifest[KEY]["plugins_paths"].key?(args)
|
72
|
+
args
|
73
|
+
else
|
74
|
+
find_longest_key(manifest[KEY]["plugins_paths"], args, "_")
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|