summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThom May <thom@may.lt>2018-02-14 09:07:39 +0000
committerGitHub <noreply@github.com>2018-02-14 09:07:39 +0000
commitb89bbe9fced92791da5cd647490bb31d55ac49df (patch)
tree0ec735196540da74e7516f13d504f0a40a748fd3
parentc01afe14ed1411017ee10c0133d8176e36256e28 (diff)
parent29748ede0cd6fa3799a2f8c4912f037a31f1eeea (diff)
downloadchef-b89bbe9fced92791da5cd647490bb31d55ac49df.tar.gz
Merge pull request #6471 from dimsh99/fix_for_4816
Fix to use cookbook name in local mode or chef-zero
-rw-r--r--lib/chef/chef_fs/chef_fs_data_store.rb45
-rw-r--r--spec/integration/knife/chef_fs_data_store_spec.rb27
2 files changed, 37 insertions, 35 deletions
diff --git a/lib/chef/chef_fs/chef_fs_data_store.rb b/lib/chef/chef_fs/chef_fs_data_store.rb
index 0c8f12f1be..4f248625b3 100644
--- a/lib/chef/chef_fs/chef_fs_data_store.rb
+++ b/lib/chef/chef_fs/chef_fs_data_store.rb
@@ -307,11 +307,13 @@ class Chef
# GET /cookbooks/NAME/VERSION or /cookbook_artifacts/NAME/IDENTIFIER
elsif %w{cookbooks cookbook_artifacts}.include?(path[0]) && path.length == 3
- with_entry(path) do |entry|
+ with_entry([path[0]]) do |entry|
cookbook_type = path[0]
+ cookbook_entry = entry.children.select { |child| child.chef_object.full_name == "#{path[1]}-#{path[2]}" }[0]
+ raise ChefZero::DataStore::DataNotFoundError.new(path) if cookbook_entry.nil?
result = nil
begin
- result = Chef::CookbookManifest.new(entry.chef_object, policy_mode: cookbook_type == "cookbook_artifacts").to_hash
+ result = Chef::CookbookManifest.new(cookbook_entry.chef_object, policy_mode: cookbook_type == "cookbook_artifacts").to_hash
rescue Chef::ChefFS::FileSystem::NotFoundError => e
raise ChefZero::DataStore::DataNotFoundError.new(to_zero_path(e.entry), e)
end
@@ -320,12 +322,7 @@ class Chef
if value.is_a?(Array)
value.each do |file|
if file.is_a?(Hash) && file.has_key?("checksum")
- relative = ["file_store", "repo", cookbook_type]
- if chef_fs.versioned_cookbooks || cookbook_type == "cookbook_artifacts"
- relative << "#{path[1]}-#{path[2]}"
- else
- relative << path[1]
- end
+ relative = ["file_store", "repo", cookbook_type, cookbook_entry.name ]
relative += file[:path].split("/")
file["url"] = ChefZero::RestBase.build_uri(request.base_uri, relative)
end
@@ -519,14 +516,7 @@ class Chef
elsif %w{cookbooks cookbook_artifacts}.include?(path[0]) && path.length == 1
with_entry(path) do |entry|
begin
- if path[0] == "cookbook_artifacts"
- entry.children.map { |child| child.name.rpartition("-")[0] }.uniq
- elsif chef_fs.versioned_cookbooks
- # /cookbooks/name-version -> /cookbooks/name
- entry.children.map { |child| split_name_version(child.name)[0] }.uniq
- else
- entry.children.map { |child| child.name }
- end
+ entry.children.map { |child| child.chef_object.name.to_s }.uniq
rescue Chef::ChefFS::FileSystem::NotFoundError
# If the cookbooks dir doesn't exist, we have no cookbooks (not 404)
[]
@@ -534,22 +524,15 @@ class Chef
end
elsif %w{cookbooks cookbook_artifacts}.include?(path[0]) && path.length == 2
- if chef_fs.versioned_cookbooks || path[0] == "cookbook_artifacts"
- result = with_entry([ path[0] ]) do |entry|
- # list /cookbooks/name = filter /cookbooks/name-version down to name
- entry.children.map { |child| split_name_version(child.name) }.
- select { |name, version| name == path[1] }.
- map { |name, version| version }
- end
- if result.empty?
- raise ChefZero::DataStore::DataNotFoundError.new(path)
- end
- result
- else
- # list /cookbooks/name = <single version>
- version = get_single_cookbook_version(path)
- [version]
+ result = with_entry([ path[0] ]) do |entry|
+ cookbooks = entry.children.map { |child| child.chef_object }
+ cookbooks.select { |cookbook| cookbook.name.to_s == path[1] }.
+ map { |cookbook| cookbook.version }
end
+ if result.empty?
+ raise ChefZero::DataStore::DataNotFoundError.new(path)
+ end
+ result
else
result = with_entry(path) do |entry|
diff --git a/spec/integration/knife/chef_fs_data_store_spec.rb b/spec/integration/knife/chef_fs_data_store_spec.rb
index 02508b799d..ff674082b7 100644
--- a/spec/integration/knife/chef_fs_data_store_spec.rb
+++ b/spec/integration/knife/chef_fs_data_store_spec.rb
@@ -28,6 +28,7 @@ describe "ChefFSDataStore tests", :workstation do
let(:cookbook_x_100_metadata_rb) { cb_metadata("x", "1.0.0") }
let(:cookbook_z_100_metadata_rb) { cb_metadata("z", "1.0.0") }
+ let(:cookbook_y_102_metadata_rb) { cb_metadata("z", "1.0.2") }
describe "with repo mode 'hosted_everything' (default)" do
before do
@@ -39,6 +40,8 @@ describe "ChefFSDataStore tests", :workstation do
file "clients/x.json", {}
file "cookbook_artifacts/x-111/metadata.rb", cookbook_x_100_metadata_rb
file "cookbooks/x/metadata.rb", cookbook_x_100_metadata_rb
+ file "cookbooks/y/metadata.rb", cookbook_y_102_metadata_rb
+ file "cookbooks/z/metadata.rb", cookbook_z_100_metadata_rb
file "data_bags/x/y.json", {}
file "environments/x.json", {}
file "nodes/x.json", {}
@@ -64,6 +67,7 @@ describe "ChefFSDataStore tests", :workstation do
/acls/cookbook_artifacts/x.json
/acls/cookbooks/
/acls/cookbooks/x.json
+/acls/cookbooks/z.json
/acls/data_bags/
/acls/data_bags/x.json
/acls/environments/
@@ -84,11 +88,13 @@ describe "ChefFSDataStore tests", :workstation do
/containers/
/containers/x.json
/cookbook_artifacts/
-/cookbook_artifacts/x-111/
-/cookbook_artifacts/x-111/metadata.rb
+/cookbook_artifacts/x-1.0.0/
+/cookbook_artifacts/x-1.0.0/metadata.rb
/cookbooks/
/cookbooks/x/
/cookbooks/x/metadata.rb
+/cookbooks/z/
+/cookbooks/z/metadata.rb
/data_bags/
/data_bags/x/
/data_bags/x/y.json
@@ -111,6 +117,12 @@ EOM
end
end
+ context "LIST /TYPE/NAME" do
+ it "knife cookbook show -z z" do
+ knife("cookbook show -z z").should_succeed "z 1.0.2 1.0.0\n"
+ end
+ end
+
context "DELETE /TYPE/NAME" do
it "knife delete -z /clients/x.json works" do
knife("delete -z /clients/x.json").should_succeed "Deleted /clients/x.json\n"
@@ -119,7 +131,7 @@ EOM
it "knife delete -z -r /cookbooks/x works" do
knife("delete -z -r /cookbooks/x").should_succeed "Deleted /cookbooks/x\n"
- knife("list -z -Rfp /cookbooks").should_succeed ""
+ knife("list -z -Rfp /cookbooks").should_succeed "/cookbooks/z/\n/cookbooks/z/metadata.rb\n"
end
it "knife delete -z -r /data_bags/x works" do
@@ -194,7 +206,14 @@ EOM
Uploading x [1.0.0]
Uploaded 1 cookbook.
EOM
- knife("list --local -Rfp /cookbooks").should_succeed "/cookbooks/x/\n/cookbooks/x/metadata.rb\n"
+ knife("list --local -Rfp /cookbooks").should_succeed <<EOM
+/cookbooks/x/
+/cookbooks/x/metadata.rb
+/cookbooks/y/
+/cookbooks/y/metadata.rb
+/cookbooks/z/
+/cookbooks/z/metadata.rb
+EOM
end
it "knife raw -z -i empty.json -m PUT /data/x/y" do