fake_lsblk.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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. {'name': 'loop0', 'path': '/dev/loop0', 'mountpoint': None, 'type': 'loop'},
  13. {'name': 'cryptroot', 'path': '/dev/mapper/cryptroot', 'mountpoint': '/', 'type': 'crypt'},
  14. {
  15. 'name': 'vgroup-lvolume',
  16. 'path': '/dev/mapper/vgroup-lvolume',
  17. 'mountpoint': '/e2e/mnt/lvolume',
  18. 'type': 'lvm',
  19. },
  20. {
  21. 'name': 'vgroup-lvolume-real',
  22. 'path': '/dev/mapper/vgroup-lvolume-real',
  23. 'mountpoint': None,
  24. 'type': 'lvm',
  25. },
  26. ]
  27. }
  28. def load_snapshots():
  29. try:
  30. return json.load(open('/tmp/fake_lvm.json'))
  31. except FileNotFoundError:
  32. return []
  33. def print_logical_volumes_json(arguments, snapshots):
  34. data = dict(BUILTIN_BLOCK_DEVICES)
  35. for snapshot in snapshots:
  36. data['blockdevices'].extend(
  37. {
  38. 'name': snapshot['lv_name'],
  39. 'path': snapshot['lv_path'],
  40. 'mountpoint': None,
  41. 'type': 'lvm',
  42. }
  43. for snapshot in snapshots
  44. )
  45. print(json.dumps(data))
  46. def main():
  47. arguments = parse_arguments(*sys.argv[1:])
  48. snapshots = load_snapshots()
  49. assert arguments.output == 'name,path,mountpoint,type'
  50. print_logical_volumes_json(arguments, snapshots)
  51. if __name__ == '__main__':
  52. main()