From d3e9bbb6bd569b06ee270dfa446590499e1304f2 Mon Sep 17 00:00:00 2001 From: Jeremiah Snapp Date: Thu, 15 Aug 2013 15:04:56 -0400 Subject: Make Chef::DataBag.save use POST instead of PUT PUT doesn't make sense in DataBag context since you can't update a data bag. Chef::DataBag.save should rescue a 409 response since that indicates the data bag already exists. --- lib/chef/data_bag.rb | 5 ++--- spec/unit/data_bag_spec.rb | 10 ++++------ 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/lib/chef/data_bag.rb b/lib/chef/data_bag.rb index dcc01ec743..5994e6f8d1 100644 --- a/lib/chef/data_bag.rb +++ b/lib/chef/data_bag.rb @@ -129,11 +129,10 @@ class Chef if Chef::Config[:why_run] Chef::Log.warn("In whyrun mode, so NOT performing data bag save.") else - chef_server_rest.put_rest("data/#{@name}", self) + create end rescue Net::HTTPServerException => e - raise e unless e.response.code == "404" - chef_server_rest.post_rest("data", self) + raise e unless e.response.code == "409" end self end diff --git a/spec/unit/data_bag_spec.rb b/spec/unit/data_bag_spec.rb index d8ad535915..9fbdc64d98 100644 --- a/spec/unit/data_bag_spec.rb +++ b/spec/unit/data_bag_spec.rb @@ -76,14 +76,13 @@ describe Chef::DataBag do Chef::REST.stub!(:new).and_return(@rest) end - it "should update the data bag when it already exists" do - @rest.should_receive(:put_rest).with("data/piggly_wiggly", @data_bag) + it "should silently proceed when the data bag already exists" do + exception = mock("409 error", :code => "409") + @rest.should_receive(:post_rest).and_raise(Net::HTTPServerException.new("foo", exception)) @data_bag.save end - it "should create the data bag when it is not found" do - exception = mock("404 error", :code => "404") - @rest.should_receive(:put_rest).and_raise(Net::HTTPServerException.new("foo", exception)) + it "should create the data bag" do @rest.should_receive(:post_rest).with("data", @data_bag) @data_bag.save end @@ -96,7 +95,6 @@ describe Chef::DataBag do Chef::Config[:why_run] = false end it "should not save" do - @rest.should_not_receive(:put_rest) @rest.should_not_receive(:post_rest) @data_bag.save end -- cgit v1.2.1