blob: 933959f207538038d23bf2dff27591c3179b40c5 [file] [log] [blame]
Dmitriy Kruglov090cb192023-07-04 22:10:50 +02001import multiprocessing as mp
2
Dmitriy Kruglov6146cb42023-04-10 00:13:59 +02003import connection as conn
4from openstack.exceptions import ResourceFailure
5from typing import Final
6
7
8compute = conn.cloud.compute
9network = conn.cloud.network
10volume = conn.cloud.volume
11
12CLIENT_NAME_MASK: Final[str] = conn.FIO_CLIENT_NAME_MASK
Dmitriy Kruglov090cb192023-07-04 22:10:50 +020013AA_SERVER_GROUP_NAME: Final[str] = conn.FIO_AA_SERVER_GROUP_NAME
Dmitriy Kruglov6146cb42023-04-10 00:13:59 +020014FLAVOR_NAME: Final[str] = conn.FIO_FLAVOR_NAME
15KEYPAIR_NAME: Final[str] = conn.FIO_KEYPAIR_NAME
16SG_NAME: Final[str] = conn.FIO_SG_NAME
17
18ROUTER_NAME: Final[str] = conn.FIO_ROUTER_NAME
19NET_NAME: Final[str] = conn.FIO_NET_NAME
Dmitriy Kruglov090cb192023-07-04 22:10:50 +020020CONCURRENCY: Final[int] = conn.CONCURRENCY
21
22
23def delete_fio_client(vm_id: str) -> None:
24 vm = compute.get_server(vm_id)
25 attachments = compute.volume_attachments(vm)
26 # Delete fio volume attachment (and any other attachments
27 # that the VM could have)
28 # Delete the volume and the server
29 for att in attachments:
30 vol_id = att.volume_id
31 vol = volume.get_volume(vol_id)
32 try:
Ievgeniia Zadorozhnaa33b29a2023-08-29 18:19:47 +030033 conn.detach_volume(att, vm, vol)
Dmitriy Kruglov090cb192023-07-04 22:10:50 +020034 print(
35 f"'{vol.id}' volume has been detached from fio '{vm.name}'"
36 " server.")
37 conn.delete_volume(vol)
38 print(f"'{vol.id}' volume has been deleted.")
Dmitriy Kruglov090cb192023-07-04 22:10:50 +020039 except ResourceFailure as e:
40 print(
41 f"Cleanup of '{vm.id}' with volume '{vol.id}' attached "
42 f"failed with '{e.message}' error.")
43 conn.delete_volume(vol)
Ievgeniia Zadorozhnaa33b29a2023-08-29 18:19:47 +030044 conn.delete_server(vm)
45 print(f"'{vm.name}' server has been deleted.")
Dmitriy Kruglov6146cb42023-04-10 00:13:59 +020046
47
48if __name__ == "__main__":
Dmitriy Kruglov090cb192023-07-04 22:10:50 +020049 # Find fio VMs
50 vms = list(compute.servers(name=CLIENT_NAME_MASK, details=False))
51
52 # Delete fio VMs in parallel in batches of CONCURRENCY size
53 with mp.Pool(processes=CONCURRENCY) as pool:
54 results = [pool.apply_async(delete_fio_client, (vm.id,)) for vm in vms]
55 # Waits for batch of fio VMs to be deleted
56 _ = [r.get() for r in results]
Dmitriy Kruglov6146cb42023-04-10 00:13:59 +020057
58 # Remove ports from fio router (including external GW)
59 router = network.find_router(ROUTER_NAME)
60 if router:
61 network.update_router(router.id, external_gateway_info={})
Ievgeniia Zadorozhnaa33b29a2023-08-29 18:19:47 +030062 print("External GW port has been deleted from fio router.")
Dmitriy Kruglov6146cb42023-04-10 00:13:59 +020063 router_ports = network.ports(device_id=router.id)
64 for p in router_ports:
Ievgeniia Zadorozhnaa33b29a2023-08-29 18:19:47 +030065 if p.device_owner != "network:router_ha_interface":
66 network.remove_interface_from_router(router.id, port_id=p.id)
67 print(f"'{p.id}' port has been deleted from fio router.")
Dmitriy Kruglov6146cb42023-04-10 00:13:59 +020068
69 # Delete fio network topology
70 net = network.find_network(NET_NAME)
71 if net:
72 network.delete_network(net.id)
73 print(f"fio '{net.id}' network has been deleted.")
74 if router:
75 network.delete_router(router.id)
76 print(f"fio '{router.id}' router has been deleted.")
77
78 # Delete fio flavor
79 flavor = compute.find_flavor(FLAVOR_NAME)
80 if flavor:
81 compute.delete_flavor(flavor.id)
82 print(f"fio '{flavor.id}' flavor has been deleted.")
83
84 # # Delete fio keypair
85 kp = compute.find_keypair(KEYPAIR_NAME)
86 if kp:
87 compute.delete_keypair(kp)
88 print(f"fio '{kp.id}' keypair has been deleted.")
89
90 # Delete fio security group
91 sg = network.find_security_group(SG_NAME)
92 if sg:
93 network.delete_security_group(sg)
94 print(f"fio '{sg.id}' security group has been deleted.")
Dmitriy Kruglov090cb192023-07-04 22:10:50 +020095
96 # Delete fio server group
Ievgeniia Zadorozhnaa33b29a2023-08-29 18:19:47 +030097 server_group = conn.find_server_group(AA_SERVER_GROUP_NAME)
Dmitriy Kruglov090cb192023-07-04 22:10:50 +020098 if server_group:
99 compute.delete_server_group(server_group)
100 print(f"fio '{server_group.name}' server group has been deleted.")