Skip to content

Commit dc6f97e

Browse files
committed
add python changes for rbac
1 parent a7225b0 commit dc6f97e

File tree

5 files changed

+98
-39
lines changed

5 files changed

+98
-39
lines changed

recipes/python/create_policy_in_one_step.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -77,16 +77,16 @@ def read_command_line_arguments():
7777

7878
jwt = policy_api_requests.perform_login(username, password, domainName, domainType, base_url)
7979

80-
createPolicy = policy_api_requests.post_netbackup_VMwarePolicy(jwt, base_url)
80+
policy_api_requests.post_netbackup_VMwarePolicy(jwt, base_url)
8181

82-
listPolicies = policy_api_requests.get_netbackup_policies(jwt, base_url)
82+
policy_api_requests.get_netbackup_policies(jwt, base_url)
8383

84-
readPolicy = policy_api_requests.get_netbackup_policy(jwt, base_url)
84+
policy_api_requests.get_netbackup_policy(jwt, base_url)
8585

86-
updatePolicy = policy_api_requests.put_netbackup_policy(jwt, base_url)
86+
policy_api_requests.put_netbackup_policy(jwt, base_url)
8787

88-
readPolicy = policy_api_requests.get_netbackup_policy(jwt, base_url)
88+
policy_api_requests.get_netbackup_policy(jwt, base_url)
8989

90-
deletePolicy = policy_api_requests.delete_VMware_netbackup_policy(jwt, base_url)
90+
policy_api_requests.delete_VMware_netbackup_policy(jwt, base_url)
9191

92-
listPolicies = policy_api_requests.get_netbackup_policies(jwt, base_url)
92+
policy_api_requests.get_netbackup_policies(jwt, base_url)

recipes/python/create_policy_step_by_step.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -77,26 +77,26 @@ def read_command_line_arguments():
7777

7878
jwt = policy_api_requests.perform_login(username, password, domainName, domainType, base_url)
7979

80-
createPolicy = policy_api_requests.post_netbackup_VMwarePolicy_defaults(jwt, base_url)
80+
policy_api_requests.post_netbackup_VMwarePolicy_defaults(jwt, base_url)
8181

82-
listPolicies = policy_api_requests.get_netbackup_policies(jwt, base_url)
82+
policy_api_requests.get_netbackup_policies(jwt, base_url)
8383

84-
readPolicy = policy_api_requests.get_netbackup_policy(jwt, base_url)
84+
policy_api_requests.get_netbackup_policy(jwt, base_url)
8585

86-
updatePolicy = policy_api_requests.put_netbackup_policy(jwt, base_url)
86+
policy_api_requests.put_netbackup_policy(jwt, base_url)
8787

88-
addClient = policy_api_requests.put_netbackup_client(jwt, base_url)
88+
policy_api_requests.put_netbackup_client(jwt, base_url)
8989

90-
addBackupSelection = policy_api_requests.put_netbackup_backupselections(jwt, base_url)
90+
policy_api_requests.put_netbackup_backupselections(jwt, base_url)
9191

92-
addSchedule = policy_api_requests.put_netbackup_schedule(jwt, base_url)
92+
policy_api_requests.put_netbackup_schedule(jwt, base_url)
9393

94-
readPolicy = policy_api_requests.get_netbackup_policy(jwt, base_url)
94+
policy_api_requests.get_netbackup_policy(jwt, base_url)
9595

96-
deleteClient = policy_api_requests.delete_netbackup_client(jwt, base_url)
96+
policy_api_requests.delete_netbackup_client(jwt, base_url)
9797

98-
deleteSchedule = policy_api_requests.delete_netbackup_schedule(jwt, base_url)
98+
policy_api_requests.delete_netbackup_schedule(jwt, base_url)
9999

100-
deletePolicy = policy_api_requests.delete_VMware_netbackup_policy(jwt, base_url)
100+
policy_api_requests.delete_VMware_netbackup_policy(jwt, base_url)
101101

102-
listPolicies = policy_api_requests.get_netbackup_policies(jwt, base_url)
102+
policy_api_requests.get_netbackup_policies(jwt, base_url)

recipes/python/policy_api_requests.py

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def perform_login(username, password, domainName, domainType, base_url):
1818
resp = requests.post(url, headers=headers, json=req_body, verify=False)
1919

2020
if resp.status_code != 201:
21-
raise Exception('Login API failed with status code {} and {}'.format(resp.status_code, resp.json()))
21+
print('Login API failed with status code {} and {}\n'.format(resp.status_code, resp.json()))
2222

2323
print("\nThe response code of the Login API: {}\n".format(resp.status_code))
2424

@@ -51,7 +51,7 @@ def post_netbackup_VMwarePolicy_defaults(jwt, base_url):
5151
resp = requests.post(url, headers=headers, json=req_body, verify=False)
5252

