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 hashes)

Uploaded Source

Built Distribution

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

Uploaded Python 3

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