summaryrefslogtreecommitdiff
path: root/lib/chef/policy_builder/policyfile.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/chef/policy_builder/policyfile.rb')
-rw-r--r--lib/chef/policy_builder/policyfile.rb59
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