5353
if resp.status_code != 204:
54-
raise Exception('Create Policy API with defaults failed with status code {} and {}'.format(resp.status_code, resp.json()))
54+
print('Create Policy API with defaults failed with status code {} and {}\n'.format(resp.status_code, resp.json()))
5555

5656
print("\n {} with defaults is created with status code : {}\n".format(testVMwarePolicyName,resp.status_code))
5757

@@ -77,12 +77,12 @@ def post_netbackup_OraclePolicy_defaults(jwt, base_url):
7777
}
7878
headers = {'Content-Type': content_type, 'Authorization': jwt}
7979

80-
print("\nMaking POST Request to create VMware Policy with defaults \n")
80+
print("\nMaking POST Request to create Oracle Policy with defaults \n")
8181

8282
resp = requests.post(url, headers=headers, json=req_body, verify=False)
8383

8484
if resp.status_code != 204:
85-
raise Exception('Create Policy API with defaults failed with status code {} and {}'.format(resp.status_code, resp.json()))
85+
print('Create Policy API with defaults failed with status code {} and {}\n'.format(resp.status_code, resp.json()))
8686

8787
print("\n {} with defaults is created with status code : {}\n".format(testVMwarePolicyName,resp.status_code))
8888

@@ -222,7 +222,7 @@ def post_netbackup_VMwarePolicy(jwt, base_url):
222222
resp = requests.post(url, headers=headers, json=req_body, verify=False)
223223

224224
if resp.status_code != 204:
225-
raise Exception('Create Policy API failed with status code {} and {}'.format(resp.status_code, resp.json()))
225+
print('Create Policy API failed with status code {} and {}\n'.format(resp.status_code, resp.json()))
226226

227227
print("\n {} with out defaults is created with status code : {}\n".format(testVMwarePolicyName,resp.status_code))
228228

@@ -235,7 +235,7 @@ def get_netbackup_policies(jwt, base_url):
235235
resp = requests.get(url, headers=headers, verify=False)
236236

237237
if resp.status_code != 200:
238-
raise Exception('List Policies API failed with status code {} and {}'.format(resp.status_code, resp.json()))
238+
print('List Policies API failed with status code {} and {}\n'.format(resp.status_code, resp.json()))
239239

240240
print("\nList policy succeeded with status code: {}\n".format(resp.status_code))
241241
print("\n Json Response body for List policies : \n{}\n".format(json.loads(resp.content)))
@@ -251,7 +251,7 @@ def get_netbackup_policy(jwt, base_url):
251251
resp = requests.get(url, headers=headers, verify=False)
252252

253253
if resp.status_code != 200:
254-
raise Exception('GET Policy API failed with status code {} and {}'.format(resp.status_code, resp.json()))
254+
print('GET Policy API failed with status code {} and {}\n'.format(resp.status_code, resp.json()))
255255

256256
print("\nGet policy details on {} succeeded with status code: {}\n".format(testVMwarePolicyName, resp.status_code))
257257
print("\n The E-tag for the get policy : {}\n".format(resp.headers['ETag']))
@@ -268,7 +268,7 @@ def delete_VMware_netbackup_policy(jwt, base_url):
268268
resp = requests.delete(url, headers=headers, verify=False)
269269

270270
if resp.status_code != 204:
271-
raise Exception('DELETE Policy API failed with status code {} and {}'.format(resp.status_code, resp.json()))
271+
print('DELETE Policy API failed with status code {} and {}\n'.format(resp.status_code, resp.json()))
272272

273273
print("\nThe policy is deleted with status code: {}\n".format(resp.status_code))
274274

@@ -281,7 +281,7 @@ def delete_Oracle_netbackup_policy(jwt, base_url):
281281
resp = requests.delete(url, headers=headers, verify=False)
282282

283283
if resp.status_code != 204:
284-
raise Exception('DELETE Policy API failed with status code {} and {}'.format(resp.status_code, resp.json()))
284+
print('DELETE Policy API failed with status code {} and {}\n'.format(resp.status_code, resp.json()))
285285

286286
print("\nThe policy is deleted with status code: {}\n".format(resp.status_code))
287287

@@ -315,7 +315,7 @@ def put_netbackup_policy(jwt, base_url):
315315
resp = requests.put(url, headers=headers, json=req_body, verify=False)
316316

317317
if resp.status_code != 204:
318-
raise Exception('PUT Policy API failed with status code {} and {}'.format(resp.status_code, resp.json()))
318+
print('PUT Policy API failed with status code {} and {}\n'.format(resp.status_code, resp.json()))
319319
etag = resp.headers['ETag']
320320
print("\n{} Updated with status code : {}\n".format(testVMwarePolicyName, resp.status_code))
321321

