mirror of
				https://github.com/Telecominfraproject/wlan-testing.git
				synced 2025-11-02 20:07:57 +00:00 
			
		
		
		
	make start_reservation.py take arbitrary inputs (#360)
Signed-off-by: Max Brenner <xamrennerb@gmail.com>
This commit is contained in:
		
							
								
								
									
										2
									
								
								.github/workflows/quali-advanced.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/quali-advanced.yml
									
									
									
									
										vendored
									
									
								
							@@ -117,7 +117,7 @@ jobs:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    - name: start reservation
 | 
					    - name: start reservation
 | 
				
			||||||
      run: |
 | 
					      run: |
 | 
				
			||||||
        python wlan-testing/.quali/start_reservation.py --openwifi-version "${{ needs.vars.outputs.openwifi_revision }}" --ap-model "${{ matrix.ap_model }}" --blueprint "Advance Lab"
 | 
					        python wlan-testing/.quali/start_reservation.py --global-inputs '{"Chart Version":"${{ needs.vars.outputs.openwifi_revision }}","AP Model":"${{ matrix.ap_model }}"}' --reservation-duration 720 "Advance Lab"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    - name: set reservation outputs
 | 
					    - name: set reservation outputs
 | 
				
			||||||
      if: always()
 | 
					      if: always()
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								.github/workflows/quali-basic-manual.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/quali-basic-manual.yml
									
									
									
									
										vendored
									
									
								
							@@ -88,7 +88,7 @@ jobs:
 | 
				
			|||||||
        CLOUDSHELL_USER: ${{ secrets.CLOUDSHELL_USER }}
 | 
					        CLOUDSHELL_USER: ${{ secrets.CLOUDSHELL_USER }}
 | 
				
			||||||
        CLOUDSHELL_PASSWORD: ${{ secrets.CLOUDSHELL_PASSWORD }}
 | 
					        CLOUDSHELL_PASSWORD: ${{ secrets.CLOUDSHELL_PASSWORD }}
 | 
				
			||||||
      run: |
 | 
					      run: |
 | 
				
			||||||
        python .quali/start_reservation.py --openwifi-version "${{ github.event.inputs.openwifi_revision }}" --ap-model "${{ github.event.inputs.ap_model }}"
 | 
					        python .quali/start_reservation.py --global-inputs '{"Chart Version":"${{ github.event.inputs.openwifi_revision }}","AP Model":"${{ github.event.inputs.ap_model }}"}' "Basic Lab"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    - name: set reservation outputs
 | 
					    - name: set reservation outputs
 | 
				
			||||||
      if: always()
 | 
					      if: always()
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								.github/workflows/quali.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/quali.yml
									
									
									
									
										vendored
									
									
								
							@@ -102,7 +102,7 @@ jobs:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    - name: start reservation
 | 
					    - name: start reservation
 | 
				
			||||||
      run: |
 | 
					      run: |
 | 
				
			||||||
        python .quali/start_reservation.py --openwifi-version "${{ needs.vars.outputs.openwifi_revision }}" --ap-model "${{ matrix.ap_model }}"
 | 
					        python .quali/start_reservation.py --global-inputs '{"Chart Version":"${{ needs.vars.outputs.openwifi_revision }}","AP Model":"${{ matrix.ap_model }}"}' "Basic Lab"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    - name: set reservation outputs
 | 
					    - name: set reservation outputs
 | 
				
			||||||
      if: always()
 | 
					      if: always()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,25 +12,30 @@ def get_session() -> CloudShellAPISession:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return CloudShellAPISession(url, user, password, "Global")
 | 
					    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
 | 
					    timer = 0
 | 
				
			||||||
    sleep_time = 5
 | 
					    sleep_time = 5
 | 
				
			||||||
    while True:
 | 
					    while True:
 | 
				
			||||||
        status = session.GetReservationStatus(res_id).ReservationSlimStatus.__dict__[field]
 | 
					        status = session.GetReservationStatus(res_id).ReservationSlimStatus.__dict__[field]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if status == target_status:
 | 
					        if status in target_statuses:
 | 
				
			||||||
 | 
					            print(f'reached target status: {status}')
 | 
				
			||||||
            break
 | 
					            break
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if status in exit_statuses:
 | 
				
			||||||
 | 
					            print(f'reached exit status: {status}')
 | 
				
			||||||
 | 
					            exit(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        print(f'current reservation status: {status}')
 | 
					        print(f'current reservation status: {status}')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if timer >= TIMEOUT:
 | 
					        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)
 | 
					        time.sleep(sleep_time)
 | 
				
			||||||
        timer += sleep_time
 | 
					        timer += sleep_time
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def wait_for_provisioning_status(session, res_id, target_status):
 | 
					def wait_for_provisioning_status(session, res_id, target_statuses, exit_statuses=[]):
 | 
				
			||||||
    __wait_for_status(session, res_id, 'ProvisioningStatus', target_status)
 | 
					    __wait_for_status(session, res_id, 'ProvisioningStatus', target_statuses, exit_statuses)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def wait_for_reservation_status(session, res_id, target_status):
 | 
					def wait_for_reservation_status(session, res_id, target_statuses, exit_statuses=[]):
 | 
				
			||||||
    __wait_for_status(session, res_id, 'Status', target_status)
 | 
					    __wait_for_status(session, res_id, 'Status', target_statuses, exit_statuses)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +1,4 @@
 | 
				
			|||||||
 | 
					import json
 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from cloudshell.api.cloudshell_api import UpdateTopologyGlobalInputsRequest
 | 
					from cloudshell.api.cloudshell_api import UpdateTopologyGlobalInputsRequest
 | 
				
			||||||
@@ -6,49 +7,40 @@ import argparse
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
from common import wait_for_provisioning_status, get_session
 | 
					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') 
 | 
					marker_expression = os.environ.get('MARKER_EXPRESSION', 'sanity') 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def main():
 | 
					def main():
 | 
				
			||||||
    parser = argparse.ArgumentParser()
 | 
					    parser = argparse.ArgumentParser()
 | 
				
			||||||
    parser.add_argument('--openwifi-version', default='main')
 | 
					    parser.add_argument('--global-inputs', help="JSON dictionary that contains global inputs that will be passed to Quali", default="{}")
 | 
				
			||||||
    parser.add_argument('--openwifi-gw-version', default='master')
 | 
					    parser.add_argument('--reservation-duration', help='duration of reservation', default=360)
 | 
				
			||||||
    parser.add_argument('--openwifi-sec-version', default='main')
 | 
					    parser.add_argument('--reservation-id-file', help='file that the reservation ID will be written to', default='./reservation_id.txt')
 | 
				
			||||||
    parser.add_argument('--openwifi-fms-version', default='main')
 | 
					    parser.add_argument('blueprint', help='name of blueprint to create reservation from')
 | 
				
			||||||
    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')
 | 
					 | 
				
			||||||
    args = parser.parse_args()
 | 
					    args = parser.parse_args()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    session = get_session()
 | 
					    session = get_session()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if marker_expression == 'advance':
 | 
					    global_inputs = {}
 | 
				
			||||||
        reservation_duration = 720
 | 
					    try:
 | 
				
			||||||
    else:
 | 
					        global_inputs = json.loads(args.global_inputs)
 | 
				
			||||||
        reservation_duration = 360
 | 
					    except json.JSONDecodeError as e:
 | 
				
			||||||
 | 
					        print(f'failed to decode global inputs: {e}')
 | 
				
			||||||
 | 
					        exit(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    reservation = session.CreateImmediateTopologyReservation(
 | 
					    reservation = session.CreateImmediateTopologyReservation(
 | 
				
			||||||
        reservationName=f'{marker_expression}-{run_id}',
 | 
					        reservationName=f'{workflow}/{run_number}/{run_id}',
 | 
				
			||||||
        owner=session.username,
 | 
					        owner=session.username,
 | 
				
			||||||
        durationInMinutes=reservation_duration,
 | 
					        durationInMinutes=args.reservation_duration,
 | 
				
			||||||
        topologyFullPath=args.blueprint,
 | 
					        topologyFullPath=args.blueprint,
 | 
				
			||||||
        globalInputs=[
 | 
					        globalInputs=[UpdateTopologyGlobalInputsRequest(key, value) for key, value in global_inputs.items()]
 | 
				
			||||||
            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),
 | 
					 | 
				
			||||||
        ]
 | 
					 | 
				
			||||||
    ).Reservation
 | 
					    ).Reservation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    with open(args.reservation_id_file, 'w') as f:
 | 
					    with open(args.reservation_id_file, 'w') as f:
 | 
				
			||||||
        f.write(reservation.Id)
 | 
					        f.write(reservation.Id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    wait_for_provisioning_status(session, reservation.Id, 'Ready')
 | 
					    wait_for_provisioning_status(session, reservation.Id, ['Ready'], ['Teardown'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if __name__ == '__main__':
 | 
					if __name__ == '__main__':
 | 
				
			||||||
    main()
 | 
					    main()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ def main():
 | 
				
			|||||||
    session = get_session()
 | 
					    session = get_session()
 | 
				
			||||||
    res_id = sys.argv[1]
 | 
					    res_id = sys.argv[1]
 | 
				
			||||||
    session.EndReservation(res_id)
 | 
					    session.EndReservation(res_id)
 | 
				
			||||||
    wait_for_reservation_status(session, res_id, 'Completed')
 | 
					    wait_for_reservation_status(session, res_id, ['Completed'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if __name__ == '__main__':
 | 
					if __name__ == '__main__':
 | 
				
			||||||
    main()
 | 
					    main()
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user