Beispiel #1
0
 def test_trunk_vlans_no_change(self):
     set_module_args(
         dict(name='Eth1/10',
              mode='hybrid',
              access_vlan=1,
              trunk_allowed_vlans=[10]))
     self.execute_module(changed=False)
Beispiel #2
0
 def test_mlag_port_channel_add(self):
     set_module_args(dict(name='Mpo34', state='present',
                          members=['Eth1/9']))
     self.load_mlag_port_channel_fixture()
     commands = ['interface mlag-port-channel 34', 'exit',
                 'interface ethernet 1/9 mlag-channel-group 34 mode on']
     self.execute_module(changed=True, commands=commands)
Beispiel #3
0
 def test_magp_remove_address(self):
     set_module_args(dict(interface='Vlan 1243', magp_id=102))
     commands = [
         'interface vlan 1243 magp 102 no ip virtual-router address',
         'interface vlan 1243 magp 102 no ip virtual-router mac-address'
     ]
     self.execute_module(changed=True, commands=commands)
    def test_absent_state_sanity_check(self):
        set_module_args(
            dict(
                nitro_user='******',
                nitro_pass='******',
                nsip='192.0.2.1',
                state='absent',
            ))
        from ansible_collections.ansible.misc.plugins.modules import netscaler_lb_vserver

        lb_vserver_proxy_mock = Mock()

        client_mock = Mock()
        with patch.multiple(
                'ansible_collections.ansible.misc.plugins.modules.netscaler_lb_vserver',
                get_nitro_client=Mock(return_value=client_mock),
                ConfigProxy=Mock(return_value=lb_vserver_proxy_mock),
                ensure_feature_is_enabled=Mock(return_value=True),
                lb_vserver_exists=Mock(side_effect=[True, True]),
                nitro_exception=self.MockException,
        ):
            self.module = netscaler_lb_vserver
            result = self.failed()
            lb_vserver_proxy_mock.assert_has_calls([call.delete()])
            self.assertEqual(result['msg'], 'lb vserver still exists')
    def test_get_immutables_failure(self):
        set_module_args(
            dict(
                nitro_user='******',
                nitro_pass='******',
                nsip='192.0.2.1',
                state='present',
            ))

        from ansible_collections.ansible.misc.plugins.modules import netscaler_lb_vserver

        lb_vserver_proxy_mock = Mock()

        client_mock = Mock()
        m = Mock(return_value=['some'])
        with patch.multiple(
                'ansible_collections.ansible.misc.plugins.modules.netscaler_lb_vserver',
                get_nitro_client=Mock(return_value=client_mock),
                ConfigProxy=Mock(return_value=lb_vserver_proxy_mock),
                ensure_feature_is_enabled=Mock(),
                lb_vserver_exists=Mock(side_effect=[True, True]),
                lb_vserver_identical=Mock(side_effect=[False]),
                do_state_change=Mock(return_value=Mock(errorcode=0)),
                get_immutables_intersection=m,
                nitro_exception=self.MockException,
        ):
            self.module = netscaler_lb_vserver
            result = self.failed()
            self.assertTrue(
                result['msg'].startswith('Cannot update immutable attributes'),
                msg='Did not handle immutables error correctly',
            )
    def test_save_config_not_called_on_state_absent(self):
        set_module_args(
            dict(
                nitro_user='******',
                nitro_pass='******',
                nsip='192.0.2.1',
                state='absent',
                save_config=False,
            ))
        from ansible_collections.ansible.misc.plugins.modules import netscaler_lb_vserver

        client_mock = Mock()

        m = Mock(return_value=client_mock)

        lb_vserver_proxy_mock = Mock()

        with patch.multiple(
                'ansible_collections.ansible.misc.plugins.modules.netscaler_lb_vserver',
                get_nitro_client=m,
                lb_vserver_exists=Mock(side_effect=[True, False]),
                ConfigProxy=Mock(return_value=lb_vserver_proxy_mock),
                ensure_feature_is_enabled=Mock(return_value=True),
                do_state_change=Mock(return_value=Mock(errorcode=0)),
        ):
            self.module = netscaler_lb_vserver
            self.exited()
            self.assertNotIn(call.save_config(), client_mock.mock_calls)
    def test_ssl_bindings_not_called_for_non_ssl_service(self):
        set_module_args(
            dict(
                nitro_user='******',
                nitro_pass='******',
                nsip='192.0.2.1',
                state='present',
                save_config=False,
                servicetype='HTTP',
            ))
        from ansible_collections.ansible.misc.plugins.modules import netscaler_lb_vserver

        lb_vserver_proxy_mock = Mock()
        ssl_sync_mock = Mock()

        client_mock = Mock()

        with patch.multiple(
                'ansible_collections.ansible.misc.plugins.modules.netscaler_lb_vserver',
                get_nitro_client=Mock(return_value=client_mock),
                lb_vserver_exists=Mock(side_effect=[True, True]),
                lb_vserver_identical=Mock(side_effect=[False, True]),
                servicegroup_bindings_identical=Mock(side_effect=[True, True]),
                service_bindings_identical=Mock(side_effect=[True, True]),
                ssl_certkey_bindings_identical=Mock(side_effect=[False, True]),
                ssl_certkey_bindings_sync=ssl_sync_mock,
                ConfigProxy=Mock(return_value=lb_vserver_proxy_mock),
                ensure_feature_is_enabled=Mock(return_value=True),
                do_state_change=Mock(return_value=Mock(errorcode=0)),
                get_immutables_intersection=(Mock(return_value=[])),
        ):
            self.module = netscaler_lb_vserver
            result = self.exited()
            ssl_sync_mock.assert_not_called()
            self.assertTrue(result['changed'])
 def test_snmp_communities_with_change(self):
     set_module_args(
         dict(snmp_communities=[
             dict(community_name='community_2', community_type='read-only')
         ]))
     commands = ['snmp-server community community_2 ro']
     self.execute_module(changed=True, commands=commands)
 def test_lldp_change(self):
     set_module_args(dict(name='Eth1/1', state='absent'))
     commands = [
         'interface ethernet 1/1 no lldp receive',
         'interface ethernet 1/1 no lldp transmit'
     ]
     self.execute_module(changed=True, commands=commands)
 def test_snmp_communities_delete_with_change(self):
     set_module_args(
         dict(snmp_communities=[
             dict(community_name='community_1', state='absent')
         ]))
     commands = ['no snmp-server community community_1']
     self.execute_module(changed=True, commands=commands)
 def test_snmp_permissions_with_change(self):
     set_module_args(
         dict(snmp_permissions=[
             dict(state_enabled=True, permission_type='RFC1213-MIB')
         ]))
     commands = ['snmp-server enable set-permission RFC1213-MIB']
     self.execute_module(changed=True, commands=commands)
    def test_graceful_no_connection_error(self):

        if sys.version_info[:2] == (2, 6):
            self.skipTest('requests library not available under python2.6')
        set_module_args(
            dict(
                nitro_user='******',
                nitro_pass='******',
                nsip='192.0.2.1',
            ))
        from ansible_collections.ansible.misc.plugins.modules import netscaler_save_config

        class MockException(Exception):
            pass

        client_mock = Mock()
        attrs = {'login.side_effect': requests.exceptions.ConnectionError}
        client_mock.configure_mock(**attrs)
        m = Mock(return_value=client_mock)
        with patch.multiple(
                'ansible_collections.ansible.misc.plugins.modules.netscaler_save_config',
                get_nitro_client=m,
                nitro_exception=MockException,
        ):
            self.module = netscaler_save_config
            result = self.failed()
            self.assertTrue(result['msg'].startswith('Connection error'),
                            msg='Connection error was not handled gracefully')
