Adding IGMP vlan module for onyx switches (#47811)

Signed-off-by: Anas Badaha <anasb@mellanox.com>
This commit is contained in:
anasbadaha
2018-11-01 10:55:25 +02:00
committed by Ganesh Nalawade
parent 760e57f877
commit dc8b3e94ad
5 changed files with 686 additions and 0 deletions

View File

@@ -0,0 +1,10 @@
[
{
"mrouter static port list": "none",
"mrouter dynamic port list": "none",
"header": "Vlan 10 configuration parameters",
"message 1": "IGMP snooping is disabled",
"message 2": "IGMP version is V3",
"message 3": "Snooping switch is acting as Non-Querier"
}
]

View File

@@ -0,0 +1,30 @@
[
{
"Snooping group information for VLAN 10 and group 224.5.5.1": [
{
"Group flag": "St",
"Filter Mode": "EXCLUDE",
"V1/V2 Receiver Ports": "eth1/1, eth1/2",
"Exclude sources": "None"
},
{
"V3 Receiver Ports": [
{
"Exclude sources": [
"None",
"None"
],
"Include sources": [
"1.1.1.1, 1.1.1.2",
"1.1.1.3"
],
"Port Number": [
"eth1/1",
"eth1/2"
]
}
]
}
]
}
]

View File

@@ -0,0 +1,20 @@
[
{
"Snooping querier information for VLAN 10": [
{
"Lines": [
"IGMP Querier Not Present"
]
},
{
"Response interval": "100",
"Elected querier IP address": "0.0.0.0",
"Group membership interval": "1",
"Robustness": "2",
"Configured querier IP address": "-",
"Query interval": "125",
"Version": "3"
}
]
}
]

View File

@@ -0,0 +1,190 @@
#
# Copyright: Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# Make coding more python3-ish
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
from units.compat.mock import patch
from ansible.modules.network.onyx import onyx_igmp_vlan
from units.modules.utils import set_module_args
from .onyx_module import TestOnyxModule, load_fixture
class TestOnyxIgmpVlan(TestOnyxModule):
module = onyx_igmp_vlan
enabled = False
mrouter_state = False
querier_state = False
static_groups_enabled = False
def setUp(self):
self.enabled = False
super(TestOnyxIgmpVlan, self).setUp()
self.mock_get_igmp_config = patch.object(
onyx_igmp_vlan.OnyxIgmpVlanModule, "_show_igmp_vlan")
self.get_igmp_config = self.mock_get_igmp_config.start()
self.mock_load_config = patch(
'ansible.module_utils.network.onyx.onyx.load_config')
self.load_config = self.mock_load_config.start()
self.mock_get_igmp_guerier_config = patch.object(
onyx_igmp_vlan.OnyxIgmpVlanModule, "_show_igmp_querier_config")
self.get_igmp_guerier_config = self.mock_get_igmp_guerier_config.start()
self.mock_get_igmp_static_groups_config = patch.object(
onyx_igmp_vlan.OnyxIgmpVlanModule, "_show_igmp_snooping_groups_config")
self.get_igmp_static_groups_config = self.mock_get_igmp_static_groups_config.start()
def tearDown(self):
super(TestOnyxIgmpVlan, self).tearDown()
self.mock_get_igmp_config.stop()
self.mock_load_config.stop()
self.mock_get_igmp_guerier_config.stop()
self.mock_get_igmp_static_groups_config.stop()
def load_fixtures(self, commands=None, transport='cli'):
igmp_vlan_config_file = 'onyx_show_ip_igmp_snooping.cfg'
igmp_querier_config_file = 'onyx_show_ip_igmp_snooping_querier.cfg'
igmp_static_groups_file = 'onyx_show_ip_igmp_snooping_groups.cfg'
igmp_vlan_data = load_fixture(igmp_vlan_config_file)
igmp_querier_data = load_fixture(igmp_querier_config_file)
igmp_static_groups_data = None
if self.enabled:
igmp_vlan_data[0]['message 1'] = 'IGMP snooping is enabled'
if self.querier_state:
igmp_vlan_data[0]['message 3'] = 'Snooping switch is acting as Querier'
if self.mrouter_state:
igmp_vlan_data[0]['mrouter static port list'] = 'Eth1/1'
if self.static_groups_enabled:
igmp_static_groups_data = load_fixture(igmp_static_groups_file)
self.get_igmp_config.return_value = igmp_vlan_data
self.get_igmp_guerier_config = igmp_querier_data
self.get_igmp_static_groups_config = igmp_static_groups_data
self.load_config.return_value = None
def test_igmp_disabled_no_change(self):
set_module_args(dict(state='disabled', vlan_id=10))
self.execute_module(changed=False)
def test_igmp_disabled_with_change(self):
self.enabled = True
set_module_args(dict(state='disabled', vlan_id=10))
commands = ['vlan 10 no ip igmp snooping']
self.execute_module(changed=True, commands=commands)
def test_igmp_enabled_no_change(self):
self.enabled = True
set_module_args(dict(state='enabled', vlan_id=10))
self.execute_module(changed=False)
def test_igmp_enabled_with_change(self):
set_module_args(dict(state='enabled', vlan_id=10))
commands = ['vlan 10 ip igmp snooping']
self.execute_module(changed=True, commands=commands)
def test_igmp_mrouter_disabled_no_change(self):
self.enabled = True
set_module_args(dict(vlan_id=10, mrouter=dict(state='disabled', name='Eth1/1')))
self.execute_module(changed=False)
def test_igmp_mrouter_disabled_with_change(self):
self.enabled = True
self.mrouter_state = True
set_module_args(dict(vlan_id=10, mrouter=dict(state='disabled', name='Eth1/1')))
commands = ['vlan 10 no ip igmp snooping mrouter interface ethernet 1/1']
self.execute_module(changed=True, commands=commands)
def test_igmp_mrouter_enabled_no_change(self):
self.enabled = True
self.mrouter_state = True
set_module_args(dict(vlan_id=10, mrouter=dict(state='enabled', name='Eth1/1')))
self.execute_module(changed=False)
def test_igmp_mrouter_enabled_with_change(self):
self.enabled = True
set_module_args(dict(vlan_id=10, mrouter=dict(state='enabled', name='Eth1/1')))
commands = ['vlan 10 ip igmp snooping mrouter interface ethernet 1/1']
self.execute_module(changed=True, commands=commands)
def test_igmp_mrouter_enabled_withinterface_change(self):
self.enabled = True
self.mrouter_state = True
set_module_args(dict(vlan_id=10, mrouter=dict(state='enabled', name='Eth1/2')))
commands = ['vlan 10 ip igmp snooping mrouter interface ethernet 1/2']
self.execute_module(changed=True, commands=commands)
def test_igmp_querier_disabled_no_change(self):
self.enabled = True
set_module_args(dict(vlan_id=10, querier=dict(state='disabled')))
self.execute_module(changed=False)
def test_igmp_querier_disabled_with_change(self):
self.enabled = True
self.querier_state = True
set_module_args(dict(vlan_id=10, querier=dict(state='disabled')))
commands = ['vlan 10 no ip igmp snooping querier']
self.execute_module(changed=True, commands=commands)
def test_igmp_querier_enabled_no_change(self):
self.enabled = True
self.querier_state = True
set_module_args(dict(vlan_id=10, querier=dict(state='enabled')))
self.execute_module(changed=False)
def test_igmp_querier_enabled_with_change(self):
self.enabled = True
set_module_args(dict(vlan_id=10, querier=dict(state='enabled')))
commands = ['vlan 10 ip igmp snooping querier']
self.execute_module(changed=True, commands=commands)
def test_igmp_querier_attr_no_change(self):
self.enabled = True
self.querier_state = True
set_module_args(dict(vlan_id=10, querier=dict(state='enabled', interval=125, address='-')))
self.execute_module(changed=True)
def test_igmp_querier_attr_with_change(self):
self.enabled = True
self.querier_state = True
set_module_args(dict(vlan_id=10, querier=dict(state='enabled', interval=127, address='10.10.10.1')))
commands = ['vlan 10 ip igmp snooping querier query-interval 127',
'vlan 10 ip igmp snooping querier address 10.10.10.1']
self.execute_module(changed=True, commands=commands)
def test_igmp_version_no_change(self):
self.enabled = True
set_module_args(dict(vlan_id=10, version='V3'))
self.execute_module(changed=False)
def test_igmp_version_with_change(self):
self.enabled = True
set_module_args(dict(vlan_id=10, version='V2'))
commands = ['vlan 10 ip igmp snooping version 2']
self.execute_module(changed=True, commands=commands)
def test_igmp_static_groups_multicast_ip_address_not_configured(self):
self.enabled = True
set_module_args(dict(vlan_id=10, static_groups=[dict(multicast_ip_address='224.5.5.2', name='Eth1/1',
sources=["1.1.1.2", "1.1.1.3"])]))
commands = ['vlan 10 ip igmp snooping static-group 224.5.5.2 interface ethernet 1/1',
'vlan 10 ip igmp snooping static-group 224.5.5.2 interface ethernet 1/1 source 1.1.1.2',
'vlan 10 ip igmp snooping static-group 224.5.5.2 interface ethernet 1/1 source 1.1.1.3']
self.execute_module(changed=True, commands=commands)
def test_igmp_static_groups_multicast_ip_address_configured_with_change(self):
self.enabled = True
self.static_groups_enabled = True
set_module_args(dict(vlan_id=10, static_groups=[dict(multicast_ip_address='224.5.5.1', name='Eth1/3',
sources=["1.1.1.1", "1.1.1.2"])]))
commands = ['vlan 10 ip igmp snooping static-group 224.5.5.1 interface ethernet 1/3',
'vlan 10 ip igmp snooping static-group 224.5.5.1 interface ethernet 1/3 source 1.1.1.1',
'vlan 10 ip igmp snooping static-group 224.5.5.1 interface ethernet 1/3 source 1.1.1.2']
self.execute_module(changed=True, commands=commands)