Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/archinstall/lib
diff options
context:
space:
mode:
Diffstat (limited to 'archinstall/lib')
-rw-r--r--archinstall/lib/configuration.py64
1 files changed, 64 insertions, 0 deletions
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()