Class: Chef::Knife::NodeEditor
- Defined in:
- lib/chef/knife/core/node_editor.rb
Instance Attribute Summary collapse
-
#config ⇒ Object
readonly
Returns the value of attribute config.
-
#node ⇒ Object
readonly
Returns the value of attribute node.
-
#ui ⇒ Object
readonly
Returns the value of attribute ui.
Instance Method Summary collapse
- #apply_updates(updated_data) ⇒ Object
- #edit_data(text) ⇒ Object
- #edit_node ⇒ Object
-
#initialize(node, ui, config) ⇒ NodeEditor
constructor
A new instance of NodeEditor.
- #updated? ⇒ Boolean
- #view ⇒ Object
Constructor Details
#initialize(node, ui, config) ⇒ NodeEditor
Returns a new instance of NodeEditor.
30 31 32 |
# File 'lib/chef/knife/core/node_editor.rb', line 30 def initialize(node, ui, config) @node, @ui, @config = node, ui, config end |
Instance Attribute Details
#config ⇒ Object (readonly)
Returns the value of attribute config.
28 29 30 |
# File 'lib/chef/knife/core/node_editor.rb', line 28 def config @config end |
#node ⇒ Object (readonly)
Returns the value of attribute node.
26 27 28 |
# File 'lib/chef/knife/core/node_editor.rb', line 26 def node @node end |
#ui ⇒ Object (readonly)
Returns the value of attribute ui.
27 28 29 |
# File 'lib/chef/knife/core/node_editor.rb', line 27 def ui @ui end |
Instance Method Details
#apply_updates(updated_data) ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/chef/knife/core/node_editor.rb', line 63 def apply_updates(updated_data) # TODO: should warn/error/ask for confirmation when changing the # name, since this results in a new node, not an edited node. @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 |
#edit_data(text) ⇒ Object
58 59 60 61 |
# File 'lib/chef/knife/core/node_editor.rb', line 58 def edit_data(text) edited_data = tempfile_for(text) {|filename| system("#{config[:editor]} #{filename}")} Chef::JSONCompat.from_json(edited_data) end |
#edit_node ⇒ Object
34 35 36 37 38 39 40 41 |
# File 'lib/chef/knife/core/node_editor.rb', line 34 def edit_node abort "You specified the --no-editor option, nothing to edit" if config[:no_editor] assert_editor_set! updated_node_data = edit_data(view) apply_updates(updated_node_data) @updated_node end |
#updated? ⇒ Boolean
84 85 86 87 88 89 90 91 92 93 |
# File 'lib/chef/knife/core/node_editor.rb', line 84 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 |
#view ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/chef/knife/core/node_editor.rb', line 43 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 Chef::JSONCompat.to_json_pretty(result) end |