Configuration for a service¶
Using environment variables¶
A common way to pass configurations to software running in a container are environment variables. Those can easily be
configured in an file called .env
. See Deployment configuration - deployment.yaml for more information about passing environment
variables to the container.
We recommend to use environment variables for small configurations where only a few settings are needed and no complex structures like large lists, etc. are neccessary. Larger configurations should use yaml-files (s. next section).
Reading environment variables is fairly easy in Python, just use os.environ.get('YOUR_ENV_VAR')
. In this framework
a slightly more complex solution has been chosen for better documentation, usage within integration tests and
maintainability:
FASTIOT_MY_ENV_VAR = 'FASTIOT_MY_ENV_VAR'
class MyEnv:
@property
def my_variable() -> int:
""" .. envvar:: FASTIOT_MY_ENV_VAR
use this to add some documentation on your variable!
"""
return int(os.environ.get(FASTIOT_MY_ENV_VAR, 0)
my_env = MyEnv()
# Using is now quiet comfortable anywhere in your code:
my_var = my_env.my_variable
Using YAML-Files¶
YAML, for yet another markup language, allows for more complex setups.
Reading a yaml-file is pretty easy, using fastiot.util.read_yaml.read_config()
.
Please pay attention when instantiating multiple instances of a service. Each service needs to have the environment
variable FASTIOT_SERVICE_ID
set, resulting in reading out different configuration files for each service.