Class: Chef::DataBag
- Includes:
- Mixin::FromFile, Mixin::ParamsValidate
- Defined in:
- lib/chef/data_bag.rb
Constant Summary collapse
- DESIGN_DOCUMENT =
{ "version" => 2, "language" => "javascript", "views" => { "all" => { "map" => <<-EOJS function(doc) { if (doc.chef_type == "data_bag") { emit(doc.name, doc); } } EOJS }, "all_id" => { "map" => <<-EOJS function(doc) { if (doc.chef_type == "data_bag") { emit(doc.name, doc.name); } } EOJS }, "entries" => { "map" => <<-EOJS function(doc) { if (doc.chef_type == "data_bag_item") { emit(doc.data_bag, doc.raw_data.id); } } EOJS } } }
Instance Attribute Summary collapse
-
#couchdb_id ⇒ Object
Returns the value of attribute couchdb_id.
-
#couchdb_rev ⇒ Object
Returns the value of attribute couchdb_rev.
Class Method Summary collapse
-
.cdb_list(inflate = false) ⇒ Object
List all the Chef::DataBag objects in the CouchDB.
-
.cdb_load(name) ⇒ Object
Load a Data Bag by name from CouchDB.
-
.create_design_document ⇒ Object
Set up our CouchDB design document.
-
.json_create(o) ⇒ Object
Create a Chef::Role from JSON.
- .list(inflate = false) ⇒ Object
-
.load(name) ⇒ Object
Load a Data Bag by name via the RESTful API.
Instance Method Summary collapse
-
#cdb_destroy ⇒ Object
Remove this Data Bag from CouchDB.
-
#cdb_save ⇒ Object
Save this Data Bag to the CouchDB.
-
#create ⇒ Object
create a data bag via RESTful API.
- #destroy ⇒ Object
-
#initialize ⇒ DataBag
constructor
Create a new Chef::DataBag.
-
#list(inflate = false) ⇒ Object
List all the items in this Bag from CouchDB The self.load method does this through the REST API.
- #name(arg = nil) ⇒ Object
-
#save ⇒ Object
Save the Data Bag via RESTful API.
- #to_hash ⇒ Object
-
#to_json(*a) ⇒ Object
Serialize this object as a hash.
-
#to_s ⇒ Object
As a string.
Methods included from Mixin::ParamsValidate
Methods included from Mixin::FromFile
Constructor Details
Instance Attribute Details
#couchdb_id ⇒ Object
Returns the value of attribute couchdb_id.
68 69 70 |
# File 'lib/chef/data_bag.rb', line 68 def couchdb_id @couchdb_id end |
#couchdb_rev ⇒ Object
Returns the value of attribute couchdb_rev.
68 69 70 |
# File 'lib/chef/data_bag.rb', line 68 def couchdb_rev @couchdb_rev end |
Class Method Details
.cdb_list(inflate = false) ⇒ Object
List all the Chef::DataBag objects in the CouchDB. If inflate is set to true, you will get the full list of all Roles, fully inflated.
112 113 114 115 116 117 118 119 120 |
# File 'lib/chef/data_bag.rb', line 112 def self.cdb_list(inflate=false) couchdb = Chef::CouchDB.new rs = couchdb.list("data_bags", inflate) if inflate rs["rows"].collect { |r| r["value"] } else rs["rows"].collect { |r| r["key"] } end end |
.cdb_load(name) ⇒ Object
Load a Data Bag by name from CouchDB
136 137 138 139 |
# File 'lib/chef/data_bag.rb', line 136 def self.cdb_load(name) couchdb = Chef::CouchDB.new couchdb.load("data_bag", name) end |
.create_design_document ⇒ Object
Set up our CouchDB design document
204 205 206 207 |
# File 'lib/chef/data_bag.rb', line 204 def self.create_design_document couchdb = Chef::CouchDB.new couchdb.create_design_document("data_bags", DESIGN_DOCUMENT) end |
.json_create(o) ⇒ Object
Create a Chef::Role from JSON
102 103 104 105 106 107 108 |
# File 'lib/chef/data_bag.rb', line 102 def self.json_create(o) bag = new bag.name(o["name"]) bag.couchdb_rev = o["_rev"] if o.has_key?("_rev") bag.couchdb_id = o["_id"] if o.has_key?("_id") bag end |
.list(inflate = false) ⇒ Object
122 123 124 125 126 127 128 129 130 131 132 133 |
# File 'lib/chef/data_bag.rb', line 122 def self.list(inflate=false) r = Chef::REST.new(Chef::Config[:chef_server_url]) if inflate response = Hash.new Chef::Search::Query.new.search(:data) do |n| response[n.name] = n end response else r.get_rest("data") end end |
Instance Method Details
#cdb_destroy ⇒ Object
Remove this Data Bag from CouchDB
148 149 150 151 152 153 154 155 |
# File 'lib/chef/data_bag.rb', line 148 def cdb_destroy removed = @couchdb.delete("data_bag", @name, @couchdb_rev) rs = @couchdb.get_view("data_bags", "entries", :include_docs => true, :startkey => @name, :endkey => @name) rs["rows"].each do |row| row["doc"].cdb_destroy end removed end |
#cdb_save ⇒ Object
Save this Data Bag to the CouchDB
163 164 165 166 |
# File 'lib/chef/data_bag.rb', line 163 def cdb_save results = @couchdb.store("data_bag", @name, self) @couchdb_rev = results["rev"] end |
#create ⇒ Object
create a data bag via RESTful API
184 185 186 187 188 |
# File 'lib/chef/data_bag.rb', line 184 def create r = Chef::REST.new(Chef::Config[:chef_server_url]) r.post_rest("data", self) self end |
#destroy ⇒ Object
157 158 159 160 |
# File 'lib/chef/data_bag.rb', line 157 def destroy r = Chef::REST.new(Chef::Config[:chef_server_url]) r.delete_rest("data/#{@name}") end |
#list(inflate = false) ⇒ Object
List all the items in this Bag from CouchDB The self.load method does this through the REST API
192 193 194 195 196 197 198 199 200 201 |
# File 'lib/chef/data_bag.rb', line 192 def list(inflate=false) rs = nil if inflate rs = @couchdb.get_view("data_bags", "entries", :include_docs => true, :startkey => @name, :endkey => @name) rs["rows"].collect { |r| r["doc"] } else rs = @couchdb.get_view("data_bags", "entries", :startkey => @name, :endkey => @name) rs["rows"].collect { |r| r["value"] } end end |
#name(arg = nil) ⇒ Object
78 79 80 81 82 83 84 |
# File 'lib/chef/data_bag.rb', line 78 def name(arg=nil) set_or_return( :name, arg, :regex => /^[\-[:alnum:]_]+$/ ) end |
#save ⇒ Object
Save the Data Bag via RESTful API
169 170 171 172 173 174 175 176 177 178 179 180 181 |
# File 'lib/chef/data_bag.rb', line 169 def save r = Chef::REST.new(Chef::Config[:chef_server_url]) begin r.put_rest("data/#{@name}", self) rescue Net::HTTPServerException => e if e.response.code == "404" r.post_rest("data", self) else raise e end end self end |
#to_hash ⇒ Object
86 87 88 89 90 91 92 93 94 |
# File 'lib/chef/data_bag.rb', line 86 def to_hash result = { "name" => @name, 'json_class' => self.class.name, "chef_type" => "data_bag", } result["_rev"] = @couchdb_rev if @couchdb_rev result end |
#to_json(*a) ⇒ Object
Serialize this object as a hash
97 98 99 |
# File 'lib/chef/data_bag.rb', line 97 def to_json(*a) to_hash.to_json(*a) end |
#to_s ⇒ Object
As a string
210 211 212 |
# File 'lib/chef/data_bag.rb', line 210 def to_s "data_bag[#{@name}]" end |