mirror of
https://github.com/Telecominfraproject/wlan-testing.git
synced 2025-10-30 02:22:44 +00:00
make start_reservation.py take arbitrary inputs (#360)
Signed-off-by: Max Brenner <xamrennerb@gmail.com>
This commit is contained in:
@@ -12,25 +12,30 @@ def get_session() -> CloudShellAPISession:
|
||||
|
||||
return CloudShellAPISession(url, user, password, "Global")
|
||||
|
||||
def __wait_for_status(session, res_id, field, target_status):
|
||||
def __wait_for_status(session, res_id, field, target_statuses=[], exit_statuses=[]):
|
||||
timer = 0
|
||||
sleep_time = 5
|
||||
while True:
|
||||
status = session.GetReservationStatus(res_id).ReservationSlimStatus.__dict__[field]
|
||||
|
||||
if status == target_status:
|
||||
if status in target_statuses:
|
||||
print(f'reached target status: {status}')
|
||||
break
|
||||
|
||||
if status in exit_statuses:
|
||||
print(f'reached exit status: {status}')
|
||||
exit(1)
|
||||
|
||||
print(f'current reservation status: {status}')
|
||||
|
||||
if timer >= TIMEOUT:
|
||||
raise RuntimeError(f'waiting for reservation to reach status {target_status} timed out')
|
||||
raise RuntimeError(f'waiting for reservation to reach one of {target_statuses} or {exit_statuses} statuses timed out')
|
||||
|
||||
time.sleep(sleep_time)
|
||||
timer += sleep_time
|
||||
|
||||
def wait_for_provisioning_status(session, res_id, target_status):
|
||||
__wait_for_status(session, res_id, 'ProvisioningStatus', target_status)
|
||||
def wait_for_provisioning_status(session, res_id, target_statuses, exit_statuses=[]):
|
||||
__wait_for_status(session, res_id, 'ProvisioningStatus', target_statuses, exit_statuses)
|
||||
|
||||
def wait_for_reservation_status(session, res_id, target_status):
|
||||
__wait_for_status(session, res_id, 'Status', target_status)
|
||||
def wait_for_reservation_status(session, res_id, target_statuses, exit_statuses=[]):
|
||||
__wait_for_status(session, res_id, 'Status', target_statuses, exit_statuses)
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import json
|
||||
import os
|
||||
|
||||
from cloudshell.api.cloudshell_api import UpdateTopologyGlobalInputsRequest
|
||||
@@ -6,49 +7,40 @@ import argparse
|
||||
|
||||
from common import wait_for_provisioning_status, get_session
|
||||
|
||||
run_id = os.environ.get('GITHUB_RUN_NUMBER', 1)
|
||||
run_number = os.environ.get('GITHUB_RUN_NUMBER', 1)
|
||||
run_id = os.environ.get('GITHUB_RUN_ID', 1)
|
||||
workflow = os.environ.get('GITHUB_WORKFLOW', "workflow")
|
||||
marker_expression = os.environ.get('MARKER_EXPRESSION', 'sanity')
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--openwifi-version', default='main')
|
||||
parser.add_argument('--openwifi-gw-version', default='master')
|
||||
parser.add_argument('--openwifi-sec-version', default='main')
|
||||
parser.add_argument('--openwifi-fms-version', default='main')
|
||||
parser.add_argument('--openwifi-ui-version', default='main')
|
||||
parser.add_argument('--ap-model', default='[Any]')
|
||||
parser.add_argument('--wifi-type', default='[Any]')
|
||||
parser.add_argument('--blueprint', default='Basic Lab')
|
||||
parser.add_argument('--reservation-id-file', default='./reservation_id.txt')
|
||||
parser.add_argument('--global-inputs', help="JSON dictionary that contains global inputs that will be passed to Quali", default="{}")
|
||||
parser.add_argument('--reservation-duration', help='duration of reservation', default=360)
|
||||
parser.add_argument('--reservation-id-file', help='file that the reservation ID will be written to', default='./reservation_id.txt')
|
||||
parser.add_argument('blueprint', help='name of blueprint to create reservation from')
|
||||
args = parser.parse_args()
|
||||
|
||||
session = get_session()
|
||||
|
||||
if marker_expression == 'advance':
|
||||
reservation_duration = 720
|
||||
else:
|
||||
reservation_duration = 360
|
||||
global_inputs = {}
|
||||
try:
|
||||
global_inputs = json.loads(args.global_inputs)
|
||||
except json.JSONDecodeError as e:
|
||||
print(f'failed to decode global inputs: {e}')
|
||||
exit(1)
|
||||
|
||||
reservation = session.CreateImmediateTopologyReservation(
|
||||
reservationName=f'{marker_expression}-{run_id}',
|
||||
reservationName=f'{workflow}/{run_number}/{run_id}',
|
||||
owner=session.username,
|
||||
durationInMinutes=reservation_duration,
|
||||
durationInMinutes=args.reservation_duration,
|
||||
topologyFullPath=args.blueprint,
|
||||
globalInputs=[
|
||||
UpdateTopologyGlobalInputsRequest('Chart Version', args.openwifi_version),
|
||||
UpdateTopologyGlobalInputsRequest('owgw Version', args.openwifi_gw_version),
|
||||
UpdateTopologyGlobalInputsRequest('owsec Version', args.openwifi_sec_version),
|
||||
UpdateTopologyGlobalInputsRequest('owfms Version', args.openwifi_fms_version),
|
||||
UpdateTopologyGlobalInputsRequest('owgwui Version', args.openwifi_ui_version),
|
||||
UpdateTopologyGlobalInputsRequest('AP Model', args.ap_model),
|
||||
UpdateTopologyGlobalInputsRequest('Wifi type', args.wifi_type),
|
||||
]
|
||||
globalInputs=[UpdateTopologyGlobalInputsRequest(key, value) for key, value in global_inputs.items()]
|
||||
).Reservation
|
||||
|
||||
with open(args.reservation_id_file, 'w') as f:
|
||||
f.write(reservation.Id)
|
||||
|
||||
wait_for_provisioning_status(session, reservation.Id, 'Ready')
|
||||
wait_for_provisioning_status(session, reservation.Id, ['Ready'], ['Teardown'])
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
||||
@@ -6,7 +6,7 @@ def main():
|
||||
session = get_session()
|
||||
res_id = sys.argv[1]
|
||||
session.EndReservation(res_id)
|
||||
wait_for_reservation_status(session, res_id, 'Completed')
|
||||
wait_for_reservation_status(session, res_id, ['Completed'])
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
||||
Reference in New Issue
Block a user