Ovh instance management with PySide2
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

86 řádky
2.3 KiB

  1. import ovh
  2. # OVH API specific code
  3. client = ovh.Client()
  4. regions = ['GRA7', 'SBG5', 'DE1', 'UK1', 'BHS5']
  5. def get_base_url():
  6. service = client.get('/cloud/project')[0]
  7. return f"/cloud/project/{service}"
  8. base_url = get_base_url()
  9. # User management
  10. # users are actually named ssh_keys
  11. def get_users():
  12. ssh_keys = client.get(base_url + '/sshkey')
  13. return [
  14. [
  15. k['id'],
  16. k['name'].split('_')[1],
  17. k['publicKey'],
  18. ]
  19. for k in ssh_keys
  20. if k['name'].startswith('ssh_')
  21. ]
  22. def add_user(user, key):
  23. res = client.post(base_url + '/sshkey',
  24. name = 'ssh_' + user,
  25. publicKey = key
  26. )
  27. return res
  28. def delete_user(user_id):
  29. res = client.delete(base_url + '/sshkey/' + user_id)
  30. return res
  31. # Instance management
  32. # Server model for a region
  33. def get_flavor_id(region, name='s1-2'):
  34. flavors = client.get(base_url + '/flavor')
  35. flavorId = [f['id'] for f in flavors if f['name']
  36. == name and f['region'] == region][0]
  37. return flavorId
  38. # OS image for a region
  39. def get_image_id(region, name='Ubuntu 20.04'):
  40. images = client.get(base_url + '/image')
  41. imageId = [i['id'] for i in images if i['name']
  42. == name and i['region'] == region][0]
  43. return imageId
  44. def get_instances():
  45. ovh_instances = client.get(base_url + '/instance')
  46. instances = []
  47. for i in ovh_instances:
  48. id_inst = i['id']
  49. name = i['name']
  50. if not name.startswith('eica-'):
  51. continue
  52. if i['ipAddresses']:
  53. ip = i['ipAddresses'][0]['ip']
  54. else:
  55. ip = 'Waiting...'
  56. region = i['region']
  57. status = i['status']
  58. instances.append([id_inst, name, ip, region, status])
  59. return instances
  60. def create_instance(eleve_id, name, region):
  61. image_id = get_image_id(region)
  62. flavor_id = get_flavor_id(region)
  63. client.post(base_url + '/instance',
  64. name='eica-' + name,
  65. sshKeyId=eleve_id,
  66. flavorId=flavor_id,
  67. imageId=image_id,
  68. region=region
  69. )
  70. def delete_instance(instance_id):
  71. print(base_url + '/instance/' + instance_id)
  72. client.delete(base_url + '/instance/' + instance_id)