new config system (#53)
This commit is contained in:
parent
c5707e8413
commit
d12ac49d50
9 changed files with 177 additions and 120 deletions
|
@ -1,52 +1,65 @@
|
|||
import logging
|
||||
import pynetbox
|
||||
import yaml
|
||||
|
||||
with open('/etc/netbox_agent.yaml', 'r') as ymlfile:
|
||||
# FIXME: validate configuration file
|
||||
config = yaml.load(ymlfile)
|
||||
|
||||
netbox_instance = pynetbox.api(
|
||||
url=config['netbox']['url'],
|
||||
token=config['netbox']['token']
|
||||
)
|
||||
|
||||
LOG_LEVEL = config.get('log_level', 'debug')
|
||||
|
||||
DATACENTER_LOCATION_DRIVER_FILE = None
|
||||
DATACENTER_LOCATION = None
|
||||
DATACENTER_LOCATION_REGEX = None
|
||||
RACK_LOCATION_DRIVER_FILE = None
|
||||
RACK_LOCATION = None
|
||||
RACK_LOCATION_REGEX = None
|
||||
SLOT_LOCATION_DRIVER_FILE = None
|
||||
SLOT_LOCATION = None
|
||||
SLOT_LOCATION_REGEX = None
|
||||
|
||||
if config.get('datacenter_location'):
|
||||
dc_loc = config.get('datacenter_location')
|
||||
DATACENTER_LOCATION_DRIVER_FILE = dc_loc.get('driver_file')
|
||||
DATACENTER_LOCATION = dc_loc.get('driver')
|
||||
DATACENTER_LOCATION_REGEX = dc_loc.get('regex')
|
||||
|
||||
if config.get('rack_location'):
|
||||
rack_location = config['rack_location']
|
||||
RACK_LOCATION_DRIVER_FILE = rack_location.get('driver_file')
|
||||
RACK_LOCATION = rack_location.get('driver')
|
||||
RACK_LOCATION_REGEX = rack_location.get('regex')
|
||||
|
||||
if config.get('slot_location'):
|
||||
slot_location = config['slot_location']
|
||||
SLOT_LOCATION_DRIVER_FILE = slot_location.get('driver_file')
|
||||
SLOT_LOCATION = slot_location.get('driver')
|
||||
SLOT_LOCATION_REGEX = slot_location.get('regex')
|
||||
import jsonargparse
|
||||
import sys
|
||||
|
||||
|
||||
NETWORK_IGNORE_INTERFACES = None
|
||||
NETWORK_IGNORE_IPS = None
|
||||
NETWORK_LLDP = None
|
||||
if config.get('network'):
|
||||
NETWORK_IGNORE_INTERFACES = config['network'].get('ignore_interfaces')
|
||||
NETWORK_IGNORE_IPS = config['network'].get('ignore_ips')
|
||||
NETWORK_LLDP = config['network'].get('lldp') is True
|
||||
def get_config():
|
||||
p = jsonargparse.ArgumentParser(
|
||||
default_config_files=[
|
||||
'/etc/netbox_agent.yaml',
|
||||
'~/.config/netbox_agent.yaml',
|
||||
'~/.netbox_agent.yaml',
|
||||
],
|
||||
prog='netbox_agent',
|
||||
description="Netbox agent to run on your infrastructure's servers",
|
||||
)
|
||||
p.add_argument('-c', '--config', action=jsonargparse.ActionConfigFile)
|
||||
|
||||
INVENTORY_ENABLED = config.get('inventory') is True
|
||||
p.add_argument('-r', '--register', action='store_true', help='Register server to Netbox')
|
||||
p.add_argument('-u', '--update-all', action='store_true', help='Update all infos in Netbox')
|
||||
p.add_argument('-d', '--debug', action='store_true', help='Print debug infos')
|
||||
p.add_argument('--update-network', action='store_true', help='Update network')
|
||||
p.add_argument('--update-inventory', action='store_true', help='Update inventory')
|
||||
p.add_argument('--update-location', action='store_true', help='Update location')
|
||||
|
||||
p.add_argument('--log_level', default='debug')
|
||||
p.add_argument('--netbox.url', help='Netbox URL')
|
||||
p.add_argument('--netbox.token', help='Netbox API Token')
|
||||
p.add_argument('--datacenter_location.driver',
|
||||
help='Datacenter location driver, ie: cmd, file')
|
||||
p.add_argument('--datacenter_location.driver_file',
|
||||
help='Datacenter location custom driver file path')
|
||||
p.add_argument('--datacenter_location.regex',
|
||||
help='Datacenter location regex to extract Netbox DC slug')
|
||||
p.add_argument('--rack_location.driver', help='Rack location driver, ie: cmd, file')
|
||||
p.add_argument('--rack_location.driver_file', help='Rack location custom driver file path')
|
||||
p.add_argument('--rack_location.regex', help='Rack location regex to extract Rack name')
|
||||
p.add_argument('--slot_location.driver', help='Slot location driver, ie: cmd, file')
|
||||
p.add_argument('--slot_location.driver_file', help='Slot location custom driver file path')
|
||||
p.add_argument('--slot_location.regex', help='Slot location regex to extract slot name')
|
||||
p.add_argument('--network.ignore_interfaces', default=r'(dummy.*|docker.*)',
|
||||
help='Regex to ignore interfaces')
|
||||
p.add_argument('--network.ignore_ips', default=r'^(127\.0\.0\..*|fe80.*|::1.*)',
|
||||
help='Regex to ignore IPs')
|
||||
p.add_argument('--network.lldp', help='Enable auto-cabling feature through LLDP infos')
|
||||
p.add_argument('--inventory', action='store_true',
|
||||
help='Enable HW inventory (CPU, Memory, RAID Cards, Disks) feature')
|
||||
|
||||
options = p.parse_args()
|
||||
return options
|
||||
|
||||
|
||||
def get_netbox_instance():
|
||||
config = get_config()
|
||||
if config.netbox.url is None or config.netbox.token is None:
|
||||
logging.error('Netbox URL and token are mandatory')
|
||||
sys.exit(1)
|
||||
return pynetbox.api(
|
||||
url=get_config().netbox.url,
|
||||
token=get_config().netbox.token,
|
||||
)
|
||||
|
||||
|
||||
config = get_config()
|
||||
netbox_instance = get_netbox_instance()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue