class Spiceweasel::Cookbooks
manages parsing of Cookbooks
Attributes
cookbook_list[R]
create[R]
delete[R]
Public Class Methods
new(cookbooks = [], other_cookbook_list = {})
click to toggle source
# File lib/spiceweasel/cookbooks.rb, line 29 def initialize(cookbooks = [], other_cookbook_list = {}) # rubocop:disable CyclomaticComplexity @create = [] @delete = [] @cookbook_list = other_cookbook_list @dependencies = [] return unless cookbooks # validate each of the cookbooks specified in the manifest @loader = Chef::CookbookLoader.new(Spiceweasel::Config[:cookbook_dir]) begin @loader.load_cookbooks rescue SyntaxError => e STDERR.puts 'ERROR: invalid cookbook metadata.' STDERR.puts e.message exit(-1) end Spiceweasel::Log.debug("cookbooks: #{cookbooks}") validate_cookbooks(cookbooks) end
Public Instance Methods
get_knife_commands(name, options, version)
click to toggle source
# File lib/spiceweasel/cookbooks.rb, line 94 def get_knife_commands(name, options, version) if Spiceweasel::Config[:siteinstall] # use knife cookbook site install create_command("knife cookbook#{Spiceweasel::Config[:knife_options]} site install #{name} #{version} #{options}") else # use knife cookbook site download, untar and then remove the tarball create_command("knife cookbook#{Spiceweasel::Config[:knife_options]} site download #{name} #{version} --file cookbooks/#{name}.tgz #{options}") create_command("tar -C cookbooks/ -xf cookbooks/#{name}.tgz") create_command("rm -f cookbooks/#{name}.tgz") end end
member?(cookbook)
click to toggle source
# File lib/spiceweasel/cookbooks.rb, line 137 def member?(cookbook) cookbook_list.keys.include?(cookbook) end
validate_cookbooks(cookbooks)
click to toggle source
# File lib/spiceweasel/cookbooks.rb, line 51 def validate_cookbooks(cookbooks) c_names = [] cookbooks.each do |cookbook| name = cookbook.keys.first if cookbook[name] version = cookbook[name]['version'] options = cookbook[name]['options'] end Spiceweasel::Log.debug("cookbook: #{name} #{version} #{options}") validate_metadata_or_get_knife_commands_wrapper(name, options, version) if options unless c_names.empty? create_command("knife cookbook#{Spiceweasel::Config[:knife_options]} upload #{c_names.join(' ')}") c_names = [] end create_command("knife cookbook#{Spiceweasel::Config[:knife_options]} upload #{name} #{options}") else c_names.push(name) end delete_command("knife cookbook#{Spiceweasel::Config[:knife_options]} delete #{name} #{version} -a -y") @cookbook_list[name] = version # used for validation end unless c_names.empty? create_command("knife cookbook#{Spiceweasel::Config[:knife_options]} upload #{c_names.join(' ')}") end validate_dependencies unless Spiceweasel::Config[:novalidation] end
validate_dependencies()
click to toggle source
compare the list of cookbook deps with those specified
# File lib/spiceweasel/cookbooks.rb, line 127 def validate_dependencies Spiceweasel::Log.debug("cookbook validate_dependencies: '#{@dependencies}'") @dependencies.each do |dep| unless member?(dep) STDERR.puts "ERROR: Cookbook dependency '#{dep}' is missing from the list of cookbooks in the manifest." exit(-1) end end end
validate_metadata(cookbook, version)
click to toggle source
check the metadata for versions and gather deps
# File lib/spiceweasel/cookbooks.rb, line 105 def validate_metadata(cookbook, version) # check metadata.rb for requested version metadata = @loader.cookbooks_by_name[cookbook].metadata Spiceweasel::Log.debug("validate_metadata: #{cookbook} #{metadata.name} #{metadata.version}") # Should the cookbook directory match the name in the metadata? if metadata.name.empty? Spiceweasel::Log.warn("No cookbook name in the #{cookbook} metadata.rb.") elsif cookbook != metadata.name STDERR.puts "ERROR: Cookbook '#{cookbook}' does not match the name '#{metadata.name}' in #{cookbook}/metadata.rb." exit(-1) end if version && metadata.version != version STDERR.puts "ERROR: Invalid version '#{version}' of '#{cookbook}' requested, '#{metadata.version}' is already in the cookbooks directory." exit(-1) end metadata.dependencies.each do |dependency| Spiceweasel::Log.debug("cookbook #{cookbook} metadata dependency: #{dependency}") @dependencies.push(dependency[0]) end end
validate_metadata_or_get_knife_commands_wrapper(name, options, version)
click to toggle source
# File lib/spiceweasel/cookbooks.rb, line 81 def validate_metadata_or_get_knife_commands_wrapper(name, options, version) if File.directory?('cookbooks') if @loader.cookbooks_by_name[name] validate_metadata(name, version) unless Spiceweasel::Config[:novalidation] else get_knife_commands(name, options, version) end elsif !Spiceweasel::Config[:novalidation] STDERR.puts "ERROR: 'cookbooks' directory not found, unable to validate, download and load cookbooks" exit(-1) end end