class KnifeUploader::UploaderRunListCommand

Public Instance Methods

filtered_chef_nodes() click to toggle source
# File lib/chef/knife/uploader_run_list.rb, line 22
def filtered_chef_nodes
  ridley.node.all.sort_by {|node| node.name }.to_enum
                 .lazy_select {|node| node.name =~ @pattern }
                 .lazy_map {|node| ridley.node.find(node.name) }
                 .lazy_select {|node| node.chef_environment == @env_name }
end
set_run_lists() click to toggle source
# File lib/chef/knife/uploader_run_list.rb, line 29
def set_run_lists
  run_lists_file_path = File::join(get_chef_repo_path, 'run_lists', "#{@env_name}.json")
  target_run_lists = File.open(run_lists_file_path) {|f| JSON.load(f) }

  filtered_chef_nodes.each do |node|

    debug("Comparing run lists for node #{node.name}")
    old_run_list = node.run_list
    new_run_list = []

    # Concatenate all matching patterns. This allows to specify some common parts of run lists
    # only once.
    target_run_lists.each do |pattern, run_list|
      if node.name =~ /\A#{pattern}\Z/
        new_run_list += run_list
      end
    end
    debug("New run list for node #{node.name}: #{new_run_list}")

    next if old_run_list == new_run_list

    unless new_run_list
      ui.warn("No new run list defined for node #{node.name}, skipping")
      next
    end

    ui.info("\n" + (@dry_run ? 'Would modify' : 'Modifying') +
            " the run list for node #{node.name}:\n" +
            diff_color(old_run_list.join("\n") + "\n",
                       new_run_list.join("\n") + "\n"))

    unless @dry_run
      node.run_list = new_run_list
      node.save
    end
  end

  ui.info("Finished #{@dry_run ? 'showing differences for' : 'setting'} run lists in " +
          "environment #{@env_name}")
end
validate_arguments() click to toggle source
# File lib/chef/knife/uploader_run_list.rb, line 70
def validate_arguments
  if name_args.size != 1
    ui.fatal("Exactly one argument expected: environment")
    show_usage
    exit(1)
  end

  @env_name = name_args[0]
end