(netlab-defaults)= # Display and Change System Defaults **netlab defaults** provides a **sysctl**-like CLI interface for [netlab default settings](topo-defaults). You can use this command to: * Display all defaults or a subset of defaults * Display the source of each default setting * Change a default setting in the specified default datastore. ```eval_rst .. contents:: Table of Contents :depth: 2 :local: :backlinks: none ``` ## Usage ```text usage: netlab defaults [-h] [-r] [--delete] [-s] [--directory] [--project] [--user] [--system] [--package] [--yes] [--yaml] [setting] Manage netlab default settings positional arguments: setting Specify setting to set (with s=v) or display (can be a glob) options: -h, --help show this help message and exit -r, --regex Display default settings matching a regular expression --delete Delete the settings matching the specified pattern from the specified datastore -s, --source Display the source of the default setting --directory Display or store settings from the current directory --project Display or store settings from the current project defaults --user Display or store settings from the user default file --system Display or store settings from the system default file --package Display settings included in netlab package --yes Overwrite existing settings without a confirmation --yaml Store changed defaults in expanded YAML format ``` ```{note} * When you use the `--project` parameter, **‌netlab defaults** tries to find the defaults used in the current project (for example, BGP or IS-IS labs), either **‌defaults.yml** in the current directory or the first element in the **‌defaults.sources.extra** list in the default lab topology file (**topology.yml**) in the current directory. * Do not use `--yaml` with `--delete`. Empty parent dictionaries of the deleted settings would not be removed, resulting in potentially incorrect data structures. ``` ## Displaying the Default Settings You can display a subset of defaults (specify the **setting** parameter) or all defaults, either from all default sources, or from the source defined with the CLI flags `--directory` through `--package`. You can also inspect how various default sources change the default values with the `--source` flag. For example, to display all defaults changed in the user default file (`~/.netlab.yml`), use **netlab defaults --user**: ``` $ netlab defaults --user devices.arubacx.clab.image = vrnetlab/vr-aoscx:20240129204649 (user) devices.csr.clab.image = vrnetlab/cisco_csr1000v:17.03.08 (user) devices.nxos.clab.image = vrnetlab/vr-n9kv:9.3.10 (user) devices.vptx.clab.image = vrnetlab/juniper_vjunosevolved:23.2R2.21-EVO (user) devices.vsrx.clab.image = vrnetlab/juniper_vsrx:junos-vsrx-21.4R1.12 (user) ``` To display all sources of `devices.csr.clab.image` setting, use the **netlab defaults --source** command with the exact name of the parameter you're interested in: ``` $ netlab defaults --source devices.csr.clab.image devices.csr.clab.image = vrnetlab/vr-csr:17.03.04 (netlab) devices.csr.clab.image = vrnetlab/cisco_csr1000v:17.03.08 (user) ``` Specify a default prefix to display a subset of defaults. For example, to display Arista EOS EVPN features, use **devices.eos.features.evpn** parameter: ``` $ netlab defaults devices.eos.features.evpn devices.eos.features.evpn.asymmetrical_irb = True devices.eos.features.evpn.bundle = ['vlan_aware'] devices.eos.features.evpn.irb = True ``` You can also use glob expressions to select the parameters you want to display. For example, use `*clab.image*` to display all containerlab image settings: ``` $ netlab defaults '*clab.image' daemons.bird.clab.image = netlab/bird:latest daemons.dnsmasq.clab.image = netlab/dnsmasq:latest devices.arubacx.clab.image = vrnetlab/vr-aoscx:20240129204649 devices.cat8000v.clab.image = vrnetlab/vr-c8000v:17.13.01a devices.csr.clab.image = vrnetlab/cisco_csr1000v:17.03.08 devices.cumulus.clab.image = networkop/cx:4.4.0 devices.cumulus_nvue.clab.image = networkop/cx:5.3.0 devices.dellos10.clab.image = vrnetlab/vr-ftosv devices.eos.clab.image = ceos:4.33.1F ... ``` Finally, use the `--regex` flag to specify the default settings as a regular expression, for example: ``` $ netlab defaults --regex 'evpn.*irb' devices.arubacx.features.evpn.asymmetrical_irb = True devices.arubacx.features.evpn.irb = True devices.cumulus.features.evpn.asymmetrical_irb = True devices.cumulus.features.evpn.irb = True devices.cumulus_nvue.features.evpn.asymmetrical_irb = True devices.cumulus_nvue.features.evpn.irb = True devices.dellos10.features.evpn.asymmetrical_irb = True devices.dellos10.features.evpn.irb = True ... ``` ## Changing Default Values Use **netlab defaults parameter=value** to change a default value. With no additional parameters, **netlab defaults** finds the most specific default datastore (from directory to user) and stores the modified parameter in that datastore. For example, with no per-user default information, the **netlab defaults provider=clab** command stores the setting in the user defaults file: ``` $ netlab defaults provider=clab The default setting provider is already set in netlab defaults Do you want to change that setting in user defaults [y/n]: y provider set to clab in /home/me/.netlab.yml ``` You can specify the default datastore to modify with the `--directory` through `--system` parameter. For example, use **netlab defaults --directory device=eos** to set the default device for topologies in the current directory: ``` $ netlab defaults --directory device=eos device set to eos in /home/me/SomePath/topology-defaults.yml ``` The **netlab defaults** command accepts scalar and list values. You can use the following commands to inspect and modify the **bgp.warnings.igp_list** parameter: ``` $ netlab defaults bgp.warnings.igp_list bgp.warnings.igp_list = ['ospf', 'eigrp', 'isis', 'ripv2'] $ netlab defaults bgp.warnings.igp_list='[ospf,isis]' The default setting bgp.warnings.igp_list is already set in netlab defaults Do you want to change that setting in user defaults [y/n]: y bgp.warnings.igp_list set to ['ospf', 'isis'] in /Users/me/.netlab.yml $ netlab defaults bgp.warnings.igp_list --source bgp.warnings.igp_list = ['ospf', 'eigrp', 'isis', 'ripv2'] (netlab) bgp.warnings.igp_list = ['ospf', 'isis'] (user) ``` ## Deleting Default Settings **netlab defaults --delete** allows you to delete one or more default parameters from all default files but the built-in system defaults. The command expects two arguments: * The default file you want to change (`--directory` through `--system`) * A pattern specifying one or more default settings to delete. For example, use **netlab defaults --delete --project device** to delete the default device setting from the project defaults: ``` $ netlab defaults --project --delete device The following settings will be deleted from the project defaults: device: frr Do you want to delete these settings [y/n]: y The specified settings were deleted from /home/me/BGP/defaults.yml ```