yaml2json 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #!/usr/bin/python3
  2. # coding: utf-8
  3. # {{{ Imports
  4. import sys
  5. import argparse
  6. import yaml
  7. import json
  8. import traceback
  9. # }}}
  10. # {{{ Constants
  11. _NAME = "yaml2json"
  12. _DESC = "Convert yaml data to zabbix json discovery format"
  13. _VERSION = "0.1"
  14. # }}}
  15. # {{{ main
  16. def main():
  17. parser = argparse.ArgumentParser(prog=_NAME, description=_DESC)
  18. parser.add_argument('-v', '--version', action='version',
  19. version='%(prog)s ' + _VERSION)
  20. parser.add_argument('-d', '--debug', dest='debug', default=False, action='store_true',
  21. help='Print additional debug informations: traceback, etc. (default: no)')
  22. parser.add_argument('datafile')
  23. options = parser.parse_args()
  24. try:
  25. data = {'data': []}
  26. with open(options.datafile) as f:
  27. datayml = yaml.safe_load(f)
  28. if datayml is not None:
  29. for section in datayml:
  30. localdata = {
  31. '{#KEY}': section,
  32. }
  33. for k in datayml[section]:
  34. localdata['{#%s}' % (k.upper())] = datayml[section][k]
  35. data['data'].append(localdata)
  36. print(json.dumps(data, indent=4))
  37. except Exception as e:
  38. if not options.debug:
  39. print('Exception raised (use --debug option to get more info): %s' % (unicode(e)))
  40. else:
  41. print('Exception raised: %s' % (e))
  42. traceback.print_exc(file=sys.stderr)
  43. sys.exit(-1)
  44. # }}}
  45. # {{{ __main__
  46. if __name__ == "__main__":
  47. main()
  48. # }}}
  49. # vim: foldmethod=marker foldlevel=0 foldenable