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
- SOURCE_URL =
'source_url'.freeze
- ISSUES_URL =
'issues_url'.freeze
- COMPILED_FILE_NAME =
"metadata.json".freeze
- RAW_FILE_NAME =
"metadata.rb".freeze
- COMPARISON_FIELDS =
[ :name, :description, :long_description, :maintainer, :maintainer_email, :license, :platforms, :dependencies, :recommendations, :suggestions, :conflicting, :providing, :replacing, :attributes, :groupings, :recipes, :version, :source_url, :issues_url ]
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.
-
#issues_url(arg = nil) ⇒ Object
Sets the cookbook’s issues URL, or returns it.
-
#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.
-
#source_url(arg = nil) ⇒ Object
Sets the cookbook’s source URL, or returns it.
-
#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
- #to_json ⇒ String
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>
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 90 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 = Semverse::Version.new("0.0.0") @source_url = '' @issues_url = '' 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.
75 76 77 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 75 def attributes @attributes end |
#conflicting ⇒ Object (readonly)
Returns the value of attribute conflicting.
72 73 74 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 72 def conflicting @conflicting end |
#cookbook ⇒ Object (readonly)
Returns the value of attribute cookbook.
67 68 69 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 67 def cookbook @cookbook end |
#dependencies ⇒ Object (readonly)
Returns the value of attribute dependencies.
69 70 71 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 69 def dependencies @dependencies end |
#groupings ⇒ Object (readonly)
Returns the value of attribute groupings.
76 77 78 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 76 def groupings @groupings end |
#platforms ⇒ Object (readonly)
Returns the value of attribute platforms.
68 69 70 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 68 def platforms @platforms end |
#providing ⇒ Object (readonly)
Returns the value of attribute providing.
73 74 75 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 73 def providing @providing end |
#recipes ⇒ Object (readonly)
Returns the value of attribute recipes.
77 78 79 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 77 def recipes @recipes end |
#recommendations ⇒ Object (readonly)
Returns the value of attribute recommendations.
70 71 72 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 70 def recommendations @recommendations end |
#replacing ⇒ Object (readonly)
Returns the value of attribute replacing.
74 75 76 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 74 def replacing @replacing end |
#suggestions ⇒ Object (readonly)
Returns the value of attribute suggestions.
71 72 73 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 71 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
211 212 213 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 211 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
122 123 124 125 126 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 122 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
380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 380 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", "boolean", "numeric" ], :default => "string" }, :required => { :equal_to => [ "required", "recommended", "optional", true, false ], :default => "optional" }, :recipes => { :kind_of => [ Array ], :default => [] }, :default => { :kind_of => [ String, Array, Hash, Symbol, Numeric, TrueClass, FalseClass ] }, :source_url => { :kind_of => String }, :issues_url => { :kind_of => String } } ) [:required] = remap_required_attribute([:required]) unless [:required].nil? validate_choice_array() 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
308 309 310 311 312 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 308 def conflicts(cookbook, *version_args) version = version_args.first @conflicting[cookbook] = Semverse::Constraint.new(version).to_s @conflicting[cookbook] 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
260 261 262 263 264 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 260 def depends(cookbook, *version_args) version = version_args.first @dependencies[cookbook] = Semverse::Constraint.new(version).to_s @dependencies[cookbook] 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
180 181 182 183 184 185 186 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 180 def description(arg = nil) set_or_return( :description, arg, :kind_of => [ String ] ) end |
#from_hash(o) ⇒ Object
449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 449 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 = handle_deprecated_constraints(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) @source_url = o[SOURCE_URL] if o.has_key?(SOURCE_URL) @issues_url = o[ISSUES_URL] if o.has_key?(ISSUES_URL) self end |
#from_json(json) ⇒ Object
472 473 474 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 472 def from_json(json) from_hash JSON.parse(json) end |
#grouping(name, options) ⇒ Object
405 406 407 408 409 410 411 412 413 414 415 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 405 def grouping(name, ) validate( , { :title => { :kind_of => String }, :description => { :kind_of => String } } ) @groupings[name] = @groupings[name] end |
#issues_url(arg = nil) ⇒ Object
Sets the cookbook’s issues URL, or returns it.
Parameters
- issues_url<String>
-
The issues URL
Returns
- issues_url<String>
-
Returns the current issues URL.
498 499 500 501 502 503 504 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 498 def issues_url(arg = nil) set_or_return( :issues_url, arg, :kind_of => [ String ] ) 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
165 166 167 168 169 170 171 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 165 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
195 196 197 198 199 200 201 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 195 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.
135 136 137 138 139 140 141 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 135 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.
150 151 152 153 154 155 156 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 150 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.
226 227 228 229 230 231 232 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 226 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
328 329 330 331 332 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 328 def provides(cookbook, *version_args) version = version_args.first @providing[cookbook] = Semverse::Constraint.new(version).to_s @providing[cookbook] 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
357 358 359 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 357 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
276 277 278 279 280 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 276 def recommends(cookbook, *version_args) version = version_args.first @recommendations[cookbook] = Semverse::Constraint.new(version).to_s @recommendations[cookbook] 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
343 344 345 346 347 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 343 def replaces(cookbook, *version_args) version = version_args.first @replacing[cookbook] = Semverse::Constraint.new(version).to_s @replacing[cookbook] end |
#source_url(arg = nil) ⇒ Object
Sets the cookbook’s source URL, or returns it.
Parameters
- maintainer<String>
-
The source URL
Returns
- source_url<String>
-
Returns the current source URL.
483 484 485 486 487 488 489 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 483 def source_url(arg = nil) set_or_return( :source_url, arg, :kind_of => [ String ] ) 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
292 293 294 295 296 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 292 def suggests(cookbook, *version_args) version = version_args.first @suggestions[cookbook] = Semverse::Constraint.new(version).to_s @suggestions[cookbook] 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
244 245 246 247 248 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 244 def supports(platform, *version_args) version = version_args.first @platforms[platform] = Semverse::Constraint.new(version).to_s @platforms[platform] end |
#to_hash ⇒ Object
417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 417 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, SOURCE_URL => self.source_url, ISSUES_URL => self.issues_url } end |
#to_json ⇒ String
442 443 444 445 446 447 |
# File 'lib/ridley/chef/cookbook/metadata.rb', line 442 def to_json # Switched from fast to pretty generate here # to match `knife cookbook metadata from file` format # See https://github.com/RiotGames/ridley/pull/287 JSON.pretty_generate(to_hash) end |