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
@@ -58,14 +58,7 @@ class Chef
|
|
58
58
|
end
|
59
59
|
|
60
60
|
def children
|
61
|
-
|
62
|
-
Dir.entries(file_path).sort.
|
63
|
-
select { |child_name| can_have_child?(child_name, File.directory?(File.join(file_path, child_name))) }.
|
64
|
-
map { |child_name| make_child(child_name) }.
|
65
|
-
select { |entry| !(entry.dir? && entry.children.size == 0) }
|
66
|
-
rescue Errno::ENOENT
|
67
|
-
raise Chef::ChefFS::FileSystem::NotFoundError.new(self, $!)
|
68
|
-
end
|
61
|
+
super.select { |entry| !(entry.dir? && entry.children.size == 0 ) }
|
69
62
|
end
|
70
63
|
|
71
64
|
def can_have_child?(name, is_dir)
|
@@ -99,7 +92,7 @@ class Chef
|
|
99
92
|
|
100
93
|
protected
|
101
94
|
|
102
|
-
def
|
95
|
+
def make_child_entry(child_name)
|
103
96
|
segment_info = CookbookDir::COOKBOOK_SEGMENT_INFO[child_name.to_sym] || {}
|
104
97
|
ChefRepositoryFileSystemCookbookEntry.new(child_name, self, nil, segment_info[:ruby_only], segment_info[:recursive])
|
105
98
|
end
|
@@ -34,14 +34,7 @@ class Chef
|
|
34
34
|
attr_reader :recursive
|
35
35
|
|
36
36
|
def children
|
37
|
-
|
38
|
-
Dir.entries(file_path).sort.
|
39
|
-
select { |child_name| can_have_child?(child_name, File.directory?(File.join(file_path, child_name))) }.
|
40
|
-
map { |child_name| make_child(child_name) }.
|
41
|
-
select { |entry| !(entry.dir? && entry.children.size == 0) }
|
42
|
-
rescue Errno::ENOENT
|
43
|
-
raise Chef::ChefFS::FileSystem::NotFoundError.new(self, $!)
|
44
|
-
end
|
37
|
+
super.select { |entry| !(entry.dir? && entry.children.size == 0 ) }
|
45
38
|
end
|
46
39
|
|
47
40
|
def can_have_child?(name, is_dir)
|
@@ -78,7 +71,7 @@ class Chef
|
|
78
71
|
|
79
72
|
protected
|
80
73
|
|
81
|
-
def
|
74
|
+
def make_child_entry(child_name)
|
82
75
|
ChefRepositoryFileSystemCookbookEntry.new(child_name, self, nil, ruby_only, recursive)
|
83
76
|
end
|
84
77
|
end
|
@@ -37,21 +37,14 @@ class Chef
|
|
37
37
|
attr_reader :chefignore
|
38
38
|
|
39
39
|
def children
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
false
|
49
|
-
else
|
50
|
-
true
|
51
|
-
end
|
52
|
-
end
|
53
|
-
rescue Errno::ENOENT
|
54
|
-
raise Chef::ChefFS::FileSystem::NotFoundError.new(self, $!)
|
40
|
+
super.select do |entry|
|
41
|
+
# empty cookbooks and cookbook directories are ignored
|
42
|
+
if !entry.can_upload?
|
43
|
+
Chef::Log.warn("Cookbook '#{entry.name}' is empty or entirely chefignored at #{entry.path_for_printing}")
|
44
|
+
false
|
45
|
+
else
|
46
|
+
true
|
47
|
+
end
|
55
48
|
end
|
56
49
|
end
|
57
50
|
|
@@ -61,7 +54,7 @@ class Chef
|
|
61
54
|
|
62
55
|
def write_cookbook(cookbook_path, cookbook_version_json, from_fs)
|
63
56
|
cookbook_name = File.basename(cookbook_path)
|
64
|
-
child =
|
57
|
+
child = make_child_entry(cookbook_name)
|
65
58
|
|
66
59
|
# Use the copy/diff algorithm to copy it down so we don't destroy
|
67
60
|
# chefignored data. This is terribly un-thread-safe.
|
@@ -80,7 +73,7 @@ class Chef
|
|
80
73
|
|
81
74
|
protected
|
82
75
|
|
83
|
-
def
|
76
|
+
def make_child_entry(child_name)
|
84
77
|
ChefRepositoryFileSystemCookbookDir.new(child_name, self)
|
85
78
|
end
|
86
79
|
end
|
@@ -70,20 +70,9 @@ class Chef
|
|
70
70
|
Chef::JSONCompat.to_json_pretty(object)
|
71
71
|
end
|
72
72
|
|
73
|
-
def children
|
74
|
-
# Except cookbooks and data bag dirs, all things must be json files
|
75
|
-
begin
|
76
|
-
Dir.entries(file_path).sort.
|
77
|
-
select { |child_name| can_have_child?(child_name, File.directory?(File.join(file_path, child_name))) }.
|
78
|
-
map { |child_name| make_child(child_name) }
|
79
|
-
rescue Errno::ENOENT
|
80
|
-
raise Chef::ChefFS::FileSystem::NotFoundError.new(self, $!)
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
73
|
protected
|
85
74
|
|
86
|
-
def
|
75
|
+
def make_child_entry(child_name)
|
87
76
|
ChefRepositoryFileSystemEntry.new(child_name, self)
|
88
77
|
end
|
89
78
|
end
|
@@ -68,13 +68,13 @@ class Chef
|
|
68
68
|
attr_reader :child_paths
|
69
69
|
attr_reader :versioned_cookbooks
|
70
70
|
|
71
|
-
CHILDREN = %w(
|
71
|
+
CHILDREN = %w(org.json invitations.json members.json)
|
72
72
|
|
73
73
|
def children
|
74
74
|
@children ||= begin
|
75
|
-
result = child_paths.keys.sort.map { |name| make_child_entry(name) }
|
76
|
-
result +=
|
77
|
-
result.sort_by { |c| c.name }
|
75
|
+
result = child_paths.keys.sort.map { |name| make_child_entry(name) }
|
76
|
+
result += CHILDREN.map { |name| make_child_entry(name) }
|
77
|
+
result.select { |c| c && c.exists? }.sort_by { |c| c.name }
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
@@ -149,19 +149,23 @@ class Chef
|
|
149
149
|
# cookbooks from all of them when you list or grab them).
|
150
150
|
#
|
151
151
|
def make_child_entry(name)
|
152
|
-
|
153
|
-
|
152
|
+
if CHILDREN.include?(name)
|
153
|
+
return nil if !root_dir
|
154
|
+
return root_dir.child(name)
|
154
155
|
end
|
156
|
+
|
157
|
+
paths = (child_paths[name] || []).select { |path| File.exists?(path) }
|
155
158
|
if paths.size == 0
|
156
|
-
return
|
159
|
+
return NonexistentFSObject.new(name, self)
|
157
160
|
end
|
158
|
-
|
161
|
+
case name
|
162
|
+
when 'cookbooks'
|
159
163
|
dirs = paths.map { |path| ChefRepositoryFileSystemCookbooksDir.new(name, self, path) }
|
160
|
-
|
164
|
+
when 'data_bags'
|
161
165
|
dirs = paths.map { |path| ChefRepositoryFileSystemDataBagsDir.new(name, self, path) }
|
162
|
-
|
166
|
+
when 'policies'
|
163
167
|
dirs = paths.map { |path| ChefRepositoryFileSystemPoliciesDir.new(name, self, path) }
|
164
|
-
|
168
|
+
when 'acls'
|
165
169
|
dirs = paths.map { |path| ChefRepositoryFileSystemAclsDir.new(name, self, path) }
|
166
170
|
else
|
167
171
|
data_handler = case name
|
@@ -110,7 +110,8 @@ class Chef
|
|
110
110
|
end
|
111
111
|
|
112
112
|
def can_have_child?(name, is_dir)
|
113
|
-
|
113
|
+
result = children.select { |child| child.name == name }.first
|
114
|
+
result && !!result.dir? == !!is_dir
|
114
115
|
end
|
115
116
|
|
116
117
|
def org
|
@@ -119,11 +120,16 @@ class Chef
|
|
119
120
|
if File.dirname(path) == '/organizations'
|
120
121
|
File.basename(path)
|
121
122
|
else
|
122
|
-
|
123
|
+
# In Chef 12, everything is in an org.
|
124
|
+
'chef'
|
123
125
|
end
|
124
126
|
end
|
125
127
|
end
|
126
128
|
|
129
|
+
def make_child_entry(name)
|
130
|
+
children.select { |child| child.name == name }.first
|
131
|
+
end
|
132
|
+
|
127
133
|
def children
|
128
134
|
@children ||= begin
|
129
135
|
result = [
|
@@ -16,6 +16,7 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
#
|
18
18
|
|
19
|
+
require 'chef/chef_fs/command_line'
|
19
20
|
require 'chef/chef_fs/file_system/rest_list_dir'
|
20
21
|
require 'chef/chef_fs/file_system/cookbook_subdir'
|
21
22
|
require 'chef/chef_fs/file_system/cookbook_file'
|
@@ -71,16 +72,15 @@ class Chef
|
|
71
72
|
"#{parent.api_path}/#{cookbook_name}/#{version || "_latest"}"
|
72
73
|
end
|
73
74
|
|
74
|
-
def
|
75
|
+
def make_child_entry(name)
|
75
76
|
# Since we're ignoring the rules and doing a network request here,
|
76
77
|
# we need to make sure we don't rethrow the exception. (child(name)
|
77
78
|
# is not supposed to fail.)
|
78
79
|
begin
|
79
|
-
|
80
|
-
return result if result
|
80
|
+
children.select { |child| child.name == name }.first
|
81
81
|
rescue Chef::ChefFS::FileSystem::NotFoundError
|
82
|
+
nil
|
82
83
|
end
|
83
|
-
return NonexistentFSObject.new(name, self)
|
84
84
|
end
|
85
85
|
|
86
86
|
def can_have_child?(name, is_dir)
|
@@ -31,7 +31,7 @@ class Chef
|
|
31
31
|
def children
|
32
32
|
if @children.nil?
|
33
33
|
names = parent.parent.child(name).children.map { |child| "#{child.cookbook_name}.json" }
|
34
|
-
@children = names.uniq.map { |name|
|
34
|
+
@children = names.uniq.map { |name| make_child_entry(name, true) }
|
35
35
|
end
|
36
36
|
@children
|
37
37
|
end
|
@@ -36,17 +36,9 @@ class Chef
|
|
36
36
|
super("cookbooks", parent)
|
37
37
|
end
|
38
38
|
|
39
|
-
def
|
40
|
-
if @children
|
41
|
-
|
42
|
-
if result
|
43
|
-
result
|
44
|
-
else
|
45
|
-
NonexistentFSObject.new(name, self)
|
46
|
-
end
|
47
|
-
else
|
48
|
-
CookbookDir.new(name, self)
|
49
|
-
end
|
39
|
+
def make_child_entry(name)
|
40
|
+
result = @children.select { |child| child.name == name }.first if @children
|
41
|
+
result || CookbookDir.new(name, self)
|
50
42
|
end
|
51
43
|
|
52
44
|
def children
|
@@ -27,16 +27,14 @@ class Chef
|
|
27
27
|
super("data_bags", parent, "data")
|
28
28
|
end
|
29
29
|
|
30
|
-
def
|
30
|
+
def make_child_entry(name, exists = false)
|
31
31
|
result = @children.select { |child| child.name == name }.first if @children
|
32
|
-
result || DataBagDir.new(name, self)
|
32
|
+
result || DataBagDir.new(name, self, exists)
|
33
33
|
end
|
34
34
|
|
35
35
|
def children
|
36
36
|
begin
|
37
|
-
@children ||= root.get_json(api_path).keys.sort.map
|
38
|
-
DataBagDir.new(entry, self, true)
|
39
|
-
end
|
37
|
+
@children ||= root.get_json(api_path).keys.sort.map { |entry| make_child_entry(entry, true) }
|
40
38
|
rescue Timeout::Error => e
|
41
39
|
raise Chef::ChefFS::FileSystem::OperationFailedError.new(:children, self, e), "Timeout getting children: #{e}"
|
42
40
|
rescue Net::HTTPServerException => e
|
@@ -30,7 +30,7 @@ class Chef
|
|
30
30
|
super("environments", parent, nil, Chef::ChefFS::DataHandler::EnvironmentDataHandler.new)
|
31
31
|
end
|
32
32
|
|
33
|
-
def
|
33
|
+
def make_child_entry(name, exists = nil)
|
34
34
|
if name == '_default.json'
|
35
35
|
DefaultEnvironmentEntry.new(name, self, exists)
|
36
36
|
else
|
@@ -40,15 +40,18 @@ class Chef
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def children
|
43
|
+
# Except cookbooks and data bag dirs, all things must be json files
|
43
44
|
begin
|
44
|
-
Dir.entries(file_path).sort.
|
45
|
+
Dir.entries(file_path).sort.
|
46
|
+
map { |child_name| make_child_entry(child_name) }.
|
47
|
+
select { |child| child && can_have_child?(child.name, child.dir?) }
|
45
48
|
rescue Errno::ENOENT
|
46
49
|
raise Chef::ChefFS::FileSystem::NotFoundError.new(self, $!)
|
47
50
|
end
|
48
51
|
end
|
49
52
|
|
50
53
|
def create_child(child_name, file_contents=nil)
|
51
|
-
child =
|
54
|
+
child = make_child_entry(child_name)
|
52
55
|
if child.exists?
|
53
56
|
raise Chef::ChefFS::FileSystem::AlreadyExistsError.new(:create_child, child)
|
54
57
|
end
|
@@ -80,7 +83,7 @@ class Chef
|
|
80
83
|
end
|
81
84
|
|
82
85
|
def exists?
|
83
|
-
File.exists?(file_path)
|
86
|
+
File.exists?(file_path) && parent.can_have_child?(name, dir?)
|
84
87
|
end
|
85
88
|
|
86
89
|
def read
|
@@ -99,7 +102,7 @@ class Chef
|
|
99
102
|
|
100
103
|
protected
|
101
104
|
|
102
|
-
def
|
105
|
+
def make_child_entry(child_name)
|
103
106
|
FileSystemEntry.new(child_name, self)
|
104
107
|
end
|
105
108
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'chef/chef_fs/file_system/base_fs_dir'
|
2
|
-
require 'chef/chef_fs/file_system/nonexistent_fs_object'
|
3
2
|
require 'chef/chef_fs/file_system/memory_file'
|
4
3
|
|
5
4
|
class Chef
|
@@ -13,8 +12,8 @@ class Chef
|
|
13
12
|
|
14
13
|
attr_reader :children
|
15
14
|
|
16
|
-
def
|
17
|
-
@children.select { |child| child.name == name }.first
|
15
|
+
def make_child_entry(name)
|
16
|
+
@children.select { |child| child.name == name }.first
|
18
17
|
end
|
19
18
|
|
20
19
|
def add_child(child)
|
@@ -35,6 +35,21 @@ class Chef
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
+
def make_child_entry(name)
|
39
|
+
result = nil
|
40
|
+
multiplexed_dirs.each do |dir|
|
41
|
+
child_entry = dir.child(name)
|
42
|
+
if child_entry.exists?
|
43
|
+
if result
|
44
|
+
Chef::Log.warn("Child with name '#{child_entry.name}' found in multiple directories: #{result.parent.path_for_printing} and #{child_entry.parent.path_for_printing}")
|
45
|
+
else
|
46
|
+
result = child_entry
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
result
|
51
|
+
end
|
52
|
+
|
38
53
|
def can_have_child?(name, is_dir)
|
39
54
|
write_dir.can_have_child?(name, is_dir)
|
40
55
|
end
|
@@ -33,7 +33,7 @@ class Chef
|
|
33
33
|
def children
|
34
34
|
begin
|
35
35
|
@children ||= root.get_json(env_api_path).keys.sort.map do |key|
|
36
|
-
|
36
|
+
make_child_entry("#{key}.json", true)
|
37
37
|
end
|
38
38
|
rescue Timeout::Error => e
|
39
39
|
raise Chef::ChefFS::FileSystem::OperationFailedError.new(:children, self, e), "Timeout retrieving children: #{e}"
|
@@ -39,9 +39,9 @@ class Chef
|
|
39
39
|
members = minimize_value(_read_json)
|
40
40
|
(desired_members - members).each do |member|
|
41
41
|
begin
|
42
|
-
rest.post(
|
42
|
+
rest.post(api_path, 'username' => member)
|
43
43
|
rescue Net::HTTPServerException => e
|
44
|
-
if e.response.code
|
44
|
+
if %w(404 405).include?(e.response.code)
|
45
45
|
raise "Chef server at #{api_path} does not allow you to directly add members. Please either upgrade your Chef server or move the users you want into invitations.json instead of members.json."
|
46
46
|
else
|
47
47
|
raise
|
@@ -33,12 +33,6 @@ class Chef
|
|
33
33
|
attr_reader :api_path
|
34
34
|
attr_reader :data_handler
|
35
35
|
|
36
|
-
def child(name)
|
37
|
-
result = @children.select { |child| child.name == name }.first if @children
|
38
|
-
result ||= can_have_child?(name, false) ?
|
39
|
-
_make_child_entry(name) : NonexistentFSObject.new(name, self)
|
40
|
-
end
|
41
|
-
|
42
36
|
def can_have_child?(name, is_dir)
|
43
37
|
name =~ /\.json$/ && !is_dir
|
44
38
|
end
|
@@ -46,7 +40,7 @@ class Chef
|
|
46
40
|
def children
|
47
41
|
begin
|
48
42
|
@children ||= root.get_json(api_path).keys.sort.map do |key|
|
49
|
-
|
43
|
+
make_child_entry("#{key}.json", true)
|
50
44
|
end
|
51
45
|
rescue Timeout::Error => e
|
52
46
|
raise Chef::ChefFS::FileSystem::OperationFailedError.new(:children, self, e), "Timeout retrieving children: #{e}"
|
@@ -66,7 +60,7 @@ class Chef
|
|
66
60
|
raise Chef::ChefFS::FileSystem::OperationFailedError.new(:create_child, self, e), "Parse error reading JSON creating child '#{name}': #{e}"
|
67
61
|
end
|
68
62
|
|
69
|
-
result =
|
63
|
+
result = make_child_entry(name, true)
|
70
64
|
|
71
65
|
if data_handler
|
72
66
|
object = data_handler.normalize_for_post(object, result)
|
@@ -106,7 +100,8 @@ class Chef
|
|
106
100
|
parent.rest
|
107
101
|
end
|
108
102
|
|
109
|
-
def
|
103
|
+
def make_child_entry(name, exists = nil)
|
104
|
+
@children.select { |child| child.name == name }.first if @children
|
110
105
|
RestListEntry.new(name, self, exists)
|
111
106
|
end
|
112
107
|
end
|
data/lib/chef/chef_fs/knife.rb
CHANGED
@@ -17,6 +17,7 @@
|
|
17
17
|
#
|
18
18
|
|
19
19
|
require 'chef/knife'
|
20
|
+
require 'pathname'
|
20
21
|
|
21
22
|
class Chef
|
22
23
|
module ChefFS
|
@@ -63,7 +64,7 @@ class Chef
|
|
63
64
|
# --chef-repo-path forcibly overrides all other paths
|
64
65
|
if config[:chef_repo_path]
|
65
66
|
Chef::Config[:chef_repo_path] = config[:chef_repo_path]
|
66
|
-
|
67
|
+
Chef::ChefFS::Config::INFLECTIONS.each_value do |variable_name|
|
67
68
|
Chef::Config.delete("#{variable_name}_path".to_sym)
|
68
69
|
end
|
69
70
|
end
|
@@ -98,14 +99,41 @@ class Chef
|
|
98
99
|
end
|
99
100
|
|
100
101
|
def pattern_arg_from(arg)
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
#
|
105
|
-
|
102
|
+
inferred_path = nil
|
103
|
+
if Chef::ChefFS::PathUtils.is_absolute?(arg)
|
104
|
+
# We should be able to use this as-is - but the user might have incorrectly provided
|
105
|
+
# us with a path that is based off of the OS root path instead of the Chef-FS root.
|
106
|
+
# Do a quick and dirty sanity check.
|
107
|
+
if possible_server_path = @chef_fs_config.server_path(arg)
|
108
|
+
ui.warn("The absolute path provided is suspicious: #{arg}")
|
109
|
+
ui.warn("If you wish to refer to a file location, please provide a path that is rooted at the chef-repo.")
|
110
|
+
ui.warn("Consider writing '#{possible_server_path}' instead of '#{arg}'")
|
111
|
+
end
|
112
|
+
# Use the original path because we can't be sure.
|
113
|
+
inferred_path = arg
|
114
|
+
elsif arg[0,1] == '~'
|
115
|
+
# Let's be nice and fix it if possible - but warn the user.
|
116
|
+
ui.warn("A path relative to a user home directory has been provided: #{arg}")
|
117
|
+
ui.warn("Paths provided need to be rooted at the chef-repo being considered or be relative paths.")
|
118
|
+
inferred_path = @chef_fs_config.server_path(arg)
|
119
|
+
ui.warn("Using '#{inferred_path}' as the path instead of '#{arg}'.")
|
120
|
+
elsif Pathname.new(arg).absolute?
|
121
|
+
# It is definitely a system absolute path (such as C:\ or \\foo\bar) but it cannot be
|
122
|
+
# interpreted as a Chef-FS absolute path. Again attempt to be nice but warn the user.
|
123
|
+
ui.warn("An absolute file system path that isn't a server path was provided: #{arg}")
|
124
|
+
ui.warn("Paths provided need to be rooted at the chef-repo being considered or be relative paths.")
|
125
|
+
inferred_path = @chef_fs_config.server_path(arg)
|
126
|
+
ui.warn("Using '#{inferred_path}' as the path instead of '#{arg}'.")
|
127
|
+
elsif @chef_fs_config.base_path.nil?
|
128
|
+
# These are all relative paths. We can't resolve and root paths unless we are in the
|
129
|
+
# chef repo.
|
130
|
+
ui.error("Attempt to use relative path '#{arg}' when current directory is outside the repository path.")
|
131
|
+
ui.error("Current working directory is '#{@chef_fs_config.cwd}'.")
|
106
132
|
exit(1)
|
133
|
+
else
|
134
|
+
inferred_path = Chef::ChefFS::PathUtils::join(@chef_fs_config.base_path, arg)
|
107
135
|
end
|
108
|
-
Chef::ChefFS::FilePattern.
|
136
|
+
Chef::ChefFS::FilePattern.new(inferred_path)
|
109
137
|
end
|
110
138
|
|
111
139
|
def format_path(entry)
|