summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordanielsdeleo <dan@getchef.com>2015-02-10 14:40:58 -0800
committerdanielsdeleo <dan@getchef.com>2015-02-11 10:52:50 -0800
commit1317eaf01510c33d1967ad0027d572792756807f (patch)
tree4fc7a5b3368db9a4ab6f6ddba3af21c6aa82f7ba
parent1a09de46463df00b022700f3b1f872a3203bc9cc (diff)
downloadchef-1317eaf01510c33d1967ad0027d572792756807f.tar.gz
Add policy mode option to CookbookUploader
-rw-r--r--lib/chef/cookbook_uploader.rb7
-rw-r--r--spec/unit/cookbook_uploader_spec.rb32
2 files changed, 37 insertions, 2 deletions
diff --git a/lib/chef/cookbook_uploader.rb b/lib/chef/cookbook_uploader.rb
index d294684d78..f24ce2cd56 100644
--- a/lib/chef/cookbook_uploader.rb
+++ b/lib/chef/cookbook_uploader.rb
@@ -41,6 +41,7 @@ class Chef
@cookbooks = Array(cookbooks)
@rest = opts[:rest] || Chef::REST.new(Chef::Config[:chef_server_url])
@concurrency = opts[:concurrency] || 10
+ @policy_mode = opts[:policy_mode] || false
end
def upload_cookbooks
@@ -94,7 +95,7 @@ class Chef
# files are uploaded, so save the manifest
cookbooks.each do |cb|
- manifest = Chef::CookbookManifest.new(cb)
+ manifest = Chef::CookbookManifest.new(cb, policy_mode: policy_mode?)
save_url = opts[:force] ? manifest.force_save_url : manifest.save_url
begin
@@ -147,5 +148,9 @@ class Chef
end
end
+ def policy_mode?
+ @policy_mode
+ end
+
end
end
diff --git a/spec/unit/cookbook_uploader_spec.rb b/spec/unit/cookbook_uploader_spec.rb
index deb0536487..152e5373f0 100644
--- a/spec/unit/cookbook_uploader_spec.rb
+++ b/spec/unit/cookbook_uploader_spec.rb
@@ -45,7 +45,13 @@ describe Chef::CookbookUploader do
let(:sandbox_commit_uri) { "https://chef.example.org/sandboxes/abc123" }
- let(:uploader) { described_class.new(cookbooks_to_upload, :rest => http_client) }
+ let(:policy_mode) { false }
+
+ let(:uploader) { described_class.new(cookbooks_to_upload, rest: http_client, policy_mode: policy_mode) }
+
+ it "defaults to not enabling policy mode" do
+ expect(described_class.new(cookbooks_to_upload, rest: http_client).policy_mode?).to be(false)
+ end
it "has a list of cookbooks to upload" do
expect(uploader.cookbooks).to eq(cookbooks_to_upload)
@@ -159,6 +165,30 @@ describe Chef::CookbookUploader do
end
end
+
+ context "when policy_mode is specified" do
+
+ let(:cksums_not_on_remote) do
+ checksums_of_cookbook_files.keys
+ end
+
+ let(:policy_mode) { true }
+
+ def expected_save_url(cookbook)
+ "cookbook_artifacts/#{cookbook.name}/#{cookbook.version}"
+ end
+
+ it "uploads all files in a sandbox transaction, then creates cookbooks on the server using cookbook_artifacts API" do
+ expect_sandbox_create
+ expect_checksum_upload
+ expect_sandbox_commit
+ expect_cookbook_create
+
+ uploader.upload_cookbooks
+ end
+
+
+ end
end
end