class Chef::Knife::PinningsSet
This class implements knife pinnings set <environment> [cookbook version]
Public Instance Methods
run()
click to toggle source
# File lib/chef/knife/pinnings_set.rb, line 23 def run case name_args.length when 1 # Just environment was specified so get name/version from metadata @metadata = Chef::Cookbook::Metadata.new @metadata.from_file(File.join(Dir.pwd, 'metadata.rb')) @cookbook_name = @metadata.name @cookbook_version = @metadata.version when 3 # Environment, Cookbook and Version explicitly specified so use those @cookbook_name = name_args[1] @cookbook_version = name_args[2] else ui.fatal('You must specify ENVIRONMENT (to take COOKBOOK/VERSION from matadata.rb) or ENVIRONMENT COOKBOOK VERSION') exit 255 end @environment_name = name_args[0] @environment = Environment.load(@environment_name) cookbook_data = rest.get_rest("/cookbooks/#{@cookbook_name}").to_hash cookbook_version_exists = false cookbook_data[@cookbook_name]['versions'].each do |item| cookbook_version_exists = true if item['version'] == @cookbook_version end unless cookbook_version_exists ui.fatal("Cookbook #{@cookbook_name} version #{@cookbook_version} is not on Chef server. Cannot pin in #{@environment_name}") exit 127 end if @environment.cookbook_versions[@cookbook_name] ui.info("Existing pinning for #{@cookbook_name} in #{@environment_name } #{@environment.cookbook_versions[@cookbook_name]}") end ui.info("Pinning #{@cookbook_name} to version #{@cookbook_version} in #{@environment_name}") @environment.cookbook_versions[@cookbook_name] = "= #{@cookbook_version}" @environment.save end