migrate 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #!/usr/bin/python3
  2. import json
  3. import os
  4. import sys
  5. def storage_migrate(storage):
  6. delete_keys = []
  7. if storage['type'] == 'hostPath':
  8. # Check if the key exists, if not we have already migrated
  9. if not storage.get('hostPath'):
  10. return storage
  11. storage['hostPathConfig'] = {'hostPath': storage['hostPath']}
  12. delete_keys.append('hostPath')
  13. elif storage['type'] == 'ixVolume':
  14. # Check if the key exists, if not we have already migrated
  15. if not storage.get('datasetName'):
  16. return storage
  17. storage['ixVolumeConfig'] = {'datasetName': storage['datasetName']}
  18. delete_keys.append('datasetName')
  19. # Clean up for some older versions.
  20. if storage.get('hostPath'):
  21. delete_keys.append('hostPath')
  22. elif storage['type'] == 'emptyDir':
  23. # Check if the key exists, if not we have already migrated
  24. if not 'medium' in storage.keys():
  25. return storage
  26. if storage['size'] and (not storage['size'].endswith('Gi')):
  27. raise Exception('In order to proceed with the update, ' \
  28. 'please change the size for the storage using ' \
  29. '"emptyDir" in the format xGi. eg. "2Gi"')
  30. storage['emptyDirConfig'] = {
  31. 'medium': storage['medium'],
  32. 'size': int(storage['size'].replace('Gi', '')) if storage['size'] else None,
  33. }
  34. delete_keys.extend(['medium', 'size'])
  35. elif storage['type'] == 'smb-pv-pvc':
  36. # Check if the key exists, if not we have already migrated
  37. if not storage.get('server'):
  38. return storage
  39. storage['smbConfig'] = {
  40. 'server': storage['server'],
  41. 'share': storage['share'],
  42. 'domain': storage['domain'],
  43. 'username': storage['username'],
  44. 'password': storage['password'],
  45. 'size': storage['size'],
  46. }
  47. delete_keys.extend(['server', 'share', 'domain', 'username', 'password', 'size'])
  48. for key in delete_keys:
  49. storage.pop(key, None)
  50. return storage
  51. def migrate(values):
  52. storage_key = 'tdarrStorage'
  53. storages = ['server', 'configs', 'logs', 'transcodes']
  54. for storage in storages:
  55. check_val = values.get(storage_key, {}).get(storage, {})
  56. if not isinstance(check_val, dict) or not check_val:
  57. raise Exception(f'Storage section {storage} is malformed')
  58. values[storage_key][storage] = storage_migrate(check_val)
  59. additionalStorages = values.get(storage_key, {}).get('additionalStorages', [])
  60. for idx, storage in enumerate(additionalStorages):
  61. if not isinstance(storage, dict) or not storage:
  62. raise Exception(f'Item {idx} in additionalStorages is malformed')
  63. values[storage_key]['additionalStorages'][idx] = storage_migrate(storage)
  64. return values
  65. if __name__ == '__main__':
  66. if len(sys.argv) != 2:
  67. exit(1)
  68. if os.path.exists(sys.argv[1]):
  69. with open(sys.argv[1], 'r') as f:
  70. print(json.dumps(migrate(json.loads(f.read()))))