Question:
I want to edit ec2 node’s node_data using a knife node
command.
I can manually do it by using below command.
knife node edit NODE_NAME
It will generate a json which I need to edit.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
"name": "NODE-1", 3 "chef_environment": "test", 4 "normal": { 5 "node_data": { 6 "version": "23690ecc9c572e47db242bfad1296388f91da1e9", 7 "depot_path": "https://s3.amazonaws.com/builds/", 8 "source_repo": "softwares/" 9 }, 10 "tags": [ 11 12 ] 13 }, 14 "run_list": [ 15 "role[my-role]" 16 ] 17 } |
I want to edit node_data
in that json.
If I had to edit run_list the there is a command for that
knife node run_list add node 'role[ROLE_NAME]'
I need something similar to this command.
Answer:
I have added a knife plugin to add to node_data.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
require 'chef/knife' require 'chef/knife/core/node_presenter' class Chef class Knife class NodeJson_dataUpdate < Knife deps do require 'chef/node' require 'json' end banner "knife node json_data update [NODE] [JSON_NODE_DATA]" def run node = Chef::Node.load(@name_args[0]) node_data = @name_args[1] update_node_data(node, node_data) node.save output(node.normal.node_data) end def update_node_data(node,node_data) parsed_node_data = JSON.parse(node_data) parsed_node_data.each do |key,val| if key.empty? print "ERROR: Key is empty for value- "+val+". Not adding this to node_data.\n" else node.normal.node_data[key]=val end end end end end end |