import_compare.sh 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #!/usr/bin/python
  2. import ruamel.yaml
  3. import sys
  4. import json
  5. def list_all_dict(dstDict, srcDict):
  6. if isinstance(dstDict,dict):
  7. for x in range(len(dstDict)):
  8. temp_key = list(dstDict.keys())[x]
  9. temp_value = dstDict[temp_key]
  10. if isinstance(temp_value, dict):
  11. if temp_key in srcDict:
  12. list_all_dict(temp_value, srcDict[temp_key])
  13. else:
  14. res = {}
  15. res.setdefault("key", temp_key)
  16. res.setdefault("error", "not recognize")
  17. print(output_str(res))
  18. sys.exit(0)
  19. else:
  20. if temp_value == srcDict[temp_key]:
  21. continue
  22. else:
  23. res = {}
  24. res.setdefault("key", temp_key)
  25. res.setdefault("error", "not equal")
  26. print(output_str(res))
  27. sys.exit(0)
  28. def output_str(res):
  29. return json.dumps(res)
  30. def loadConf(remoteConfig, lacalConfig):
  31. try:
  32. with open(remoteConfig, 'r') as f:
  33. remoteDict = json.loads(f.read())
  34. except FileNotFoundError:
  35. res = {}
  36. res.setdefault("file", remoteConfig)
  37. res.setdefault("check", "file_not_found")
  38. print(output_str(res))
  39. sys.exit(0)
  40. except:
  41. try:
  42. with open(remoteConfig, 'rb') as f:
  43. yaml=ruamel.yaml.YAML(typ='safe')
  44. remoteDict = yaml.load(f)
  45. except:
  46. res = {}
  47. res.setdefault("file", remoteConfig)
  48. res.setdefault("check", "file_format_error")
  49. print(output_str(res))
  50. sys.exit(0)
  51. if type(remoteDict) != dict:
  52. res = {}
  53. res.setdefault("file", remoteConfig)
  54. res.setdefault("check", "file_format_error")
  55. print(output_str(res))
  56. sys.exit(0)
  57. try:
  58. with open(lacalConfig, 'r') as f:
  59. localDict = json.loads(f.read())
  60. except FileNotFoundError:
  61. res = {}
  62. res.setdefault("file", localConfig)
  63. res.setdefault("check", "file_not_found")
  64. print(output_str(res))
  65. sys.exit(0)
  66. except:
  67. try:
  68. with open(localConfig, 'rb') as f:
  69. yaml=ruamel.yaml.YAML(typ='safe')
  70. localDict = yaml.load(f)
  71. except:
  72. res = {}
  73. res.setdefault("file", localConfig)
  74. res.setdefault("check", "file_format_error")
  75. print(output_str(res))
  76. sys.exit(0)
  77. if type(localDict) != dict:
  78. res = {}
  79. res.setdefault("file", localConfig)
  80. res.setdefault("check", "file_format_error")
  81. print(output_str(res))
  82. sys.exit(0)
  83. list_all_dict(remoteDict, localDict)
  84. sys.exit(0)
  85. if __name__ == "__main__":
  86. if len(sys.argv) == 3:
  87. remoteConfig=sys.argv[1]
  88. localConfig=sys.argv[2]
  89. else:
  90. res = {}
  91. res.setdefault("check", "Usage: %s remoteConfig localConfig" % (sys.argv[0]))
  92. print(output_str(res))
  93. sys.exit(0)
  94. loadConf(remoteConfig, localConfig)