aboutsummaryrefslogtreecommitdiffstats
path: root/json_updater.py
diff options
context:
space:
mode:
Diffstat (limited to 'json_updater.py')
-rw-r--r--json_updater.py65
1 files changed, 65 insertions, 0 deletions
diff --git a/json_updater.py b/json_updater.py
new file mode 100644
index 0000000..17841fe
--- /dev/null
+++ b/json_updater.py
@@ -0,0 +1,65 @@
+#!/usr/bin/env python3
+import json
+import os
+import sys
+
+#chef_update_string = '{"default_attributes": {"asdc-connections": {"asdc-controller1": {"environmentName": "test"}}}}'
+#json_file_to_update="./volumes/mso/chef-config/mso-docker.json"
+
+def usage():
+ print('Usage:')
+ print(" echo <json> | %s <file> " % ( sys.argv[0], ))
+ print()
+ print("file\tpath of the valid json file to update")
+ print("json\ta json string containing the values to update in <file>")
+ print("")
+ print("Example : ")
+ print("""
+ echo '{"default_attributes": {"asdc-connections": {"asdc-controller1": {"environmentName": "test"}}}}' | %s ./volumes/mso/chef-config/mso-docker.json
+ """ % (sys.argv[0]))
+
+
+if len(sys.argv) < 2:
+ usage()
+ exit(1)
+
+if sys.argv[1] in ('--help','-h'):
+ usage()
+ exit(0)
+
+# get updates
+updates_json = sys.stdin.read()
+print(updates_json[81:])
+updates = json.loads(updates_json)
+
+# get file to update
+json_file_to_update = sys.argv[1]
+with open(json_file_to_update) as f:
+ to_update = json.load(f)
+
+# update config with updates
+def update(config, updates):
+ #assert isinstance(config, dict)
+ #assert isinstance(updates, dict)
+
+ # if key is a simple type, update it. Otherwise, update sub values
+
+
+ for update_key,update_value in updates.items():
+ if update_key not in config:
+ raise Exception('Incorrect parameter : %s' % (update_key,))
+ if isinstance(update_value, (int, str)):
+ config[update_key] = update_value
+ elif isinstance (update_value,list) and isinstance (config[update_key],list):
+ config[update_key] = update_value
+ else:
+ update(config[update_key], update_value)
+
+update(to_update, updates)
+
+# replace the file
+tmp_file = '%s.tmp' % (json_file_to_update,)
+with open(tmp_file, 'w') as f:
+ json.dump(to_update, f, sort_keys=True, indent=2)
+os.rename(tmp_file, json_file_to_update)
+