Config mode scripts vary in the level of control required when merging default values; this adds a middle level of control between automatic merging and explicit merging (example 2, below):
(1) automatic
```
def get_config(config=None):
...
base = ['system', 'conntrack']
conntrack = conf.get_config_dict(base, key_mangling=('-', '_'),
get_first_key=True,
with_recursive_defaults=True)
return conntrack
```
(2) conditional
```
def get_config(config=None):
...
base = ['load-balancing', 'reverse-proxy']
lb = conf.get_config_dict(base,
get_first_key=True,
key_mangling=('-', '_'),
no_tag_node_value_mangle=True)
...
if lb:
lb = conf.merge_defaults(lb, recursive=True)
return lb
```
(3) explicit
```
def get_config(config=none):
...
base = ['system', 'flow-accounting']
if not conf.exists(base):
return None
flow_accounting = conf.get_config_dict(base, key_mangling=('-', '_'), get_first_key=True)
default_values = conf.get_config_defaults(**flow_accounting.options,
recursive=True)
# delete individual flow type defaults - should only be added if user
# sets this feature
for flow_type in ['sflow', 'netflow']:
if flow_type not in flow_accounting and flow_type in default_values:
del default_values[flow_type]
flow_accounting = config_dict_merge(default_values, flow_accounting)
```
Note that as a a variation of the check for flow_type, above, one can also use the test in T5330 --- this was added for use in the `verify` stage, but is useful in `get_config` as well, as it doesn't require checking both dicts, config and default:
```
def get_config(config=None):
...
base = ['load-balancing', 'wan']
lb = conf.get_config_dict(base, key_mangling=('-', '_'),
no_tag_node_value_mangle=True,
get_first_key=True,
with_recursive_defaults=True)
# prune limit key if not set by user
for rule in lb.get('rule', []):
if lb.from_defaults(['rule', rule, 'limit']):
del lb['rule'][rule]['limit']
return lb
```
The `merge_defaults` method has been tested and will be part of the PR for T5319.
WIP:
https://github.com/vyos/vyos-1x/compare/current...jestabro:with-defaults