From ec73bdab4cf124aba16e10293e5e75a3bc89afb8 Mon Sep 17 00:00:00 2001 From: Werner Llácer Date: Sat, 5 Feb 2022 13:52:14 +0100 Subject: Routine to properly print and save config data (#888) * Created a standard function to show/save the config parameters * flake8 complains * Correct definition of btrfs standard layout * Solve issue #936 * Moved output_configs to lib/configuration.py --- archinstall/lib/configuration.py | 64 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 archinstall/lib/configuration.py (limited to 'archinstall/lib/configuration.py') diff --git a/archinstall/lib/configuration.py b/archinstall/lib/configuration.py new file mode 100644 index 00000000..bb8c7aab --- /dev/null +++ b/archinstall/lib/configuration.py @@ -0,0 +1,64 @@ +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() -- cgit v1.2.3-54-g00ecf