def _set_config(self, want, have, module):
        # Set the interface config based on the want and have config
        commands = []

        # To remove keys with None values from want dict
        want = utils.remove_empties(want)
        # Get the diff b/w want and have
        want_dict = dict_to_set(want)
        have_dict = dict_to_set(have)
        diff = want_dict - have_dict

        # To get the channel-id from lag port-channel name
        lag_config = dict(diff).get('members')
        channel_name = re.search(r'(\d+)', want.get('name'))
        if channel_name:
            channel_id = channel_name.group()
        else:
            module.fail_json(msg="Lag Interface Name is not correct!")
        if lag_config:
            for each in lag_config:
                each = dict(each)
                each_interface = 'interface {0}'.format(each.get('member'))
                if have.get('name') == want['members'][0]['member'] or have.get('name').lower().startswith('po'):
                    if each.get('mode'):
                        cmd = 'channel-group {0} mode {1}'.format(channel_id, each.get('mode'))
                        self.add_command_to_config_list(each_interface, cmd, commands)
                    elif each.get('link'):
                        cmd = 'channel-group {0} link {1}'.format(channel_id, each.get('link'))
                        self.add_command_to_config_list(each_interface, cmd, commands)

        return commands
示例#2
0
    def _set_config(self, want, have):
        # Set the interface config based on the want and have config
        commands = []
        vlan = 'vlan {0}'.format(want.get('vlan_id'))

        # Get the diff b/w want n have
        want_dict = dict_to_set(want)
        have_dict = dict_to_set(have)
        diff = want_dict - have_dict

        if diff:
            name = dict(diff).get('name')
            state = dict(diff).get('state')
            shutdown = dict(diff).get('shutdown')
            mtu = dict(diff).get('mtu')
            remote_span = dict(diff).get('remote_span')
            if name:
                cmd = 'name {0}'.format(name)
                self.add_command_to_config_list(vlan, cmd, commands)
            if state:
                cmd = 'state {0}'.format(state)
                self.add_command_to_config_list(vlan, cmd, commands)
            if mtu:
                cmd = 'mtu {0}'.format(mtu)
                self.add_command_to_config_list(vlan, cmd, commands)
            if remote_span:
                self.add_command_to_config_list(vlan, 'remote-span', commands)
            if shutdown == 'enabled':
                self.add_command_to_config_list(vlan, 'shutdown', commands)
            elif shutdown == 'disabled':
                self.add_command_to_config_list(vlan, 'no shutdown', commands)

        return commands
示例#3
0
    def _set_config(self, want, have):
        # Set the interface config based on the want and have config
        commands = []

        want_dict = dict_to_set(want)
        have_dict = dict_to_set(have)
        diff = want_dict - have_dict

        if diff:
            cmd = 'lacp system-priority {0}'.format(want.get('system').get('priority'))
            self._add_command_to_config_list(cmd, commands)

        return commands
示例#4
0
    def _set_config(self, want, have, module):
        # Set the interface config based on the want and have config
        commands = []
        interface = 'interface ' + want['name']

        # Get the diff b/w want and have
        want_dict = dict_to_set(want)
        have_dict = dict_to_set(have)
        want_trunk = dict(want_dict).get('trunk')
        have_trunk = dict(have_dict).get('trunk')
        if want_trunk and have_trunk:
            diff = set(tuple(dict(want_dict).get('trunk'))) - set(tuple(dict(have_dict).get('trunk')))
        else:
            diff = want_dict - have_dict

        if diff:
            diff = dict(diff)

            if diff.get('access'):
                cmd = 'switchport access vlan {0}'.format(diff.get('access')[0][1])
                add_command_to_config_list(interface, cmd, commands)

            if want_trunk:
                if diff.get('trunk'):
                    diff = dict(diff.get('trunk'))
                if diff.get('encapsulation'):
                    cmd = self.trunk_cmds['encapsulation'] + ' {0}'.format(diff.get('encapsulation'))
                    add_command_to_config_list(interface, cmd, commands)
                if diff.get('native_vlan'):
                    cmd = self.trunk_cmds['native_vlan'] + ' {0}'.format(diff.get('native_vlan'))
                    add_command_to_config_list(interface, cmd, commands)
                allowed_vlans = diff.get('allowed_vlans')
                pruning_vlans = diff.get('pruning_vlans')

                if allowed_vlans and self._check_for_correct_vlan_range(allowed_vlans, module):
                    allowed_vlans = ','.join(allowed_vlans)
                    cmd = self.trunk_cmds['allowed_vlans'] + ' {0}'.format(allowed_vlans)
                    add_command_to_config_list(interface, cmd, commands)
                if pruning_vlans and self._check_for_correct_vlan_range(pruning_vlans, module):
                    pruning_vlans = ','.join(pruning_vlans)
                    cmd = self.trunk_cmds['pruning_vlans'] + ' {0}'.format(pruning_vlans)
                    add_command_to_config_list(interface, cmd, commands)

        return commands
