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
This commit is contained in:
Werner Llácer 2022-02-05 13:52:14 +01:00 committed by GitHub
parent 0ec9549dc4
commit ec73bdab4c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 78 additions and 98 deletions

View File

@ -38,7 +38,7 @@ from .lib.menu import Menu
from .lib.menu.selection_menu import GlobalMenu
from .lib.translation import Translation
from .lib.plugins import plugins, load_plugin # This initiates the plugin loading ceremony
from .lib.configuration import *
parser = ArgumentParser()
__version__ = "2.4.0-dev0"

View File

@ -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()

View File

@ -1,4 +1,3 @@
import json
import logging
import os
import time
@ -91,52 +90,7 @@ def ask_user_questions():
global_menu.run()
def save_user_configurations():
user_credentials = {}
if archinstall.arguments.get('!users'):
user_credentials["!users"] = archinstall.arguments['!users']
if archinstall.arguments.get('!superusers'):
user_credentials["!superusers"] = archinstall.arguments['!superusers']
if archinstall.arguments.get('!encryption-password'):
user_credentials["!encryption-password"] = archinstall.arguments['!encryption-password']
user_configuration = json.dumps({
'config_version': archinstall.__version__, # Tells us what version was used to generate the config
**archinstall.arguments, # __version__ will be overwritten by old version definition found in config
'version': archinstall.__version__
} , indent=4, sort_keys=True, cls=archinstall.JSON)
with open("/var/log/archinstall/user_credentials.json", "w") as config_file:
config_file.write(json.dumps(user_credentials, indent=4, sort_keys=True, cls=archinstall.UNSAFE_JSON))
with open("/var/log/archinstall/user_configuration.json", "w") as config_file:
config_file.write(user_configuration)
if archinstall.arguments.get('disk_layouts'):
user_disk_layout = json.dumps(archinstall.arguments['disk_layouts'], indent=4, sort_keys=True, cls=archinstall.JSON)
with open("/var/log/archinstall/user_disk_layout.json", "w") as disk_layout_file:
disk_layout_file.write(user_disk_layout)
def perform_filesystem_operations():
print()
print('This is your chosen configuration:')
archinstall.log("-- Guided template chosen (with below config) --", level=logging.DEBUG)
user_configuration = json.dumps({**archinstall.arguments, 'version' : archinstall.__version__} , indent=4, sort_keys=True, cls=archinstall.JSON)
archinstall.log(user_configuration, level=logging.INFO)
if archinstall.arguments.get('disk_layouts'):
user_disk_layout = json.dumps(archinstall.arguments['disk_layouts'], indent=4, sort_keys=True, cls=archinstall.JSON)
archinstall.log(user_disk_layout, level=logging.INFO)
print()
if archinstall.arguments.get('dry_run'):
exit(0)
if not archinstall.arguments.get('silent'):
input('Press Enter to continue.')
"""
Issue a final warning before we continue with something un-revertable.
We mention the drive one last time, and count from 5 to 0.
@ -300,6 +254,13 @@ if not archinstall.arguments.get('offline', False):
if not archinstall.arguments.get('silent'):
ask_user_questions()
save_user_configurations()
archinstall.output_configs(archinstall.arguments,show=False if archinstall.arguments.get('silent') else True)
if archinstall.arguments.get('dry_run'):
exit(0)
if not archinstall.arguments.get('silent'):
input('Press Enter to continue.')
perform_filesystem_operations()
perform_installation(archinstall.storage.get('MOUNT_POINT', '/mnt'))

View File

@ -1,4 +1,3 @@
import json
import logging
import os
import pathlib
@ -49,52 +48,6 @@ def ask_user_questions():
"""
ask_harddrives()
def save_user_configurations():
user_credentials = {}
if archinstall.arguments.get('!users'):
user_credentials["!users"] = archinstall.arguments['!users']
if archinstall.arguments.get('!superusers'):
user_credentials["!superusers"] = archinstall.arguments['!superusers']
if archinstall.arguments.get('!encryption-password'):
user_credentials["!encryption-password"] = archinstall.arguments['!encryption-password']
user_configuration = json.dumps({
'config_version': archinstall.__version__, # Tells us what version was used to generate the config
**archinstall.arguments, # __version__ will be overwritten by old version definition found in config
'version': archinstall.__version__
} , indent=4, sort_keys=True, cls=archinstall.JSON)
with open("/var/log/archinstall/user_credentials.json", "w") as config_file:
config_file.write(json.dumps(user_credentials, indent=4, sort_keys=True, cls=archinstall.UNSAFE_JSON))
with open("/var/log/archinstall/user_configuration.json", "w") as config_file:
config_file.write(user_configuration)
if archinstall.arguments.get('disk_layouts'):
user_disk_layout = json.dumps(archinstall.arguments['disk_layouts'], indent=4, sort_keys=True, cls=archinstall.JSON)
with open("/var/log/archinstall/user_disk_layout.json", "w") as disk_layout_file:
disk_layout_file.write(user_disk_layout)
def write_config_files():
print()
print('This is your chosen configuration:')
archinstall.log("-- Guided template chosen (with below config) --", level=logging.DEBUG)
user_configuration = json.dumps({**archinstall.arguments, 'version' : archinstall.__version__} , indent=4, sort_keys=True, cls=archinstall.JSON)
archinstall.log(user_configuration, level=logging.INFO)
if archinstall.arguments.get('disk_layouts'):
user_disk_layout = json.dumps(archinstall.arguments['disk_layouts'], indent=4, sort_keys=True, cls=archinstall.JSON)
archinstall.log(user_disk_layout, level=logging.INFO)
print()
save_user_configurations()
if archinstall.arguments.get('dry_run'):
exit(0)
def perform_disk_operations():
"""
Issue a final warning before we continue with something un-revertable.
@ -170,9 +123,11 @@ if not archinstall.check_mirror_reachable():
if not archinstall.arguments.get('silent'):
ask_user_questions()
archinstall.output_configs(archinstall.arguments,show=False if archinstall.arguments.get('silent') else True)
if archinstall.arguments.get('dry_run'):
exit(0)
if not archinstall.arguments.get('silent'):
write_config_files()
input('Press Enter to continue.')
perform_disk_operations()

View File

@ -2,7 +2,7 @@
import archinstall
import logging
from archinstall.lib.hardware import __packages__ as __hwd__packages__
is_top_level_profile = True
__description__ = 'Installs a minimal system as well as xorg and graphics drivers.'
@ -12,7 +12,7 @@ __packages__ = [
'xorg-server',
'xorg-xinit',
'nvidia-dkms',
*archinstall.lib.hardware.__packages__,
*__hwd__packages__,
]