Skip to content

Commit 863fffb

Browse files
committed
Add nested mark for update tools
Signed-off-by: Olivier Hoareau <olivier.hoareau@vates.tech>
1 parent ddadcc2 commit 863fffb

3 files changed

Lines changed: 18 additions & 4 deletions

File tree

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -584,6 +584,8 @@ For each pool target :
584584
2. Get attached secondary hosts of the pool
585585
* Repeat step `1.` for each secondary
586586

587+
It is possible to mark target as *"nested"* (XCP-ng inside VM). *See inventory example below*
588+
587589
**Inventory file**
588590

589591
`update` command can read an inventory file in [TOML v1.0.0](https://toml.io/en/v1.0.0) format:
@@ -603,6 +605,7 @@ Take a look at an example inventory file:
603605
# my_inventory.toml
604606

605607
[all]
608+
nested = true
606609
enablerepos = ["xcp-ng-base"]
607610

608611
[servers]

lib/tools/cli.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ def _command_update(args: argparse.Namespace) -> None:
1717
if args.inventory:
1818
inventory = load_inventory(args.inventory)
1919
else:
20-
inventory = into_inventory(args.hosts, args.repos)
20+
inventory = into_inventory(args.hosts, args.repos, args.nested)
2121

2222
update_pools(inventory)
2323

@@ -53,6 +53,9 @@ def cli() -> None:
5353
dest="repos",
5454
help="repositories to enable when updating",
5555
)
56+
subparser_cmd_update.add_argument(
57+
"--nested", action="store_true", default=False, help="Indicate whether hosts are nested or not"
58+
)
5659
subparser_cmd_update.set_defaults(func=_command_update)
5760

5861
args = parser.parse_args()

lib/tools/inventory.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,23 +18,31 @@ def load_inventory(inventory_path: Path) -> dict[str, dict[str, list[str]]]:
1818
servers = data.get("servers", [])
1919

2020
for server, config in servers.items():
21+
nested = config.get("nested", None)
22+
# We can't use 'False' as fallback value here, because 'False' is falsy...
23+
if nested is None:
24+
nested = all.get("nested", False)
2125
repos = config.get("enablerepos", [])
2226
host = {
27+
"nested": nested,
2328
"enablerepos": repos or all.get("enablerepos", [])
2429
}
2530
inventory[server] = host
2631

2732
return inventory
2833

29-
def into_inventory(hosts: list[HostAddress], enablerepos: list[str]) -> dict[HostAddress, dict[str, list[str]]]:
34+
def into_inventory(
35+
hosts: list[HostAddress], enablerepos: list[str], nested: bool
36+
) -> dict[HostAddress, dict[str, list[str] | bool]]:
3037
"""Create an inventory object from arguments.
3138
3239
Basically, it is used as compatibility when we don't want inventory from file.
3340
"""
34-
inventory: dict[HostAddress, dict[str, list[str]]] = {}
41+
inventory: dict[HostAddress, dict[str, list[str] | bool]] = {}
3542

3643
for h in hosts:
37-
host = {
44+
host: dict[str, list[str] | bool] = {
45+
"nested": nested or False,
3846
"enablerepos": enablerepos or [],
3947
}
4048
inventory[h] = host

0 commit comments

Comments
 (0)