From e742ac58292005593565acd12b82051affa08996 Mon Sep 17 00:00:00 2001 From: Thierry Parmentelat Date: Mon, 14 Oct 2024 18:55:22 +0200 Subject: [PATCH] plcsh_test_leases.py is a utility script but not yet integrated in daily build --- system/plcsh_test_leases.py | 113 ++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100755 system/plcsh_test_leases.py diff --git a/system/plcsh_test_leases.py b/system/plcsh_test_leases.py new file mode 100755 index 0000000..22eb5d6 --- /dev/null +++ b/system/plcsh_test_leases.py @@ -0,0 +1,113 @@ +#!/usr/bin/env python + +""" +a utility used in oct 2024 while checking the deletion of leases by slices +not integrated in the nightly yet +""" + +import sys +sys.path.append('/usr/share/plc_api') + +from PLC.Shell import Shell + +api = Shell() + +# our test plc has one site only if we ignore the auto site + +def populate(expires: False): + + login_base = 'reserv' + + try: + site_id = api.AddSite({ + 'name': "a site for hosting reservable nodes", + 'abbreviated_name': "res_site", + 'login_base': login_base, + 'max_slices': 100, + }) + except: + print("the site already exists") + site_id = api.GetSites({'login_base': login_base})[0]['site_id'] + + try: + node_id = api.AddNode(site_id, { + 'hostname': f'leases.testplc.org', + 'node_type': 'reservable', + }) + except: + print("the node already exists") + node_id = api.GetNodes({'hostname': 'leases.testplc.org'})[0]['node_id'] + + try: + slice_id = api.AddSlice({'name': f'{login_base}_leases'}) + if expires: + import time + now = int(time.time()) + slice_expires = {'expires': now + 30} + api.UpdateSlice(slice_id, slice_expires) + + except: + print("the slice already exists") + slice_id = api.GetSlices({'name': f'{login_base}_leases'})[0]['slice_id'] + + # create a lease + leases = api.AddLeases( + node_id, + slice_id, + '2025-01-01 00:00:00', + '2025-01-01 01:00:00', + ) + try: + lease_id = leases['new_ids'][0] + except: + print("the lease already exists") + lease_id = api.GetLeases({'hostname': 'leases.testplc.org'})[0]['lease_id'] + print(f"{site_id=}, {node_id=}, {slice_id=} {lease_id=}") + + +def unpopulate(full=False): + """ + our main objective is to see what happens when a slice is deleted + however for testing it is somtimes useful to clean up the full mounty + """ + + if full: + leases = api.GetLeases({'hostname': 'leases.testplc.org'}) + if not leases: + print("the lease was deleted already") + else: + api.DeleteLeases([leases[0]['lease_id']]) + + slices = api.GetSlices({'name': 'reserv_leases'}) + if not slices: + print("the slice was deleted already") + else: + api.DeleteSlice(slices[0]['slice_id']) + + if full: + nodes = api.GetNodes({'hostname': 'leases.testplc.org'}) + if not nodes: + print("the node was deleted already") + else: + api.DeleteNode(nodes[0]['node_id']) + + if full: + sites = api.GetSites({'login_base': 'reserv'}) + if not sites: + print("the site was deleted already") + else: + api.DeleteSite(sites[0]['site_id']) + + +from argparse import ArgumentParser +parser = ArgumentParser() +parser.add_argument('-p', '--populate', action='store_true') +parser.add_argument('-e', '--expires', action='store_true', help='make the slice expire in 30') +parser.add_argument('-u', '--unpopulate', action='store_true') +parser.add_argument('-f', '--full', action='store_true', help='unpopulate everything, not just the slice') +args = parser.parse_args() + +if args.populate: + populate(expires=args.expires) +if args.unpopulate: + unpopulate(full=args.full) -- 2.47.0