Merge pull request #12 from guewen/add-config-from-env
Add SERVER_ENV_CONFIG to configure vars from env. variable
This commit is contained in:
commit
5cdc84821a
|
|
@ -27,31 +27,84 @@ the incoming and outgoing mail servers depending on the environment.
|
||||||
To install this module, you need to provide a companion module called
|
To install this module, you need to provide a companion module called
|
||||||
`server_environment_files`. You can copy and customize the provided
|
`server_environment_files`. You can copy and customize the provided
|
||||||
`server_environment_files_sample` module for this purpose.
|
`server_environment_files_sample` module for this purpose.
|
||||||
|
You can provide additional options in environment variables
|
||||||
|
``SERVER_ENV_CONFIG`` and ``SERVER_ENV_CONFIG_SECRET``.
|
||||||
|
|
||||||
|
|
||||||
Configuration
|
Configuration
|
||||||
=============
|
=============
|
||||||
|
|
||||||
To configure this module, you need to edit the main configuration file
|
To configure this module, you need to edit the main configuration file
|
||||||
of your instance, and add a directive called `running_env`. Commonly
|
of your instance, and add a directive called ``running_env``. Commonly
|
||||||
used values are 'dev', 'test', 'production'::
|
used values are 'dev', 'test', 'production'::
|
||||||
|
|
||||||
[options]
|
[options]
|
||||||
running_env=dev
|
running_env=dev
|
||||||
|
|
||||||
You should then edit the settings you need in the
|
Values associated to keys containing 'passw' are only displayed in the 'dev'
|
||||||
`server_environment_files` addon. The
|
environment.
|
||||||
`server_environment_files_sample` can be used as an example:
|
|
||||||
|
You have several possibilities to set configuration values:
|
||||||
|
|
||||||
|
server_environment_files
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
You can edit the settings you need in the ``server_environment_files`` addon. The
|
||||||
|
``server_environment_files_sample`` can be used as an example:
|
||||||
|
|
||||||
* values common to all / most environments can be stored in the
|
* values common to all / most environments can be stored in the
|
||||||
`default/` directory using the .ini file syntax;
|
``default/`` directory using the .ini file syntax;
|
||||||
* each environment you need to define is stored in its own directory
|
* each environment you need to define is stored in its own directory
|
||||||
and can override or extend default values;
|
and can override or extend default values;
|
||||||
* finally, you can override or extend values in the main configuration
|
* you can override or extend values in the main configuration
|
||||||
file of you instance.
|
file of your instance;
|
||||||
|
|
||||||
Values associated to keys
|
Environment variable
|
||||||
containing 'passw' are only displayed in the 'dev' environment.
|
--------------------
|
||||||
|
|
||||||
|
You can define configuration in the environment variable ``SERVER_ENV_CONFIG``
|
||||||
|
and/or ``SERVER_ENV_CONFIG_SECRET``. The 2 variables are handled the exact same
|
||||||
|
way, this is only a convenience for the deployment where you can isolate the
|
||||||
|
secrets in a different, encrypted, file. This is a multi-line environment variable
|
||||||
|
in the same configparser format than the files.
|
||||||
|
If you used options in ``server_environment_files``, the options set in the
|
||||||
|
environment variable overrides them.
|
||||||
|
|
||||||
|
The options in the environment variable are not dependent of ``running_env``,
|
||||||
|
the content of the variable must be set accordingly to the running environment.
|
||||||
|
|
||||||
|
Example of setup:
|
||||||
|
|
||||||
|
|
||||||
|
A public file, containing that will contain public variables::
|
||||||
|
|
||||||
|
# These variables are not odoo standard variables,
|
||||||
|
# they are there to represent what your file could look like
|
||||||
|
export WORKERS='8'
|
||||||
|
export MAX_CRON_THREADS='1'
|
||||||
|
export LOG_LEVEL=info
|
||||||
|
export LOG_HANDLER=":INFO"
|
||||||
|
export DB_MAXCONN=5
|
||||||
|
|
||||||
|
# server environment options
|
||||||
|
export SERVER_ENV_CONFIG="
|
||||||
|
[storage_backend.my-sftp]
|
||||||
|
sftp_server=10.10.10.10
|
||||||
|
sftp_login=foo
|
||||||
|
sftp_port=22200
|
||||||
|
directory_path=Odoo
|
||||||
|
"
|
||||||
|
|
||||||
|
A second file which is encrypted and contains secrets::
|
||||||
|
|
||||||
|
# This variable is not an odoo standard variable,
|
||||||
|
# it is there to represent what your file could look like
|
||||||
|
export DB_PASSWORD='xxxxxxxxx'
|
||||||
|
# server environment options
|
||||||
|
export SERVER_ENV_CONFIG_SECRET="
|
||||||
|
[storage_backend.my-sftp]
|
||||||
|
sftp_password=xxxxxxxxx
|
||||||
|
"
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
=====
|
=====
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,8 @@ from .system_info import get_server_environment
|
||||||
from odoo.addons import server_environment_files
|
from odoo.addons import server_environment_files
|
||||||
_dir = os.path.dirname(server_environment_files.__file__)
|
_dir = os.path.dirname(server_environment_files.__file__)
|
||||||
|
|
||||||
|
ENV_VAR_NAMES = ('SERVER_ENV_CONFIG', 'SERVER_ENV_CONFIG_SECRET')
|
||||||
|
|
||||||
# Same dict as RawConfigParser._boolean_states
|
# Same dict as RawConfigParser._boolean_states
|
||||||
_boolean_states = {'1': True, 'yes': True, 'true': True, 'on': True,
|
_boolean_states = {'1': True, 'yes': True, 'true': True, 'on': True,
|
||||||
'0': False, 'no': False, 'false': False, 'off': False}
|
'0': False, 'no': False, 'false': False, 'off': False}
|
||||||
|
|
@ -97,9 +99,21 @@ def _load_config():
|
||||||
config_p.read(conf_files)
|
config_p.read(conf_files)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise Exception('Cannot read config files "%s": %s' % (conf_files, e))
|
raise Exception('Cannot read config files "%s": %s' % (conf_files, e))
|
||||||
|
|
||||||
config_p.read(system_base_config.rcfile)
|
config_p.read(system_base_config.rcfile)
|
||||||
config_p.remove_section('options')
|
config_p.remove_section('options')
|
||||||
|
|
||||||
|
for varname in ENV_VAR_NAMES:
|
||||||
|
env_config = os.getenv(varname)
|
||||||
|
if env_config:
|
||||||
|
try:
|
||||||
|
config_p.read_string(env_config)
|
||||||
|
except configparser.Error as err:
|
||||||
|
raise Exception(
|
||||||
|
'%s content could not be parsed: %s'
|
||||||
|
% (varname, err,)
|
||||||
|
)
|
||||||
|
|
||||||
return config_p
|
return config_p
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue