Class: Ridley::Chef::Cookbook::Metadata
- Inherits:
-
Object
- Object
- Ridley::Chef::Cookbook::Metadata
- Includes:
- Mixin::FromFile, Mixin::ParamsValidate
- Defined in:
- lib/ridley/chef/cookbook/metadata.rb
Overview
Borrowed and modified from: https://raw.github.com/opscode/chef/11.4.0/lib/chef/cookbook/metadata.rb
- Copyright
-
Copyright 2008-2010 Opscode, Inc.
Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Chef::Cookbook::Metadata
Chef::Cookbook::Metadata provides a convenient DSL for declaring metadata about Chef Cookbooks.
Direct Known Subclasses
Constant Summary collapse
- NAME =
'name'.freeze
- DESCRIPTION =
'description'.freeze
- LONG_DESCRIPTION =
'long_description'.freeze
- MAINTAINER =
'maintainer'.freeze
- MAINTAINER_EMAIL =
'maintainer_email'.freeze
- LICENSE =
'license'.freeze
- PLATFORMS =
'platforms'.freeze
- DEPENDENCIES =
'dependencies'.freeze
- RECOMMENDATIONS =
'recommendations'.freeze
- SUGGESTIONS =
'suggestions'.freeze
- CONFLICTING =
'conflicting'.freeze
- PROVIDING =
'providing'.freeze
- REPLACING =
'replacing'.freeze
- ATTRIBUTES =
'attributes'.freeze
- GROUPINGS =
'groupings'.freeze
- RECIPES =
'recipes'.freeze
- VERSION =
'version'.freeze
- COMPARISON_FIELDS =
[ :name, :description, :long_description, :maintainer, :maintainer_email, :license, :platforms, :dependencies, :recommendations, :suggestions, :conflicting, :providing, :replacing, :attributes, :groupings, :recipes, :version ]
Instance Attribute Summary collapse
-
#attributes ⇒ Object
readonly
Returns the value of attribute attributes.
-
#conflicting ⇒ Object
readonly
Returns the value of attribute conflicting.
-
#cookbook ⇒ Object
readonly
Returns the value of attribute cookbook.
-
#dependencies ⇒ Object
readonly
Returns the value of attribute dependencies.
-
#groupings ⇒ Object
readonly
Returns the value of attribute groupings.
-
#platforms ⇒ Object
readonly
Returns the value of attribute platforms.
-
#providing ⇒ Object
readonly
Returns the value of attribute providing.
-
#recipes ⇒ Object
readonly
Returns the value of attribute recipes.
-
#recommendations ⇒ Object
readonly
Returns the value of attribute recommendations.
-
#replacing ⇒ Object
readonly
Returns the value of attribute replacing.
-
#suggestions ⇒ Object
readonly
Returns the value of attribute suggestions.
-
#version(arg = nil) ⇒ Object
readonly
Sets the current cookbook version, or returns it.
Class Method Summary collapse
Instance Method Summary collapse
- #==(other) ⇒ Object
-
#attribute(name, options) ⇒ Object
Adds an attribute )hat a user needs to configure for this cookbook.
-
#conflicts(cookbook, *version_args) ⇒ Object
Adds a conflict for another cookbook, with version checking strings.
-
#depends(cookbook, *version_args) ⇒ Object
Adds a dependency on another cookbook, with version checking strings.
-
#description(arg = nil) ⇒ Object
Sets the current description, or returns it.
- #from_hash(o) ⇒ Object
- #from_json(json) ⇒ Object
- #grouping(name, options) ⇒ Object
-
#initialize(cookbook = nil, maintainer = 'YOUR_COMPANY_NAME', maintainer_email = 'YOUR_EMAIL', license = 'none') ⇒ Metadata
constructor
Builds a new Chef::Cookbook::Metadata object.
-
#license(arg = nil) ⇒ Object
Sets the current license, or returns it.
-
#long_description(arg = nil) ⇒ Object
Sets the current long description, or returns it.
-
#maintainer(arg = nil) ⇒ Object
Sets the cookbooks maintainer, or returns it.
-
#maintainer_email(arg = nil) ⇒ Object
Sets the maintainers email address, or returns it.
-
#name(arg = nil) ⇒ Object
Sets the name of the cookbook, or returns it.
-
#provides(cookbook, *version_args) ⇒ Object
Adds a recipe, definition, or resource provided by this cookbook.
-
#recipe(name, description) ⇒ Object
Adds a description for a recipe.
-
#recommends(cookbook, *version_args) ⇒ Object
Adds a recommendation for another cookbook, with version checking strings.
-
#replaces(cookbook, *version_args) ⇒ Object
Adds a cookbook that is replaced by this one, with version checking strings.
-
#suggests(cookbook, *version_args) ⇒ Object
Adds a suggestion for another cookbook, with version checking strings.
-
#supports(platform, *version_args) ⇒ Object
Adds a supported platform, with version checking strings.
- #to_hash ⇒ Object
Methods included from Mixin::FromFile
#class_from_file, #from_file, included
Methods included from Mixin::ParamsValidate
Constructor Details
#initialize(cookbook = nil, maintainer = 'YOUR_COMPANY_NAME', maintainer_email = 'YOUR_EMAIL', license = 'none') ⇒ Metadata
Builds a new Chef::Cookbook::Metadata object.
Parameters
- cookbook<String>
-
An optional cookbook object
- maintainer<String>
-
An optional maintainer
- maintainer_email<String>
-
An optional maintainer email
license<String>::An optional license. Default is Apache v2.0
Returns
metadata<Chef::Cookbook::Metadata>
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 84 def initialize(cookbook = nil, maintainer = 'YOUR_COMPANY_NAME', maintainer_email = 'YOUR_EMAIL', license = 'none') @cookbook = cookbook @name = cookbook ? cookbook.name : "" @long_description = "" self.maintainer(maintainer) self.maintainer_email(maintainer_email) self.license(license) self.description('A fabulous new cookbook') @platforms = Hashie::Mash.new @dependencies = Hashie::Mash.new @recommendations = Hashie::Mash.new @suggestions = Hashie::Mash.new @conflicting = Hashie::Mash.new @providing = Hashie::Mash.new @replacing = Hashie::Mash.new @attributes = Hashie::Mash.new @groupings = Hashie::Mash.new @recipes = Hashie::Mash.new @version = Solve::Version.new("0.0.0") if cookbook @recipes = cookbook.fully_qualified_recipe_names.inject({}) do |r, e| e = self.name if e =~ /::default$/ r[e] = "" self.provides e r end end end |
Instance Attribute Details
#attributes ⇒ Object (readonly)
Returns the value of attribute attributes.
69 70 71 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 69 def attributes @attributes end |
#conflicting ⇒ Object (readonly)
Returns the value of attribute conflicting.
66 67 68 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 66 def conflicting @conflicting end |
#cookbook ⇒ Object (readonly)
Returns the value of attribute cookbook.
61 62 63 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 61 def cookbook @cookbook end |
#dependencies ⇒ Object (readonly)
Returns the value of attribute dependencies.
63 64 65 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 63 def dependencies @dependencies end |
#groupings ⇒ Object (readonly)
Returns the value of attribute groupings.
70 71 72 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 70 def groupings @groupings end |
#platforms ⇒ Object (readonly)
Returns the value of attribute platforms.
62 63 64 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 62 def platforms @platforms end |
#providing ⇒ Object (readonly)
Returns the value of attribute providing.
67 68 69 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 67 def providing @providing end |
#recipes ⇒ Object (readonly)
Returns the value of attribute recipes.
71 72 73 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 71 def recipes @recipes end |
#recommendations ⇒ Object (readonly)
Returns the value of attribute recommendations.
64 65 66 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 64 def recommendations @recommendations end |
#replacing ⇒ Object (readonly)
Returns the value of attribute replacing.
68 69 70 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 68 def replacing @replacing end |
#suggestions ⇒ Object (readonly)
Returns the value of attribute suggestions.
65 66 67 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 65 def suggestions @suggestions end |
#version(arg = nil) ⇒ Object (readonly)
Sets the current cookbook version, or returns it. Can be two or three digits, seperated by dots. ie: ‘2.1’, ‘1.5.4’ or ‘0.9’.
Parameters
- version<String>
-
The curent version, as a string
Returns
- version<String>
-
Returns the current version
202 203 204 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 202 def version @version end |
Class Method Details
.from_hash(hash) ⇒ Object
24 25 26 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 24 def from_hash(hash) new.from_hash(hash) end |
.from_json(json) ⇒ Object
28 29 30 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 28 def from_json(json) new.from_json(json) end |
Instance Method Details
#==(other) ⇒ Object
113 114 115 116 117 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 113 def ==(other) COMPARISON_FIELDS.inject(true) do |equal_so_far, field| equal_so_far && other.respond_to?(field) && (other.send(field) == send(field)) end end |
#attribute(name, options) ⇒ Object
Adds an attribute )hat a user needs to configure for this cookbook. Takes a name (with the / notation for a nested attribute), followed by any of these options
display_name<String>:: What a UI should show for this attribute
description<String>:: A hint as to what this attr is for
choice<Array>:: An array of choices to present to the user.
calculated<Boolean>:: If true, the default value is calculated by the recipe and cannot be displayed.
type<String>:: "string" or "array" - default is "string" ("hash" is supported for backwards compatibility)
required<String>:: Whether this attr is 'required', 'recommended' or 'optional' - default 'optional' (true/false values also supported for backwards compatibility)
recipes<Array>:: An array of recipes which need this attr set.
default<String>,<Array>,<Hash>:: The default value
Parameters
- name<String>
-
The name of the attribute (‘foo’, or ‘apache2/log_dir’)
- options<Hash>
-
The description of the options
Returns
- options<Hash>
-
Returns the current options hash
385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 385 def attribute(name, ) validate( , { :display_name => { :kind_of => String }, :description => { :kind_of => String }, :choice => { :kind_of => [ Array ], :default => [] }, :calculated => { :equal_to => [ true, false ], :default => false }, :type => { :equal_to => [ "string", "array", "hash", "symbol" ], :default => "string" }, :required => { :equal_to => [ "required", "recommended", "optional", true, false ], :default => "optional" }, :recipes => { :kind_of => [ Array ], :default => [] }, :default => { :kind_of => [ String, Array, Hash ] } } ) [:required] = remap_required_attribute([:required]) unless [:required].nil? validate_string_array([:choice]) validate_calculated_default_rule() validate_choice_default_rule() @attributes[name] = @attributes[name] end |
#conflicts(cookbook, *version_args) ⇒ Object
Adds a conflict for another cookbook, with version checking strings.
Parameters
- cookbook<String>
-
The cookbook
- version<String>
-
A version constraint of the form “OP VERSION”,
where OP is one of < <= = > >= ~> and VERSION has the form x.y.z or x.y.
Returns
- versions<Array>
-
Returns the list of versions for the platform
307 308 309 310 311 312 313 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 307 def conflicts(cookbook, *version_args) version = version_args.first @conflicting[cookbook] = Solve::Constraint.new(version).to_s @conflicting[cookbook] rescue Solve::Errors::InvalidConstraintFormat => ex raise InvalidVersionConstraint, ex.to_s end |
#depends(cookbook, *version_args) ⇒ Object
Adds a dependency on another cookbook, with version checking strings.
Parameters
- cookbook<String>
-
The cookbook
- version<String>
-
A version constraint of the form “OP VERSION”,
where OP is one of < <= = > >= ~> and VERSION has the form x.y.z or x.y.
Returns
- versions<Array>
-
Returns the list of versions for the platform
253 254 255 256 257 258 259 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 253 def depends(cookbook, *version_args) version = version_args.first @dependencies[cookbook] = Solve::Constraint.new(version).to_s @dependencies[cookbook] rescue Solve::Errors::InvalidConstraintFormat => ex raise InvalidVersionConstraint, ex.to_s end |
#description(arg = nil) ⇒ Object
Sets the current description, or returns it. Should be short - one line only!
Parameters
- description<String>
-
The new description
Returns
- description<String>
-
Returns the description
171 172 173 174 175 176 177 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 171 def description(arg = nil) set_or_return( :description, arg, :kind_of => [ String ] ) end |
#from_hash(o) ⇒ Object
442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 442 def from_hash(o) @name = o[NAME] if o.has_key?(NAME) @description = o[DESCRIPTION] if o.has_key?(DESCRIPTION) @long_description = o[LONG_DESCRIPTION] if o.has_key?(LONG_DESCRIPTION) @maintainer = o[MAINTAINER] if o.has_key?(MAINTAINER) @maintainer_email = o[MAINTAINER_EMAIL] if o.has_key?(MAINTAINER_EMAIL) @license = o[LICENSE] if o.has_key?(LICENSE) @platforms = o[PLATFORMS] if o.has_key?(PLATFORMS) @dependencies = handle_deprecated_constraints(o[DEPENDENCIES]) if o.has_key?(DEPENDENCIES) @recommendations = handle_deprecated_constraints(o[RECOMMENDATIONS]) if o.has_key?(RECOMMENDATIONS) @suggestions = handle_deprecated_constraints(o[SUGGESTIONS]) if o.has_key?(SUGGESTIONS) @conflicting = handle_deprecated_constraints(o[CONFLICTING]) if o.has_key?(CONFLICTING) @providing = o[PROVIDING] if o.has_key?(PROVIDING) @replacing = handle_deprecated_constraints(o[REPLACING]) if o.has_key?(REPLACING) @attributes = o[ATTRIBUTES] if o.has_key?(ATTRIBUTES) @groupings = o[GROUPINGS] if o.has_key?(GROUPINGS) @recipes = o[RECIPES] if o.has_key?(RECIPES) @version = o[VERSION] if o.has_key?(VERSION) self end |
#from_json(json) ⇒ Object
463 464 465 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 463 def from_json(json) from_hash JSON.parse(json) end |
#grouping(name, options) ⇒ Object
408 409 410 411 412 413 414 415 416 417 418 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 408 def grouping(name, ) validate( , { :title => { :kind_of => String }, :description => { :kind_of => String } } ) @groupings[name] = @groupings[name] end |
#license(arg = nil) ⇒ Object
Sets the current license, or returns it.
Parameters
- license<String>
-
The current license.
Returns
- license<String>
-
Returns the current license
156 157 158 159 160 161 162 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 156 def license(arg = nil) set_or_return( :license, arg, :kind_of => [ String ] ) end |
#long_description(arg = nil) ⇒ Object
Sets the current long description, or returns it. Might come from a README, say.
Parameters
- long_description<String>
-
The new long description
Returns
- long_description<String>
-
Returns the long description
186 187 188 189 190 191 192 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 186 def long_description(arg = nil) set_or_return( :long_description, arg, :kind_of => [ String ] ) end |
#maintainer(arg = nil) ⇒ Object
Sets the cookbooks maintainer, or returns it.
Parameters
- maintainer<String>
-
The maintainers name
Returns
- maintainer<String>
-
Returns the current maintainer.
126 127 128 129 130 131 132 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 126 def maintainer(arg = nil) set_or_return( :maintainer, arg, :kind_of => [ String ] ) end |
#maintainer_email(arg = nil) ⇒ Object
Sets the maintainers email address, or returns it.
Parameters
- maintainer_email<String>
-
The maintainers email address
Returns
- maintainer_email<String>
-
Returns the current maintainer email.
141 142 143 144 145 146 147 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 141 def maintainer_email(arg = nil) set_or_return( :maintainer_email, arg, :kind_of => [ String ] ) end |
#name(arg = nil) ⇒ Object
Sets the name of the cookbook, or returns it.
Parameters
- name<String>
-
The curent cookbook name.
Returns
- name<String>
-
Returns the current cookbook name.
217 218 219 220 221 222 223 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 217 def name(arg = nil) set_or_return( :name, arg, :kind_of => [ String ] ) end |
#provides(cookbook, *version_args) ⇒ Object
Adds a recipe, definition, or resource provided by this cookbook.
Recipes are specified as normal Definitions are followed by (), and can include :params for prototyping Resources are the stringified version (service)
Parameters
- recipe, definition, resource<String>
-
The thing we provide
- version<String>
-
A version constraint of the form “OP VERSION”,
where OP is one of < <= = > >= ~> and VERSION has the form x.y.z or x.y.
Returns
- versions<Array>
-
Returns the list of versions for the platform
329 330 331 332 333 334 335 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 329 def provides(cookbook, *version_args) version = version_args.first @providing[cookbook] = Solve::Constraint.new(version).to_s @providing[cookbook] rescue Solve::Errors::InvalidConstraintFormat => ex raise InvalidVersionConstraint, ex.to_s end |
#recipe(name, description) ⇒ Object
Adds a description for a recipe.
Parameters
- recipe<String>
-
The recipe
- description<String>
-
The description of the recipe
Returns
- description<String>
-
Returns the current description
362 363 364 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 362 def recipe(name, description) @recipes[name] = description end |
#recommends(cookbook, *version_args) ⇒ Object
Adds a recommendation for another cookbook, with version checking strings.
Parameters
- cookbook<String>
-
The cookbook
- version<String>
-
A version constraint of the form “OP VERSION”,
where OP is one of < <= = > >= ~> and VERSION has the form x.y.z or x.y.
Returns
- versions<Array>
-
Returns the list of versions for the platform
271 272 273 274 275 276 277 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 271 def recommends(cookbook, *version_args) version = version_args.first @recommendations[cookbook] = Solve::Constraint.new(version).to_s @recommendations[cookbook] rescue Solve::Errors::InvalidConstraintFormat => ex raise InvalidVersionConstraint, ex.to_s end |
#replaces(cookbook, *version_args) ⇒ Object
Adds a cookbook that is replaced by this one, with version checking strings.
Parameters
- cookbook<String>
-
The cookbook we replace
- version<String>
-
A version constraint of the form “OP VERSION”,
where OP is one of < <= = > >= ~> and VERSION has the form x.y.z or x.y.
Returns
- versions<Array>
-
Returns the list of versions for the platform
346 347 348 349 350 351 352 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 346 def replaces(cookbook, *version_args) version = version_args.first @replacing[cookbook] = Solve::Constraint.new(version).to_s @replacing[cookbook] rescue Solve::Errors::InvalidConstraintFormat => ex raise InvalidVersionConstraint, ex.to_s end |
#suggests(cookbook, *version_args) ⇒ Object
Adds a suggestion for another cookbook, with version checking strings.
Parameters
- cookbook<String>
-
The cookbook
- version<String>
-
A version constraint of the form “OP VERSION”,
where OP is one of < <= = > >= ~> and VERSION has the formx.y.z or x.y.
Returns
- versions<Array>
-
Returns the list of versions for the platform
289 290 291 292 293 294 295 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 289 def suggests(cookbook, *version_args) version = version_args.first @suggestions[cookbook] = Solve::Constraint.new(version).to_s @suggestions[cookbook] rescue Solve::Errors::InvalidConstraintFormat => ex raise InvalidVersionConstraint, ex.to_s end |
#supports(platform, *version_args) ⇒ Object
Adds a supported platform, with version checking strings.
Parameters
- platform<String>,<Symbol>
-
The platform (like :ubuntu or :mac_os_x)
- version<String>
-
A version constraint of the form “OP VERSION”,
where OP is one of < <= = > >= ~> and VERSION has the form x.y.z or x.y.
Returns
- versions<Array>
-
Returns the list of versions for the platform
235 236 237 238 239 240 241 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 235 def supports(platform, *version_args) version = version_args.first @platforms[platform] = Solve::Constraint.new(version).to_s @platforms[platform] rescue Solve::Errors::InvalidConstraintFormat => ex raise InvalidVersionConstraint, ex.to_s end |
#to_hash ⇒ Object
420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 420 def to_hash { NAME => self.name, DESCRIPTION => self.description, LONG_DESCRIPTION => self.long_description, MAINTAINER => self.maintainer, MAINTAINER_EMAIL => self.maintainer_email, LICENSE => self.license, PLATFORMS => self.platforms, DEPENDENCIES => self.dependencies, RECOMMENDATIONS => self.recommendations, SUGGESTIONS => self.suggestions, CONFLICTING => self.conflicting, PROVIDING => self.providing, REPLACING => self.replacing, ATTRIBUTES => self.attributes, GROUPINGS => self.groupings, RECIPES => self.recipes, VERSION => self.version } end |