Sha256: ff739a699604f81cf1ba90ccb5011d3a06b09ec0d79216bbc37a910748404766

Contents?: true

Size: 1.21 KB

Versions: 3

Compression:

Stored size: 1.21 KB

Contents

class ChefVault
  module Mixins
    # In Chef 12, Chef Solo can have an array of data_bag paths, rather
    # than just a string. To cope with that, we'll:
    #  1. Look for an existing data bag item in any of the configured
    #     paths and use that by preference
    #  1. Otherwise, just use the first location in the array
    def find_solo_path(item_id)
      if Chef::Config[:data_bag_path].kind_of?(Array)
        path = Chef::Config[:data_bag_path].find { |dir|
          File.exist?(File.join(dir, data_bag, "#{item_id}.json"))
        }

        path ||= Chef::Config[:data_bag_path].first
        data_bag_path = File.join(path, data_bag)
      else
        data_bag_path = File.join(Chef::Config[:data_bag_path],
                                  data_bag)
      end
      data_bag_item_path = File.join(data_bag_path, item_id) + ".json"

      [data_bag_path, data_bag_item_path]
    end

    def save_solo(item_id = @raw_data["id"])
      data_bag_path, data_bag_item_path = find_solo_path(item_id)

      FileUtils.mkdir(data_bag_path) unless File.exist?(data_bag_path)
      File.open(data_bag_item_path, "w") do |file|
        file.write(JSON.pretty_generate(raw_data))
      end

      raw_data
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
chef-vault-2.9.1 lib/chef-vault/mixins.rb
chef-vault-2.9.0 lib/chef-vault/mixins.rb
chef-vault-2.8.0 lib/chef-vault/mixins.rb