Skip to content

Commit 6077f16

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 a00e671 commit 6077f16

3 files changed

Lines changed: 26 additions & 19 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -618,6 +618,6 @@ enablerepos = ["xcp-ng-updates"]
618618
> Config values under `servers` override values under `all`. For instance, the above inventory would produce
619619
> the following python dict:
620620
>
621-
> `{'ip_or_hostname-1': {'enablerepos': ['xcp-ng-base']}, 'ip_or_hostname-2': {'enablerepos': ['xcp-ng-updates']}}`
621+
> `{'hosts': {'ip_or_hostname-1': {'enablerepos': ['xcp-ng-base']}, 'ip_or_hostname-2': {'enablerepos': ['xcp-ng-updates']}}}`
622622
>
623623
> Using *enablerepo flag* `-e` with inventory is still possible, it won't be used though.

lib/tools/inventory.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,36 +13,41 @@ class Server(TypedDict):
1313
enablerepos: list[str]
1414

1515

16-
Inventory: TypeAlias = dict[HostAddress, Server]
16+
Servers: TypeAlias = dict[HostAddress, Server]
17+
18+
class Inventory(TypedDict):
19+
hosts: Servers
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
servers = data.get("servers", [])
2829

30+
inventory_hosts: Servers = {}
2931
for server, config in servers.items():
3032
repos = config.get("enablerepos", [])
3133
host: Server = {"enablerepos": repos or all.get("enablerepos", [])}
32-
inventory[server] = host
34+
inventory_hosts[server] = host
3335

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

3640

3741
def into_inventory(hosts: list[HostAddress], enablerepos: 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: Servers = {}
4447
for h in hosts:
4548
host: Server = {"enablerepos": enablerepos 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)