mirror of
https://github.com/truenas/scale-build.git
synced 2025-12-20 02:49:28 +00:00
72 lines
1.9 KiB
Python
72 lines
1.9 KiB
Python
import os
|
|
import jsonschema
|
|
import logging
|
|
import shutil
|
|
|
|
from truenas_install import dhs, fhs
|
|
|
|
from .exceptions import CallError, MissingPackagesException
|
|
from .utils.manifest import validate_manifest
|
|
from .utils.paths import REFERENCE_FILES, REFERENCE_FILES_DIR
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
WANTED_PACKAGES = {
|
|
'make',
|
|
'debootstrap',
|
|
'git',
|
|
'mksquashfs',
|
|
'rsync',
|
|
'unzip',
|
|
}
|
|
|
|
|
|
def retrieve_missing_packages():
|
|
return {pkg for pkg in WANTED_PACKAGES if not shutil.which(pkg)}
|
|
|
|
|
|
def validate_system_state():
|
|
if os.geteuid() != 0:
|
|
raise CallError('Must be run as root (or using sudo)!')
|
|
|
|
missing_packages = retrieve_missing_packages()
|
|
if missing_packages:
|
|
raise MissingPackagesException(missing_packages)
|
|
|
|
if missing_files := [
|
|
f for f in map(lambda f: os.path.join(REFERENCE_FILES_DIR, f), REFERENCE_FILES) if not os.path.exists(f)
|
|
]:
|
|
raise CallError(f'Missing reference files: {", ".join(missing_files)!r}')
|
|
|
|
|
|
def validate_datasets():
|
|
try:
|
|
jsonschema.validate(fhs.TRUENAS_DATASETS, fhs.TRUENAS_DATASET_SCHEMA)
|
|
except jsonschema.ValidationError as e:
|
|
raise CallError(f'Provided dataset schema is invalid: {e}')
|
|
|
|
|
|
def validate_data_dir_schema():
|
|
try:
|
|
jsonschema.validate(dhs.TRUENAS_DATA_HIERARCHY, dhs.TRUENAS_DATA_HIERARCHY_SCHEMA)
|
|
except jsonschema.ValidationError as e:
|
|
raise CallError(f'Provided data hierarchy schema is invalid: {e}')
|
|
|
|
|
|
def validate(system_state_flag=True, manifest_flag=True, datasets_flag=True, data_flag=True):
|
|
if system_state_flag:
|
|
validate_system_state()
|
|
logger.debug('System state Validated')
|
|
if manifest_flag:
|
|
validate_manifest()
|
|
logger.debug('Manifest Validated')
|
|
|
|
if datasets_flag:
|
|
validate_datasets()
|
|
logger.debug('Dataset schema Validated')
|
|
|
|
if data_flag:
|
|
validate_data_dir_schema()
|
|
logger.debug('Data directory schema Validated')
|