Merge pull request #1324 from thomasborgen/feature/persistent-settings-python
Feature/persistent settings python
This commit is contained in:
		| @@ -1,30 +1,44 @@ | ||||
| import argparse | ||||
| import os | ||||
| import sys | ||||
| import json | ||||
|  | ||||
| parser = argparse.ArgumentParser( | ||||
|     description='Store env vars into runnable .sh file with export statements', | ||||
| ) | ||||
| parser.add_argument( | ||||
|     'env_var_script_file', | ||||
|     type=str, | ||||
|     help='Path to variables-script.sh', | ||||
| ) | ||||
|  | ||||
| # Verify script arguments | ||||
| if len(sys.argv) != 2: | ||||
|     sys.exit( | ||||
|         'Invalid number of arguments. Usage:\n persistEnvironment.py /path/to/varibles-script.sh') | ||||
| args = parser.parse_args() | ||||
|  | ||||
| envVarsScriptFile = sys.argv[1] | ||||
| wanted_variables = { | ||||
|     'OPENVPN_PROVIDER', | ||||
|     'ENABLE_UFW', | ||||
|     'PUID', | ||||
|     'PGID', | ||||
|     'DROP_DEFAULT_ROUTE', | ||||
|     'GLOBAL_APPLY_PERMISSIONS', | ||||
|     'DOCKER_LOG', | ||||
| } | ||||
|  | ||||
| wantedVariables = ['OPENVPN_PROVIDER', 'ENABLE_UFW', 'PUID', 'PGID', 'DROP_DEFAULT_ROUTE', 'GLOBAL_APPLY_PERMISSIONS', 'DOCKER_LOG'] | ||||
| variables_to_persist = {} | ||||
|  | ||||
| variablesToPersist = {} | ||||
|  | ||||
| for variable in os.environ: | ||||
|     if variable.startswith('TRANSMISSION_'): | ||||
|         variablesToPersist[variable] = os.environ.get(variable) | ||||
|     if variable.startswith('WEBPROXY_'): | ||||
|         variablesToPersist[variable] = os.environ.get(variable) | ||||
|     if variable in wantedVariables: | ||||
|         variablesToPersist[variable] = os.environ.get(variable) | ||||
| for env_var in os.environ: | ||||
|     if env_var.startswith('TRANSMISSION_'): | ||||
|         variables_to_persist[env_var] = os.environ.get(env_var) | ||||
|     elif env_var.startswith('WEBPROXY_'): | ||||
|         variables_to_persist[env_var] = os.environ.get(env_var) | ||||
|     elif env_var in wanted_variables: | ||||
|         variables_to_persist[env_var] = os.environ.get(env_var) | ||||
|  | ||||
|  | ||||
| # Dump resulting settings to file | ||||
| with open(envVarsScriptFile, 'w') as file: | ||||
|     for variable in variablesToPersist: | ||||
|         file.write('export ' + variable + '=' + | ||||
|                    variablesToPersist[variable] + '\n') | ||||
| with open(args.env_var_script_file, 'w') as script_file: | ||||
|     for var_name, var_value in variables_to_persist.items(): | ||||
|         script_file.write( | ||||
|             'export {env_var} = {env_var_value}\n'.format( | ||||
|                 env_var=var_name, | ||||
|                 env_var_value=var_value, | ||||
|             ), | ||||
|         ) | ||||
|   | ||||
| @@ -1,36 +1,70 @@ | ||||
| import argparse | ||||
| import json | ||||
| import os | ||||
| import sys | ||||
| import json | ||||
|  | ||||
| parser = argparse.ArgumentParser( | ||||
|     description='Updates output settings file based on a default file', | ||||
| ) | ||||
|  | ||||
| # Verify script arguments | ||||
| if len(sys.argv) != 3: | ||||
|     sys.exit('Invalid number of arguments. Usage:\n updateSettings.py defaultSettingsFile.json outputSettingsFile.json') | ||||
| parser.add_argument( | ||||
|     'input_file', | ||||
|     type=str, | ||||
|     help='Path to default settings json file', | ||||
| ) | ||||
|  | ||||
| default_settings = sys.argv[1] | ||||
| transmission_settings = sys.argv[2] | ||||
| parser.add_argument( | ||||
|     'output_file', | ||||
|     type=str, | ||||
|     help='Path to output settings json file', | ||||
| ) | ||||
|  | ||||
| args = parser.parse_args() | ||||
| default_settings = args.input_file | ||||
| transmission_settings = args.output_file | ||||
|  | ||||
| # Fail if default settings file doesnt exist. | ||||
| if not os.path.isfile(default_settings): | ||||
|     sys.exit('Invalid arguments, default settings file does not exist') | ||||
|     sys.exit( | ||||
|         'Invalid arguments, default settings file{file} does not exist'.format( | ||||
|             file=default_settings, | ||||
|         ), | ||||
|     ) | ||||
|  | ||||
|  | ||||
| # Define which file to base the config on | ||||
| if os.path.isfile(transmission_settings): | ||||
|     configuration_baseline=transmission_settings | ||||
|     configuration_baseline = transmission_settings | ||||
| else: | ||||
|     configuration_baseline=default_settings | ||||
|     configuration_baseline = default_settings | ||||
|  | ||||
| print('Using config baseline ' + configuration_baseline) | ||||
| print('Using config baseline', configuration_baseline) | ||||
|  | ||||
| # Read config base | ||||
| with open(configuration_baseline, 'r') as f: | ||||
|     settings_dict = json.load(f) | ||||
| with open(configuration_baseline, 'r') as input_file: | ||||
|     settings_dict = json.load(input_file) | ||||
|  | ||||
|  | ||||
| def setting_as_env(setting: str) -> str: | ||||
|     """Get a transmission settings environment variable name.""" | ||||
|     return 'TRANSMISSION_{setting}'.format( | ||||
|         setting=setting.upper().replace('-', '_'), | ||||
|     ) | ||||
|  | ||||
|  | ||||
| # For each setting, check if an environment variable is set to override it | ||||
| for setting in settings_dict: | ||||
|     setting_env_name = 'TRANSMISSION_' + setting.upper().replace('-', '_') | ||||
|     setting_env_name = setting_as_env(setting) | ||||
|     if setting_env_name in os.environ: | ||||
|         print('Overriding ' + setting + ' because ' + setting_env_name + ' is set to ' + os.environ.get(setting_env_name)) | ||||
|         settings_dict[setting] = os.environ.get(setting_env_name) | ||||
|         env_value = os.environ.get(setting_env_name) | ||||
|         print( | ||||
|             'Overriding {setting} because {env_name} is set to {value}'.format( | ||||
|                 setting=setting, | ||||
|                 env_name=setting_env_name, | ||||
|                 value=env_value, | ||||
|             ), | ||||
|         ) | ||||
|         settings_dict[setting] = env_value | ||||
|  | ||||
| # Dump resulting settings to file | ||||
| with open(transmission_settings, 'w') as fp: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user