Parent

Files

Class/Module Index [+]

Quicksearch

Chef::Knife::CookbookUpload

Public Instance Methods

cookbook_repo() click to toggle source
# File lib/chef/knife/cookbook_upload.rb, line 176
def cookbook_repo
  @cookbook_loader ||= begin
    Chef::Cookbook::FileVendor.on_create { |manifest| Chef::Cookbook::FileSystemFileVendor.new(manifest, config[:cookbook_path]) }
    Chef::CookbookLoader.new(config[:cookbook_path])
  end
end
cookbooks_to_upload() click to toggle source
# File lib/chef/knife/cookbook_upload.rb, line 153
def cookbooks_to_upload
  @cookbooks_to_upload ||=
    if config[:all]
      cookbook_repo.load_cookbooks
    else
      upload_set = {}
      @name_args.each do |cookbook_name|
        begin
          if ! upload_set.has_key?(cookbook_name)
            upload_set[cookbook_name] = cookbook_repo[cookbook_name]
            if config[:depends]
              upload_set[cookbook_name].metadata.dependencies.each { |dep, ver| @name_args << dep }
            end
          end
        rescue Exceptions::CookbookNotFoundInRepo => e
          ui.error("Could not find cookbook #{cookbook_name} in your cookbook path, skipping it")
          Log.debug(e)
        end
      end
      upload_set
    end
end
environment() click to toggle source
# File lib/chef/knife/cookbook_upload.rb, line 190
def environment
  @environment ||= config[:environment] ? Environment.load(config[:environment]) : nil
end
run() click to toggle source
# File lib/chef/knife/cookbook_upload.rb, line 70
def run
  # Sanity check before we load anything from the server
  unless config[:all]
    if @name_args.empty?
      show_usage
      ui.fatal("You must specify the --all flag or at least one cookbook name")
      exit 1
    end
  end

  config[:cookbook_path] ||= Chef::Config[:cookbook_path]

  if @name_args.empty? and ! config[:all]
    show_usage
    ui.fatal("You must specify the --all flag or at least one cookbook name")
    exit 1
  end

  assert_environment_valid!
  version_constraints_to_update = {}
  upload_failures = 0
  upload_ok = 0

  # Get a list of cookbooks and their versions from the server
  # to check for the existence of a cookbook's dependencies.
  @server_side_cookbooks = Chef::CookbookVersion.list_all_versions
  justify_width = @server_side_cookbooks.map {|name| name.size}.max.to_i + 2
  if config[:all]
    cookbook_repo.load_cookbooks
    cbs = []
    cookbook_repo.each do |cookbook_name, cookbook|
      cbs << cookbook
      cookbook.freeze_version if config[:freeze]
      version_constraints_to_update[cookbook_name] = cookbook.version
    end
    begin
      upload(cbs, justify_width)
    rescue Exceptions::CookbookFrozen
      ui.warn("Not updating version constraints for some cookbooks in the environment as the cookbook is frozen.")
    end
    ui.info("Uploaded all cookbooks.")
  else
    if @name_args.empty?
      show_usage
      ui.error("You must specify the --all flag or at least one cookbook name")
      exit 1
    end

    cookbooks_to_upload.each do |cookbook_name, cookbook|
      cookbook.freeze_version if config[:freeze]
      begin
        upload([cookbook], justify_width)
        upload_ok += 1
        version_constraints_to_update[cookbook_name] = cookbook.version
      rescue Exceptions::CookbookNotFoundInRepo => e
        upload_failures += 1
        ui.error("Could not find cookbook #{cookbook_name} in your cookbook path, skipping it")
        Log.debug(e)
        upload_failures += 1
      rescue Exceptions::CookbookFrozen
        ui.warn("Not updating version constraints for #{cookbook_name} in the environment as the cookbook is frozen.")
        upload_failures += 1
      end
    end

    upload_failures += @name_args.length - @cookbooks_to_upload.length

    if upload_failures == 0
      ui.info "Uploaded #{upload_ok} cookbook#{upload_ok > 1 ? "s" : ""}."
    elsif upload_failures > 0 && upload_ok > 0
      ui.warn "Uploaded #{upload_ok} cookbook#{upload_ok > 1 ? "s" : ""} ok but #{upload_failures} " +
        "cookbook#{upload_failures > 1 ? "s" : ""} upload failed."
    elsif upload_failures > 0 && upload_ok == 0
      ui.error "Failed to upload #{upload_failures} cookbook#{upload_failures > 1 ? "s" : ""}."
      exit 1
    end
  end

  unless version_constraints_to_update.empty?
    update_version_constraints(version_constraints_to_update) if config[:environment]
  end
end
update_version_constraints(new_version_constraints) click to toggle source
# File lib/chef/knife/cookbook_upload.rb, line 183
def update_version_constraints(new_version_constraints)
  new_version_constraints.each do |cookbook_name, version|
    environment.cookbook_versions[cookbook_name] = "= #{version}"
  end
  environment.save
end
warn_about_cookbook_shadowing() click to toggle source
# File lib/chef/knife/cookbook_upload.rb, line 194
def warn_about_cookbook_shadowing
  unless cookbook_repo.merged_cookbooks.empty?
    ui.warn "* " * 40
    ui.warn(The cookbooks: #{cookbook_repo.merged_cookbooks.join(', ')} exist in multiple places in your cookbook_path.A composite version of these cookbooks has been compiled for uploading.#{ui.color('IMPORTANT:', :red, :bold)} In a future version of Chef, this behavior will be removed and you will no longerbe able to have the same version of a cookbook in multiple places in your cookbook_path.)
    ui.warn "The affected cookbooks are located:"
    ui.output ui.format_for_display(cookbook_repo.merged_cookbook_paths)
    ui.warn "* " * 40
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.