Class: Chef::DataBag
- Includes:
- Mixin::FromFile, Mixin::ParamsValidate
- Defined in:
- lib/chef/data_bag.rb
Constant Summary collapse
- VALID_NAME =
/^[\-[:alnum:]_]+$/
Class Method Summary collapse
- .chef_server_rest ⇒ Object
-
.json_create(o) ⇒ Object
Create a Chef::Role from JSON.
- .list(inflate = false) ⇒ Object
-
.load(name) ⇒ Object
Load a Data Bag by name via either the RESTful API or local data_bag_path if run in solo mode.
- .validate_name!(name) ⇒ Object
Instance Method Summary collapse
- #chef_server_rest ⇒ Object
-
#create ⇒ Object
create a data bag via RESTful API.
- #destroy ⇒ Object
-
#initialize ⇒ DataBag
constructor
Create a new Chef::DataBag.
- #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
#initialize ⇒ DataBag
Create a new Chef::DataBag
43 44 45 |
# File 'lib/chef/data_bag.rb', line 43 def initialize @name = '' end |
Class Method Details
.chef_server_rest ⇒ Object
73 74 75 |
# File 'lib/chef/data_bag.rb', line 73 def self.chef_server_rest Chef::REST.new(Chef::Config[:chef_server_url]) end |
.json_create(o) ⇒ Object
Create a Chef::Role from JSON
78 79 80 81 82 |
# File 'lib/chef/data_bag.rb', line 78 def self.json_create(o) bag = new bag.name(o["name"]) bag end |
.list(inflate = false) ⇒ Object
84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/chef/data_bag.rb', line 84 def self.list(inflate=false) if inflate # Can't search for all data bags like other objects, fall back to N+1 :( list(false).inject({}) do |response, bag_and_uri| response[bag_and_uri.first] = load(bag_and_uri.first) response end else Chef::REST.new(Chef::Config[:chef_server_url]).get_rest("data") end end |
.load(name) ⇒ Object
Load a Data Bag by name via either the RESTful API or local data_bag_path if run in solo mode
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/chef/data_bag.rb', line 97 def self.load(name) if Chef::Config[:solo] unless File.directory?(Chef::Config[:data_bag_path]) raise Chef::Exceptions::InvalidDataBagPath, "Data bag path '#{Chef::Config[:data_bag_path]}' is invalid" end Dir.glob(File.join(Chef::Config[:data_bag_path], "#{name}", "*.json")).inject({}) do |bag, f| item = Chef::JSONCompat.from_json(IO.read(f)) bag[item['id']] = item bag end else Chef::REST.new(Chef::Config[:chef_server_url]).get_rest("data/#{name}") end end |
.validate_name!(name) ⇒ Object
36 37 38 39 40 |
# File 'lib/chef/data_bag.rb', line 36 def self.validate_name!(name) unless name =~ VALID_NAME raise Exceptions::InvalidDataBagName, "DataBags must have a name matching #{VALID_NAME.inspect}, you gave #{name.inspect}" end end |
Instance Method Details
#chef_server_rest ⇒ Object
69 70 71 |
# File 'lib/chef/data_bag.rb', line 69 def chef_server_rest Chef::REST.new(Chef::Config[:chef_server_url]) end |
#create ⇒ Object
create a data bag via RESTful API
133 134 135 136 |
# File 'lib/chef/data_bag.rb', line 133 def create chef_server_rest.post_rest("data", self) self end |
#destroy ⇒ Object
113 114 115 |
# File 'lib/chef/data_bag.rb', line 113 def destroy chef_server_rest.delete_rest("data/#{@name}") end |
#name(arg = nil) ⇒ Object
47 48 49 50 51 52 53 |
# File 'lib/chef/data_bag.rb', line 47 def name(arg=nil) set_or_return( :name, arg, :regex => VALID_NAME ) end |
#save ⇒ Object
Save the Data Bag via RESTful API
118 119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/chef/data_bag.rb', line 118 def save begin if Chef::Config[:why_run] Chef::Log.warn("In whyrun mode, so NOT performing data bag save.") else chef_server_rest.put_rest("data/#{@name}", self) end rescue Net::HTTPServerException => e raise e unless e.response.code == "404" chef_server_rest.post_rest("data", self) end self end |
#to_hash ⇒ Object
55 56 57 58 59 60 61 62 |
# File 'lib/chef/data_bag.rb', line 55 def to_hash result = { "name" => @name, 'json_class' => self.class.name, "chef_type" => "data_bag", } result end |
#to_json(*a) ⇒ Object
Serialize this object as a hash
65 66 67 |
# File 'lib/chef/data_bag.rb', line 65 def to_json(*a) to_hash.to_json(*a) end |
#to_s ⇒ Object
As a string
139 140 141 |
# File 'lib/chef/data_bag.rb', line 139 def to_s "data_bag[#{@name}]" end |