Skip to content

Commit 82aeb0e

Browse files
committed
tools/inventory: move hosts into subkey hosts
To prepare the snapshot creation and the new data in inventory at root level, every host must be moved into a subkey 'hosts' Signed-off-by: Olivier Hoareau <olivier.hoareau@vates.tech>
1 parent 5f36331 commit 82aeb0e

2 files changed

Lines changed: 26 additions & 19 deletions

File tree

lib/tools/inventory.py

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,36 +13,41 @@ class HostConfig(TypedDict):
1313
repositories: list[str]
1414

1515

16-
Inventory: TypeAlias = dict[HostAddress, HostConfig]
16+
HostConfigs: TypeAlias = dict[HostAddress, HostConfig]
17+
18+
class Inventory(TypedDict):
19+
hosts: HostConfigs
1720

1821

1922
def load_inventory(inventory_path: Path) -> Inventory:
2023
"""Create an inventory object from loaded inventory file."""
21-
inventory: Inventory = {}
22-
2324
with open(inventory_path, "rb") as f:
2425
data = tomllib.load(f)
2526

2627
all = data.get("all", {})
2728
hosts = data.get("hosts", [])
2829

29-
for server, config in hosts.items():
30+
inventory_hosts: HostConfigs = {}
31+
for h, config in hosts.items():
3032
repos = config.get("repositories", [])
3133
host: HostConfig = {"repositories": repos or all.get("repositories", [])}
32-
inventory[server] = host
34+
inventory_hosts[h] = host
3335

34-
return inventory
36+
return {
37+
"hosts": inventory_hosts,
38+
}
3539

3640

3741
def into_inventory(hosts: list[HostAddress], repositories: list[str]) -> Inventory:
3842
"""Create an inventory object from arguments.
3943
4044
Basically, it is used as compatibility when we don't want inventory from file.
4145
"""
42-
inventory: Inventory = {}
43-
46+
inventory_hosts: HostConfigs = {}
4447
for h in hosts:
4548
host: HostConfig = {"repositories": repositories or []}
46-
inventory[h] = host
49+
inventory_hosts[h] = host
4750

48-
return inventory
51+
return {
52+
"hosts": inventory_hosts,
53+
}

lib/tools/tasks/update.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,11 @@
77
from concurrent.futures import ThreadPoolExecutor
88

99
from lib.pool import NotAMasterHostError, Pool
10+
from lib.tools.inventory import Inventory
1011

1112
from .. import logger
1213

13-
def update_pools(inventory: dict) -> None:
14+
def update_pools(inventory: Inventory) -> None:
1415
"""Updates hosts in pool(s).
1516
1617
.. note::
@@ -23,24 +24,25 @@ def update_pools(inventory: dict) -> None:
2324
Each host (key) holds its own config data (values, eg: `enablerepos`).
2425
"""
2526
logger.debug(f"Inventory: {inventory}")
27+
inventory_hosts = inventory["hosts"]
2628
# init related pools
27-
pools = []
28-
for h in inventory:
29+
pools: list[Pool] = []
30+
for host in inventory_hosts:
2931
try:
30-
p = Pool(h)
32+
p = Pool(host)
3133
pools.append(p)
3234
except NotAMasterHostError:
33-
logger.warning(f"[{h}] Skipping: not a master host")
35+
logger.warning(f"[{host}] Skipping: not a master host")
3436

3537
with ThreadPoolExecutor() as executor:
3638
for p in pools:
37-
executor.submit(p.master.update, inventory[p.master.hostname_or_ip]["enablerepos"])
39+
executor.submit(p.master.update, inventory_hosts[p.master.hostname_or_ip]["enablerepos"])
3840

3941
# secondary hosts
4042
with ThreadPoolExecutor() as executor:
4143
for p in pools:
4244
# omit first item because it is a primary (master)
43-
for h in p.hosts[1:]:
45+
for secondary in p.hosts[1:]:
4446
# repos are the same as the primary (master)
45-
repos = inventory[p.master.hostname_or_ip]["enablerepos"]
46-
executor.submit(h.update, repos)
47+
repos = inventory_hosts[p.master.hostname_or_ip]["enablerepos"]
48+
executor.submit(secondary.update, repos)

0 commit comments

Comments
 (0)