Class: Chef::DataBagItem
Constant Summary
collapse
- VALID_ID =
/^[\-[:alnum:]_]+$/
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
#set_or_return, #validate
#class_from_file, #from_file
Constructor Details
Create a new Chef::DataBagItem
52
53
54
55
|
# File 'lib/chef/data_bag_item.rb', line 52
def initialize
@data_bag = nil
@raw_data = Mash.new
end
|
Instance Attribute Details
Returns the value of attribute raw_data.
49
50
51
|
# File 'lib/chef/data_bag_item.rb', line 49
def raw_data
@raw_data
end
|
Class Method Details
.chef_server_rest ⇒ Object
61
62
63
|
# File 'lib/chef/data_bag_item.rb', line 61
def self.chef_server_rest
Chef::REST.new(Chef::Config[:chef_server_url])
end
|
.from_hash(h) ⇒ Object
124
125
126
127
128
|
# File 'lib/chef/data_bag_item.rb', line 124
def self.from_hash(h)
item = new
item.raw_data = h
item
end
|
.json_create(o) ⇒ Object
Create a Chef::DataBagItem from JSON
131
132
133
134
135
136
137
138
139
140
141
|
# File 'lib/chef/data_bag_item.rb', line 131
def self.json_create(o)
bag_item = new
bag_item.data_bag(o["data_bag"])
o.delete("data_bag")
o.delete("chef_type")
o.delete("json_class")
o.delete("name")
bag_item.raw_data = Mash.new(o["raw_data"])
bag_item
end
|
.load(data_bag, name) ⇒ Object
Load a Data Bag Item by name via either the RESTful API or local data_bag_path if run in solo mode
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
|
# File 'lib/chef/data_bag_item.rb', line 144
def self.load(data_bag, name)
if Chef::Config[:solo]
bag = Chef::DataBag.load(data_bag)
item = bag[name]
else
item = Chef::REST.new(Chef::Config[:chef_server_url]).get_rest("data/#{data_bag}/#{name}")
end
if item.kind_of?(DataBagItem)
item
else
item = from_hash(item)
item.data_bag(data_bag)
item
end
end
|
.object_name(data_bag_name, id) ⇒ Object
101
102
103
|
# File 'lib/chef/data_bag_item.rb', line 101
def self.object_name(data_bag_name, id)
"data_bag_item_#{data_bag_name}_#{id}"
end
|
.validate_id!(id_str) ⇒ Object
40
41
42
43
44
|
# File 'lib/chef/data_bag_item.rb', line 40
def self.validate_id!(id_str)
if id_str.nil? || ( id_str !~ VALID_ID )
raise Exceptions::InvalidDataBagItemID, "Data Bag items must have an id matching #{VALID_ID.inspect}, you gave: #{id_str.inspect}"
end
end
|
Instance Method Details
#==(other) ⇒ Object
187
188
189
190
191
192
|
# File 'lib/chef/data_bag_item.rb', line 187
def ==(other)
other.respond_to?(:to_hash) &&
other.respond_to?(:data_bag) &&
(other.to_hash == to_hash) &&
(other.data_bag.to_s == data_bag.to_s)
end
|
#chef_server_rest ⇒ Object
57
58
59
|
# File 'lib/chef/data_bag_item.rb', line 57
def chef_server_rest
Chef::REST.new(Chef::Config[:chef_server_url])
end
|
Create this Data Bag Item via RESTful API
182
183
184
185
|
# File 'lib/chef/data_bag_item.rb', line 182
def create
chef_server_rest.post_rest("data/#{data_bag}", self)
self
end
|
#data_bag(arg = nil) ⇒ Object
81
82
83
84
85
86
87
|
# File 'lib/chef/data_bag_item.rb', line 81
def data_bag(arg=nil)
set_or_return(
:data_bag,
arg,
:regex => /^[\-[:alnum:]_]+$/
)
end
|
#destroy(data_bag = data_bag, databag_item = name) ⇒ Object
161
162
163
|
# File 'lib/chef/data_bag_item.rb', line 161
def destroy(data_bag=data_bag, databag_item=name)
chef_server_rest.delete_rest("data/#{data_bag}/#{databag_item}")
end
|
207
208
209
|
# File 'lib/chef/data_bag_item.rb', line 207
def id
@raw_data['id']
end
|
199
200
201
|
# File 'lib/chef/data_bag_item.rb', line 199
def inspect
"data_bag_item[#{data_bag.inspect}, #{raw_data['id'].inspect}, #{raw_data.inspect}]"
end
|
89
90
91
|
# File 'lib/chef/data_bag_item.rb', line 89
def name
object_name
end
|
#object_name ⇒ Object
93
94
95
96
97
98
99
|
# File 'lib/chef/data_bag_item.rb', line 93
def object_name
raise Exceptions::ValidationFailed, "You must have an 'id' or :id key in the raw data" unless raw_data.has_key?('id')
raise Exceptions::ValidationFailed, "You must have declared what bag this item belongs to!" unless data_bag
id = raw_data['id']
"data_bag_item_#{data_bag}_#{id}"
end
|
#pretty_print(pretty_printer) ⇒ Object
203
204
205
|
# File 'lib/chef/data_bag_item.rb', line 203
def pretty_print(pretty_printer)
pretty_printer.pp({"data_bag_item('#{data_bag}', '#{id}')" => self.to_hash})
end
|
#save(item_id = ) ⇒ Object
Save this Data Bag Item via RESTful API
166
167
168
169
170
171
172
173
174
175
176
177
178
179
|
# File 'lib/chef/data_bag_item.rb', line 166
def save(item_id=@raw_data['id'])
r = chef_server_rest
begin
if Chef::Config[:why_run]
Chef::Log.warn("In whyrun mode, so NOT performing data bag item save.")
else
r.put_rest("data/#{data_bag}/#{item_id}", self)
end
rescue Net::HTTPServerException => e
raise e unless e.response.code == "404"
r.post_rest("data/#{data_bag}", self)
end
self
end
|
105
106
107
108
109
110
|
# File 'lib/chef/data_bag_item.rb', line 105
def to_hash
result = self.raw_data
result["chef_type"] = "data_bag_item"
result["data_bag"] = self.data_bag
result
end
|
#to_json(*a) ⇒ Object
Serialize this object as a hash
113
114
115
116
117
118
119
120
121
122
|
# File 'lib/chef/data_bag_item.rb', line 113
def to_json(*a)
result = {
"name" => self.object_name,
"json_class" => self.class.name,
"chef_type" => "data_bag_item",
"data_bag" => self.data_bag,
"raw_data" => self.raw_data
}
result.to_json(*a)
end
|
195
196
197
|
# File 'lib/chef/data_bag_item.rb', line 195
def to_s
"data_bag_item[#{id}]"
end
|
#validate_id!(id_str) ⇒ Object
69
70
71
|
# File 'lib/chef/data_bag_item.rb', line 69
def validate_id!(id_str)
self.class.validate_id!(id_str)
end
|