archinstall/archinstall/lib/configuration.py

65 lines
2.5 KiB
Python

import json
import pathlib
import logging
from .storage import storage
from .general import JSON, UNSAFE_JSON
from .output import log
def output_configs(area :dict, show :bool = True, save :bool = True):
""" Show on the screen the configuration data (except credentials) and/or save them on a json file
:param area: a dictionary to be shown/save (basically archinstall.arguments, but needed to be passed explictly to avoid circular references
:type area: dict
:param show:Determines if the config data will be displayed on screen in Json format
:type show: bool
:param save:Determines if the config data will we written as a Json file
:type save:bool
"""
user_credentials = {}
disk_layout = {}
user_config = {}
for key in area:
if key in ['!users','!superusers','!encryption-password']:
user_credentials[key] = area[key]
elif key == 'disk_layouts':
disk_layout = area[key]
elif key in ['abort','install','config','creds','dry_run']:
pass
else:
user_config[key] = area[key]
user_configuration_json = json.dumps({
'config_version': storage['__version__'], # Tells us what version was used to generate the config
**user_config, # __version__ will be overwritten by old version definition found in config
'version': storage['__version__']
} , indent=4, sort_keys=True, cls=JSON)
if disk_layout:
disk_layout_json = json.dumps(disk_layout, indent=4, sort_keys=True, cls=JSON)
if user_credentials:
user_credentials_json = json.dumps(user_credentials, indent=4, sort_keys=True, cls=UNSAFE_JSON)
if save:
dest_path = pathlib.Path(storage.get('LOG_PATH','.'))
if (not dest_path.exists()) or not (dest_path.is_dir()):
log(f"Destination directory {dest_path.resolve()} does not exist or is not a directory,\n Configuration files can't be saved",fg="yellow",)
input("Press enter to continue")
else:
with (dest_path / "user_configuration.json").open('w') as config_file:
config_file.write(user_configuration_json)
if user_credentials:
target = dest_path / "user_credentials.json"
with target.open('w') as config_file:
config_file.write(user_credentials_json)
if disk_layout:
target = dest_path / "user_disk_layout.json"
with target.open('w') as config_file:
config_file.write(disk_layout_json)
if show:
print()
print('This is your chosen configuration:')
log("-- Guided template chosen (with below config) --", level=logging.DEBUG)
log(user_configuration_json, level=logging.INFO)
if disk_layout:
log(disk_layout_json, level=logging.INFO)
print()