Ovh instance management with PySide2
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

86 lignes
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)