Guest User

Untitled

a guest
Nov 12th, 2018
244
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.19 KB | None | 0 0
  1. #!/usr/bin/env python3
  2.  
  3. import json, os.path, requests, sys, time
  4. from datetime import datetime
  5.  
  6. OPENSTACK_USER = 'prometheus'
  7. OPENSTACK_PASSWORD = 'REDACTED'
  8. OPENSTACK_PROJECT = 'Prometheus'
  9.  
  10. SERVER_NAME = 'ServerHealthCheck'
  11. SERVER_FLAVOR = 'e4b7e835-927a-4400-9b89-6e93968f0033'
  12. SERVER_IMAGE = '30fb86b3-31d8-4191-be7d-aacf6c317c3e'
  13.  
  14. SCRIPT_FILE = os.path.basename(__file__)
  15. STATE_FILE = os.path.splitext(SCRIPT_FILE)[0] + '.json'
  16.  
  17.  
  18. def _url(path):
  19. return 'https://example.org' + path
  20.  
  21.  
  22. def token_refresh():
  23. r = requests.post(_url(':5000/v3/auth/tokens'), json={
  24. 'auth': {
  25. 'identity': {
  26. 'methods': ['password'],
  27. 'password': {
  28. 'user': {
  29. 'name': OPENSTACK_USER,
  30. 'domain': { 'id': 'default' },
  31. 'password': OPENSTACK_PASSWORD,
  32. }
  33. }
  34. },
  35. 'scope': {
  36. 'project': {
  37. 'domain': { 'id': 'default' },
  38. 'name': OPENSTACK_PROJECT
  39. }
  40. }
  41. }})
  42.  
  43. if not r.status_code == 201:
  44. sys.exit("New token request returned status code {}".format(r.status_code))
  45.  
  46. token = {'token_content': r.headers['X-Subject-Token'],
  47. 'token_expiration': r.json()["token"]["expires_at"]}
  48.  
  49. with open(STATE_FILE, 'w') as f:
  50. json.dump(token, f)
  51.  
  52.  
  53. def server_create():
  54. r = requests.post(_url(':8774/v2.1/servers'), headers=headers, json={
  55. 'server': {
  56. 'name': SERVER_NAME,
  57. 'flavorRef': SERVER_FLAVOR,
  58. 'imageRef': SERVER_IMAGE
  59. }})
  60.  
  61. if not r.status_code == 202:
  62. sys.exit("Server create request returned status code {}".format(r.status_code))
  63.  
  64. server_id = r.json()["server"]["id"]
  65. return(server_id)
  66.  
  67.  
  68. def server_status(server):
  69. r = requests.get(_url(':8774/v2.1/servers/' + server), headers=headers)
  70.  
  71. server_status = r.json()["server"]["status"]
  72. return(server_status)
  73.  
  74.  
  75. def server_delete(server):
  76. r = requests.delete(_url(':8774/v2.1/servers/' + server), headers=headers)
  77.  
  78. if not r.status_code == 204:
  79. sys.exit("Server create request returned status code {}".format(r.status_code))
  80.  
  81.  
  82. if __name__ == '__main__':
  83. # Get new auth token if state file does not exist
  84. if not os.path.isfile(STATE_FILE):
  85. token_refresh()
  86.  
  87. # Load JSON state file as dictionary
  88. with open(STATE_FILE, 'r') as f:
  89. data = json.load(f)
  90.  
  91. # Get new auth token if current token expired
  92. if (datetime.now().isoformat() >= data["token_expiration"]):
  93. print("Token expired")
  94. token_refresh()
  95.  
  96. # Set HTTP headers with auth token
  97. headers = {'X-Auth-Token': data["token_content"],
  98. 'Content-type': 'application/json'}
  99.  
  100. # Create new server
  101. server = server_create()
  102.  
  103. # Check server status
  104. status = server_status(server)
  105. request_seconds = 0
  106. while not status == 'ACTIVE':
  107. time.sleep(5)
  108. request_seconds += 5
  109.  
  110. if request_seconds >= 120:
  111. sys.exit("Server creation took more than 120 seconds.")
  112.  
  113. status = server_status(server)
  114.  
  115. # Delete server
  116. server_delete(server)
Add Comment
Please, Sign In to add comment