Skip to main content

Netbox Plugin to store textfiles(e.g. configs) alongside devices

Project description

netbox_textdatastore

Store raw text files for devices, like configuration files, unparsed command output or test results

TextData Object: ''' { "id": Int, # unique id "name": String, # Object Name, eg "device config" 'device': Device ID, # Device ID from Netbox 'hash': String, # Hash of your Text Data 'data': String, # Your text data, eg Device Configfile } '''

Example:

extend python-netbox

https://github.com/jagter/python-netbox

''' from netbox import NetBox as NetBoxOrig

class textdata(object):

def __init__(self, netbox_con):
    self.netbox_con = netbox_con

def get_data(self, **kwargs):
    return self.netbox_con.get('/plugins/textdata/data/', **kwargs)

def add_data(self, device, name, hash, data,  **kwargs):
    required_fields = {
        "name": name,
        'device': device,
        'hash': hash,
        'data': data,
        }
    print(required_fields)

    return self.netbox_con.post(
        '/plugins/textdata/data/',
        required_fields,
        **kwargs
    )

def update_data_id(self, pk, **kwargs):
    return self.netbox_con.patch(
        '/plugins/textdata/data/',
        pk,
        **kwargs
    )

class NetBox(NetBoxOrig):

def __init__(self, host, **kwargs):
    super().__init__(host, **kwargs)
    self.textdata = textdata(self.connection)

'''

use it in napalm

''' def store_config(task, obj, content): """store config to netbox"""

hasher = md5()
hasher.update(content.encode('utf-8'))
hash = hasher.hexdigest()
device_id = task.host.data["id"]
res = obj.netbox.textdata.get_data(
    device_id=device_id,
    name="device config"
)
if(len(res) > 0):
    res = res[0]
    if(res["hash"] == hash):
        print("No change")
        return
    print(obj.netbox.textdata.update_data_id(
        pk=res["pk"],
        data=content,
        hash=hash
    ))
    return
print(obj.netbox.textdata.add_data(
    device=device_id,
    name="device config",
    hash=hash,
    data=content
))

def backup_config(task, obj): """ get config from devices"""

from nornir_napalm.plugins.tasks import napalm_get
device_config = task.run(task=napalm_get, getters=["config"])
task.run(
    task=store_config,
    obj=obj,
    content=device_config.result["config"]["running"]
)

'''

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

netbox_textdatastore-0.0.5.tar.gz (13.3 kB view details)

Uploaded Source

Built Distribution

netbox_textdatastore-0.0.5-py3-none-any.whl (15.4 kB view details)

Uploaded Python 3

File details

Details for the file netbox_textdatastore-0.0.5.tar.gz.

File metadata

  • Download URL: netbox_textdatastore-0.0.5.tar.gz
  • Upload date:
  • Size: 13.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.11

File hashes

Hashes for netbox_textdatastore-0.0.5.tar.gz
Algorithm Hash digest
SHA256 b98503f30abe5af1f3047f720044d160b31d8336820574901fd6ecfdbcac4415
MD5 2a01be8dfd1261454b1d2d8afc16d49a
BLAKE2b-256 ff66021d4f5378455dd69970799a661183eaff86b9a338a28281d00264ee03c1

See more details on using hashes here.

File details

Details for the file netbox_textdatastore-0.0.5-py3-none-any.whl.

File metadata

File hashes

Hashes for netbox_textdatastore-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 32b4965ef7b66ed46b788b3aad67e43ba04006ec55debe61a961686fe7626283
MD5 a1a7bef377e22251fc2381e689dae477
BLAKE2b-256 04ad9e6e5044df7e152763971ae5b7270dbd71a1c9ad06dabc76bafdff85a45c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page