Class: Chef::Cookbook::Metadata
- Inherits:
-
Object
- Object
- Chef::Cookbook::Metadata
- Includes:
- Mixin::FromFile, Mixin::ParamsValidate
- Defined in:
- lib/chef/cookbook/metadata.rb
Overview
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
- PRIVACY =
"privacy".freeze
- CHEF_VERSIONS =
"chef_versions".freeze
- OHAI_VERSIONS =
"ohai_versions".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, :privacy, :chef_versions, :ohai_versions ]
- VERSION_CONSTRAINTS =
{ :depends => DEPENDENCIES, :recommends => RECOMMENDATIONS, :suggests => SUGGESTIONS, :conflicts => CONFLICTING, :provides => PROVIDING, :replaces => REPLACING, :chef_version => CHEF_VERSIONS, :ohai_version => OHAI_VERSIONS }
Instance Attribute Summary collapse
-
#attributes ⇒ Object
readonly
Returns the value of attribute attributes.
-
#chef_versions ⇒ Array<Gem::Dependency>
readonly
Array of supported Chef versions.
-
#conflicting ⇒ Object
readonly
Returns the value of attribute conflicting.
-
#dependencies ⇒ Object
readonly
Returns the value of attribute dependencies.
-
#groupings ⇒ Object
readonly
Returns the value of attribute groupings.
-
#ohai_versions ⇒ Array<Gem::Dependency>
readonly
Array of supported Ohai versions.
-
#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 that a user needs to configure for this cookbook.
-
#chef_version(*version_args) ⇒ Array<Gem::Dependency>
Metadata DSL to set a valid chef_version.
-
#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.
-
#errors ⇒ Object
A list of validation errors for this metadata object.
- #from_hash(o) ⇒ Object
- #from_json(string) ⇒ Object
-
#gem_requirements_from_array(what, array) ⇒ Array<Gem::Dependency>
Convert an Array of Gem::Dependency objects (chef_version/ohai_version) to a hash.
-
#gem_requirements_to_array(*deps) ⇒ Array<Array<String>]
Convert an Array of Gem::Dependency objects (chef_version/ohai_version) to an Array.
- #grouping(name, options) ⇒ Object
-
#initialize ⇒ 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.
-
#ohai_version(*version_args) ⇒ Array<Gem::Dependency>
Metadata DSL to set a valid ohai_version.
-
#privacy(arg = nil) ⇒ Object
Sets the cookbook’s privacy flag, 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.
-
#recipes_from_cookbook_version(cookbook) ⇒ Object
Sets the cookbook’s recipes to the list of recipes in the given
cookbook. -
#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(*a) ⇒ Object
-
#valid? ⇒ Boolean
Whether this metadata is valid.
-
#validate_chef_version! ⇒ Object
Validates that the Chef::VERSION of the running chef-client matches one of the configured chef_version statements in this cookbooks metadata.
-
#validate_ohai_version! ⇒ Object
Validates that the Ohai::VERSION of the running chef-client matches one of the configured ohai_version statements in this cookbooks metadata.
Methods included from Mixin::FromFile
Methods included from Mixin::ParamsValidate
#lazy, #set_or_return, #validate
Constructor Details
#initialize ⇒ 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>
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/chef/cookbook/metadata.rb', line 107 def initialize @name = nil @description = "" @long_description = "" @license = "All rights reserved" @maintainer = nil @maintainer_email = nil @platforms = Mash.new @dependencies = Mash.new @recommendations = Mash.new @suggestions = Mash.new @conflicting = Mash.new @providing = Mash.new @replacing = Mash.new @attributes = Mash.new @groupings = Mash.new @recipes = Mash.new @version = Version.new("0.0.0") @source_url = "" @issues_url = "" @privacy = false @chef_versions = [] @ohai_versions = [] @errors = [] end |
Instance Attribute Details
#attributes ⇒ Object (readonly)
Returns the value of attribute attributes.
87 88 89 |
# File 'lib/chef/cookbook/metadata.rb', line 87 def attributes @attributes end |
#chef_versions ⇒ Array<Gem::Dependency> (readonly)
Returns Array of supported Chef versions.
93 94 95 |
# File 'lib/chef/cookbook/metadata.rb', line 93 def chef_versions @chef_versions end |
#conflicting ⇒ Object (readonly)
Returns the value of attribute conflicting.
84 85 86 |
# File 'lib/chef/cookbook/metadata.rb', line 84 def conflicting @conflicting end |
#dependencies ⇒ Object (readonly)
Returns the value of attribute dependencies.
81 82 83 |
# File 'lib/chef/cookbook/metadata.rb', line 81 def dependencies @dependencies end |
#groupings ⇒ Object (readonly)
Returns the value of attribute groupings.
88 89 90 |
# File 'lib/chef/cookbook/metadata.rb', line 88 def groupings @groupings end |
#ohai_versions ⇒ Array<Gem::Dependency> (readonly)
Returns Array of supported Ohai versions.
95 96 97 |
# File 'lib/chef/cookbook/metadata.rb', line 95 def ohai_versions @ohai_versions end |
#platforms ⇒ Object (readonly)
Returns the value of attribute platforms.
80 81 82 |
# File 'lib/chef/cookbook/metadata.rb', line 80 def platforms @platforms end |
#providing ⇒ Object (readonly)
Returns the value of attribute providing.
85 86 87 |
# File 'lib/chef/cookbook/metadata.rb', line 85 def providing @providing end |
#recipes ⇒ Object (readonly)
Returns the value of attribute recipes.
89 90 91 |
# File 'lib/chef/cookbook/metadata.rb', line 89 def recipes @recipes end |
#recommendations ⇒ Object (readonly)
Returns the value of attribute recommendations.
82 83 84 |
# File 'lib/chef/cookbook/metadata.rb', line 82 def recommendations @recommendations end |
#replacing ⇒ Object (readonly)
Returns the value of attribute replacing.
86 87 88 |
# File 'lib/chef/cookbook/metadata.rb', line 86 def replacing @replacing end |
#suggestions ⇒ Object (readonly)
Returns the value of attribute suggestions.
83 84 85 |
# File 'lib/chef/cookbook/metadata.rb', line 83 def suggestions @suggestions end |
#version(arg = nil) ⇒ Object (readonly)
Sets the current cookbook version, or returns it. Can be two or three digits, separated by dots. ie: ‘2.1’, ‘1.5.4’ or ‘0.9’.
Parameters
- version<String>
-
The current version, as a string
Returns
- version<String>
-
Returns the current version
252 253 254 |
# File 'lib/chef/cookbook/metadata.rb', line 252 def version @version end |
Class Method Details
.from_hash(o) ⇒ Object
583 584 585 586 587 |
# File 'lib/chef/cookbook/metadata.rb', line 583 def self.from_hash(o) cm = self.new() cm.from_hash(o) cm end |
.from_json(string) ⇒ Object
615 616 617 618 |
# File 'lib/chef/cookbook/metadata.rb', line 615 def self.from_json(string) o = Chef::JSONCompat.from_json(string) self.from_hash(o) end |
.validate_json(json_str) ⇒ Object
620 621 622 623 624 625 626 627 628 629 630 631 632 633 |
# File 'lib/chef/cookbook/metadata.rb', line 620 def self.validate_json(json_str) o = Chef::JSONCompat.from_json(json_str) = new() VERSION_CONSTRAINTS.each do |dependency_type, hash_key| if dependency_group = o[hash_key] dependency_group.each do |cb_name, constraints| if .respond_to?(method_name) .public_send(method_name, cb_name, *Array(constraints)) end end end end true end |
Instance Method Details
#==(other) ⇒ Object
137 138 139 140 141 |
# File 'lib/chef/cookbook/metadata.rb', line 137 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 that 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
480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 |
# File 'lib/chef/cookbook/metadata.rb', line 480 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 }, :privacy => { :kind_of => [ TrueClass, FalseClass ] }, }, ) [:required] = remap_required_attribute([:required]) unless [:required].nil? validate_choice_array() validate_calculated_default_rule() validate_choice_default_rule() @attributes[name] = @attributes[name] end |
#chef_version(*version_args) ⇒ Array<Gem::Dependency>
Metadata DSL to set a valid chef_version. May be declared multiple times with the result being ‘OR’d such that if any statements match, the version is considered supported. Uses Gem::Requirement for its implementation.
407 408 409 410 |
# File 'lib/chef/cookbook/metadata.rb', line 407 def chef_version(*version_args) @chef_versions << Gem::Dependency.new("chef", *version_args) unless version_args.empty? @chef_versions 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
357 358 359 360 361 362 |
# File 'lib/chef/cookbook/metadata.rb', line 357 def conflicts(cookbook, *version_args) version = new_args_format(:conflicts, cookbook, version_args) constraint = validate_version_constraint(:conflicts, cookbook, version) @conflicting[cookbook] = constraint.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
302 303 304 305 306 307 308 309 310 311 |
# File 'lib/chef/cookbook/metadata.rb', line 302 def depends(cookbook, *version_args) if cookbook == name Chef::Log.warn "Ignoring self-dependency in cookbook #{name}, please remove it (in the future this will be fatal)." else version = new_args_format(:depends, cookbook, version_args) constraint = validate_version_constraint(:depends, cookbook, version) @dependencies[cookbook] = constraint.to_s end @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
221 222 223 224 225 226 227 |
# File 'lib/chef/cookbook/metadata.rb', line 221 def description(arg = nil) set_or_return( :description, arg, :kind_of => [ String ], ) end |
#errors ⇒ Object
A list of validation errors for this metadata object. See #valid? for comments about the validation criteria.
If there are any validation errors, one or more error strings will be returned. Otherwise an empty array is returned.
Returns
- error messages<Array>
-
Whether this metadata object is valid
164 165 166 167 |
# File 'lib/chef/cookbook/metadata.rb', line 164 def errors run_validation @errors end |
#from_hash(o) ⇒ Object
589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 |
# File 'lib/chef/cookbook/metadata.rb', line 589 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) @source_url = o[SOURCE_URL] if o.has_key?(SOURCE_URL) @issues_url = o[ISSUES_URL] if o.has_key?(ISSUES_URL) @privacy = o[PRIVACY] if o.has_key?(PRIVACY) @chef_versions = gem_requirements_from_array("chef", o[CHEF_VERSIONS]) if o.has_key?(CHEF_VERSIONS) @ohai_versions = gem_requirements_from_array("ohai", o[OHAI_VERSIONS]) if o.has_key?(OHAI_VERSIONS) self end |
#from_json(string) ⇒ Object
635 636 637 638 |
# File 'lib/chef/cookbook/metadata.rb', line 635 def from_json(string) o = Chef::JSONCompat.from_json(string) from_hash(o) end |
#gem_requirements_from_array(what, array) ⇒ Array<Gem::Dependency>
Convert an Array of Gem::Dependency objects (chef_version/ohai_version) to a hash.
This is the inverse of #gem_requirements_to_array
546 547 548 549 550 |
# File 'lib/chef/cookbook/metadata.rb', line 546 def gem_requirements_from_array(what, array) array.map do |dep| Gem::Dependency.new(what, *dep) end end |
#gem_requirements_to_array(*deps) ⇒ Array<Array<String>]
Convert an Array of Gem::Dependency objects (chef_version/ohai_version) to an Array.
Gem::Dependencey#to_s is not useful, and there is no #to_json defined on it or its component objets, so we have to write our own rendering method.
- Gem::Dependency.new(“>= 12.5”), Gem::Dependency.new(“>= 11.18.0”, “< 12.0”)
-
results in:
- [ “>= 12.5” ], [ “>= 11.18.0”, “< 12.0”
-
]
531 532 533 534 535 536 537 |
# File 'lib/chef/cookbook/metadata.rb', line 531 def gem_requirements_to_array(*deps) deps.map do |dep| dep.requirement.requirements.map do |op, version| "#{op} #{version}" end.sort end end |
#grouping(name, options) ⇒ Object
506 507 508 509 510 511 512 513 514 515 516 |
# File 'lib/chef/cookbook/metadata.rb', line 506 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.
662 663 664 665 666 667 668 |
# File 'lib/chef/cookbook/metadata.rb', line 662 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
206 207 208 209 210 211 212 |
# File 'lib/chef/cookbook/metadata.rb', line 206 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
236 237 238 239 240 241 242 |
# File 'lib/chef/cookbook/metadata.rb', line 236 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.
176 177 178 179 180 181 182 |
# File 'lib/chef/cookbook/metadata.rb', line 176 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.
191 192 193 194 195 196 197 |
# File 'lib/chef/cookbook/metadata.rb', line 191 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 current cookbook name.
Returns
- name<String>
-
Returns the current cookbook name.
267 268 269 270 271 272 273 |
# File 'lib/chef/cookbook/metadata.rb', line 267 def name(arg = nil) set_or_return( :name, arg, :kind_of => [ String ], ) end |
#ohai_version(*version_args) ⇒ Array<Gem::Dependency>
Metadata DSL to set a valid ohai_version. May be declared multiple times with the result being ‘OR’d such that if any statements match, the version is considered supported. Uses Gem::Requirement for its implementation.
418 419 420 421 |
# File 'lib/chef/cookbook/metadata.rb', line 418 def ohai_version(*version_args) @ohai_versions << Gem::Dependency.new("ohai", *version_args) unless version_args.empty? @ohai_versions end |
#privacy(arg = nil) ⇒ Object
Sets the cookbook’s privacy flag, or returns it.
Parameters
- privacy<TrueClass,FalseClass>
-
Whether this cookbook is private or not
Returns
- privacy<TrueClass,FalseClass>
-
Whether this cookbook is private or not
679 680 681 682 683 684 685 |
# File 'lib/chef/cookbook/metadata.rb', line 679 def privacy(arg = nil) set_or_return( :privacy, arg, :kind_of => [ TrueClass, FalseClass ], ) 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
378 379 380 381 382 383 |
# File 'lib/chef/cookbook/metadata.rb', line 378 def provides(cookbook, *version_args) version = new_args_format(:provides, cookbook, version_args) constraint = validate_version_constraint(:provides, cookbook, version) @providing[cookbook] = constraint.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
431 432 433 |
# File 'lib/chef/cookbook/metadata.rb', line 431 def recipe(name, description) @recipes[name] = description end |
#recipes_from_cookbook_version(cookbook) ⇒ Object
Sets the cookbook’s recipes to the list of recipes in the given cookbook. Any recipe that already has a description (if set by the #recipe method) will not be updated.
Parameters
- cookbook<CookbookVersion>
-
CookbookVersion object representing the cookbook
- description<String>
-
The description of the recipe
Returns
- recipe_unqualified_names<Array>
-
An array of the recipe names given by the cookbook
445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 |
# File 'lib/chef/cookbook/metadata.rb', line 445 def recipes_from_cookbook_version(cookbook) cookbook.fully_qualified_recipe_names.map do |recipe_name| unqualified_name = if recipe_name =~ /::default$/ self.name.to_s else recipe_name end @recipes[unqualified_name] ||= "" provides(unqualified_name) unqualified_name end 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
323 324 325 326 327 328 |
# File 'lib/chef/cookbook/metadata.rb', line 323 def recommends(cookbook, *version_args) version = new_args_format(:recommends, cookbook, version_args) constraint = validate_version_constraint(:recommends, cookbook, version) @recommendations[cookbook] = constraint.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
394 395 396 397 398 399 |
# File 'lib/chef/cookbook/metadata.rb', line 394 def replaces(cookbook, *version_args) version = new_args_format(:replaces, cookbook, version_args) constraint = validate_version_constraint(:replaces, cookbook, version) @replacing[cookbook] = constraint.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.
647 648 649 650 651 652 653 |
# File 'lib/chef/cookbook/metadata.rb', line 647 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
340 341 342 343 344 345 |
# File 'lib/chef/cookbook/metadata.rb', line 340 def suggests(cookbook, *version_args) version = new_args_format(:suggests, cookbook, version_args) constraint = validate_version_constraint(:suggests, cookbook, version) @suggestions[cookbook] = constraint.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
285 286 287 288 289 290 |
# File 'lib/chef/cookbook/metadata.rb', line 285 def supports(platform, *version_args) version = new_args_format(:supports, platform, version_args) constraint = validate_version_constraint(:supports, platform, version) @platforms[platform] = constraint.to_s @platforms[platform] end |
#to_hash ⇒ Object
552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 |
# File 'lib/chef/cookbook/metadata.rb', line 552 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, PRIVACY => self.privacy, CHEF_VERSIONS => gem_requirements_to_array(*self.chef_versions), OHAI_VERSIONS => gem_requirements_to_array(*self.ohai_versions), } end |
#to_json(*a) ⇒ Object
579 580 581 |
# File 'lib/chef/cookbook/metadata.rb', line 579 def to_json(*a) Chef::JSONCompat.to_json(to_hash, *a) end |
#valid? ⇒ Boolean
Whether this metadata is valid. In order to be valid, all required fields must be set. Chef’s validation implementation checks the content of a given field when setting (and raises an error if the content does not meet the criteria), so the content of the fields is not considered when checking validity.
Returns
- valid<Boolean>
-
Whether this metadata object is valid
151 152 153 154 |
# File 'lib/chef/cookbook/metadata.rb', line 151 def valid? run_validation @errors.empty? end |
#validate_chef_version! ⇒ Object
Validates that the Chef::VERSION of the running chef-client matches one of the configured chef_version statements in this cookbooks metadata.
701 702 703 704 705 |
# File 'lib/chef/cookbook/metadata.rb', line 701 def validate_chef_version! unless gem_dep_matches?("chef", Gem::Version.new(Chef::VERSION), *chef_versions) raise Exceptions::CookbookChefVersionMismatch.new(Chef::VERSION, name, version, *chef_versions) end end |
#validate_ohai_version! ⇒ Object
Validates that the Ohai::VERSION of the running chef-client matches one of the configured ohai_version statements in this cookbooks metadata.
691 692 693 694 695 |
# File 'lib/chef/cookbook/metadata.rb', line 691 def validate_ohai_version! unless gem_dep_matches?("ohai", Gem::Version.new(Ohai::VERSION), *ohai_versions) raise Exceptions::CookbookOhaiVersionMismatch.new(Ohai::VERSION, name, version, *ohai_versions) end end |