Skip to main content
Version: Next

Selecting multiple configs from a Config Group

 Example (Click Here)

Problem

In some scenarios, one may need to select multiple configs from the same Config Group.

Solution

Use a list of config names as the value of the config group in the Defaults List or in the command line.

Example

In this example, we configure a server. The server can host multiple websites at the same time.

Config directory
├── config.yaml
└── server
├── apache.yaml
└── site
├── amazon.yaml
├── fb.yaml
└── google.yaml
config.yaml
defaults:
- server/apache





server/apache.yaml
defaults:
- site:
- fb
- google

host: localhost
port: 443
server/site/amazon.yaml
amazon:
domain: amazon.com
server/site/fb.yaml
fb:
domain: facebook.com
server/site/google.yaml
google:
domain: google.com

Output:

$ python my_app.py
server:
site:
fb:
domain: facebook.com
google:
domain: google.com
host: localhost
port: 443

Override the selected sites from the command line by passing a list. e.g:

$ python my_app.py 'server/site=[google,amazon]'
server:
site:
google:
domain: google.com
amazon:
domain: amazon.com
host: localhost
port: 443

Implementation considerations

The following two forms compose the same output:

server/apache.yaml
defaults:
- site:
- fb
- google
Composes like
defaults:
- site/fb
- site/google

Use the nested list form when you want to override the group later with 'server/site=[...]'.

To delete one of these non-overridable entries from the command line, use the exact config path, for example ~server/site/fb.

All default package for all the configs in server/site is server.site. This example uses an explicit nesting level inside each of the website configs to prevent them stepping over one another:

server/site/amazon.yaml
amazon:
...