From b17d6bcd4af5dff326b4d0111deedd7604691893 Mon Sep 17 00:00:00 2001 From: Dale Hamel Date: Fri, 24 Jun 2016 14:00:18 -0400 Subject: [PATCH 1/2] UGH --- .../databag_mash_monkeypatch.rb | 33 +++++++++++++++++++ lib/kitchen/provisioner/chef_zero_shopify.rb | 3 ++ 2 files changed, 36 insertions(+) create mode 100644 lib/kitchen-shopify-provisioner/databag_mash_monkeypatch.rb diff --git a/lib/kitchen-shopify-provisioner/databag_mash_monkeypatch.rb b/lib/kitchen-shopify-provisioner/databag_mash_monkeypatch.rb new file mode 100644 index 0000000..7ef006f --- /dev/null +++ b/lib/kitchen-shopify-provisioner/databag_mash_monkeypatch.rb @@ -0,0 +1,33 @@ +# because https://github.com/chef/chef-zero/pull/147/files will never get merged + +module ChefZero + module ChefData + class DataNormalizer + def self.normalize_data_bag_item(data_bag_item, data_bag_name, id, method) + if method == 'DELETE' + # TODO SERIOUSLY, WHO DOES THIS MANY EXCEPTIONS IN THEIR INTERFACE + unless data_bag_item['json_class'] == 'Chef::DataBagItem' && data_bag_item['raw_data'] + data_bag_item['id'] ||= id + data_bag_item = { 'raw_data' => data_bag_item } + data_bag_item['chef_type'] ||= 'data_bag_item' + data_bag_item['json_class'] ||= 'Chef::DataBagItem' + data_bag_item['data_bag'] ||= data_bag_name + data_bag_item['name'] ||= "data_bag_item_#{data_bag_name}_#{id}" + end + else + # If it's not already wrapped with raw_data, wrap it. + if data_bag_item['json_class'] == 'Chef::DataBagItem' && data_bag_item['raw_data'] + # data_bag_item = data_bag_item['raw_data'] + end + # Argh. We don't do this on GET, but we do on PUT and POST???? + if %w(PUT POST).include?(method) + data_bag_item['chef_type'] ||= 'data_bag_item' + data_bag_item['data_bag'] ||= data_bag_name + end + data_bag_item['id'] ||= id + end + data_bag_item + end + end + end +end diff --git a/lib/kitchen/provisioner/chef_zero_shopify.rb b/lib/kitchen/provisioner/chef_zero_shopify.rb index 10f0493..f2506c7 100644 --- a/lib/kitchen/provisioner/chef_zero_shopify.rb +++ b/lib/kitchen/provisioner/chef_zero_shopify.rb @@ -5,6 +5,9 @@ require 'chef/encrypted_data_bag_item' require 'chef/encrypted_data_bag_item/check_encrypted' +# UGH +require 'kitchen-shopify-provisioner/databag_mash_monkeypatch' + module Kitchen module Provisioner # We'll sneak some code in before the default chef zero provisioner runs From fc8a64b334f1259ea5e66806941232741638574b Mon Sep 17 00:00:00 2001 From: Dale Hamel Date: Fri, 24 Jun 2016 14:11:08 -0400 Subject: [PATCH 2/2] Ensure json class is set --- lib/kitchen/provisioner/chef_zero_shopify.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/kitchen/provisioner/chef_zero_shopify.rb b/lib/kitchen/provisioner/chef_zero_shopify.rb index f2506c7..6a0a64e 100644 --- a/lib/kitchen/provisioner/chef_zero_shopify.rb +++ b/lib/kitchen/provisioner/chef_zero_shopify.rb @@ -65,7 +65,10 @@ def decrypt_data_bags(config, tmpdir) files.each do |item_file| raw_data = ::Chef::JSONCompat.from_json(IO.read(item_file)) raw_data = ::Chef::EncryptedDataBagItem.new(raw_data, secret).to_hash if encrypted_data_bag?(raw_data) - json_dump = ::Chef::JSONCompat.to_json_pretty(raw_data) + item = ::Chef::DataBagItem.new + item.data_bag(bag_name) + item.raw_data = raw_data + json_dump = ::Chef::JSONCompat.to_json_pretty(item) plain_file = File.join(plain_data_bags, bag_name, File.basename(item_file)) FileUtils.mkdir_p(File.dirname(plain_file)) File.write(plain_file, json_dump)