Giter VIP home page Giter VIP logo

racktables-to-netbox's Introduction

racktables-to-netbox

Scripts to export Racktables data, accessible through a SQL connection, into a Netbox instance, accessible at a URL. An easy way to test NB is with netbox-docker. Some benefits of Netbox are a strictly enforced naming and relationship hierarchy, custom scripts and reports, easy REST API with many wrappers like this one. The migrate.py script will transfer:

  • Racks at sites
  • Device locations in racks and reservations
  • All unracked stuff, notably VMs and clusters
  • Parent child relationships like servers in chassises, patch panels in patch panels
  • IPs, networks, VLANs
  • Interfaces and their associated IP. Note that if an "OS interface" in "IP addresses" is same as "local name" in "ports and links," the interface is not duplicated
  • Connections between interfaces really the 'ports and links' catagory
  • Tags, labels, asset numbers

Files:

migrate.py

Migrate data from RT to NB. Meant to be run once without interuption, although some bools exist to skip steps. Steps that depend on others create cached data on disk, but the best procedure is to fully run once on an empty NB instance. For certain interfaces, names are capitalized or have string replacement. See comments for details or to turn off. If doing debugging and not running the script once, make sure to set MAX_PAGE_SIZE=0 in env/netbox.env so that page fetch limits are disregarded.

Python package requirements: python3 -m pip install python-netbox python-slugify

custom_fields.yml

The file to supply to the Netbox instance for custom fields. Thrse fields are expected by the migrate script and must be there.

vm.py

Update the uniquely named VMs in NB with memory, disk and cpu data from RHEVM instances. Because two VMs can be in separate clusters with the same name and there is no mapping between RT cluster names and RHEVM cluster names, any not uniquely named VM is ignored. Code is there to compare NICs and IPs as well.

Python package requirements python3 -m pip install python-netbox bs4

free.py

List the number of free IP addresses in NB based on the tags on prefixes.

Python package requirements python3 -m pip install python-netbox

Notes on python-netbox:

  • As of July 2021 the pip code is not up to date to the Github repo, so you must manually update the dcim.py file's method create_interface_connection to match the up to date one on Github.
  • As of July 2021 this PR hasn't been merged, so the get_device_bays method is not yet in dcim.py and must be added manually.

racktables-to-netbox's People

Contributors

bandwidth-intern avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

racktables-to-netbox's Issues

netbox.exceptions.ClientException: Invalid value for custom field 'VLAN_Domain_ID': Value must be a string.

I am having trouble importing the custom fields yaml file. I get:

<class 'AttributeError'>

'NoneType' object has no attribute 'app_label'

Python version: 3.9.13
NetBox version: 3.4.5

I have tried to create them manually but am receiving this error when the script is creating the vlan group:

	print("Creating VLAN Groups")
	cursor.execute("SELECT id,description FROM VLANDomain")
	vlans_domains = cursor.fetchall()
	for Id, description in vlans_domains:

		vlan_domain_id_names[Id] = description

		if description not in existing_vlan_groups:
			netbox.ipam.create_vlan_group(name=description, slug=slugify(description), custom_fields= {"VLAN_Domain_ID":Id}) <-- line of error

Here is the data it is collecting from racktables:

mysql> SELECT id,description FROM VLANDomain\G
*************************** 1. row ***************************
id: 5
description: Company name
*************************** 2. row ***************************
id: 7
description: Company name - DR Isolated Network

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.