@@ -339,7 +339,7 @@ def put_netbackup_client(jwt, base_url):
339339
resp = requests.put(url, headers=headers, json=req_body, verify=False)
340340

341341
if resp.status_code != 201:
342-
raise Exception('PUT Client API failed with status code {} and {}'.format(resp.status_code, resp.json()))
342+
print('PUT Client API failed with status code {} and {}\n'.format(resp.status_code, resp.json()))
343343
etag = resp.headers['ETag']
344344
print("\n{} is added to {} with status code : {}\n".format(testClientName, testVMwarePolicyName, resp.status_code))
345345

@@ -353,7 +353,7 @@ def delete_netbackup_client(jwt, base_url):
353353
resp = requests.delete(url, headers=headers, verify=False)
354354

355355
if resp.status_code != 204:
356-
raise Exception('DELETE Client API failed with status code {} and {}'.format(resp.status_code, resp.json()))
356+
print('DELETE Client API failed with status code {} and {}\n'.format(resp.status_code, resp.json()))
357357
etag = resp.headers['ETag']
358358
print("\nClient {} is deleted from {} with status code: {}\n".format(testClientName, testVMwarePolicyName, resp.status_code))
359359

@@ -367,7 +367,7 @@ def delete_netbackup_schedule(jwt, base_url):
367367
resp = requests.delete(url, headers=headers, verify=False)
368368

369369
if resp.status_code != 204:
370-
raise Exception('DELETE schedule API failed with status code {} and {}'.format(resp.status_code, resp.json()))
370+
print('DELETE schedule API failed with status code {} and {}\n'.format(resp.status_code, resp.json()))
371371
etag = resp.headers['ETag']
372372
print("\n {} is deleted from the {} with status code: {}\n".format(testScheduleName, testVMwarePolicyName, resp.status_code))
373373

@@ -380,7 +380,7 @@ def delete_netbackup_backupselections(jwt, base_url):
380380
resp = requests.delete(url, headers=headers, verify=False)
381381

382382
if resp.status_code != 204:
383-
raise Exception('DELETE Backupselections API failed with status code {} and {}'.format(resp.status_code, resp.json()))
383+
print('DELETE Backupselections API failed with status code {} and {}\n'.format(resp.status_code, resp.json()))
384384

385385
print("\n BackupSelections is deleted for the {} with status code : {}\n".format(testVMwarePolicyName, resp.status_code))
386386

@@ -404,7 +404,7 @@ def put_netbackup_backupselections(jwt, base_url):
404404
resp = requests.put(url, headers=headers, json=req_body, verify=False)
405405

406406
if resp.status_code != 204:
407-
raise Exception('PUT Backupselections API failed with status code {} and {}'.format(resp.status_code, resp.json()))
407+
print('PUT Backupselections API failed with status code {} and {}\n'.format(resp.status_code, resp.json()))
408408
etag = resp.headers['ETag']
409409
print("\n Backupselections added to {} with status code: {}\n".format(testVMwarePolicyName, resp.status_code))
410410

@@ -501,6 +501,6 @@ def put_netbackup_schedule(jwt, base_url):
501501
resp = requests.put(url, headers=headers, json=req_body, verify=False)
502502

503503
if resp.status_code != 201:
504-
raise Exception('PUT Schedule API failed with status code {} and {}'.format(resp.status_code, resp.json()))
504+
print('PUT Schedule API failed with status code {} and {}\n'.format(resp.status_code, resp.json()))
505505
etag = resp.headers['ETag']
506506
print("\n{} is added to {} with status code : {}\n".format(testScheduleName, testVMwarePolicyName, resp.status_code))

recipes/python/rbac_filtering_in_policy.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,23 +75,40 @@ def read_command_line_arguments():
7575

7676
base_url = protocol + "://" + nbmaster + ":" + str(port) + "/netbackup"
7777

78+
# perform login using user defined user and use the token for subsequent operations
7879
jwt = policy_api_requests.perform_login(username, password, domainName, domainType, base_url)
7980

8081
rbac_policy_api_requests.post_rbac_object_group_for_VMware_policy(jwt, base_url)
82+
# -------------------------------------------------------------- #
83+
# Create a new rbac user locally using bpnbat to assign object
84+
# level permissions to the newly created user and perform
85+
# subsequent operations.
86+
# -------------------------------------------------------------- #
8187
rbac_policy_api_requests.create_bpnbat_user(new_rbac_user, new_rbac_domain, new_rbac_pass)
88+
rbac_policy_api_requests.post_rbac_access_rules(jwt, base_url)
89+
# create_access_rule
8290

8391
policy_api_requests.post_netbackup_VMwarePolicy_defaults(jwt, base_url)
8492
policy_api_requests.post_netbackup_OraclePolicy_defaults(jwt, base_url)
8593

