Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- import json, os.path, requests, sys, time
- from datetime import datetime
- OPENSTACK_USER = 'prometheus'
- OPENSTACK_PASSWORD = 'REDACTED'
- OPENSTACK_PROJECT = 'Prometheus'
- SERVER_NAME = 'ServerHealthCheck'
- SERVER_FLAVOR = 'e4b7e835-927a-4400-9b89-6e93968f0033'
- SERVER_IMAGE = '30fb86b3-31d8-4191-be7d-aacf6c317c3e'
- SCRIPT_FILE = os.path.basename(__file__)
- STATE_FILE = os.path.splitext(SCRIPT_FILE)[0] + '.json'
- def _url(path):
- return 'https://example.org' + path
- def token_refresh():
- r = requests.post(_url(':5000/v3/auth/tokens'), json={
- 'auth': {
- 'identity': {
- 'methods': ['password'],
- 'password': {
- 'user': {
- 'name': OPENSTACK_USER,
- 'domain': { 'id': 'default' },
- 'password': OPENSTACK_PASSWORD,
- }
- }
- },
- 'scope': {
- 'project': {
- 'domain': { 'id': 'default' },
- 'name': OPENSTACK_PROJECT
- }
- }
- }})
- if not r.status_code == 201:
- sys.exit("New token request returned status code {}".format(r.status_code))
- token = {'token_content': r.headers['X-Subject-Token'],
- 'token_expiration': r.json()["token"]["expires_at"]}
- with open(STATE_FILE, 'w') as f:
- json.dump(token, f)
- def server_create():
- r = requests.post(_url(':8774/v2.1/servers'), headers=headers, json={
- 'server': {
- 'name': SERVER_NAME,
- 'flavorRef': SERVER_FLAVOR,
- 'imageRef': SERVER_IMAGE
- }})
- if not r.status_code == 202:
- sys.exit("Server create request returned status code {}".format(r.status_code))
- server_id = r.json()["server"]["id"]
- return(server_id)
- def server_status(server):
- r = requests.get(_url(':8774/v2.1/servers/' + server), headers=headers)
- server_status = r.json()["server"]["status"]
- return(server_status)
- def server_delete(server):
- r = requests.delete(_url(':8774/v2.1/servers/' + server), headers=headers)
- if not r.status_code == 204:
- sys.exit("Server create request returned status code {}".format(r.status_code))
- if __name__ == '__main__':
- # Get new auth token if state file does not exist
- if not os.path.isfile(STATE_FILE):
- token_refresh()
- # Load JSON state file as dictionary
- with open(STATE_FILE, 'r') as f:
- data = json.load(f)
- # Get new auth token if current token expired
- if (datetime.now().isoformat() >= data["token_expiration"]):
- print("Token expired")
- token_refresh()
- # Set HTTP headers with auth token
- headers = {'X-Auth-Token': data["token_content"],
- 'Content-type': 'application/json'}
- # Create new server
- server = server_create()
- # Check server status
- status = server_status(server)
- request_seconds = 0
- while not status == 'ACTIVE':
- time.sleep(5)
- request_seconds += 5
- if request_seconds >= 120:
- sys.exit("Server creation took more than 120 seconds.")
- status = server_status(server)
- # Delete server
- server_delete(server)
Add Comment
Please, Sign In to add comment