Netbox Get Containerlab Inventory Task¤
task api name:
get_containerlab_inventory
This task designed to provide Containerlab workers with inventory data sourced from Netbox to deploy lab topologies.
Get Containerlab Inventory Sample Usage¤
Below is an example of how to fetch Containerlab topology inventory data from Netbox for two devices named fceos4 and fceos5.
nf#netbox get containerlab-inventory devices fceos4 fceos5 lab-name foobar
--------------------------------------------- Job Events -----------------------------------------------
31-May-2025 13:10:14.477 7d434ed4e24c4a69af5d52797d7a187e job started
31-May-2025 13:10:14.525 INFO netbox-worker-1.1 running netbox.get_containerlab_inventory - Fetching devices data from Netbox
31-May-2025 13:10:14.594 INFO netbox-worker-1.1 running netbox.get_containerlab_inventory - Node added fceos4
31-May-2025 13:10:14.600 INFO netbox-worker-1.1 running netbox.get_containerlab_inventory - Node added fceos5
31-May-2025 13:10:14.606 INFO netbox-worker-1.1 running netbox.get_containerlab_inventory - Fetching connections data from Netbox
31-May-2025 13:10:15.211 INFO netbox-worker-1.1 running netbox.get_containerlab_inventory - Link added fceos5:eth1 - fceos4:eth1
31-May-2025 13:10:15.217 INFO netbox-worker-1.1 running netbox.get_containerlab_inventory - Link added fceos5:eth2 - fceos4:eth2
31-May-2025 13:10:15.225 INFO netbox-worker-1.1 running netbox.get_containerlab_inventory - Link added fceos5:eth3 - fceos4:eth3
31-May-2025 13:10:15.232 INFO netbox-worker-1.1 running netbox.get_containerlab_inventory - Link added fceos5:eth4 - fceos4:eth4
31-May-2025 13:10:15.238 INFO netbox-worker-1.1 running netbox.get_containerlab_inventory - Link added fceos5:eth6 - fceos4:eth6
31-May-2025 13:10:15.244 INFO netbox-worker-1.1 running netbox.get_containerlab_inventory - Link added fceos5:eth7 - fceos4:eth7
31-May-2025 13:10:15.250 INFO netbox-worker-1.1 running netbox.get_containerlab_inventory - Link added fceos5:eth8 - fceos4:eth101
31-May-2025 13:10:15.257 INFO netbox-worker-1.1 running netbox.get_containerlab_inventory - Link added fceos5:eth11 - fceos4:eth11
31-May-2025 13:10:15.580 INFO netbox-worker-1.1 running netbox.get_containerlab_inventory - Renaming fceos4 interfaces
31-May-2025 13:10:15.587 INFO netbox-worker-1.1 running netbox.get_containerlab_inventory - Renaming fceos5 interfaces
31-May-2025 13:10:15.808 7d434ed4e24c4a69af5d52797d7a187e job completed in 1.331 seconds
--------------------------------------------- Job Results --------------------------------------------
netbox-worker-1.1:
mgmt:
ipv4-subnet: 172.100.100.0/24
network: br-foobar
name: foobar
topology:
links:
- endpoints:
- interface: eth1
node: fceos5
- interface: eth1
node: fceos4
type: veth
- endpoints:
- interface: eth2
node: fceos5
- interface: eth2
node: fceos4
type: veth
- endpoints:
- interface: eth3
node: fceos5
- interface: eth3
node: fceos4
type: veth
- endpoints:
- interface: eth4
node: fceos5
- interface: eth4
node: fceos4
type: veth
- endpoints:
- interface: eth6
node: fceos5
- interface: eth6
node: fceos4
type: veth
- endpoints:
- interface: eth7
node: fceos5
- interface: eth7
node: fceos4
type: veth
- endpoints:
- interface: eth8
node: fceos5
- interface: eth101
node: fceos4
type: veth
- endpoints:
- interface: eth11
node: fceos5
- interface: eth11
node: fceos4
type: veth
nodes:
fceos4:
image: ceosimage:4.30.0F
kind: ceos
mgmt-ipv4: 172.100.100.2
ports:
- 12000:22/tcp
- 12001:23/tcp
- 12002:80/tcp
- 12003:161/udp
- 12005:830/tcp
- 12006:8080/tcp
fceos5:
image: ceosimage:4.30.0F
kind: ceos
mgmt-ipv4: 172.100.100.3
ports:
- 12007:22/tcp
- 12008:23/tcp
- 12009:80/tcp
- 12010:161/udp
- 12011:443/tcp
- 12012:830/tcp
- 12013:8080/tcp
nf#
NORFAB Netbox Get Containerlab Inventory Command Shell Reference¤
NorFab shell supports these command options for Netbox get_containerlab_inventory task:
nf#man tree netbox.get.containerlab-inventory
root
└── netbox: Netbox service
└── get: Query data from Netbox
└── containerlab-inventory: Query Netbox and construct Containerlab inventory
├── timeout: Job timeout
├── workers: Filter worker to target, default 'any'
├── verbose-result: Control output details, default 'False'
├── lab-name: Lab name to generate lab inventory for
├── tenant: Tenant name to generate lab inventory for
│ ├── tenant: Filter devices by tenants
│ ├── device-name-contains: Filter devices by name pattern
│ ├── model: Filter devices by models
│ ├── platform: Filter devices by platforms
│ ├── region: Filter devices by regions
│ ├── role: Filter devices by roles
│ ├── site: Filter devices by sites
│ ├── status: Filter devices by statuses
│ └── tag: Filter devices by tags
├── devices: List of devices to generate lab inventory for
├── progress: Display progress events, default 'True'
├── netbox-instance: Name of Netbox instance to pull inventory from
├── ipv4-subnet: IPv4 management subnet to use for lab, default '172.100.100.0/24'
├── image: Docker image to use for all nodes
└── ports: Range of TCP/UDP ports to use for nodes, default '[12000, 13000]'
nf#
Python API Reference¤
Retrieve and construct Containerlab inventory from NetBox data.
Containerlab node details must be defined under device configuration
context norfab.containerlab path, for example:
{
"norfab": {
"containerlab": {
"kind": "ceos",
"image": "ceos:latest",
"mgmt-ipv4": "172.100.100.10/24",
"ports": [
{10000: 22},
{10001: 830}
],
... any other node parameters ...
"interfaces_rename": [
{
"find": "eth",
"replace": "Eth",
"use_regex": false
}
]
}
}
}
For complete list of parameters refer to Containerlab nodes definition.
Special handling given to these parameters:
lab_name- if not provided usestenantargument value as a lab namekind- uses device platform field value by defaultimage- usesimagevalue if provided, otherwise uses{kind}:latestinterfaces_rename- a list of one or more interface renaming instructions, each item must havefindandreplacedefined, optionaluse_regexflag specifies whether to use regex based pattern substitution.
To retrieve topology data from Netbox at least one of these arguments must be provided to identify a set of devices to include into Containerlab topology:
tenant- topology constructed using all devices and links that belong to this tenantdevices- creates topology only using devices in the listsfilters- list of device filters to retrieve from Netbox and add to topology
If multiple of above arguments provided, resulting lab topology is a sum of all devices matched.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
job
|
Job
|
NorFab Job object containing relevant metadata |
required |
lab_name
|
(str, Mandatory)
|
Name of containerlab to construct inventory for. |
None
|
tenant
|
str
|
Construct topology using given tenant's devices |
None
|
filters
|
list
|
List of filters to apply when retrieving devices from NetBox. |
None
|
devices
|
list
|
List of specific devices to retrieve from NetBox. |
None
|
instance
|
str
|
NetBox instance to use. |
None
|
image
|
str
|
Default containerlab image to use, |
None
|
ipv4_subnet
|
(str, Optional)
|
Management subnet to use to IP number nodes starting with 2nd IP in the subnet, in assumption that 1st IP is a default gateway. |
'172.100.100.0/24'
|
ports
|
(tuple, Optional)
|
Ports range to use for nodes. |
(12000, 15000)
|
ports_map
|
(dict, Optional)
|
dictionary keyed by node name with list of ports maps to use, |
None
|
cache
|
Union[bool, str]
|
Cache usage options:
|
False
|
Returns:
| Name | Type | Description |
|---|---|---|
dict |
Result
|
Containerlab inventory dictionary containing lab topology data |
Source code in norfab\workers\netbox_worker\containerlab_inventory_tasks.py
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 | |