class Chef::Knife::NodeEditor

Attributes

config[R]
node[R]
ui[R]

Public Class Methods

new(node, ui, config) click to toggle source
# File lib/chef/knife/core/node_editor.rb, line 31
def initialize(node, ui, config)
  @node, @ui, @config = node, ui, config
end

Public Instance Methods

edit_node() click to toggle source
# File lib/chef/knife/core/node_editor.rb, line 35
def edit_node
  abort "You specified the --disable_editing option, nothing to edit" if config[:disable_editing]
  assert_editor_set!

  updated_node_data = @ui.edit_data(view)
  apply_updates(updated_node_data)
  @updated_node
end
updated?() click to toggle source
# File lib/chef/knife/core/node_editor.rb, line 44
def updated?
  pristine_copy = Chef::JSONCompat.from_json(Chef::JSONCompat.to_json(node), :create_additions => false)
  updated_copy  = Chef::JSONCompat.from_json(Chef::JSONCompat.to_json(@updated_node), :create_additions => false)
  unless pristine_copy == updated_copy
    updated_properties = %w{name normal chef_environment run_list default override automatic}.reject do |key|
       pristine_copy[key] == updated_copy[key]
    end
  end
  ( pristine_copy != updated_copy ) && updated_properties
end

Private Instance Methods

abort(message) click to toggle source
# File lib/chef/knife/core/node_editor.rb, line 96
def abort(message)
  ui.error(message)
  exit 1
end
apply_updates(updated_data) click to toggle source
# File lib/chef/knife/core/node_editor.rb, line 72
def apply_updates(updated_data)
  if node.name and node.name != updated_data["name"]
    ui.warn "Changing the name of a node results in a new node being created, #{node.name} will not be modified or removed."
    confirm = ui.confirm "Proceed with creation of new node"
  end

  @updated_node = Node.new.tap do |n|
    n.name( updated_data["name"] )
    n.chef_environment( updated_data["chef_environment"] )
    n.run_list( updated_data["run_list"])
    n.normal_attrs = updated_data["normal"]

    if config[:all_attributes]
      n.default_attrs   = updated_data["default"]
      n.override_attrs  = updated_data["override"]
      n.automatic_attrs = updated_data["automatic"]
    else
      n.default_attrs   = node.default_attrs
      n.override_attrs  = node.override_attrs
      n.automatic_attrs = node.automatic_attrs
    end
  end
end
assert_editor_set!() click to toggle source
# File lib/chef/knife/core/node_editor.rb, line 101
def assert_editor_set!
  unless config[:editor]
    abort "You must set your EDITOR environment variable or configure your editor via knife.rb"
  end
end
view() click to toggle source
# File lib/chef/knife/core/node_editor.rb, line 57
def view
  result = {}
  result["name"] = node.name
  result["chef_environment"] = node.chef_environment
  result["normal"] = node.normal_attrs
  result["run_list"] = node.run_list

  if config[:all_attributes]
    result["default"]   = node.default_attrs
    result["override"]  = node.override_attrs
    result["automatic"] = node.automatic_attrs
  end
  result
end