Genie Learn
genie learn is a powerful tool that can be extensively used to accomplish
stateful network validation across multiple devices, with one linux command.
Genie Ops is used to represent the operational state of a feature using
Python datastructures. genie learn works by to “learning” a feature
configured on a device by executing Genie Ops directly from a linux
terminal.
For each feature, the operational information is collected by executing
multiple show-commands, after which that output is parsed and stored into a
Python datastructure.
To see what functionality genie learn offers, execute the following in your
linux terminal:
(genie) bash-4.1$ genie learn --help
Usage:
genie learn [commands] [options]
Example
-------
genie learn ospf --testbed-file /path/to/testbed.yaml
genie learn ospf --testbed-file /path/to/testbed.yaml --output features_snapshots/ --devices nxos-osv-1
genie learn ospf interface bgp platform --testbed-file /path/to/testbed.yaml --output features_snapshots/
Description:
Learn device feature and parse into Python datastructures
List of available features: https://pubhub.devnetcloud.com/media/genie-feature-browser/docs/#/models
Learn Options:
ops List of Feature to learn, comma separated, ospf,bgp
--testbed-file TESTBED_FILE
specify testbed_file yaml
--devices DEVICE_1 DEVICE_2
space separated, if not provided it will learn on all
devices (Optional)
--output OUTPUT Which directory to store logs, by default it will be current directory
(Optional)
--single-process Learn one device at the time instead of in parallel (Optional)
--via [VIA [VIA ...]]
List of connection to use per device "nxos-1:ssh"
General Options:
-h, --help Show help
-v, --verbose Give more output, additive up to 3 times.
-q, --quiet Give less output, additive up to 3 times, corresponding to WARNING, ERROR,
and CRITICAL logging levels
The following is a complete list of of feature’s available to learn using
genie learn: :models:`Genie Models<http>`. It also provides details on the
Python datastructure that will be built with genie learn for each feature.
Refer to Genie Ops for more information on how Genie Ops works.
Single Feature
The following is an example of how to learn one feature (BGP) on the device
uut:
(genie) bash-4.1$ genie learn bgp --testbed-file /path/to/testbed.yaml --devices nx-osv-1
Learning '['bgp']' on devices '['uut']'
100%|############################################################| 1/1 [00:11<00:00, 11.04s/it]
+==============================================================================+
| Genie Learn Summary for device nx-osv-1 |
+==============================================================================+
| Connected to nx-osv-1 |
| - Log: ./connection_uut.txt |
|------------------------------------------------------------------------------|
| Learnt feature 'bgp' |
| - Ops structure: ./bgp_nxos_nx-osv-1_ops.txt |
| - Device Console: ./bgp_nxos_nx-osv-1_console.txt |
|==============================================================================|
Note
Default behaviour:
genie learnwill save all theOpsobjects that are built, into fileswithin the current directory of execution; unless argument ‘–output’ specifying the directory is provided.
genie learnwill execute on alldevice’s within thetestbedYAML inparallel; unless argument ‘–single-process’ is provided. This will cause
Genieto executeOpssequentially on eachdevice.
Similar to the genie parse mechanism, genie learn generates 3 files:
Unicontelnet connection logdeviceconsole output (for all show commands executed inOps)OpsPython datastructure in JSON.
The following is a snippet of the Ops Python datastructure (in JSON format)
created by genie learn for feature BGP:
(genie) bash-4.1$ more ./bgp_nxos_nx-osv-1_ops.txt
{
"attributes": null,
"commands": null,
"connections": null,
"context_manager": {},
"info": {
"instance": {
"default": {
"bgp_id": 100,
"peer_policy": {
"PP-1": {
"send_community": true,
"soft_reconfiguration": true
}
},
"peer_session": {
"PS-1": {
"disable_connected_check": true
}
},
"protocol_state": "running",
"vrf": {
"VRF1": {
"address_family": {
"ipv4 unicast": {
"label_allocation_mode": "per-vrf",
"nexthop_trigger_delay_critical": 3000,
"nexthop_trigger_delay_non_critical": 10000,
"nexthop_trigger_enable": true
},
"ipv6 unicast": {
"label_allocation_mode": "per-vrf",
"nexthop_trigger_delay_critical": 3000,
"nexthop_trigger_delay_non_critical": 10000,
"nexthop_trigger_enable": true
}
},
"cluster_id": "0.0.0.0",
"confederation_identifier": 0,
"neighbor": {
"55.1.1.101": {
"address_family": {
"ipv4 unicast": {
"as_override": true,
"bgp_table_version": 2,
"session_state": "idle"
}
},
...
A Genie Ops datastructure contains extensive information on the operational
state of the feature on the device. Using genie learn facilitates and
expedites stateful network validation of all features configured on all
device’s in a network.
Multiple Features
genie learn also supports learning multiple features on a multiple device’s
in a testbed as shown in the example below:
(genie) bash-4.1$ genie learn bgp ospf --testbed-file /path/to/testbed.yaml --output genie_learn
Learning '['bgp', 'ospf']' on devices '['nx-osv-1', 'csr1000v-1']
100%|############################################################| 1/1 [00:27<00:00, 27.60s/it]
+==============================================================================+
| Genie Learn Summary for device nx-osv-1 |
+==============================================================================+
| Connected to nx-osv-1 |
| - Log: genie_learn/connection_nx-osv-1.txt |
|------------------------------------------------------------------------------|
| Learnt feature 'bgp' |
| - Ops structure: genie_learn/bgp_nxos_nx-osv-1_ops.txt |
| - Device Console: genie_learn/bgp_nxos_nx-osv-1_console.txt |
|------------------------------------------------------------------------------|
| Learnt feature 'ospf' |
| - Ops structure: genie_learn/ospf_nxos_nx-osv-1_ops.txt |
| - Device Console: genie_learn/ospf_nxos_nx-osv-1_console.txt |
|==============================================================================|
+==============================================================================+
| Genie Learn Summary for device csr1000v-1 |
+==============================================================================+
| Connected to csr1000v-1 |
| - Log: genie_learn/connection_csr1000v-1.txt |
|------------------------------------------------------------------------------|
| Could not learn feature 'bgp' |
| - Exception: genie_learn/bgp_nxos_csr1000v-1_exception.txt |
| - Ops structure: genie_learn/bgp_nxos_csr1000v-1_ops.txt |
| - Device Console: genie_learn/bgp_nxos_csr1000v-1_console.txt |
|------------------------------------------------------------------------------|
| Learnt feature 'ospf' |
| - Ops structure: genie_learn/ospf_nxos_csr1000v-1_ops.txt |
| - Device Console: genie_learn/ospf_nxos_csr1000v-1_console.txt |
|==============================================================================|
genie learn creates a new directory with the name specified within ‘–output’
argument. Within this directory, it creates the Ops output for each feature
on each device.
All Features
genie learn can also be used to learn all the features available within
Genie Ops.
The following is a complete list of of feature’s available to learn using
genie learn: :models:`Genie Models<http>`. It also provides details on the
Python datastructure that will be built with genie learn for each feature.
Here is an example:
(genie) bash-4.1$ genie learn all --testbed-file /path/to/testbed.yaml --devices nx-osv-1 --output genie_learn_all
Learning '['acl', 'bgp', 'dot1x', 'fdb', 'hsrp', 'igmp', 'interface', 'lag', 'lisp', 'lldp', 'mcast', 'mld', 'msdp', 'nd', 'ntp', 'ospf', 'pim', 'platform', 'prefix_list', 'route_policy', 'routing', 'static_routing', 'stp', 'vlan', 'vrf', 'vxlan', 'arp']' on devices '['uut']'
100%|##########################################################| 27/27 [01:49<00:00, 3.94s/it]
+=================================================================================+
| Genie Learn Summary for device nx-osv-1 |
+=================================================================================+
| Connected to nx-osv-1 |
| - Log: genie_learn_all/connection_uut.txt |
|---------------------------------------------------------------------------------|
| Could not learn feature 'acl' |
| - Exception: genie_learn_all/acl_nxos_nx-osv-1_exception.txt |
| - Feature not yet developed for this os |
|---------------------------------------------------------------------------------|
| Learnt feature 'bgp' |
| - Ops structure: genie_learn_all/bgp_nxos_nx-osv-1_ops.txt |
| - Device Console: genie_learn_all/bgp_nxos_nx-osv-1_console.txt |
|---------------------------------------------------------------------------------|
| Could not learn feature 'dot1x' |
| - Exception: genie_learn_all/dot1x_nxos_nx-osv-1_exception.txt |
| - Feature not yet developed for this os |
|---------------------------------------------------------------------------------|
| Could not learn feature 'fdb' |
| - Exception: genie_learn_all/fdb_nxos_nx-osv-1_exception.txt |
| - Feature not yet developed for this os |
|---------------------------------------------------------------------------------|
| Learnt feature 'hsrp' |
| - Ops structure: genie_learn_all/hsrp_nxos_nx-osv-1_ops.txt |
| - Device Console: genie_learn_all/hsrp_nxos_nx-osv-1_console.txt |
|---------------------------------------------------------------------------------|
| Learnt feature 'igmp' |
| - Ops structure: genie_learn_all/igmp_nxos_nx-osv-1_ops.txt |
| - Device Console: genie_learn_all/igmp_nxos_nx-osv-1_console.txt |
|---------------------------------------------------------------------------------|
| Learnt feature 'interface' |
| - Ops structure: genie_learn_all/interface_nxos_nx-osv-1_ops.txt |
| - Device Console: genie_learn_all/interface_nxos_nx-osv-1_console.txt |
|---------------------------------------------------------------------------------|
| Could not learn feature 'lag' |
| - Exception: genie_learn_all/lag_nxos_nx-osv-1_exception.txt |
| - Feature not yet developed for this os |
|---------------------------------------------------------------------------------|
| Could not learn feature 'lisp' |
| - Exception: genie_learn_all/lisp_nxos_nx-osv-1_exception.txt |
| - Feature not yet developed for this os |
|---------------------------------------------------------------------------------|
| Could not learn feature 'lldp' |
| - Exception: genie_learn_all/lldp_nxos_nx-osv-1_exception.txt |
| - Feature not yet developed for this os |
|---------------------------------------------------------------------------------|
| Learnt feature 'mcast' |
| - Ops structure: genie_learn_all/mcast_nxos_nx-osv-1_ops.txt |
| - Device Console: genie_learn_all/mcast_nxos_nx-osv-1_console.txt |
|---------------------------------------------------------------------------------|
| Learnt feature 'mld' |
| - Ops structure: genie_learn_all/mld_nxos_nx-osv-1_ops.txt |
| - Device Console: genie_learn_all/mld_nxos_nx-osv-1_console.txt |
|---------------------------------------------------------------------------------|
| Learnt feature 'msdp' |
| - Ops structure: genie_learn_all/msdp_nxos_nx-osv-1_ops.txt |
| - Device Console: genie_learn_all/msdp_nxos_nx-osv-1_console.txt |
|---------------------------------------------------------------------------------|
| Learnt feature 'nd' |
| - Ops structure: genie_learn_all/nd_nxos_nx-osv-1_ops.txt |
| - Device Console: genie_learn_all/nd_nxos_nx-osv-1_console.txt |
|---------------------------------------------------------------------------------|
| Learnt feature 'ntp' |
| - Ops structure: genie_learn_all/ntp_nxos_nx-osv-1_ops.txt |
| - Device Console: genie_learn_all/ntp_nxos_nx-osv-1_console.txt |
|---------------------------------------------------------------------------------|
| Learnt feature 'ospf' |
| - Ops structure: genie_learn_all/ospf_nxos_nx-osv-1_ops.txt |
| - Device Console: genie_learn_all/ospf_nxos_nx-osv-1_console.txt |
|---------------------------------------------------------------------------------|
| Learnt feature 'pim' |
| - Ops structure: genie_learn_all/pim_nxos_nx-osv-1_ops.txt |
| - Device Console: genie_learn_all/pim_nxos_nx-osv-1_console.txt |
|---------------------------------------------------------------------------------|
| Learnt feature 'platform' |
| - Ops structure: genie_learn_all/platform_nxos_nx-osv-1_ops.txt |
| - Device Console: genie_learn_all/platform_nxos_nx-osv-1_console.txt |
|---------------------------------------------------------------------------------|
| Learnt feature 'prefix_list' |
| - Ops structure: genie_learn_all/prefix_list_nxos_nx-osv-1_ops.txt |
| - Device Console: genie_learn_all/prefix_list_nxos_nx-osv-1_console.txt |
|---------------------------------------------------------------------------------|
| Learnt feature 'route_policy' |
| - Ops structure: genie_learn_all/route_policy_nxos_nx-osv-1_ops.txt |
| - Device Console: genie_learn_all/route_policy_nxos_nx-osv-1_console.txt |
|---------------------------------------------------------------------------------|
| Learnt feature 'routing' |
| - Ops structure: genie_learn_all/routing_nxos_nx-osv-1_ops.txt |
| - Device Console: genie_learn_all/routing_nxos_nx-osv-1_console.txt |
|---------------------------------------------------------------------------------|
| Could not learn feature 'static_routing' |
| - Exception: genie_learn_all/static_routing_nxos_nx-osv-1_exception.txt |
| - Feature not yet developed for this os |
|---------------------------------------------------------------------------------|
| Could not learn feature 'stp' |
| - Exception: genie_learn_all/stp_nxos_nx-osv-1_exception.txt |
| - Feature not yet developed for this os |
|---------------------------------------------------------------------------------|
| Learnt feature 'vlan' |
| - Ops structure: genie_learn_all/vlan_nxos_nx-osv-1_ops.txt |
| - Device Console: genie_learn_all/vlan_nxos_nx-osv-1_console.txt |
|---------------------------------------------------------------------------------|
| Learnt feature 'vrf' |
| - Ops structure: genie_learn_all/vrf_nxos_nx-osv-1_ops.txt |
| - Device Console: genie_learn_all/vrf_nxos_nx-osv-1_console.txt |
|---------------------------------------------------------------------------------|
| Could not learn feature 'vxlan' |
| - Exception: genie_learn_all/vxlan_nxos_nx-osv-1_exception.txt |
| - Ops structure: genie_learn_all/vxlan_nxos_nx-osv-1_ops.txt |
| - Device Console: genie_learn_all/vxlan_nxos_nx-osv-1_console.txt |
|---------------------------------------------------------------------------------|
| Learnt feature 'arp' |
| - Ops structure: genie_learn_all/arp_nxos_nx-osv-1_ops.txt |
| - Device Console: genie_learn_all/arp_nxos_nx-osv-1_console.txt |
|=================================================================================|
genie learn is well equipped with efficient error handling. In the event that
the Genie Ops has not been developed for a certain OS on a certain
feature, genie learn will print a proper error message displaying this to the
user as seen in the exampe above:
|------------------------------------------------------------------------------|
| Could not learn feature 'lisp' |
| - Exception: genie_learn_all/lisp_nxos_nx-osv-1_exception.txt |
| - Feature not yet developed for this os |
|------------------------------------------------------------------------------|
genie learn is a powerful tool that can be extensively used for accomplish
stateful network validation in a few simple steps