94+
# list policies should display both oracle and vmware policy for admin user
95+
policy_api_requests.get_netbackup_policies(jwt, base_url)
96+
8697
new_rbac_jwt = policy_api_requests.perform_login(new_rbac_user, new_rbac_pass, new_rbac_domain, new_rbac_domainType, base_url)
8798

99+
# all policy operations will only be allowed for vmware policyType for the user "testuser" since
100+
# we added vmware object level permissions to the user
101+
policy_api_requests.get_netbackup_policies(new_rbac_jwt, base_url)
102+
103+
# delete pre-existing vmware policy and try to recreate with new rbac user
88104
policy_api_requests.delete_VMware_netbackup_policy(jwt, base_url)
89105
policy_api_requests.post_netbackup_VMwarePolicy_defaults(new_rbac_jwt, base_url)
106+
# new "testuser" should not be able to create oracle
90107
policy_api_requests.post_netbackup_OraclePolicy_defaults(new_rbac_jwt, base_url)
91108

92109
policy_api_requests.delete_VMware_netbackup_policy(new_rbac_jwt, base_url)
93110
policy_api_requests.delete_Oracle_netbackup_policy(jwt, base_url)
94111

112+
rbac_policy_api_requests.delete_rbac_access_rule(jwt, base_url)
95113
rbac_policy_api_requests.delete_rbac_object_group_for_VMware_policy(jwt, base_url)
96114

97-
policy_api_requests.get_netbackup_policies(jwt, base_url)

recipes/python/rbac_policy_api_requests.py

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,53 @@ def post_rbac_object_group_for_VMware_policy(jwt, base_url):
3131
resp = requests.post(url, headers=headers, json=req_body, verify=False)
3232

3333
if resp.status_code != 201:
34-
raise Exception('Create object group API failed with status code {} and {}'.format(resp.status_code, resp.json()))
34+
print('Create object group API failed with status code {} and {}\n'.format(resp.status_code, resp.json()))
3535

3636
object_group_id = resp.json()['data']['id']
3737
print("\n The object group is created with status code : {}\n".format(resp.status_code))
3838

39+
def post_rbac_access_rules(jwt, base_url):
40+
global access_rule_id
41+
url = base_url + "/rbac/access-rules"
42+
req_body = {
43+
"data": {
44+
"type": "access-rule",
45+
"attributes": {
46+
"description": "adding VMwarePolicy object group"
47+
},
48+
"relationships": {
49+
"userPrincipal": {
50+
"data": {
51+
"type": "user-principal",
52+
"id": "rmnus:testuser:vx:testuser"
53+
}
54+
},
55+
"objectGroup": {
56+
"data": {
57+
"type": "object-group",
58+
"id": object_group_id
59+
}
60+
},
61+
"role": {
62+
"data": {
63+
"type": "role",
64+
"id": "3"
65+
}
66+
}
67+
}
68+
}
69+
}
70+
headers = {'Content-Type': content_type, 'Authorization': jwt}
71+
72+
print("\n Making POST Request to create access rule \n")
73+
74+
resp = requests.post(url, headers=headers, json=req_body, verify=False)
75+
76+
if resp.status_code != 201:
77+
print('Create object group API failed with status code {} and {}\n'.format(resp.status_code, resp.json()))
78+
79+
access_rule_id = resp.json()['data']['id']
80+
3981
def delete_rbac_object_group_for_VMware_policy(jwt, base_url):
4082
url = base_url + "/rbac/object-groups/" + object_group_id
4183
headers = {'Content-Type': content_type, 'Authorization': jwt}
@@ -45,7 +87,7 @@ def delete_rbac_object_group_for_VMware_policy(jwt, base_url):
4587
resp = requests.delete(url, headers=headers, verify=False)
4688

4789
if resp.status_code != 204:
48-
raise Exception('DELETE object group API failed with status code {} and {}'.format(resp.status_code, resp.json()))
90+
print('DELETE object group API failed with status code {} and {}\n'.format(resp.status_code, resp.json()))
4991

5092
print("\n The object group is deleted with status code: {}\n".format(resp.status_code))
5193

@@ -58,7 +100,7 @@ def delete_rbac_access_rule(jwt, base_url):
58100
resp = requests.delete(url, headers=headers, verify=False)
59101

60102
if resp.status_code != 204:
61-
raise Exception('DELETE access rule API failed with status code {} and {}'.format(resp.status_code, resp.json()))
103+
print('DELETE access rule API failed with status code {} and {}\n'.format(resp.status_code, resp.json()))
62104

63105
print("\n The access rule is deleted with status code: {}\n".format(resp.status_code))
64106

0 commit comments

Comments
 (0)