Beispiel #13
0
 def test_edgeos_config_match_none(self):
     lines = [
         'set system interfaces ethernet eth0 address 1.2.3.4/24',
         'set system interfaces ethernet eth0 description Outside'
     ]
     set_module_args(dict(lines=lines, match='none'))
     self.execute_module(changed=True, commands=lines, sort=False)
Beispiel #14
0
 def test_arp_suppression_with_change(self):
     self.arp_suppression = False
     set_module_args(dict(nve_id=1, loopback_id=1, bgp=True, mlag_tunnel_ip='192.10.10.1',
                          vni_vlan_list=[dict(vlan_id=10, vni_id=10010), dict(vlan_id=6, vni_id=10060)],
                          arp_suppression=True))
     commands = ["interface vlan 10", "exit", "interface vlan 6", "exit"]
     self.execute_module(changed=True, commands=commands)
    def test_graceful_nitro_error_on_login(self):
        set_module_args(
            dict(
                nitro_user='******',
                nitro_pass='******',
                nsip='192.0.2.1',
                state='present',
            ))
        from ansible_collections.ansible.misc.plugins.modules import netscaler_lb_vserver

        class MockException(Exception):
            def __init__(self, *args, **kwargs):
                self.errorcode = 0
                self.message = ''

        client_mock = Mock()
        client_mock.login = Mock(side_effect=MockException)
        m = Mock(return_value=client_mock)
        with patch(
                'ansible_collections.ansible.misc.plugins.modules.netscaler_lb_vserver.get_nitro_client',
                m):
            with patch(
                    'ansible_collections.ansible.misc.plugins.modules.netscaler_lb_vserver.nitro_exception',
                    MockException):
                self.module = netscaler_lb_vserver
                result = self.failed()
                self.assertTrue(
                    result['msg'].startswith('nitro exception'),
                    msg='nitro exception during login not handled properly')
    def test_new_cs_vserver_execution_flow(self):
        set_module_args(
            dict(
                nitro_user='******',
                nitro_pass='******',
                nsip='192.0.2.1',
                state='present',
            ))
        from ansible_collections.ansible.misc.plugins.modules import netscaler_cs_vserver

        client_mock = Mock()

        m = Mock(return_value=client_mock)

        server_proxy_attrs = {
            'diff_object.return_value': {},
        }
        cs_vserver_proxy_mock = Mock()
        cs_vserver_proxy_mock.configure_mock(**server_proxy_attrs)
        config_proxy_mock = Mock(return_value=cs_vserver_proxy_mock)

        with patch.multiple(
                'ansible_collections.ansible.misc.plugins.modules.netscaler_cs_vserver',
                get_nitro_client=m,
                cs_vserver_exists=Mock(side_effect=[False, True]),
                cs_vserver_identical=Mock(side_effect=[True]),
                ensure_feature_is_enabled=Mock(return_value=True),
                ConfigProxy=config_proxy_mock,
                nitro_exception=self.MockException,
                do_state_change=Mock(return_value=Mock(errorcode=0)),
        ):
            self.module = netscaler_cs_vserver
            self.exited()
            cs_vserver_proxy_mock.assert_has_calls([call.add()])
    def test_graceful_login_error(self):
        set_module_args(
            dict(
                nitro_user='******',
                nitro_pass='******',
                nsip='192.0.2.1',
                state='present',
            ))
        from ansible_collections.ansible.misc.plugins.modules import netscaler_lb_vserver

        if sys.version_info[:2] == (2, 6):
            self.skipTest('requests library not available under python2.6')

        client_mock = Mock()
        attrs = {'login.side_effect': requests.exceptions.SSLError}
        client_mock.configure_mock(**attrs)
        m = Mock(return_value=client_mock)
        with patch.multiple(
                'ansible_collections.ansible.misc.plugins.modules.netscaler_lb_vserver',
                get_nitro_client=m,
                nitro_exception=self.MockException,
                do_state_change=Mock(return_value=Mock(errorcode=0)),
        ):
            self.module = netscaler_lb_vserver
            result = self.failed()
            self.assertTrue(result['msg'].startswith('SSL Error'),
                            msg='SSL Error was not handled gracefully')
    def test_absent_cs_vserver_noop_flow(self):
        set_module_args(
            dict(
                nitro_user='******',
                nitro_pass='******',
                nsip='192.0.2.1',
                state='absent',
            ))
        from ansible_collections.ansible.misc.plugins.modules import netscaler_cs_vserver

        client_mock = Mock()

        m = Mock(return_value=client_mock)

        server_proxy_attrs = {
            'diff_object.return_value': {},
        }
        cs_vserver_proxy_mock = Mock()
        cs_vserver_proxy_mock.configure_mock(**server_proxy_attrs)
        config_proxy_mock = Mock(return_value=cs_vserver_proxy_mock)

        with patch.multiple(
                'ansible_collections.ansible.misc.plugins.modules.netscaler_cs_vserver',
                get_nitro_client=m,
                diff_list=Mock(return_value={}),
                get_immutables_intersection=Mock(return_value=[]),
                cs_vserver_exists=Mock(side_effect=[False, False]),
                cs_vserver_identical=Mock(side_effect=[False, False]),
                ensure_feature_is_enabled=Mock(return_value=True),
                ConfigProxy=config_proxy_mock,
        ):
            self.module = netscaler_cs_vserver
            self.exited()
            cs_vserver_proxy_mock.assert_not_called()
    def test_create_new_lb_vserver_workflow(self):
        set_module_args(
            dict(
                nitro_user='******',
                nitro_pass='******',
                nsip='192.0.2.1',
                state='present',
                save_config=False,
            ))
        from ansible_collections.ansible.misc.plugins.modules import netscaler_lb_vserver

        lb_vserver_proxy_mock = Mock()

        with patch.multiple(
                'ansible_collections.ansible.misc.plugins.modules.netscaler_lb_vserver',
                get_nitro_client=Mock(return_value=Mock()),
                lb_vserver_exists=Mock(side_effect=[False, True]),
                lb_vserver_identical=Mock(side_effect=[True]),
                servicegroup_bindings_identical=Mock(side_effect=[True, True]),
                service_bindings_identical=Mock(side_effect=[True, True]),
                do_state_change=Mock(return_value=Mock(errorcode=0)),
                ConfigProxy=Mock(return_value=lb_vserver_proxy_mock),
                ensure_feature_is_enabled=Mock(return_value=True),
        ):
            self.module = netscaler_lb_vserver
            result = self.exited()
            lb_vserver_proxy_mock.assert_has_calls([call.add()])
            self.assertTrue(result['changed'])
    def test_graceful_nitro_exception_state_absent(self):
        set_module_args(
            dict(
                nitro_user='******',
                nitro_pass='******',
                nsip='192.0.2.1',
                state='absent',
            ))
        from ansible_collections.ansible.misc.plugins.modules import netscaler_cs_vserver

        class MockException(Exception):
            def __init__(self, *args, **kwargs):
                self.errorcode = 0
                self.message = ''

        m = Mock(side_effect=MockException)
        with patch.multiple(
                'ansible_collections.ansible.misc.plugins.modules.netscaler_cs_vserver',
                cs_vserver_exists=m,
                ensure_feature_is_enabled=Mock(return_value=True),
                nitro_exception=MockException):
            self.module = netscaler_cs_vserver
            result = self.failed()
            self.assertTrue(
                result['msg'].startswith('nitro exception'),
                msg='Nitro exception not caught on operation absent')
    def test_server_servicegroup_bindings_sanity_check(self):
        set_module_args(
            dict(
                nitro_user='******',
                nitro_pass='******',
                nsip='192.0.2.1',
                state='present',
            ))
        from ansible_collections.ansible.misc.plugins.modules import netscaler_lb_vserver

        lb_vserver_proxy_mock = Mock()

        client_mock = Mock()

        with patch.multiple(
                'ansible_collections.ansible.misc.plugins.modules.netscaler_lb_vserver',
                get_nitro_client=Mock(return_value=client_mock),
                lb_vserver_exists=Mock(side_effect=[True, True]),
                lb_vserver_identical=Mock(side_effect=[False, True]),
                servicegroup_bindings_identical=Mock(
                    side_effect=[False, False]),
                service_bindings_identical=Mock(side_effect=[True, True]),
                ssl_certkey_bindings_identical=Mock(
                    side_effect=[False, False]),
                ConfigProxy=Mock(return_value=lb_vserver_proxy_mock),
                ensure_feature_is_enabled=Mock(return_value=True),
                do_state_change=Mock(return_value=Mock(errorcode=0)),
                get_immutables_intersection=(Mock(return_value=[])),
                nitro_exception=self.MockException,
        ):
            self.module = netscaler_lb_vserver
            result = self.failed()
            self.assertEqual(result['msg'],
                             'servicegroup bindings are not identical')
 def test_igmp_last_member_query_interval(self):
     set_module_args(dict(state='enabled', last_member_query_interval=10))
     commands = [
         'ip igmp snooping',
         'ip igmp snooping last-member-query-interval 10'
     ]
     self.execute_module(changed=True, commands=commands)
    def test_disabled_state_change_called(self):
        set_module_args(
            dict(
                nitro_user='******',
                nitro_pass='******',
                nsip='192.0.2.1',
                state='present',
            ))

        from ansible_collections.ansible.misc.plugins.modules import netscaler_lb_vserver

        lb_vserver_proxy_mock = Mock()

        do_state_change_mock = Mock(return_value=Mock(errorcode=0))
        client_mock = Mock()
        with patch.multiple(
                'ansible_collections.ansible.misc.plugins.modules.netscaler_lb_vserver',
                get_nitro_client=Mock(return_value=client_mock),
                ConfigProxy=Mock(return_value=lb_vserver_proxy_mock),
                ensure_feature_is_enabled=Mock(return_value=True),
                lb_vserver_exists=Mock(side_effect=[True, True]),
                nitro_exception=self.MockException,
                do_state_change=do_state_change_mock,
        ):
            self.module = netscaler_lb_vserver
            self.exited()
            self.assertTrue(len(do_state_change_mock.mock_calls) > 0,
                            msg='Did not call state change')
 def test_igmp_report_suppression_interval(self):
     set_module_args(dict(state='enabled', report_suppression_interval=10))
     commands = [
         'ip igmp snooping',
         'ip igmp snooping report-suppression-interval 10'
     ]
     self.execute_module(changed=True, commands=commands)
