--- /dev/null
+#!/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)