fake_lsblk.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import argparse
  2. import json
  3. import sys
  4. def parse_arguments(*unparsed_arguments):
  5. parser = argparse.ArgumentParser(add_help=False)
  6. parser.add_argument('--output', required=True)
  7. parser.add_argument('--json', action='store_true', required=True)
  8. parser.add_argument('--list', action='store_true', required=True)
  9. return parser.parse_args(unparsed_arguments)
  10. BUILTIN_BLOCK_DEVICES = {
  11. 'blockdevices': [
  12. {
  13. 'name': 'loop0',
  14. 'path': '/dev/loop0',
  15. 'mountpoint': None,
  16. 'type': 'loop'
  17. },
  18. {
  19. 'name': 'cryptroot',
  20. 'path': '/dev/mapper/cryptroot',
  21. 'mountpoint': '/',
  22. 'type': 'crypt'
  23. },{
  24. 'name': 'vgroup-lvolume',
  25. 'path': '/dev/mapper/vgroup-lvolume',
  26. 'mountpoint': '/mnt/lvolume',
  27. 'type': 'lvm'
  28. },
  29. {
  30. 'name': 'vgroup-lvolume-real',
  31. 'path': '/dev/mapper/vgroup-lvolume-real',
  32. 'mountpoint': None,
  33. 'type': 'lvm'
  34. },
  35. ]
  36. }
  37. def load_snapshots():
  38. try:
  39. return json.load(open('/tmp/fake_lvm.json'))
  40. except FileNotFoundError:
  41. return []
  42. def print_logical_volumes_json(arguments, snapshots):
  43. data = dict(BUILTIN_BLOCK_DEVICES)
  44. for snapshot in snapshots:
  45. data['blockdevices'].extend(
  46. {
  47. 'name': snapshot['lv_name'],
  48. 'path': snapshot['lv_path'],
  49. 'mountpoint': None,
  50. 'type': 'lvm'
  51. }
  52. for snapshot in snapshots
  53. )
  54. print(json.dumps(data))
  55. def main():
  56. arguments = parse_arguments(*sys.argv[1:])
  57. snapshots = load_snapshots()
  58. assert arguments.output == 'name,path,mountpoint,type'
  59. print_logical_volumes_json(arguments, snapshots)
  60. if __name__ == '__main__':
  61. main()