Skip to content

Commit d2e0524

Browse files
parse meta_data.json on startup
1 parent 21e0b71 commit d2e0524

File tree

6 files changed

+93
-3
lines changed

6 files changed

+93
-3
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ non-interactive.
5454

5555
```bash
5656
# using uvx
57-
uvx esxi-image --output esxi.img path/to/esxi.iso
57+
uvx esxi-img --output esxi.img path/to/esxi.iso
5858

5959
# using pip
6060
python -m venv .venv
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
{
2+
"random_seed": "yu5ZnkqF2CqnDZVAfZgarG...",
3+
"availability_zone": "nova",
4+
"keys": [
5+
{
6+
"data": "ssh-rsa AAAAB3NzaC1y...== Generated by Nova\n",
7+
"type": "ssh",
8+
"name": "mykey"
9+
}
10+
],
11+
"hostname": "test.novalocal",
12+
"launch_index": 0,
13+
"meta": {
14+
"priority": "low",
15+
"role": "webserver"
16+
},
17+
"devices": [
18+
{
19+
"type": "nic",
20+
"bus": "pci",
21+
"address": "0000:00:02.0",
22+
"mac": "00:11:22:33:44:55",
23+
"tags": ["trusted"]
24+
},
25+
{
26+
"type": "disk",
27+
"bus": "ide",
28+
"address": "0:0",
29+
"serial": "disk-vol-2352423",
30+
"path": "/dev/sda",
31+
"tags": ["baz"]
32+
}
33+
],
34+
"project_id": "f7ac731cc11f40efbc03a9f9e1d1d21f",
35+
"public_keys": {
36+
"mykey": "ssh-rsa AAAAB3NzaC1y...== Generated by Nova\n"
37+
},
38+
"name": "test"
39+
}
File renamed without changes.

packages/esxi-netinit/esxi_netinit/main.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
import logging.handlers
44
import os
55
import sys
6+
from pathlib import Path
67

78
from esxi_netinit.esxconfig import ESXConfig
9+
from esxi_netinit.meta_data import MetaDataData
810
from esxi_netinit.network_data import NetworkData
911

1012
OLD_MGMT_PG = "Management Network"
@@ -38,8 +40,22 @@ def setup_logger(log_level=logging.INFO):
3840
logger.error("Failed to setup syslog for logging")
3941

4042

41-
def main(json_file, dry_run):
42-
network_data = NetworkData.from_json_file(json_file)
43+
def main(config_dir, dry_run):
44+
config_path = Path(config_dir)
45+
network_data_file = config_path / "network_data.json"
46+
meta_data_file = config_path / "meta_data.json"
47+
48+
if not network_data_file.exists():
49+
logger.error("Missing network_data.json in %s", config_dir)
50+
sys.exit(1)
51+
52+
network_data = NetworkData.from_json_file(network_data_file)
53+
54+
if meta_data_file.exists():
55+
logger.info("Loading meta_data.json from %s", meta_data_file)
56+
meta_data = MetaDataData.from_json_file(meta_data_file)
57+
logger.debug(meta_data)
58+
4359
esx = ESXConfig(network_data, dry_run=dry_run)
4460
esx.clean_default_network_setup(OLD_MGMT_PG, OLD_VSWITCH)
4561
esx.configure_vswitch(
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import json
2+
import logging
3+
from .metadata import MetaData
4+
5+
logger = logging.getLogger(__name__)
6+
7+
class MetaDataData:
8+
"""Represents meta_data.json."""
9+
10+
def __init__(self, data: dict):
11+
self.data = data
12+
13+
@staticmethod
14+
def from_json_file(path):
15+
with open(path) as f:
16+
data = json.load(f)
17+
return MetaData(data)
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from dataclasses import dataclass, field
2+
from typing import Dict, Optional
3+
4+
5+
@dataclass
6+
class MetaData:
7+
uuid: str
8+
admin_pass: str
9+
hostname: str
10+
project_id: str
11+
random_seed: str
12+
launch_index: Optional[int] = 0
13+
availability_zone: Optional[str] = None
14+
meta: Dict[str, str] = field(default_factory=dict)
15+
public_keys: Dict[str, str] = field(default_factory=dict)
16+
devices: "list | None" = field(default=None)
17+
dedicated_cpus: "list | None" = field(default=None)
18+

0 commit comments

Comments
 (0)