Source code for jnpr.junos.facts.chassis
from jnpr.junos.exception import ConnectNotMasterError
[docs]def facts_chassis(junos, facts):
"""
The following facts are assigned:
facts['2RE'] : designates if the device can support two RE, not that it has them
facts['RE_hw_mi'] : designates if the device is multi-instance-routing-engine
facts['model'] : product model
facts['serialnumber'] : serial number
NOTES:
(1) if in a 2RE system, this routine will only load the information
from the first chassis item.
(2) hostname, domain, and fqdn are retrieved from configuration data;
inherited configs are checked.
"""
try:
rsp = junos.rpc.get_chassis_inventory()
if rsp.tag == 'error':
raise RuntimeError()
except:
# this means that the RPC caused a trap. this should generally
# never happen, but we'll trap it cleanly for now
facts['2RE'] = False
facts['model'] = ''
facts['serialnumber'] = ''
return
if rsp.tag == 'output':
# this means that there was an error; due to the
# fact that this connection is not on the master
# @@@ need to validate on VC-member
raise ConnectNotMasterError(junos)
if rsp.tag == 'multi-routing-engine-results':
facts['2RE'] = True
facts['RE_hw_mi'] = True
x_ch = rsp.xpath('.//chassis-inventory')[0].find('chassis')
else:
facts['2RE'] = False
x_ch = rsp.find('chassis')
facts['model'] = x_ch.findtext('description')
try:
facts['serialnumber'] = x_ch.find('serial-number').text
except:
# if the toplevel chassis does not have a serial-number, then
# check the Backplane chassis-module
facts['serialnumber'] = x_ch.xpath(
'chassis-module[name="Backplane" or name="Midplane"]/serial-number')[0].text