1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
#! /usr/bin/env python3
import requests
import time
import sys
import json
# Do not show the stupid message about verify=False. ignore exceptions bc
# this doesn't work on some distros.
try:
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)
except:
pass
if len(sys.argv) < 3:
print("Usage: %s <url> <admin_key>" % sys.argv[0])
sys.exit(1)
addr = sys.argv[1]
auth = ('admin', sys.argv[2])
headers = {'Content-type': 'application/json'}
request = None
# Create a pool and get its id
request = requests.post(
addr + '/pool?wait=yes',
data=json.dumps({'name': 'supertestfriends', 'pg_num': 128}),
headers=headers,
verify=False,
auth=auth)
print(request.text)
request = requests.get(addr + '/pool', verify=False, auth=auth)
assert(request.json()[-1]['pool_name'] == 'supertestfriends')
pool_id = request.json()[-1]['pool']
# get a mon name
request = requests.get(addr + '/mon', verify=False, auth=auth)
firstmon = request.json()[0]['name']
print('first mon is %s' % firstmon)
# get a server name
request = requests.get(addr + '/osd', verify=False, auth=auth)
aserver = request.json()[0]['server']
print('a server is %s' % aserver)
screenplay = [
('get', '/', {}),
('get', '/config/cluster', {}),
('get', '/crush/rule', {}),
('get', '/doc', {}),
('get', '/mon', {}),
('get', '/mon/' + firstmon, {}),
('get', '/osd', {}),
('get', '/osd/0', {}),
('get', '/osd/0/command', {}),
('get', '/pool/1', {}),
('get', '/server', {}),
('get', '/server/' + aserver, {}),
('post', '/osd/0/command', {'command': 'scrub'}),
('post', '/pool?wait=1', {'name': 'supertestfriends', 'pg_num': 128}),
('patch', '/osd/0', {'in': False}),
('patch', '/config/osd', {'pause': True}),
('get', '/config/osd', {}),
('patch', '/pool/' + str(pool_id), {'size': 2}),
('patch', '/config/osd', {'pause': False}),
('patch', '/osd/0', {'in': True}),
('get', '/pool', {}),
('delete', '/pool/' + str(pool_id) + '?wait=1', {}),
('get', '/request?page=0', {}),
('delete', '/request', {}),
('get', '/request', {}),
('patch', '/pool/1', {'pg_num': 128}),
('patch', '/pool/1', {'pgp_num': 128}),
('get', '/perf?daemon=.*', {}),
]
for method, endpoint, args in screenplay:
if method == 'sleep':
time.sleep(endpoint)
continue
url = addr + endpoint
print("URL = " + url)
request = getattr(requests, method)(
url,
data=json.dumps(args) if args else None,
headers=headers,
verify=False,
auth=auth)
assert request is not None
print(request.text)
if request.status_code != 200 or 'error' in request.json():
print('ERROR: %s request for URL "%s" failed' % (method, url))
sys.exit(1)
print('OK')
|