Source code for jnpr.junos.facts.routing_engines
import re as RE
def _get_vc_status(dev, facts):
try:
rsp = dev.rpc.get_virtual_chassis_information()
# MX issue where command returns, but without content
if rsp is not True:
facts['vc_capable'] = True
return rsp
else:
facts['vc_capable'] = False
return None
except:
facts['vc_capable'] = False
return None
[docs]def facts_routing_engines(junos, facts):
re_facts = [
'mastership-state',
'status',
'model',
'up-time',
'last-reboot-reason']
master = []
vc_info = _get_vc_status(junos, facts)
if vc_info is not None:
facts['vc_mode'] = vc_info.findtext('.//virtual-chassis-mode')
if len(vc_info.xpath(".//virtual-chassis-id-information[@style='fabric']")) > 0:
facts['vc_fabric'] = True
vc_list = vc_info.xpath(".//member-role[starts-with(.,'Master') or starts-with(.,'Backup')]")
if len(vc_list) > 1:
facts['2RE'] = True
for member_id in vc_info.xpath(".//member-role[starts-with(.,'Master')]/preceding-sibling::member-id"):
master.append("RE{0}".format(member_id.text))
try:
re_info = junos.rpc.get_route_engine_information()
except:
# this means that the RPC failed. this should "never"
# happen, but we will trap it cleanly for now
return
re_list = re_info.xpath('.//route-engine')
if len(re_list) > 1:
facts['2RE'] = True
for re in re_list:
x_re_name = re.xpath('ancestor::multi-routing-engine-item/re-name')
if not x_re_name:
# not a multi-instance routing engine platform, but could
# have multiple RE slots
re_name = "RE"
x_slot = re.find('slot')
slot_id = x_slot.text if x_slot is not None else "0"
re_name = re_name + slot_id
else:
# multi-instance routing platform
m = RE.search('(\d)', x_re_name[0].text)
if vc_info is not None:
re_name = "RE{0}-RE{1}".format(m.group(0), re.find('slot').text) # => RE0-RE0 | RE0-RE1
else:
re_name = "RE" + m.group(0) # => RE0 | RE1
re_fd = {}
facts[re_name] = re_fd
for factoid in re_facts:
x_f = re.find(factoid)
if x_f is not None:
re_fd[factoid.replace('-', '_')] = x_f.text
if vc_info is None and 'mastership_state' in re_fd:
if facts[re_name]['mastership_state'] == 'master':
master.append(re_name)
# --[ end for-each 're' ]-------------------------------------------------
len_master = len(master)
if len_master > 1:
facts['master'] = master
elif len_master == 1:
facts['master'] = master[0]