this MR will drop compatibility with versions < 2.9
This commit is contained in:
parent
95d7f98389
commit
9eafcbf215
3 changed files with 26 additions and 59 deletions
|
@ -1,5 +1,5 @@
|
|||
import netbox_agent.dmidecode as dmidecode
|
||||
from netbox_agent.config import config
|
||||
from netbox_agent.config import config, netbox_instance as nb
|
||||
from netbox_agent.logging import logging # NOQA
|
||||
from netbox_agent.vendors.dell import DellHost
|
||||
from netbox_agent.vendors.generic import GenericHost
|
||||
|
@ -8,6 +8,8 @@ from netbox_agent.vendors.qct import QCTHost
|
|||
from netbox_agent.vendors.supermicro import SupermicroHost
|
||||
from netbox_agent.virtualmachine import VirtualMachine, is_vm
|
||||
|
||||
from packaging import version
|
||||
|
||||
MANUFACTURERS = {
|
||||
'Dell Inc.': DellHost,
|
||||
'HP': HPHost,
|
||||
|
@ -32,6 +34,10 @@ def run(config):
|
|||
except KeyError:
|
||||
server = GenericHost(dmi=dmi)
|
||||
|
||||
if version.parse(nb.version) < version.parse('2.9'):
|
||||
print('netbox-agent is not compatible with Netbox prior to verison 2.9')
|
||||
return False
|
||||
|
||||
if config.debug:
|
||||
server.print_debug()
|
||||
if config.register or config.update_all or config.update_network or config.update_location or \
|
||||
|
|
|
@ -12,11 +12,8 @@ from netbox_agent.ethtool import Ethtool
|
|||
from netbox_agent.ipmi import IPMI
|
||||
from netbox_agent.lldp import LLDP
|
||||
|
||||
from packaging import version
|
||||
|
||||
class Network(object):
|
||||
def __init__(self, server, *args, **kwargs):
|
||||
self.netbox_version = nb.version
|
||||
self.nics = []
|
||||
|
||||
self.server = server
|
||||
|
@ -91,7 +88,8 @@ class Network(object):
|
|||
mac = open('/sys/class/net/{}/address'.format(interface), 'r').read().strip()
|
||||
vlan = None
|
||||
if len(interface.split('.')) > 1:
|
||||
vlan = int(interface.split('.')[1])
|
||||
vlan = interface.split('.')[1]
|
||||
|
||||
bonding = False
|
||||
bonding_slaves = []
|
||||
if os.path.isdir('/sys/class/net/{}/bonding'.format(interface)):
|
||||
|
@ -231,7 +229,7 @@ class Network(object):
|
|||
type(interface.mode) is not int and (
|
||||
interface.mode.value == self.dcim_choices['interface:mode']['Access'] or
|
||||
len(interface.tagged_vlans) != 1 or
|
||||
interface.tagged_vlans[0].vid != vlan_id)):
|
||||
int(interface.tagged_vlans[0].vid) != int(vlan_id))):
|
||||
logging.info('Resetting tagged VLAN(s) on interface {interface}'.format(
|
||||
interface=interface))
|
||||
update = True
|
||||
|
@ -327,14 +325,9 @@ class Network(object):
|
|||
query_params = {
|
||||
'address': ip,
|
||||
'status': "active",
|
||||
'assigned_object_type': self.assigned_object_type,
|
||||
'assigned_object_id': interface.id
|
||||
}
|
||||
if version.parse(self.netbox_version) > version.parse('2.8'):
|
||||
query_params.update({
|
||||
'assigned_object_type': self.assigned_object_type,
|
||||
'assigned_object_id': interface.id
|
||||
})
|
||||
else:
|
||||
query_params.update({'interface_id': interface.id})
|
||||
|
||||
netbox_ip = nb.ipam.ip_addresses.create(
|
||||
**query_params
|
||||
|
@ -361,14 +354,9 @@ class Network(object):
|
|||
"status": "active",
|
||||
"role": self.ipam_choices['ip-address:role']['Anycast'],
|
||||
"tenant": self.tenant.id if self.tenant else None,
|
||||
"assigned_object_type": self.assigned_object_type,
|
||||
"assigned_object_id": interface.id
|
||||
}
|
||||
if version.parse(self.netbox_version) > version.parse('2.8'):
|
||||
query_params.update({
|
||||
'assigned_object_type': self.assigned_object_type,
|
||||
'assigned_object_id': interface.id
|
||||
})
|
||||
else:
|
||||
query_params.update({'interface': interface.id})
|
||||
netbox_ip = nb.ipam.ip_addresses.create(**query_params)
|
||||
return netbox_ip
|
||||
else:
|
||||
|
@ -378,11 +366,7 @@ class Network(object):
|
|||
ip=ip, interface=interface))
|
||||
elif hasattr(netbox_ip, 'interface') and netbox_ip.interface.id != interface.id or \
|
||||
hasattr(netbox_ip, 'assigned_object') and netbox_ip.assigned_object_id != interface.id:
|
||||
if version.parse(self.netbox_version) > version.parse('2.8'):
|
||||
old_interface = netbox_ip.assigned_object
|
||||
else:
|
||||
old_interface = netbox_ip.interface
|
||||
|
||||
old_interface = netbox_ip.assigned_object
|
||||
logging.info(
|
||||
'Detected interface change for ip {ip}: old interface is '
|
||||
'{old_interface} (id: {old_id}), new interface is {new_interface} '
|
||||
|
@ -394,11 +378,8 @@ class Network(object):
|
|||
else:
|
||||
return netbox_ip
|
||||
|
||||
if version.parse(self.netbox_version) > version.parse('2.8'):
|
||||
netbox_ip.assigned_object_type = self.assigned_object_type
|
||||
netbox_ip.assigned_object_id = interface.id
|
||||
else:
|
||||
netbox_ip.interface = interface
|
||||
netbox_ip.assigned_object_type = self.assigned_object_type
|
||||
netbox_ip.assigned_object_id = interface.id
|
||||
netbox_ip.save()
|
||||
return netbox_ip
|
||||
|
||||
|
@ -420,14 +401,9 @@ class Network(object):
|
|||
|
||||
# delete IP on netbox that are not known on this server
|
||||
if len(nb_nics):
|
||||
if version.parse(self.netbox_version) > version.parse('2.8'):
|
||||
netbox_ips = nb.ipam.ip_addresses.filter(
|
||||
**{self.intf_type: [x.id for x in nb_nics]}
|
||||
)
|
||||
else:
|
||||
netbox_ips = nb.ipam.ip_addresses.filter(
|
||||
interface_id=[x.id for x in nb_nics],
|
||||
)
|
||||
netbox_ips = nb.ipam.ip_addresses.filter(
|
||||
**{self.intf_type: [x.id for x in nb_nics]}
|
||||
)
|
||||
|
||||
netbox_ips = list(netbox_ips)
|
||||
all_local_ips = list(chain.from_iterable([
|
||||
|
@ -435,15 +411,10 @@ class Network(object):
|
|||
]))
|
||||
for netbox_ip in netbox_ips:
|
||||
if netbox_ip.address not in all_local_ips:
|
||||
if version.parse(self.netbox_version) < version.parse('2.9'):
|
||||
logging.info('Unassigning IP {ip} from {interface}'.format(
|
||||
ip=netbox_ip.address, interface=netbox_ip.interface))
|
||||
netbox_ip.interface = None
|
||||
else:
|
||||
logging.info('Unassigning IP {ip} from {interface}'.format(
|
||||
ip=netbox_ip.address, interface=netbox_ip.assigned_object))
|
||||
netbox_ip.assigned_object_type = None
|
||||
netbox_ip.assigned_object_id = None
|
||||
logging.info('Unassigning IP {ip} from {interface}'.format(
|
||||
ip=netbox_ip.address, interface=netbox_ip.assigned_object))
|
||||
netbox_ip.assigned_object_type = None
|
||||
netbox_ip.assigned_object_id = None
|
||||
netbox_ip.save()
|
||||
|
||||
# update each nic
|
||||
|
@ -537,10 +508,7 @@ class ServerNetwork(Network):
|
|||
return nb_server_interface
|
||||
|
||||
try:
|
||||
if version.parse(self.netbox_version) > version.parse('2.8'):
|
||||
nb_switch = nb_mgmt_ip.assigned_object.device
|
||||
else:
|
||||
nb_switch = nb_mgmt_ip.interface.device
|
||||
nb_switch = nb_mgmt_ip.assigned_object.device
|
||||
logging.info('Found a switch in Netbox based on LLDP infos: {} (id: {})'.format(
|
||||
switch_ip,
|
||||
nb_switch.id
|
||||
|
|
|
@ -13,9 +13,6 @@ from netbox_agent.misc import create_netbox_tags, get_device_role, get_device_ty
|
|||
from netbox_agent.network import ServerNetwork
|
||||
from netbox_agent.power import PowerSupply
|
||||
|
||||
from packaging import version
|
||||
|
||||
|
||||
class ServerBase():
|
||||
def __init__(self, dmi=None):
|
||||
if dmi:
|
||||
|
@ -32,7 +29,6 @@ class ServerBase():
|
|||
|
||||
self.tags = list(set([x.strip() for x in config.device.tags.split(',') if x.strip()])) if config.device.tags else []
|
||||
self.nb_tags = list(create_netbox_tags(self.tags))
|
||||
self.netbox_version = nb.version
|
||||
|
||||
def get_tenant(self):
|
||||
tenant = Tenant()
|
||||
|
@ -387,10 +383,7 @@ class ServerBase():
|
|||
|
||||
if sorted(set([x.name for x in server.tags])) != sorted(set(self.tags)):
|
||||
update += 1
|
||||
if version.parse(self.netbox_version) > version.parse('2.8'):
|
||||
server.tags = [x.id for x in self.nb_tags]
|
||||
else:
|
||||
server.tags = self.tags
|
||||
server.tags = [x.id for x in self.nb_tags]
|
||||
|
||||
if config.update_all or config.update_location:
|
||||
ret, server = self.update_netbox_location(server)
|
||||
|
|
Loading…
Reference in a new issue