示例#5
0
    def _set_config(self, want, have):
        # Set the interface config based on the want and have config
        commands = []
        interface = 'interface ' + want['name']

        # Get the diff b/w want and have
        want_dict = dict_to_set(want)
        have_dict = dict_to_set(have)
        diff = want_dict - have_dict

        if diff:
            diff = dict(diff)
            for item in self.params:
                if diff.get(item):
                    cmd = item + ' ' + str(want.get(item))
                    add_command_to_config_list(interface, cmd, commands)
            if diff.get('enabled'):
                add_command_to_config_list(interface, 'no shutdown', commands)
            elif diff.get('enabled') is False:
                add_command_to_config_list(interface, 'shutdown', commands)

        return commands
示例#6
0
    def _set_config(self, want, have):
        # Set the interface config based on the want and have config
        commands = []

        interface = 'interface ' + have['name']
        # Get the diff b/w want and have
        want_dict = dict_to_set(want)
        have_dict = dict_to_set(have)
        diff = want_dict - have_dict

        if diff:
            diff = dict(diff)
            receive = diff.get('receive')
            transmit = diff.get('transmit')
            med_tlv_select = diff.get('med_tlv_select')
            tlv_select = diff.get('tlv_select')
            if receive:
                cmd = 'lldp receive'
                add_command_to_config_list(interface, cmd, commands)
            elif receive is False:
                cmd = 'no lldp receive'
                add_command_to_config_list(interface, cmd, commands)
            if transmit:
                cmd = 'lldp transmit'
                add_command_to_config_list(interface, cmd, commands)
            elif transmit is False:
                cmd = 'no lldp transmit'
                add_command_to_config_list(interface, cmd, commands)

            if med_tlv_select:
                med_tlv_select = dict(med_tlv_select)
                if med_tlv_select.get('inventory_management'):
                    add_command_to_config_list(interface, 'lldp med-tlv-select inventory-management', commands)
            if tlv_select:
                tlv_select = dict(tlv_select)
                if tlv_select.get('power_management'):
                    add_command_to_config_list(interface, 'lldp tlv-select power-management', commands)

        return commands
示例#7
0
    def _set_config(self, want, have):
        # Set the interface config based on the want and have config
        commands = []

        # Get the diff b/w want and have
        want_dict = dict_to_set(want)
        have_dict = dict_to_set(have)
        diff = want_dict - have_dict

        if diff:
            diff = dict(diff)
            holdtime = diff.get('holdtime')
            enabled = diff.get('enabled')
            timer = diff.get('timer')
            reinit = diff.get('reinit')
            tlv_select = diff.get('tlv_select')

            if holdtime:
                cmd = 'lldp holdtime {0}'.format(holdtime)
                self.add_command_to_config_list(cmd, commands)
            if enabled:
                cmd = 'lldp run'
                self.add_command_to_config_list(cmd, commands)
            if timer:
                cmd = 'lldp timer {0}'.format(timer)
                self.add_command_to_config_list(cmd, commands)
            if reinit:
                cmd = 'lldp reinit {0}'.format(reinit)
                self.add_command_to_config_list(cmd, commands)
            if tlv_select:
                tlv_selec_dict = dict(tlv_select)
                for k, v in iteritems(self.tlv_select_params):
                    if k in tlv_selec_dict and tlv_selec_dict[k]:
                        cmd = 'lldp tlv-select {0}'.format(v)
                        self.add_command_to_config_list(cmd, commands)

        return commands
