Feature
In this section, users will learn how to add and configure a Feature
in the Genie
topology.
Introduction
Genie
conf
represents features via Python object. Those objects allow to
configure the feature through object attributes. The Feature
object can be
added on a Device
, an Interface
, or a Link
. Whenever a Feature
is
added on a Link
, the Feature
is configured on all Devices
and
Interfaces
connected to this Link
.
Class
Before continuing with this section, user is encouraged to review and understand the Developer’s Guide, which may be found at Conf developer guide.
A Feature
class has at least two functions: build_config
and
build_unconfig
, both of which will configure or unconfigure a Feature
on
a Device
. The configurations applied on the Device
depend on the
attributes of the Feature
object.
Both of these functions, build_config
and build_unconfig
, accept an argument called
attributes
which restrict which attributes to configure, by default all
attributes are configured.
managedattribute
enhances the attributes to the object by, quite simply,
giving additional powers to the attributes . For example, a managedattribute
can a limited type, or make a variable read-only and so on. This helps with the
standardization of the class. Please refer to managed attributes documentation for more information about the ways a
managedattribute
may enhance the attributes to an object.
Users can apply a single Genie
Feature
object to configure a single
Device
or multiple Devices
. What’s more, is that the configuration for
each Device
may be identical, or different, depending on the user’s needs.
This is controlled with the device_attr
, which is always the first level of
any Conf
object.
Genie’s Feature
object has a layering mechanism, which creates a hierarchy,
allowing each Device
to be configured separately. It can also create a
system of hierarchy which is similar to how a Feature
is actually configured.
The feature hierarchy can have as many layers as the user desires.
Feature
hierarchies are achieved with the help of ref:attribute_helper
.
This is an important subject and users should review this documentation carefully
to fully undestand how to use these objects.
Usage
This section will discuss how to use Feature
objects and how to interconnect them
with Genie
topology objects.
First, the Feature
object must be imported, and then an instance must be created.
Below users will find an example for the feature Rip
.
Note
- The
genie_libs
code can change, so these examples may no longer run at the time you are reading this. However, the idea and its application will remain the same.
from genie.libs.conf.rip.rip import Rip
rip = Rip()
rip.distance = 10
rip.maximum_paths = 15
Once created, the Feature
object can be added on a Device
or a Link
object. Whenever the Feature
object is added to a Link
, it can quickly
propagate similar configurations throughout the topology. For example,
configuring a Feature
on a Link
, will configure all Interfaces
and
Devices
on and apart of the Link
. However, if the Feature
object is added
to a Device
, the configuration is localized only to the particular Device
.
Following the example above, but this time using a Device
:
# assuming two devices already exists,
# adding the feature on the device
>>> dev1.add_feature(rip)
>>> dev2.add_feature(rip)
And this time, using a Link
:
# assuming two devices already exists,
# and connected via a link
>>> link1.add_feature(rip)
This section has showcased how a Feature
is applied in the Genie
topology.
Please refer to the Conf developer guide for further details.