diff options
-rw-r--r-- | lib/chef/policy_builder/policyfile.rb | 34 | ||||
-rw-r--r-- | spec/unit/policy_builder/policyfile_spec.rb | 32 |
2 files changed, 55 insertions, 11 deletions
diff --git a/lib/chef/policy_builder/policyfile.rb b/lib/chef/policy_builder/policyfile.rb index ff8e067bf6..26c4f0c6c8 100644 --- a/lib/chef/policy_builder/policyfile.rb +++ b/lib/chef/policy_builder/policyfile.rb @@ -335,13 +335,11 @@ class Chef # cookbooks are fetched by the "dotted_decimal_identifier": a # representation of a SHA1 in the traditional x.y.z version format. def manifest_for(cookbook_name, lock_data) - xyz_version = lock_data["dotted_decimal_identifier"] - http_api.get("cookbooks/#{cookbook_name}/#{xyz_version}") - rescue Exception => e - message = "Error loading cookbook #{cookbook_name} at version #{xyz_version}: #{e.class} - #{e.message}" - err = Chef::Exceptions::CookbookNotFound.new(message) - err.set_backtrace(e.backtrace) - raise err + if Chef::Config[:policy_document_native_api] + artifact_manifest_for(cookbook_name, lock_data) + else + compat_mode_manifest_for(cookbook_name, lock_data) + end end def cookbook_locks @@ -356,6 +354,28 @@ class Chef Chef::Config end + private + + def compat_mode_manifest_for(cookbook_name, lock_data) + xyz_version = lock_data["dotted_decimal_identifier"] + http_api.get("cookbooks/#{cookbook_name}/#{xyz_version}") + rescue Exception => e + message = "Error loading cookbook #{cookbook_name} at version #{xyz_version}: #{e.class} - #{e.message}" + err = Chef::Exceptions::CookbookNotFound.new(message) + err.set_backtrace(e.backtrace) + raise err + end + + def artifact_manifest_for(cookbook_name, lock_data) + xyz_version = lock_data["dotted_decimal_identifier"] + http_api.get("cookbook_artifacts/#{cookbook_name}/#{xyz_version}") + rescue Exception => e + message = "Error loading cookbook #{cookbook_name} at version #{xyz_version}: #{e.class} - #{e.message}" + err = Chef::Exceptions::CookbookNotFound.new(message) + err.set_backtrace(e.backtrace) + raise err + end + end end end diff --git a/spec/unit/policy_builder/policyfile_spec.rb b/spec/unit/policy_builder/policyfile_spec.rb index ce0a24859a..8460fc593d 100644 --- a/spec/unit/policy_builder/policyfile_spec.rb +++ b/spec/unit/policy_builder/policyfile_spec.rb @@ -415,7 +415,7 @@ describe Chef::PolicyBuilder::Policyfile do policy_builder.load_node policy_builder.build_node - expect(http_api).to receive(:get).with("cookbooks/example1/#{example1_xyz_version}"). + expect(http_api).to receive(:get).with(cookbook1_url). and_raise(error404) end @@ -432,9 +432,9 @@ describe Chef::PolicyBuilder::Policyfile do policy_builder.load_node policy_builder.build_node - expect(http_api).to receive(:get).with("cookbooks/example1/#{example1_xyz_version}"). + expect(http_api).to receive(:get).with(cookbook1_url). and_return(example1_cookbook_object) - expect(http_api).to receive(:get).with("cookbooks/example2/#{example2_xyz_version}"). + expect(http_api).to receive(:get).with(cookbook2_url). and_return(example2_cookbook_object) allow(Chef::CookbookSynchronizer).to receive(:new). @@ -463,8 +463,32 @@ describe Chef::PolicyBuilder::Policyfile do end # shared_examples_for "fetching cookbooks" context "when using compatibility mode (policy_document_native_api == false)" do - include_examples "fetching cookbooks" + include_examples "fetching cookbooks" do + + let(:cookbook1_url) { "cookbooks/example1/#{example1_xyz_version}" } + let(:cookbook2_url) { "cookbooks/example2/#{example2_xyz_version}" } + + end + + end + + context "when using native API mode (policy_document_native_api == true)" do + + before do + Chef::Config[:policy_document_native_api] = true + Chef::Config[:policy_group] = "policy-stage" + Chef::Config[:policy_name] = "example" + end + + include_examples "fetching cookbooks" do + + let(:cookbook1_url) { "cookbook_artifacts/example1/#{example1_xyz_version}" } + let(:cookbook2_url) { "cookbook_artifacts/example2/#{example2_xyz_version}" } + + end + end + end end |