示例#8
0
    def _set_config(self, want, have):
        # Set the interface config based on the want and have config
        commands = []
        interface = 'interface ' + have['name']

        want_dict = dict_to_set(want)
        have_dict = dict_to_set(have)
        diff = want_dict - have_dict

        if diff:
            port_priotity = dict(diff).get('port_priority')
            max_bundle = dict(diff).get('max_bundle')
            fast_switchover = dict(diff).get('fast_switchover')
            if port_priotity:
                cmd = 'lacp port-priority {0}'.format(port_priotity)
                add_command_to_config_list(interface, cmd, commands)
            if max_bundle:
                cmd = 'lacp max-bundle {0}'.format(max_bundle)
                add_command_to_config_list(interface, cmd, commands)
            if fast_switchover:
                cmd = 'lacp fast-switchover'
                add_command_to_config_list(interface, cmd, commands)

        return commands
示例#9
0
    def _set_config(self, want, have, module):
        # Set the interface config based on the want and have config
        commands = []
        interface = 'interface ' + want['name']

        # To handle L3 IPV4 configuration
        if want.get("ipv4"):
            for each in want.get("ipv4"):
                if each.get('address') != 'dhcp':
                    ip_addr_want = validate_n_expand_ipv4(module, each)
                    each['address'] = ip_addr_want

        # Convert the want and have dict to set
        want_dict = dict_to_set(want)
        have_dict = dict_to_set(have)

        # To handle L3 IPV4 configuration
        if want.get('ipv4'):
            # Get the diff b/w want and have IPV4
            if have.get('ipv4'):
                ipv4 = tuple(
                    set(dict(want_dict).get('ipv4')) -
                    set(dict(have_dict).get('ipv4')))
                if ipv4:
                    ipv4 = ipv4 if self.verify_diff_again(
                        dict(want_dict).get('ipv4'),
                        dict(have_dict).get('ipv4')) else ()
            else:
                diff = want_dict - have_dict
                ipv4 = dict(diff).get('ipv4')
            if ipv4:
                for each in ipv4:
                    ipv4_dict = dict(each)
                    if ipv4_dict.get('address') != 'dhcp':
                        cmd = "ip address {0}".format(ipv4_dict['address'])
                        if ipv4_dict.get("secondary"):
                            cmd += " secondary"
                    elif ipv4_dict.get('address') == 'dhcp':
                        cmd = "ip address dhcp"
                        if ipv4_dict.get(
                                'dhcp_client') is not None and ipv4_dict.get(
                                    'dhcp_hostname'):
                            cmd = "ip address dhcp client-id GigabitEthernet 0/{0} hostname {1}"\
                                .format(ipv4_dict.get('dhcp_client'), ipv4_dict.get('dhcp_hostname'))
                        elif ipv4_dict.get(
                                'dhcp_client'
                        ) and not ipv4_dict.get('dhcp_hostname'):
                            cmd = "ip address dhcp client-id GigabitEthernet 0/{0}"\
                                .format(ipv4_dict.get('dhcp_client'))
                        elif not ipv4_dict.get(
                                'dhcp_client') and ipv4_dict.get(
                                    'dhcp_hostname'):
                            cmd = "ip address dhcp hostname {0}".format(
                                ipv4_dict.get('dhcp_client'))

                    add_command_to_config_list(interface, cmd, commands)

        # To handle L3 IPV6 configuration
        if want.get('ipv6'):
            # Get the diff b/w want and have IPV6
            if have.get('ipv6'):
                ipv6 = tuple(
                    set(dict(want_dict).get('ipv6')) -
                    set(dict(have_dict).get('ipv6')))
            else:
                diff = want_dict - have_dict
                ipv6 = dict(diff).get('ipv6')
            if ipv6:
                for each in ipv6:
                    ipv6_dict = dict(each)
                    validate_ipv6(ipv6_dict.get('address'), module)
                    cmd = "ipv6 address {0}".format(ipv6_dict.get('address'))
                    add_command_to_config_list(interface, cmd, commands)

        return commands