Skip to content

Commit 8043bf0

Browse files
Antonyjinhoh
authored andcommitted
Fix: Missing type annotation
Adding type annotation for a better code clarity and safety. This has been done on the migration of pydantic branch, but adding it first because it should not break the code and facilitate the merge of the pydantic PR
1 parent 9be96a9 commit 8043bf0

File tree

1 file changed

+62
-53
lines changed

1 file changed

+62
-53
lines changed

src/aleph/vm/conf.py

Lines changed: 62 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,12 @@
99
from os.path import abspath, exists, isdir, isfile, join
1010
from pathlib import Path
1111
from subprocess import CalledProcessError, check_output
12-
from typing import Any, List, Literal, NewType
12+
from typing import Any, List, Literal, NewType, Optional
1313

1414
from aleph_message.models import Chain
1515
from aleph_message.models.execution.environment import HypervisorType
1616
from pydantic import BaseSettings, Field, HttpUrl
1717
from pydantic.env_settings import DotenvType, env_file_sentinel
18-
from pydantic.typing import StrPath
1918

2019
from aleph.vm.orchestrator.chain import STREAM_CHAINS
2120
from aleph.vm.utils import (
@@ -111,7 +110,7 @@ def obtain_dns_ips(dns_resolver: DnsResolver, network_interface: str) -> list[st
111110

112111

113112
class Settings(BaseSettings):
114-
SUPERVISOR_HOST = "127.0.0.1"
113+
SUPERVISOR_HOST: str = "127.0.0.1"
115114
SUPERVISOR_PORT: int = 4020
116115

117116
# Public domain name
@@ -123,32 +122,32 @@ class Settings(BaseSettings):
123122
START_ID_INDEX: int = 4
124123
PREALLOC_VM_COUNT: int = 0
125124
REUSE_TIMEOUT: float = 60 * 60.0
126-
WATCH_FOR_MESSAGES = True
127-
WATCH_FOR_UPDATES = True
125+
WATCH_FOR_MESSAGES: bool = True
126+
WATCH_FOR_UPDATES: bool = True
128127

129-
API_SERVER = "https://official.aleph.cloud"
128+
API_SERVER: str = "https://official.aleph.cloud"
130129
# Connect to the Quad9 VPN provider using their IPv4 and IPv6 addresses.
131-
CONNECTIVITY_IPV4_URL = "https://9.9.9.9/"
132-
CONNECTIVITY_IPV6_URL = "https://[2620:fe::fe]/"
133-
CONNECTIVITY_DNS_HOSTNAME = "example.org"
130+
CONNECTIVITY_IPV4_URL: str = "https://9.9.9.9/"
131+
CONNECTIVITY_IPV6_URL: str = "https://[2620:fe::fe]/"
132+
CONNECTIVITY_DNS_HOSTNAME: str = "example.org"
134133

135-
USE_JAILER = True
134+
USE_JAILER: bool = True
136135
# Changelog: PRINT_SYSTEM_LOGS use to print the MicroVM logs with the supervisor output.
137136
# They are now in separate journald entries, disabling the settings disable the logs output of Firecracker VM (only)
138137
# via the serial console. This break the logs endpoint for program, as such disabling it in prod is not recommended.
139-
PRINT_SYSTEM_LOGS = True
140-
IGNORE_TRACEBACK_FROM_DIAGNOSTICS = True
141-
LOG_LEVEL = "INFO"
142-
DEBUG_ASYNCIO = False
138+
PRINT_SYSTEM_LOGS: bool = True
139+
IGNORE_TRACEBACK_FROM_DIAGNOSTICS: bool = True
140+
LOG_LEVEL: str = "INFO"
141+
DEBUG_ASYNCIO: bool = False
143142

144143
# Networking does not work inside Docker/Podman
145-
ALLOW_VM_NETWORKING = True
144+
ALLOW_VM_NETWORKING: bool = True
146145
NETWORK_INTERFACE: str | None = None
147-
IPV4_ADDRESS_POOL = Field(
146+
IPV4_ADDRESS_POOL: str = Field(
148147
default="172.16.0.0/12",
149148
description="IPv4 address range used to provide networks to VMs.",
150149
)
151-
IPV4_NETWORK_PREFIX_LENGTH = Field(
150+
IPV4_NETWORK_PREFIX_LENGTH: int = Field(
152151
default=24,
153152
description="Individual VM network prefix length in bits",
154153
)
@@ -180,30 +179,30 @@ class Settings(BaseSettings):
180179
DNS_NAMESERVERS_IPV4: list[str] | None
181180
DNS_NAMESERVERS_IPV6: list[str] | None
182181

183-
FIRECRACKER_PATH = Path("/opt/firecracker/firecracker")
184-
JAILER_PATH = Path("/opt/firecracker/jailer")
185-
SEV_CTL_PATH = Path("/opt/sevctl")
186-
LINUX_PATH = Path("/opt/firecracker/vmlinux.bin")
182+
FIRECRACKER_PATH: Path = Path("/opt/firecracker/firecracker")
183+
JAILER_PATH: Path = Path("/opt/firecracker/jailer")
184+
SEV_CTL_PATH: Path = Path("/opt/sevctl")
185+
LINUX_PATH: Path = Path("/opt/firecracker/vmlinux.bin")
187186
INIT_TIMEOUT: float = 20.0
188187

189188
CONNECTOR_URL = Url("http://localhost:4021")
190189

191-
CACHE_ROOT = Path("/var/cache/aleph/vm")
192-
MESSAGE_CACHE: Path = Field(
190+
CACHE_ROOT: Path = Path("/var/cache/aleph/vm")
191+
MESSAGE_CACHE: Optional[Path] = Field(
193192
None,
194193
description="Default to CACHE_ROOT/message",
195194
)
196-
CODE_CACHE: Path = Field(None, description="Default to CACHE_ROOT/code")
197-
RUNTIME_CACHE: Path = Field(None, description="Default to CACHE_ROOT/runtime")
198-
DATA_CACHE: Path = Field(None, description="Default to CACHE_ROOT/data")
195+
CODE_CACHE: Optional[Path] = Field(None, description="Default to CACHE_ROOT/code")
196+
RUNTIME_CACHE: Optional[Path] = Field(None, description="Default to CACHE_ROOT/runtime")
197+
DATA_CACHE: Optional[Path] = Field(None, description="Default to CACHE_ROOT/data")
199198

200-
EXECUTION_ROOT = Path("/var/lib/aleph/vm")
201-
JAILER_BASE_DIRECTORY: Path = Field(None, description="Default to EXECUTION_ROOT/jailer")
202-
EXECUTION_DATABASE: Path = Field(
199+
EXECUTION_ROOT: Path = Path("/var/lib/aleph/vm")
200+
JAILER_BASE_DIRECTORY: Optional[Path] = Field(None, description="Default to EXECUTION_ROOT/jailer")
201+
EXECUTION_DATABASE: Optional[Path] = Field(
203202
None, description="Location of database file. Default to EXECUTION_ROOT/executions.sqlite3"
204203
)
205-
EXECUTION_LOG_ENABLED = False
206-
EXECUTION_LOG_DIRECTORY: Path = Field(
204+
EXECUTION_LOG_ENABLED: bool = False
205+
EXECUTION_LOG_DIRECTORY: Optional[Path] = Field(
207206
None, description="Location of executions log. Default to EXECUTION_ROOT/executions/"
208207
)
209208

@@ -212,8 +211,8 @@ class Settings(BaseSettings):
212211
)
213212
JAILER_BASE_DIR: Path = Field(None)
214213

215-
MAX_PROGRAM_ARCHIVE_SIZE = 10_000_000 # 10 MB
216-
MAX_DATA_ARCHIVE_SIZE = 10_000_000 # 10 MB
214+
MAX_PROGRAM_ARCHIVE_SIZE: int = 10_000_000 # 10 MB
215+
MAX_DATA_ARCHIVE_SIZE: int = 10_000_000 # 10 MB
217216

218217
PAYMENT_MONITOR_INTERVAL: float = Field(
219218
default=60.0,
@@ -254,7 +253,7 @@ class Settings(BaseSettings):
254253
)
255254

256255
# hashlib.sha256(b"secret-token").hexdigest()
257-
ALLOCATION_TOKEN_HASH = "151ba92f2eb90bce67e912af2f7a5c17d8654b3d29895b042107ea312a7eebda"
256+
ALLOCATION_TOKEN_HASH: str = "151ba92f2eb90bce67e912af2f7a5c17d8654b3d29895b042107ea312a7eebda"
258257

259258
ENABLE_QEMU_SUPPORT: bool = Field(default=True)
260259
INSTANCE_DEFAULT_HYPERVISOR: HypervisorType | None = Field(
@@ -268,12 +267,12 @@ class Settings(BaseSettings):
268267
"with SEV and SEV-ES",
269268
)
270269

271-
CONFIDENTIAL_DIRECTORY: Path = Field(
270+
CONFIDENTIAL_DIRECTORY: Optional[Path] = Field(
272271
None,
273272
description="Confidential Computing default directory. Default to EXECUTION_ROOT/confidential",
274273
)
275274

276-
CONFIDENTIAL_SESSION_DIRECTORY: Path = Field(None, description="Default to EXECUTION_ROOT/sessions")
275+
CONFIDENTIAL_SESSION_DIRECTORY: Optional[Path] = Field(None, description="Default to EXECUTION_ROOT/sessions")
277276

278277
ENABLE_GPU_SUPPORT: bool = Field(
279278
default=False,
@@ -285,11 +284,13 @@ class Settings(BaseSettings):
285284

286285
# Tests on programs
287286
FAKE_DATA_PROGRAM: Path | None = None
288-
BENCHMARK_FAKE_DATA_PROGRAM = Path(abspath(join(__file__, "../../../../examples/example_fastapi")))
287+
BENCHMARK_FAKE_DATA_PROGRAM: Path = Path(abspath(join(__file__, "../../../../examples/example_fastapi")))
289288

290-
FAKE_DATA_MESSAGE = Path(abspath(join(__file__, "../../../../examples/program_message_from_aleph.json")))
289+
FAKE_DATA_MESSAGE: Path = Path(abspath(join(__file__, "../../../../examples/program_message_from_aleph.json")))
291290
FAKE_DATA_DATA: Path | None = Path(abspath(join(__file__, "../../../../examples/data/")))
292-
FAKE_DATA_RUNTIME = Path(abspath(join(__file__, "../../../../runtimes/aleph-debian-12-python/rootfs.squashfs")))
291+
FAKE_DATA_RUNTIME: Path = Path(
292+
abspath(join(__file__, "../../../../runtimes/aleph-debian-12-python/rootfs.squashfs"))
293+
)
293294
FAKE_DATA_VOLUME: Path | None = Path(abspath(join(__file__, "../../../../examples/volumes/volume-venv.squashfs")))
294295

295296
# Tests on instances
@@ -299,9 +300,9 @@ class Settings(BaseSettings):
299300
description="Identifier of the instance message used when testing the launch of an instance from the network",
300301
)
301302

302-
USE_FAKE_INSTANCE_BASE = False
303-
FAKE_INSTANCE_BASE = Path(abspath(join(__file__, "../../../../runtimes/instance-rootfs/debian-12.btrfs")))
304-
FAKE_QEMU_INSTANCE_BASE = Path(abspath(join(__file__, "../../../../runtimes/instance-rootfs/rootfs.img")))
303+
USE_FAKE_INSTANCE_BASE: bool = False
304+
FAKE_INSTANCE_BASE: Path = Path(abspath(join(__file__, "../../../../runtimes/instance-rootfs/debian-12.btrfs")))
305+
FAKE_QEMU_INSTANCE_BASE: Path = Path(abspath(join(__file__, "../../../../runtimes/instance-rootfs/rootfs.img")))
305306
FAKE_INSTANCE_ID: str = Field(
306307
default="decadecadecadecadecadecadecadecadecadecadecadecadecadecadecadeca",
307308
description="Identifier used for the 'fake instance' message defined in "
@@ -310,8 +311,8 @@ class Settings(BaseSettings):
310311
FAKE_INSTANCE_MESSAGE = Path(abspath(join(__file__, "../../../../examples/instance_message_from_aleph.json")))
311312
FAKE_INSTANCE_QEMU_MESSAGE = Path(abspath(join(__file__, "../../../../examples/qemu_message_from_aleph.json")))
312313

313-
CHECK_FASTAPI_VM_ID = "63faf8b5db1cf8d965e6a464a0cb8062af8e7df131729e48738342d956f29ace"
314-
LEGACY_CHECK_FASTAPI_VM_ID = "67705389842a0a1b95eaa408b009741027964edc805997475e95c505d642edd8"
314+
CHECK_FASTAPI_VM_ID: str = "63faf8b5db1cf8d965e6a464a0cb8062af8e7df131729e48738342d956f29ace"
315+
LEGACY_CHECK_FASTAPI_VM_ID: str = "67705389842a0a1b95eaa408b009741027964edc805997475e95c505d642edd8"
315316

316317
# Developer options
317318

@@ -408,10 +409,14 @@ def setup(self):
408409
STREAM_CHAINS[Chain.AVAX].rpc = str(self.RPC_AVAX)
409410
STREAM_CHAINS[Chain.BASE].rpc = str(self.RPC_BASE)
410411

411-
os.makedirs(self.MESSAGE_CACHE, exist_ok=True)
412-
os.makedirs(self.CODE_CACHE, exist_ok=True)
413-
os.makedirs(self.RUNTIME_CACHE, exist_ok=True)
414-
os.makedirs(self.DATA_CACHE, exist_ok=True)
412+
if self.MESSAGE_CACHE:
413+
os.makedirs(self.MESSAGE_CACHE, exist_ok=True)
414+
if self.CODE_CACHE:
415+
os.makedirs(self.CODE_CACHE, exist_ok=True)
416+
if self.RUNTIME_CACHE:
417+
os.makedirs(self.RUNTIME_CACHE, exist_ok=True)
418+
if self.DATA_CACHE:
419+
os.makedirs(self.DATA_CACHE, exist_ok=True)
415420

416421
os.makedirs(self.EXECUTION_ROOT, exist_ok=True)
417422

@@ -427,10 +432,14 @@ def setup(self):
427432

428433
self.LINUX_PATH = linux_path_on_device
429434

430-
os.makedirs(self.EXECUTION_LOG_DIRECTORY, exist_ok=True)
431-
os.makedirs(self.PERSISTENT_VOLUMES_DIR, exist_ok=True)
432-
os.makedirs(self.CONFIDENTIAL_DIRECTORY, exist_ok=True)
433-
os.makedirs(self.CONFIDENTIAL_SESSION_DIRECTORY, exist_ok=True)
435+
if self.EXECUTION_LOG_DIRECTORY:
436+
os.makedirs(self.EXECUTION_LOG_DIRECTORY, exist_ok=True)
437+
if self.PERSISTENT_VOLUMES_DIR:
438+
os.makedirs(self.PERSISTENT_VOLUMES_DIR, exist_ok=True)
439+
if self.CONFIDENTIAL_DIRECTORY:
440+
os.makedirs(self.CONFIDENTIAL_DIRECTORY, exist_ok=True)
441+
if self.CONFIDENTIAL_SESSION_DIRECTORY:
442+
os.makedirs(self.CONFIDENTIAL_SESSION_DIRECTORY, exist_ok=True)
434443

435444
self.API_SERVER = self.API_SERVER.rstrip("/")
436445

@@ -479,7 +488,7 @@ def __init__(
479488
_env_file: DotenvType | None = env_file_sentinel,
480489
_env_file_encoding: str | None = None,
481490
_env_nested_delimiter: str | None = None,
482-
_secrets_dir: StrPath | None = None,
491+
_secrets_dir: Path | None = None,
483492
**values: Any,
484493
) -> None:
485494
super().__init__(_env_file, _env_file_encoding, _env_nested_delimiter, _secrets_dir, **values)

0 commit comments

Comments
 (0)