summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordanielsdeleo <dan@getchef.com>2015-01-22 19:08:29 -0800
committerdanielsdeleo <dan@getchef.com>2015-01-27 12:46:14 -0800
commit2f817d8d00135abadc9a279e20a448f9ffe91a1c (patch)
tree7922a9cd1916b6f4dc2ddb3016d5758408d5c088
parent4fafa081d8418e40b29c8b6fae92ff850a8191f1 (diff)
downloadchef-2f817d8d00135abadc9a279e20a448f9ffe91a1c.tar.gz
Add policyfile native support to policy builder
-rw-r--r--lib/chef/policy_builder/policyfile.rb23
-rw-r--r--spec/unit/policy_builder/policyfile_spec.rb47
2 files changed, 68 insertions, 2 deletions
diff --git a/lib/chef/policy_builder/policyfile.rb b/lib/chef/policy_builder/policyfile.rb
index 0df3dd5dd2..ff8e067bf6 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"
#
diff --git a/spec/unit/policy_builder/policyfile_spec.rb b/spec/unit/policy_builder/policyfile_spec.rb
index 5e2844201d..92cdd7f57e 100644
--- a/spec/unit/policy_builder/policyfile_spec.rb
+++ b/spec/unit/policy_builder/policyfile_spec.rb
@@ -211,9 +211,54 @@ describe Chef::PolicyBuilder::Policyfile do
end
end
+ context "and policy_document_native_api is configured" do
+
+ before do
+ Chef::Config[:policy_document_native_api] = true
+ Chef::Config[:policy_group] = "policy-stage"
+ Chef::Config[:policy_name] = "example"
+ end
+
+ context "and policy_name or policy_group are not configured" do
+
+ it "raises a Configuration error for policy_group" do
+ Chef::Config[:policy_group] = nil
+ expect { policy_builder.policy }.to raise_error(err_namespace::ConfigurationError)
+ end
+
+ it "raises a Configuration error for policy_name" do
+ Chef::Config[:policy_name] = nil
+ expect { policy_builder.policy }.to raise_error(err_namespace::ConfigurationError)
+ end
+
+ end
+
+ context "and policy_name and policy_group are configured" do
+
+ let(:policy_relative_url) { "policies/policy-stage/example" }
+
+ before do
+ expect(http_api).to receive(:get).with(policy_relative_url).and_return(parsed_policyfile_json)
+ end
+
+ it "fetches the policy file from a data bag item" do
+ expect(policy_builder.policy).to eq(parsed_policyfile_json)
+ end
+
+ it "extracts the run_list from the policyfile" do
+ expect(policy_builder.run_list).to eq(policyfile_run_list)
+ end
+ end
+
+ end
+
+
context "and a deployment_group is configured" do
+
+ let(:policy_relative_url) { "data/policyfiles/example-policy-stage" }
+
before do
- expect(http_api).to receive(:get).with("data/policyfiles/example-policy-stage").and_return(parsed_policyfile_json)
+ expect(http_api).to receive(:get).with(policy_relative_url).and_return(parsed_policyfile_json)
end
it "fetches the policy file from a data bag item" do