Class: Chef::ChefFS::FileSystem::DataBagItem

Inherits:
RestListEntry show all
Defined in:
lib/chef/chef_fs/file_system/data_bag_item.rb

Instance Attribute Summary

Attributes inherited from BaseFSObject

#name, #parent, #path

Instance Method Summary collapse

Methods inherited from RestListEntry

#api_path, #chef_object, #compare_to, #delete, #environment, #exists?, #read, #rest

Methods inherited from BaseFSObject

#can_have_child?, #child, #compare_to, #dir?, #exists?, #path_for_printing, #root

Constructor Details

#initialize(name, parent, exists = nil) ⇒ DataBagItem

Returns a new instance of DataBagItem.



25
26
27
# File 'lib/chef/chef_fs/file_system/data_bag_item.rb', line 25

def initialize(name, parent, exists = nil)
  super(name, parent, exists)
end

Instance Method Details

#write(file_contents) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/chef/chef_fs/file_system/data_bag_item.rb', line 29

def write(file_contents)
  # Write is just a little tiny bit different for data bags:
  # you set raw_data in the JSON instead of putting the items
  # in the top level.
  json = Chef::JSONCompat.from_json(file_contents).to_hash
  id = name[0,name.length-5]  # Strip off the .json from the end
  if json['id'] != id
    raise "Id in #{path_for_printing}/#{name} must be '#{id}' (is '#{json['id']}')"
  end
  begin
    data_bag = parent.name
    json = {
      "name" => "data_bag_item_#{data_bag}_#{id}",
      "json_class" => "Chef::DataBagItem",
      "chef_type" => "data_bag_item",
      "data_bag" => data_bag,
      "raw_data" => json
    }
    rest.put_rest(api_path, json)
  rescue Net::HTTPServerException
    if $!.response.code == "404"
      raise Chef::ChefFS::FileSystem::NotFoundError.new($!), "#{path_for_printing} not found"
    else
      raise
    end
  end
end