diff options
Diffstat (limited to 'lib/chef/policy_builder/policyfile.rb')
-rw-r--r-- | lib/chef/policy_builder/policyfile.rb | 59 |
1 files changed, 51 insertions, 8 deletions
diff --git a/lib/chef/policy_builder/policyfile.rb b/lib/chef/policy_builder/policyfile.rb index 0df3dd5dd2..d368b055f7 100644 --- a/lib/chef/policy_builder/policyfile.rb +++ b/lib/chef/policy_builder/policyfile.rb @@ -237,7 +237,12 @@ class Chef end def policyfile_location - "data/policyfiles/#{deployment_group}" + if Chef::Config[:policy_document_native_api] + validate_policy_config! + "policies/#{policy_group}/#{policy_name}" + else + "data/policyfiles/#{deployment_group}" + end end # Do some mimimal validation of the policyfile we fetched from the @@ -281,6 +286,22 @@ class Chef raise ConfigurationError, "Setting `deployment_group` is not configured." end + def validate_policy_config! + policy_group or + raise ConfigurationError, "Setting `policy_group` is not configured." + + policy_name or + raise ConfigurationError, "Setting `policy_name` is not configured." + end + + def policy_group + Chef::Config[:policy_group] + end + + def policy_name + Chef::Config[:policy_name] + end + # Builds a 'cookbook_hash' map of the form # "COOKBOOK_NAME" => "IDENTIFIER" # @@ -314,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 @@ -335,6 +354,30 @@ class Chef Chef::Config end + private + + def compat_mode_manifest_for(cookbook_name, lock_data) + xyz_version = lock_data["dotted_decimal_identifier"] + rel_url = "cookbooks/#{cookbook_name}/#{xyz_version}" + http_api.get(rel_url) + rescue Exception => e + message = "Error loading cookbook #{cookbook_name} at version #{xyz_version} from #{rel_url}: #{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"] + rel_url = "cookbook_artifacts/#{cookbook_name}/#{xyz_version}" + http_api.get(rel_url) + rescue Exception => e + message = "Error loading cookbook #{cookbook_name} at version #{xyz_version} from #{rel_url}: #{e.class} - #{e.message}" + err = Chef::Exceptions::CookbookNotFound.new(message) + err.set_backtrace(e.backtrace) + raise err + end + end end end |