Beispiel #25
0
 def test_port_channel_add(self):
     set_module_args(dict(name='Po23', state='present',
                          members=['Eth1/8']))
     self.load_port_channel_fixture()
     commands = ['interface port-channel 23', 'exit',
                 'interface ethernet 1/8 channel-group 23 mode on']
     self.execute_module(changed=True, commands=commands)
 def test_routeros_command_multiple(self):
     set_module_args(
         dict(
             commands=['/system resource print', '/system resource print']))
     result = self.execute_module()
     self.assertEqual(len(result['stdout']), 2)
     self.assertTrue('platform: "MikroTik"' in result['stdout'][0])
 def test_slxos_vlan_state_absent(self, *args, **kwargs):
     set_module_args(dict(vlan_id=200, state='absent'))
     result = self.execute_module(changed=True)
     self.assertEqual(result, {
         'commands': ['no vlan 200'],
         'changed': True
     })
Beispiel #28
0
 def test_snmp_user_auth_type_no_change(self):
     set_module_args(
         dict(users=[
             dict(
                 name='sara', auth_type='sha', auth_password='******')
         ]))
     self.execute_module(changed=False)
Beispiel #29
0
 def test_bgp_del_neighbor(self):
     set_module_args(dict(as_number=172,
                          networks=['172.16.1.0/24'],
                          purge=True))
     commands = ['router bgp 172 vrf default no neighbor 10.2.3.4 remote-as 173',
                 'router bgp 172 vrf default no neighbor 10.2.3.5 remote-as 322']
     self.execute_module(changed=True, commands=commands)
Beispiel #30
0
 def test_switch_port_access(self):
     set_module_args(dict(name='Eth1/12', mode='access', access_vlan=11))
     commands = [
         'interface ethernet 1/12', 'switchport mode access',
         'switchport access vlan 11', 'exit'
     ]
     self.execute_module(changed=True, commands=commands)