Class: ChefCLI::Policyfile::DeliverySupermarketSource
- Inherits:
-
Object
- Object
- ChefCLI::Policyfile::DeliverySupermarketSource
- Extended by:
- Forwardable
- Defined in:
- lib/chef-cli/policyfile/delivery_supermarket_source.rb
Overview
Fetches cookbooks from a supermarket, similar to CommunityCookbookSource (which it delegates to), except that only the latest versions of any cookbook can be used.
This is intended to be used in an environment where the team wants to make only the newest version of a given cookbook available in order to force developers to integrate continuously at the component artifact (cookbook) level. To achieve this goal, two constraints must be imposed:
-
Cookbook changes pass through a Ci pipeline and are ultimately uploaded to a private supermarket (or equivalent, i.e. mini-mart) after final approval (which can be automated or not)
-
Version numbers for cookbooks that pass through the Ci pipeline always increase over time (so that largest version number == newest)
In the future, alternative approaches may be pursued to achieve the goal of continuously integrating at the cookbook level without imposing those constraints.
Instance Method Summary collapse
- #==(other) ⇒ Object
- #default_source_args ⇒ Object
- #desc ⇒ Object
-
#initialize(uri) {|_self| ... } ⇒ DeliverySupermarketSource
constructor
A new instance of DeliverySupermarketSource.
- #universe_graph ⇒ Object
Constructor Details
#initialize(uri) {|_self| ... } ⇒ DeliverySupermarketSource
Returns a new instance of DeliverySupermarketSource.
55 56 57 58 |
# File 'lib/chef-cli/policyfile/delivery_supermarket_source.rb', line 55 def initialize(uri) @community_source = CommunityCookbookSource.new(uri) yield self if block_given? end |
Instance Method Details
#==(other) ⇒ Object
60 61 62 |
# File 'lib/chef-cli/policyfile/delivery_supermarket_source.rb', line 60 def ==(other) other.is_a?(self.class) && other.uri == uri end |
#default_source_args ⇒ Object
64 65 66 |
# File 'lib/chef-cli/policyfile/delivery_supermarket_source.rb', line 64 def default_source_args [:delivery_supermarket, uri] end |
#desc ⇒ Object
79 80 81 |
# File 'lib/chef-cli/policyfile/delivery_supermarket_source.rb', line 79 def desc "delivery_supermarket(#{uri})" end |
#universe_graph ⇒ Object
68 69 70 71 72 73 74 75 76 77 |
# File 'lib/chef-cli/policyfile/delivery_supermarket_source.rb', line 68 def universe_graph @universe_graph ||= @community_source.universe_graph.inject({}) do |truncated, (cookbook_name, version_and_deps_list)| sorted_versions = version_and_deps_list.keys.sort_by do |version_string| Semverse::Version.new(version_string) end greatest_version = sorted_versions.last truncated[cookbook_name] = { greatest_version => version_and_deps_list[greatest_version] } truncated end end |