Class: Ridley::Chef::Cookbook::Metadata
- Inherits:
-
Object
- Object
- Ridley::Chef::Cookbook::Metadata
- Includes:
- Chozo::Mixin::FromFile, Chozo::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
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>
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 112 113 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 86 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.
71 72 73 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 71 def attributes @attributes end |
#conflicting ⇒ Object (readonly)
Returns the value of attribute conflicting.
68 69 70 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 68 def conflicting @conflicting end |
#cookbook ⇒ Object (readonly)
Returns the value of attribute cookbook.
63 64 65 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 63 def cookbook @cookbook end |
#dependencies ⇒ Object (readonly)
Returns the value of attribute dependencies.
65 66 67 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 65 def dependencies @dependencies end |
#groupings ⇒ Object (readonly)
Returns the value of attribute groupings.
72 73 74 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 72 def groupings @groupings end |
#platforms ⇒ Object (readonly)
Returns the value of attribute platforms.
64 65 66 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 64 def platforms @platforms end |
#providing ⇒ Object (readonly)
Returns the value of attribute providing.
69 70 71 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 69 def providing @providing end |
#recipes ⇒ Object (readonly)
Returns the value of attribute recipes.
73 74 75 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 73 def recipes @recipes end |
#recommendations ⇒ Object (readonly)
Returns the value of attribute recommendations.
66 67 68 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 66 def recommendations @recommendations end |
#replacing ⇒ Object (readonly)
Returns the value of attribute replacing.
70 71 72 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 70 def replacing @replacing end |
#suggestions ⇒ Object (readonly)
Returns the value of attribute suggestions.
67 68 69 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 67 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
204 205 206 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 204 def version @version end |
Class Method Details
.from_hash(hash) ⇒ Object
26 27 28 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 26 def from_hash(hash) new.from_hash(hash) end |
.from_json(json) ⇒ Object
30 31 32 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 30 def from_json(json) new.from_json(json) end |
Instance Method Details
#==(other) ⇒ Object
115 116 117 118 119 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 115 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
387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 387 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
309 310 311 312 313 314 315 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 309 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
255 256 257 258 259 260 261 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 255 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
173 174 175 176 177 178 179 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 173 def description(arg = nil) set_or_return( :description, arg, :kind_of => [ String ] ) end |
#from_hash(o) ⇒ Object
444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 444 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
465 466 467 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 465 def from_json(json) from_hash JSON.parse(json) end |
#grouping(name, options) ⇒ Object
410 411 412 413 414 415 416 417 418 419 420 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 410 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
158 159 160 161 162 163 164 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 158 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
188 189 190 191 192 193 194 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 188 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.
128 129 130 131 132 133 134 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 128 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.
143 144 145 146 147 148 149 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 143 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.
219 220 221 222 223 224 225 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 219 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
331 332 333 334 335 336 337 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 331 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
364 365 366 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 364 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
273 274 275 276 277 278 279 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 273 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
348 349 350 351 352 353 354 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 348 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
291 292 293 294 295 296 297 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 291 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
237 238 239 240 241 242 243 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 237 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
422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 422 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 |