diff options
author | Thom May <thom@may.lt> | 2018-02-14 09:07:39 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-02-14 09:07:39 +0000 |
commit | b89bbe9fced92791da5cd647490bb31d55ac49df (patch) | |
tree | 0ec735196540da74e7516f13d504f0a40a748fd3 | |
parent | c01afe14ed1411017ee10c0133d8176e36256e28 (diff) | |
parent | 29748ede0cd6fa3799a2f8c4912f037a31f1eeea (diff) | |
download | chef-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.rb | 45 | ||||
-rw-r--r-- | spec/integration/knife/chef_fs_data_store_spec.rb | 27 |
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 |