Class: Chef::Role
- Includes:
- Mixin::FromFile, Mixin::ParamsValidate
- Defined in:
- lib/chef/role.rb
Class Method Summary collapse
- .chef_server_rest ⇒ Object
-
.from_disk(name) ⇒ Object
Load a role from disk - prefers to load the JSON, but will happily load the raw rb files as well.
-
.json_create(o) ⇒ Object
Create a Chef::Role from JSON.
-
.list(inflate = false) ⇒ Object
Get the list of all roles from the API.
-
.load(name) ⇒ Object
Load a role by name from the API.
Instance Method Summary collapse
- #active_run_list_for(environment) ⇒ Object
- #chef_server_rest ⇒ Object
-
#create ⇒ Object
Create the role via the REST API.
- #default_attributes(arg = nil) ⇒ Object
- #description(arg = nil) ⇒ Object
-
#destroy ⇒ Object
Remove this role via the REST API.
-
#env_run_lists(env_run_lists = nil) ⇒ Object
(also: #env_run_list)
Per environment run lists.
- #environment(env_name) ⇒ Object
- #environments ⇒ Object
-
#initialize ⇒ Role
constructor
Create a new Chef::Role object.
- #name(arg = nil) ⇒ Object
- #override_attributes(arg = nil) ⇒ Object
- #run_list(*args) ⇒ Object (also: #recipes)
-
#run_list_for(environment) ⇒ Object
For run_list expansion.
-
#save ⇒ Object
Save this role via the REST API.
- #to_hash ⇒ Object
-
#to_json(*a) ⇒ Object
Serialize this object as a hash.
-
#to_s ⇒ Object
As a string.
- #update_from!(o) ⇒ Object
Methods included from Mixin::ParamsValidate
#lazy, #set_or_return, #validate
Methods included from Mixin::FromFile
Constructor Details
Class Method Details
.chef_server_rest ⇒ Object
48 49 50 |
# File 'lib/chef/role.rb', line 48 def self.chef_server_rest Chef::REST.new(Chef::Config[:chef_server_url]) end |
.from_disk(name) ⇒ Object
Load a role from disk - prefers to load the JSON, but will happily load the raw rb files as well. Can search within directories in the role_path.
235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 |
# File 'lib/chef/role.rb', line 235 def self.from_disk(name) paths = Array(Chef::Config[:role_path]) paths.each do |path| roles_files = Dir.glob(File.join(Chef::Util::PathHelper.escape_glob(path), "**", "**")) js_files = roles_files.select { |file| file.match /\/#{name}\.json$/ } rb_files = roles_files.select { |file| file.match /\/#{name}\.rb$/ } if js_files.count > 1 or rb_files.count > 1 raise Chef::Exceptions::DuplicateRole, "Multiple roles of same type found named #{name}" end js_path, rb_path = js_files.first, rb_files.first if js_path && File.exists?(js_path) # from_json returns object.class => json_class in the JSON. return Chef::JSONCompat.from_json(IO.read(js_path)) elsif rb_path && File.exists?(rb_path) role = Chef::Role.new role.name(name) role.from_file(rb_path) return role end end raise Chef::Exceptions::RoleNotFound, "Role '#{name}' could not be loaded from disk" end |
.json_create(o) ⇒ Object
Create a Chef::Role from JSON
159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 |
# File 'lib/chef/role.rb', line 159 def self.json_create(o) role = new role.name(o["name"]) role.description(o["description"]) role.default_attributes(o["default_attributes"]) role.override_attributes(o["override_attributes"]) # _default run_list is in 'run_list' for newer clients, and # 'recipes' for older clients. env_run_list_hash = {"_default" => (o.has_key?("run_list") ? o["run_list"] : o["recipes"])} # Clients before 0.10 do not include env_run_lists, so only # merge if it's there. if o["env_run_lists"] env_run_list_hash.merge!(o["env_run_lists"]) end role.env_run_lists(env_run_list_hash) role end |
.list(inflate = false) ⇒ Object
Get the list of all roles from the API.
181 182 183 184 185 186 187 188 189 190 191 |
# File 'lib/chef/role.rb', line 181 def self.list(inflate=false) if inflate response = Hash.new Chef::Search::Query.new.search(:role) do |n| response[n.name] = n unless n.nil? end response else chef_server_rest.get_rest("roles") end end |
.load(name) ⇒ Object
Load a role by name from the API
194 195 196 |
# File 'lib/chef/role.rb', line 194 def self.load(name) chef_server_rest.get_rest("roles/#{name}") end |
Instance Method Details
#active_run_list_for(environment) ⇒ Object
86 87 88 |
# File 'lib/chef/role.rb', line 86 def active_run_list_for(environment) @env_run_lists.has_key?(environment) ? environment : '_default' end |
#chef_server_rest ⇒ Object
44 45 46 |
# File 'lib/chef/role.rb', line 44 def chef_server_rest Chef::REST.new(Chef::Config[:chef_server_url]) end |
#create ⇒ Object
Create the role via the REST API
223 224 225 226 |
# File 'lib/chef/role.rb', line 223 def create chef_server_rest.post_rest("roles", self) self end |
#default_attributes(arg = nil) ⇒ Object
106 107 108 109 110 111 112 |
# File 'lib/chef/role.rb', line 106 def default_attributes(arg=nil) set_or_return( :default_attributes, arg, :kind_of => Hash ) end |
#description(arg = nil) ⇒ Object
60 61 62 63 64 65 66 |
# File 'lib/chef/role.rb', line 60 def description(arg=nil) set_or_return( :description, arg, :kind_of => String ) end |
#destroy ⇒ Object
Remove this role via the REST API
207 208 209 |
# File 'lib/chef/role.rb', line 207 def destroy chef_server_rest.delete_rest("roles/#{@name}") end |
#env_run_lists(env_run_lists = nil) ⇒ Object Also known as: env_run_list
Per environment run lists
91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/chef/role.rb', line 91 def env_run_lists(env_run_lists=nil) if (!env_run_lists.nil?) unless env_run_lists.key?("_default") msg = "_default key is required in env_run_lists.\n" msg << "(env_run_lists: #{env_run_lists.inspect})" raise Chef::Exceptions::InvalidEnvironmentRunListSpecification, msg end @env_run_lists.clear env_run_lists.each { |k,v| @env_run_lists[k] = Chef::RunList.new(*Array(v))} end @env_run_lists end |
#environment(env_name) ⇒ Object
198 199 200 |
# File 'lib/chef/role.rb', line 198 def environment(env_name) chef_server_rest.get_rest("roles/#{@name}/environments/#{env_name}") end |
#environments ⇒ Object
202 203 204 |
# File 'lib/chef/role.rb', line 202 def environments chef_server_rest.get_rest("roles/#{@name}/environments") end |
#name(arg = nil) ⇒ Object
52 53 54 55 56 57 58 |
# File 'lib/chef/role.rb', line 52 def name(arg=nil) set_or_return( :name, arg, :regex => /^[\-[:alnum:]_]+$/ ) end |
#override_attributes(arg = nil) ⇒ Object
114 115 116 117 118 119 120 |
# File 'lib/chef/role.rb', line 114 def override_attributes(arg=nil) set_or_return( :override_attributes, arg, :kind_of => Hash ) end |
#run_list(*args) ⇒ Object Also known as: recipes
68 69 70 71 72 73 |
# File 'lib/chef/role.rb', line 68 def run_list(*args) if (args.length > 0) @env_run_lists["_default"].reset!(args) end @env_run_lists["_default"] end |
#run_list_for(environment) ⇒ Object
For run_list expansion
78 79 80 81 82 83 84 |
# File 'lib/chef/role.rb', line 78 def run_list_for(environment) if env_run_lists[environment].nil? env_run_lists["_default"] else env_run_lists[environment] end end |
#save ⇒ Object
Save this role via the REST API
212 213 214 215 216 217 218 219 220 |
# File 'lib/chef/role.rb', line 212 def save begin chef_server_rest.put_rest("roles/#{@name}", self) rescue Net::HTTPServerException => e raise e unless e.response.code == "404" chef_server_rest.post_rest("roles", self) end self end |
#to_hash ⇒ Object
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
# File 'lib/chef/role.rb', line 122 def to_hash env_run_lists_without_default = @env_run_lists.dup env_run_lists_without_default.delete("_default") result = { "name" => @name, "description" => @description, 'json_class' => self.class.name, "default_attributes" => @default_attributes, "override_attributes" => @override_attributes, "chef_type" => "role", #Render to_json correctly for run_list items (both run_list and evn_run_lists) #so malformed json does not result "run_list" => run_list.run_list.map { |item| item.to_s }, "env_run_lists" => env_run_lists_without_default.inject({}) do |accumulator, (k, v)| accumulator[k] = v.map { |x| x.to_s } accumulator end } result end |
#to_json(*a) ⇒ Object
Serialize this object as a hash
145 146 147 |
# File 'lib/chef/role.rb', line 145 def to_json(*a) Chef::JSONCompat.to_json(to_hash, *a) end |
#to_s ⇒ Object
As a string
229 230 231 |
# File 'lib/chef/role.rb', line 229 def to_s "role[#{@name}]" end |
#update_from!(o) ⇒ Object
149 150 151 152 153 154 155 156 |
# File 'lib/chef/role.rb', line 149 def update_from!(o) description(o.description) recipes(o.recipes) if defined?(o.recipes) default_attributes(o.default_attributes) override_attributes(o.override_attributes) env_run_lists(o.env_run_lists) unless o.env_run_lists.nil? self end |