chef 12.4.3-universal-mingw32 → 12.5.1-universal-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +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)
|