Zone Configurations
This sample code is for setting simple traffic configurations for a zone. It logs in to rWeb and finds the target group and zone. Then it applies a template to that zone before updating a couple of actual setting params before logging out.
#!/usr/bin/env -S uv run --script
# /// script
# requires-python = ">=3.12"
# dependencies = [
# "requests",
# ]
# ///
import requests
import json
import urllib.parse
# Enter your rWeb address here
BASE_URL = "https://rweb.local.com"
HEADERS = {'Content-Type':'application/json',
'Accept':'application/json'}
# Put in your user credentials here
CREDENTIALS = {'login':'admin', 'password':'admin123'}
def wrap(data):
return json.dumps({'data': data})
def url(resource, params=None):
querystring = ""
if params != None:
querystring = "?"+urllib.parse.urlencode(params)
return BASE_URL + resource + querystring
def login(session):
result = session.post(url('/authentication'),
wrap(CREDENTIALS))
assert(result.status_code == requests.codes.created)
def logout(session):
result = session.delete(url('/authentication'))
assert(result.status_code == requests.codes.ok)
def find_group(session, name):
result = session.get(url('/groups', {'name': name}))
assert(result.status_code == requests.codes.ok)
group_list = json.loads(result.content)
assert(group_list['rows']==1)
return group_list['data'][0]
def find_zone(session, group, name):
result = session.get(url(group['zones_resource'], {'name': name}))
assert(result.status_code == requests.codes.ok)
zone_list = json.loads(result.content)
assert(zone_list['rows']==1)
return zone_list['data'][0]
def find_template(session, name):
result = session.get(url('/templates',{'name':name}))
assert(result.status_code == requests.codes.ok)
template_list = json.loads(result.content)
assert(template_list['rows']==1)
return template_list['data'][0]
def apply_template(session, zone, template):
result = session.post(url(find_configuration_resource(session, zone)),
wrap({"template_resource":template['template_resource']}))
assert(result.status_code == requests.codes.created)
def find_configuration_resource(session, zone):
current = find_current_revision(session, zone)
configuration_resource = current['configuration_resource']
return configuration_resource
def find_current_revision(session, zone):
result = session.get(url(zone['revision_current_resource']))
current = json.loads(result.content)
return current
def change_configuration(session, zone, params):
result = session.post(url(find_configuration_resource(session, zone)),
wrap(params))
assert(result.status_code == requests.codes.created)
def main():
with requests.session() as session:
session.headers = HEADERS
# This is insecure but may be needed if you haven't set up an SSL certificate for rWeb yet
session.verify = False
login(session)
group = find_group(session, 'Group name')
zone = find_zone(session, group, 'Zone name')
template = find_template(session, 'Default')
apply_template(session, zone, template)
change_configuration(session, zone,
{'configurations': {
'tcp_frag_packet_percentage_allowed': '95',
'tcp_frag_allow_partial_headers': 'no'}})
logout(session)
if __name__ == '__main__':
main()