Configuration manager for python services.
This module can be used to find and load configuration files based on MICROSERVICE_ENV
(--env) environment variable.
Hermes looks for specified config file in entire CONFIG_PATH and loads an appropriate one.
Import module:
from armada import hermes
Load myconfig.json
.
hermes.get_config('myconfig.json')
{"db_host: "localhost", "db_port": 3306}
If config file is not a json
type, plain string is returned.
Load myconfig.notjson
.
hermes.get_config('myconfig.notjson')
"{\"db_host\": \"localhost\", \"db_port\": 3306}"
If configuration file does not exist in CONFIG_PATH None
is returned.
hermes.get_config('im_sure_it_doesnt_exist')
None
merged configs can load for now only json files
Load myconfig.json
.
hermes.get_merged_config('myconfig.json')
{"db_host: "localhost", "db_port": 3306}
How it works:
if CONFIG_PATH is set to: /example/config/:/example/config/dev/
merged config will look for file in:
- /example/config/myconfig.json
- /example/config/dev/myconfig.json
- /example/config/local/myconfig.json
-
if all of them exists
/example/config/myconfig.json is overwritten by /example/config/dev/myconfig.json, and then result is overwritten by /example/config/local/myconfig.json -
if only one of them exists it will work as hermes.get_config
-
if configuration file does not exist, an empty dict is returned.
hermes.get_merged_config('myconfig.json') {"db_host: "localhost", "db_port": 3306}
if additionaly TEST_ENV is set to true, merged config will look for file in:
- /example/config/myconfig.json
- /example/config/dev/myconfig.json
- /example/config/test/myconfig.json
-
if all of them exists
/example/config/myconfig.json is overwritten by /example/config/dev/myconfig.json, and then result is overwritten by /example/config/test/myconfig.json -
rest is as when TEST_ENV is never set.
Added in version 1.4.
- Config must be a json file.
- Add secrets_manager block to config
"secrets_manager": { "name": "production-example" }
- Add value for specific key in form:
secrets_manager:KEY[:TYPE] "password": "secrets_manager:orders-db/password"
- Install boto3 to get secrets
from boto3 import client sm_client = client('secretsmanager') hermes.get_merged_config( key='config.json', secrets_manager_client=sm_client, )
If you didn't put client as a parameter, but you have installed boto3 we create client for you.
From version 1.7 armada-py supports AWS CLI profiles. If you want to use them to get secrets simply add "aws_profile".
"secrets_manager": {
"name": "production-example",
"aws_profile": "production"
}
KEY in secrets manager can be totally different then key in config.
Default type is 'str'. You don't need to add ':str' to value. Otherwise you need to specify data type.
- str
- int
- bool
- list
- dict
- file
File type - this will create a file with content from secrets manager. Filename will be KEY FROM CONFIG . Value in config for this key will be absolute path to file.
Types usage examples:
"blacklisted_ips": "secrets_manager:cheater-ips:list"
"ssh_key": "secrets_manager:orders-db/ssh-proxy/ci-deploy.key:file"