diff --git a/lib/ansible/modules/network/junos/junos_facts.py b/lib/ansible/modules/network/junos/junos_facts.py index 5434dc9f02..0ca8c28ee9 100644 --- a/lib/ansible/modules/network/junos/junos_facts.py +++ b/lib/ansible/modules/network/junos/junos_facts.py @@ -83,6 +83,7 @@ from ansible.module_utils.pycompat24 import get_exception from ansible.module_utils.netconf import send_request from ansible.module_utils.six import iteritems + try: from lxml.etree import Element, SubElement, tostring except ImportError: @@ -138,7 +139,6 @@ class Default(FactsBase): reply = self.rpc('get-chassis-inventory') data = reply.find('.//chassis-inventory/chassis') - self.facts['serialnum'] = self.get_text(data, 'serial-number') @@ -183,6 +183,38 @@ class Hardware(FactsBase): filesystems.append(self.get_text(obj, 'filesystem-name')) self.facts['filesystems'] = filesystems + reply = self.rpc('get-route-engine-information') + data = reply.find('.//route-engine-information') + + routing_engines = dict() + for obj in data: + slot = self.get_text(obj, 'slot') + routing_engines.update({slot: {}}) + routing_engines[slot].update({'slot': slot}) + for child in obj: + if child.text != "\n": + routing_engines[slot].update({child.tag.replace("-", "_"): child.text}) + + self.facts['routing_engines'] = routing_engines + + if len(data) > 1: + self.facts['has_2RE'] = True + else: + self.facts['has_2RE'] = False + + reply = self.rpc('get-chassis-inventory') + data = reply.findall('.//chassis-module') + + modules = list() + for obj in data: + mod = dict() + for child in obj: + if child.text != "\n": + mod.update({child.tag.replace("-", "_"): child.text}) + modules.append(mod) + + self.facts['modules'] = modules + class Interfaces(FactsBase): diff --git a/test/units/modules/network/junos/fixtures/show_chassis_routing-engine_xml.txt b/test/units/modules/network/junos/fixtures/show_chassis_routing-engine_xml.txt new file mode 100644 index 0000000000..ccdcaca2e5 --- /dev/null +++ b/test/units/modules/network/junos/fixtures/show_chassis_routing-engine_xml.txt @@ -0,0 +1,52 @@ + + + + 0 + master + master (default) + OK + 30 degrees C / 86 degrees F + 27 degrees C / 80 degrees F + 16349 MB + (16384 MB installed) + 16 + 3 + 0 + 5 + 1 + 92 + RE-S-EX9200-1800X4 + 0123456789 + 2017-04-27 12:25:03 PDT + 139 days, 3 hours, 12 minutes, 35 seconds + Router rebooted after a normal shutdown. + 0.03 + 0.06 + 0.02 + + + 1 + backup + backup (default) + OK + 30 degrees C / 86 degrees F + 27 degrees C / 80 degrees F + 16349 MB + (16384 MB installed) + 10 + 0 + 0 + 0 + 0 + 100 + RE-S-EX9200-1800X4 + 0123456789 + 2017-09-13 10:24:59 PDT + 5 hours, 12 minutes, 36 seconds + Router rebooted after a normal shutdown. + 0.00 + 0.00 + 0.00 + + + diff --git a/test/units/modules/network/junos/test_junos_facts.py b/test/units/modules/network/junos/test_junos_facts.py index 4a424bbb02..879ad1ae9e 100644 --- a/test/units/modules/network/junos/test_junos_facts.py +++ b/test/units/modules/network/junos/test_junos_facts.py @@ -28,6 +28,7 @@ RPC_CLI_MAP = { 'get-interface-information': 'show interfaces details', 'get-system-memory-information': 'show system memory', 'get-chassis-inventory': 'show chassis hardware', + 'get-route-engine-information': 'show chassis routing-engine', 'get-system-storage': 'show system storage' } @@ -72,6 +73,9 @@ class TestJunosCommandModule(TestJunosModule): self.assertEqual(facts['ansible_net_memtotal_mb'], 983500) self.assertEqual(facts['ansible_net_filesystems'][0], '/dev/vtbd0s1a') self.assertTrue('ansible_net_config' not in facts) + self.assertEqual(facts['ansible_net_routing_engines']["0"]['model'], 'RE-S-EX9200-1800X4') + self.assertEqual(facts['ansible_net_modules'][0]['name'], 'Midplane') + self.assertTrue(facts['ansible_net_has_2RE']) def test_junos_get_facts_subset_config_set(self): self.get_config.return_value = load_fixture('get_configuration_rpc_reply.txt')