def build_config(self,
                                 apply=True,
                                 attributes=None,
                                 unconfig=False,
                                 **kwargs):
                    assert not kwargs, kwargs
                    attributes = AttributesHelper(self, attributes)
                    configurations = CliConfigBuilder(unconfig=unconfig)

                    with configurations.submode_context(
                            attributes.format('key {key_id}', force=True)):

                        if unconfig and attributes.iswildcard:
                            configurations.submode_unconfig()

                        # key chain <key_chain>
                        #  key <key_id>
                        #   key-string [key_enc_type] <key_string>
                        if attributes.value('key_string'):

                            # + key-string
                            key_string_str = 'key-string'

                            # + [key_enc_type] <key_string>
                            if attributes.value('key_enc_type'):
                                key_string_str += attributes.format(
                                    ' {key_enc_type} {key_string}')
                            else:
                                key_string_str += attributes.format(
                                    ' {key_string}')

                            configurations.append_line(
                                attributes.format(key_string_str))

                    return str(configurations)
Exemple #2
0
            def build_config(self,
                             apply=True,
                             attributes=None,
                             unconfig=False,
                             **kwargs):
                assert not kwargs, kwargs
                attributes = AttributesHelper(self, attributes)
                configurations = CliConfigBuilder(unconfig=unconfig)

                # auth_key_id, auth_algorithm, auth_key
                if attributes.value('auth_algorithm') and \
                   attributes.value('auth_key'):
                    configurations.append_line(
                        attributes.format(
                            'ntp authentication-key '
                            '{auth_key_id} {auth_algorithm.value} {auth_key}',
                            force=True))

                # auth_trusted_key
                if attributes.value('auth_trusted_key'):
                    configurations.append_line(
                        attributes.format('ntp trusted-key {auth_key_id}',
                                          force=True))

                return str(configurations)
Exemple #3
0
            def build_config(self,
                             apply=True,
                             attributes=None,
                             unconfig=False,
                             **kwargs):
                assert not apply
                attributes = AttributesHelper(self, attributes)
                configurations = CliConfigBuilder(unconfig=unconfig)
                with configurations.submode_context(
                        attributes.format(
                            'vlan configuration {vlan_configuration_id}',
                            force=True)):
                    if unconfig and attributes.iswildcard:
                        # Never reached!
                        configurations.submode_unconfig()

                    # iosxe: vlan configuration <vlan_configuration_id> / \
                    # datalink flow monitor
                    if attributes.value('datalink_flow_monitor'):
                        configurations.append_line(
                            attributes.format('datalink flow monitor'))
                    # iosxe: vlan configuration <vlan_configuration_id> / \
                    # device-tracking
                    # iosxe: vlan configuration <vlan_configuration_id> / \
                    # action
                    # iosxe: vlan configuration <vlan_configuration_id> / exit
                    # iosxe: vlan configuration <vlan_configuration_id> / ip
                    # iosxe: vlan configuration <vlan_configuration_id> / ipv6
                    # iosxe: vlan configuration <vlan_configuration_id> / no

                return str(configurations)
Exemple #4
0
            def build_config(self,
                             apply=True,
                             attributes=None,
                             unconfig=False,
                             **kwargs):
                assert not apply
                assert not kwargs, kwargs
                attributes = AttributesHelper(self, attributes)
                configurations = CliConfigBuilder(unconfig=unconfig)

                # mac address-table learning vlan <vlan_id>
                if attributes.value('vlan_mac_learning'):
                    configurations.append_line(
                        attributes.format(
                            'mac address-table learning vlan {vlan_id}',
                            force=True))

                # mac address-table aging-time <vlan_mac_aging_time> vlan <vlan_id>
                configurations.append_line(
                    attributes.format(
                        'mac address-table aging-time '
                        '{vlan_mac_aging_time} vlan {vlan_id}',
                        force=True))

                # mac_address_attr
                for sub, attributes2 in attributes.mapping_values(
                        'mac_address_attr', sort=True,
                        keys=self.mac_address_attr):
                    configurations.append_block(
                        sub.build_config(apply=False,
                                         attributes=attributes2,
                                         unconfig=unconfig))

                return str(configurations)
            def build_config(self,
                             apply=True,
                             attributes=None,
                             unconfig=False,
                             **kwargs):
                assert not kwargs, kwargs
                attributes = AttributesHelper(self, attributes)
                configurations = CliConfigBuilder(unconfig=unconfig)
                with configurations.submode_context(
                        attributes.format(
                            'tunnel-encryption policy {policy_name}',
                            force=True)):
                    if unconfig and attributes.iswildcard:
                        configurations.submode_unconfig()

                    # nxos:
                    if attributes.value('cipher_suite'):
                        if attributes.value(
                                'cipher_suite').value == 'gcm-aes-xpn-128':
                            configurations.append_line(
                                attributes.format(
                                    'cipher-suite GCM-AES-XPN-128'))
                        elif attributes.value(
                                'cipher_suite').value == 'gcm-aes-xpn-256':
                            configurations.append_line(
                                attributes.format(
                                    'cipher-suite GCM-AES-XPN-257'))

                    # nxos: auto-recovery reload-delay <value>
                    if attributes.value('sak_rekey_time'):
                        configurations.append_line(
                            attributes.format(
                                'sak-rekey-time {sak_rekey_time}'))
                return str(configurations)
Exemple #6
0
                        def build_config(self,
                                         apply=True,
                                         attributes=None,
                                         unconfig=False,
                                         **kwargs):
                            assert not apply
                            attributes = AttributesHelper(self, attributes)
                            configurations = CliConfigBuilder(
                                unconfig=unconfig)

                            self.vlan = kwargs['vlan_id']

                            # only add vlan_id in attributes when
                            # unconfig for specific attributes is enable
                            if unconfig and attributes.attributes:
                                attributes.attributes['vlan'] = None

                            # the interface should have vrf(name = vrf_name) attached
                            with configurations.submode_context(
                                    attributes.format(
                                        'interface {interface_name}',
                                        force=True)):
                                # spanning-tree mst <mst_id> cost <m_inst_if_cost>
                                configurations.append_line(
                                    attributes.format(
                                        'spanning-tree vlan {vlan} cost {v_if_cost}'
                                    ))

                                # spanning-tree vlan <vlan_id> port-priority <v_if_port_priority>
                                configurations.append_line(
                                    attributes.format(
                                        'spanning-tree vlan {vlan} port-priority {v_if_port_priority}'
                                    ))

                            return str(configurations)
Exemple #7
0
            def build_config(self,
                             apply=True,
                             attributes=None,
                             unconfig=False,
                             **kwargs):
                assert not apply
                assert not kwargs, kwargs
                attributes = AttributesHelper(self, attributes)
                configurations = CliConfigBuilder(unconfig=unconfig)

                with configurations.submode_context(
                        attributes.format(
                            'evpn multisite border-gateway {evpn_msite_bgw}',
                            force=True)):
                    if unconfig and attributes.iswildcard:
                        configurations.submode_unconfig()

                    # nxos : delay-restore time <int 30-1000>
                    if attributes.value('evpn_msite_bgw_delay_restore_time'):
                        configurations.append_line(\
                            attributes.format('delay-restore time {evpn_msite_bgw_delay_restore_time}'))

                    # nxos : dci-advertise-pip
                    if attributes.value('evpn_msite_dci_advertise_pip'):
                        configurations.append_line( \
                            attributes.format('dci-advertise-pip'))

                    # nxos: split-horizon per-site
                    if attributes.value('evpn_msite_split_horizon_per_site'):
                        configurations.append_line( \
                            attributes.format('split-horizon per-site'))

                return str(configurations)
Exemple #8
0
    def build_config(self, apply=True, attributes=None, unconfig=False,
                     **kwargs):
        assert not kwargs, kwargs
        assert not apply
        attributes = AttributesHelper(self, attributes)
        configurations = CliConfigBuilder(unconfig=unconfig)

        # ===================================
        # join_group
        # join_group_source_addr
        # static_group
        # static_group_source_addr
        # ===================================

        if attributes.value('join_group'):

            cmd_str = 'ip igmp join-group {join_group}'

            # build up configuration string
            if attributes.value('join_group_source_addr'):
                cmd_str += ' source {join_group_source_addr}'

            configurations.append_line(attributes.format(cmd_str))

        elif attributes.value('static_group'):

            cmd_str = 'ip igmp static-group {static_group}'
            
            # build up configuration string
            if attributes.value('static_group_source_addr'):
                cmd_str += ' source {static_group_source_addr}'

            configurations.append_line(attributes.format(cmd_str))

        return str(configurations)
Exemple #9
0
            def build_config(self,
                             apply=True,
                             attributes=None,
                             unconfig=False,
                             **kwargs):
                assert not apply
                assert not kwargs, kwargs
                attributes = AttributesHelper(self, attributes)
                configurations = CliConfigBuilder(unconfig=unconfig)

                with configurations.submode_context(
                        attributes.format(
                            'dot1x credential {credential_profile}',
                            force=True)):

                    if unconfig and attributes.iswildcard:
                        configurations.submode_unconfig()

                    # username <credential_username>
                    configurations.append_line(
                        attributes.format('username {credential_username}'))

                    # password [<credential_pwd_type>] <credential_secret>
                    if attributes.value('credential_pwd_type'):
                        configurations.append_line(
                            attributes.format(
                                'password {credential_pwd_type} {credential_secret}'
                            ))
                    else:
                        configurations.append_line(
                            attributes.format('password {credential_secret}'))

                return str(configurations)
Exemple #10
0
            def build_config(self,
                             apply=True,
                             attributes=None,
                             unconfig=False,
                             **kwargs):
                '''Controller build config'''
                assert not apply
                attributes = AttributesHelper(self, attributes)
                configurations = CliConfigBuilder(unconfig=unconfig)

                # iosxr: rsvp / controller <name> (config-rsvp-cntl)
                with configurations.submode_context(
                        attributes.format('controller {interface_name}',
                                          force=True)):

                    # iosxr: rsvp / controller <name> / signalling refresh out-of-band interval 180
                    configurations.append_line(
                        attributes.format(
                            'signalling refresh out-of-band interval {sig_refresh_outofband_interval}'
                        ))

                    # iosxr: rsvp / controller <name> / signalling refresh out-of-band missed 1
                    configurations.append_line(
                        attributes.format(
                            'signalling refresh out-of-band missed {sig_refresh_outofband_missed}'
                        ))

                return str(configurations)
Exemple #11
0
            def build_config(self,
                             apply=True,
                             attributes=None,
                             unconfig=False,
                             **kwargs):
                assert not apply
                assert not kwargs, kwargs
                attributes = AttributesHelper(self, attributes)
                configurations = CliConfigBuilder(unconfig=unconfig)

                # iosxr: l2vpn / bridge group someword / bridge-domain someword2 / vfi someword3 / autodiscovery bgp / signaling-protocol bgp (config-l2vpn-bg-bd-vfi-ad-sig)
                with configurations.submode_context('signaling-protocol bgp'):
                    if not attributes.value('enabled', force=True):
                        configurations.submode_cancel()

                    # iosxr: l2vpn / bridge group someword / bridge-domain someword2 / vfi someword3 / autodiscovery bgp / signaling-protocol bgp / load-balancing flow-label both
                    # iosxr: l2vpn / bridge group someword / bridge-domain someword2 / vfi someword3 / autodiscovery bgp / signaling-protocol bgp / load-balancing flow-label both static
                    # iosxr: l2vpn / bridge group someword / bridge-domain someword2 / vfi someword3 / autodiscovery bgp / signaling-protocol bgp / load-balancing flow-label receive
                    # iosxr: l2vpn / bridge group someword / bridge-domain someword2 / vfi someword3 / autodiscovery bgp / signaling-protocol bgp / load-balancing flow-label receive static
                    # iosxr: l2vpn / bridge group someword / bridge-domain someword2 / vfi someword3 / autodiscovery bgp / signaling-protocol bgp / load-balancing flow-label transmit
                    # iosxr: l2vpn / bridge group someword / bridge-domain someword2 / vfi someword3 / autodiscovery bgp / signaling-protocol bgp / load-balancing flow-label transmit static

                    # iosxr: l2vpn / bridge group someword / bridge-domain someword2 / vfi someword3 / autodiscovery bgp / signaling-protocol bgp / ve-id 1
                    configurations.append_line(
                        attributes.format('ve-id {ve_id}'))

                    # iosxr: l2vpn / bridge group someword / bridge-domain someword2 / vfi someword3 / autodiscovery bgp / signaling-protocol bgp / ve-range 11
                    configurations.append_line(
                        attributes.format('ve-range {ve_range}'))

                return str(configurations)
    def build_config(self,
                     apply=True,
                     attributes=None,
                     unconfig=False,
                     **kwargs):
        attributes = AttributesHelper(self, attributes)
        configurations = CliConfigBuilder(unconfig=unconfig)

        # router ospfv3 1
        #   address-family ipv6 unicast
        #     area {area-id} filter-list route-map map-name out
        #     area {area-id} filter-list route-map map-name in
        if attributes.value('routemap_area_id') and attributes.value(
                'ar_route_map_in'):
            configurations.append_line(
                attributes.format(
                    'area {routemap_area_id} filter-list route-map {ar_route_map_in} in'
                ))

        if attributes.value('routemap_area_id') and attributes.value(
                'ar_route_map_out'):
            configurations.append_line(
                attributes.format(
                    'area {routemap_area_id} filter-list route-map {ar_route_map_out} out'
                ))
        return str(configurations)
Exemple #13
0
                    def build_config(self,
                                     apply=True,
                                     attributes=None,
                                     unconfig=False,
                                     **kwargs):
                        assert not apply
                        assert not kwargs, kwargs
                        attributes = AttributesHelper(self, attributes)
                        configurations = CliConfigBuilder(unconfig=unconfig)

                        with configurations.submode_context(
                                attributes.format('interface {interface.name}',
                                                  force=True)):

                            if unconfig and attributes.iswildcard:
                                configurations.submode_unconfig()

                            # ======
                            # if_enable
                            # ======
                            if attributes.value('if_enable'):
                                configurations.append_line(
                                    attributes.format('enable'))

                        return str(configurations)
Exemple #14
0
            def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs):
                assert not apply
                attributes = AttributesHelper(self, attributes)
                configurations = CliConfigBuilder(unconfig=unconfig)

                with configurations.submode_context(attributes.format('interface {interface_name}', force=True, cancel_empty=True)):

                    # iosxe: interface GigabitEthernet0/0/0 / mpls ip
                    if attributes.iswildcard:
                        configurations.append_line('mpls ip')
                    
                    # iosxe: interface GigabitEthernet0/0/0 / mpls ldp igp autoconfig
                    if attributes.value('igp_autoconfig'):
                        configurations.append_line('mpls ldp igp autoconfig')

                    # iosxe: interface GigabitEthernet0/0/0 / mpls ldp igp sync
                    if attributes.value('igp_sync'):
                        configurations.append_line('mpls ldp igp sync')

                    # iosxe: interface GigabitEthernet0/0/0 / mpls ldp igp sync time 5
                    configurations.append_line(attributes.format('mpls ldp igp sync delay {igp_sync_delay_time}'))

                    # iosxe: interface GigabitEthernet0/0/0 / mpls ldp discovery transport-address 10.12.1.1
                    configurations.append_line(attributes.format('mpls ldp discovery transport-address {transport_address}'))

                return str(configurations)
Exemple #15
0
                def build_config(self, apply=True, attributes=None, unconfig=False,
                                 **kwargs):
                    assert not kwargs, kwargs
                    attributes = AttributesHelper(self, attributes)
                    configurations = CliConfigBuilder(unconfig=unconfig)
                    with configurations.submode_context(attributes.format(
                            'ssx exporter {exp_id}', force=True)):
                        if unconfig and attributes.iswildcard:
                            configurations.submode_unconfig()

                        if attributes.value('source_ip'):
                            configurations.append_line(
                                attributes.format('source {source_ip}'))

                        if attributes.value('dest_ip'):
                            configurations.append_line(
                                attributes.format('destination {dest_ip} use-vrf default'))

                        if attributes.value('source_port') and attributes.value('dest_port'):
                            configurations.append_line(
                                attributes.format('transport udp src-port {source_port} dst-port {dest_port}'))

                        if attributes.value('dscp'):
                            configurations.append_line(
                                attributes.format('dscp {dscp}'))

                    return str(configurations)
Exemple #16
0
                def build_config(self,
                                 apply=True,
                                 attributes=None,
                                 unconfig=False,
                                 **kwargs):
                    assert not apply
                    assert not kwargs, kwargs
                    attributes = AttributesHelper(self, attributes)
                    configurations = CliConfigBuilder(unconfig=unconfig)

                    self.vlan_id = self.parent.vlan_id

                    # mac address-table static <mac_address> vlan <vlan_id> interface <interface>
                    if attributes.value('interface'):
                        interface = ' '.join(attributes.value('interface'))
                        cmd = 'mac address-table static {mac_address} vlan {vlan_id}'
                        cmd += ' interface {interface}'.format(
                            interface=interface)
                        configurations.append_line(
                            attributes.format(cmd, force=True))

                    # mac address-table static <mac_address> vlan <vlan_id> drop
                    if attributes.value('drop'):
                        configurations.append_line(
                            attributes.format(
                                'mac address-table static {mac_address} vlan {vlan_id} drop'
                            ))

                    return str(configurations)
Exemple #17
0
        def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs):
            assert not kwargs
            attributes = AttributesHelper(self, attributes)
            configurations = CliConfigBuilder(unconfig=unconfig)

            with configurations.submode_context(attributes.format('vrf definition {name}', force=True)):
                if unconfig and attributes.iswildcard:
                    configurations.submode_unconfig()

                if attributes.value('shutdown'):
                    warnings.warn('vrf shutdown', UnsupportedAttributeWarning)

                # iosxe: vrf definition vrf1 / vpn id 0:0
                configurations.append_line(attributes.format('vpn id {vpn_id}'))
                # iosxr: vrf vrf1 / description some line data
                configurations.append_line(attributes.format('description {description}'))
                configurations.append_line(attributes.format('rd {rd}'))

                # iosxr: vrf vrf1 / address-family ipv4 unicast (config-vrf-af)
                for key, sub, attributes2 in attributes.mapping_items(
                        'address_family_attr', keys=self.address_family_attr, sort=True):
                    configurations.append_block(
                        sub.build_config(apply=False, attributes=attributes2, unconfig=unconfig))

                # iosxe: vrf vrf1 / vpn id 0:0
                configurations.append_line(attributes.format('vpn id {vpn_id}'))

            if apply:
                if configurations:
                    self.device.configure(configurations)
            else:
                return CliConfig(device=self.device, unconfig=unconfig,
                                 cli_config=configurations)
Exemple #18
0
            def build_config(self,
                             apply=True,
                             attributes=None,
                             unconfig=False,
                             **kwargs):
                assert not apply
                assert not kwargs, kwargs
                attributes = AttributesHelper(self, attributes)
                configurations = CliConfigBuilder(unconfig=unconfig)

                # iosxr: l2vpn / redundancy / iccp group 1 / interface Bundle-Ether1 (config-l2vpn)
                with configurations.submode_context(
                        attributes.format('interface {interface_name}',
                                          force=True)):
                    if unconfig and attributes.iswildcard:
                        configurations.submode_unconfig()

                    # iosxr: l2vpn / redundancy / iccp group 1 / interface Bundle-Ether1 / mac-flush stp-tcn
                    configurations.append_line(
                        attributes.format('mac-flush {mac_flush}'))

                    # iosxr: l2vpn / redundancy / iccp group 1 / interface Bundle-Ether1 / primary vlan someword
                    configurations.append_line(
                        attributes.format('primary vlan {primary_vlan}'))

                    # iosxr: l2vpn / redundancy / iccp group 1 / interface Bundle-Ether1 / recovery delay 30
                    configurations.append_line(
                        attributes.format('recovery delay {recovery_delay}'))

                    # iosxr: l2vpn / redundancy / iccp group 1 / interface Bundle-Ether1 / secondary vlan someword
                    configurations.append_line(
                        attributes.format('secondary vlan {secondary_vlan}'))

                return str(configurations)
Exemple #19
0
            def build_config(self, apply=True, attributes=None, unconfig=False,
                             **kwargs):
                assert not kwargs, kwargs
                attributes = AttributesHelper(self, attributes)
                configurations = CliConfigBuilder(unconfig=unconfig)

                if attributes.value('if_ra_interval'):
                    configurations.append_line(
                        attributes.format('ipv6 nd ra-interval {if_ra_interval}'))
                if attributes.value('if_ra_lifetime'):
                    configurations.append_line(
                        attributes.format('ipv6 nd ra-lifetime {if_ra_lifetime}'))
                if attributes.value('if_ra_suppress') == True:
                    configurations.append_line(
                        attributes.format('ipv6 nd suppress-ra'))

                # NeighborAttributes
                for sub, attributes2 in attributes.mapping_values('neighbor_attr',
                                                                  sort=True,
                                                                  keys=self.neighbor_attr):
                    configurations.append_block(
                        sub.build_config(apply=False,
                                         attributes=attributes2,
                                         unconfig=unconfig))

                if apply:
                    if configurations:
                        self.device.configure(configurations)
                else:
                    return CliConfig(device=self.device, unconfig=unconfig,
                                     cli_config=configurations)
            def build_config(self,
                             apply=True,
                             attributes=None,
                             unconfig=False,
                             **kwargs):
                assert not kwargs, kwargs
                attributes = AttributesHelper(self, attributes)
                configurations = CliConfigBuilder(unconfig=unconfig)
                with configurations.submode_context(
                        attributes.format(
                            'tunnel-encryption peer-ip {peer_ip}',
                            force=True)):
                    if unconfig and attributes.iswildcard:
                        configurations.submode_unconfig()

                    # nxos: keychain and policy
                    if attributes.value('keychain_name'):
                        peerip_cfg = 'keychain {keychain_name} '

                        if attributes.value('tunnelpolicy_name'):
                            peerip_cfg += 'policy {tunnelpolicy_name}'

                    configurations.append_line(attributes.format(peerip_cfg))

                return str(configurations)
                def build_config(self,
                                 apply=True,
                                 attributes=None,
                                 unconfig=False,
                                 **kwargs):

                    assert not kwargs, kwargs
                    attributes = AttributesHelper(self, attributes)
                    configurations = CliConfigBuilder(unconfig=unconfig)

                    with configurations.submode_context(
                            attributes.format('key {key_id}', force=True)):

                        if unconfig and attributes.iswildcard:
                            configurations.submode_unconfig()

                        # key chain <key_chain> tunnel-encryption
                        #  key <key_id>
                        #   key-octet-string [key_enc_type] <key_string> [cryptographic-algorithm <crypto_algo>]
                        if attributes.value('key_string'):

                            # + key-octet-string
                            key_string_str = 'key-octet-string'

                            # + [key_enc_type]
                            if attributes.value('key_enc_type'):
                                key_string_str += attributes.format(
                                    ' {key_enc_type}')

                            # + <key_string>
                            key_string_str += attributes.format(
                                ' {key_string}')

                            # + [cryptographic-algorithm <crypto_algo>]
                            if attributes.value('crypto_algo'):
                                if attributes.value(
                                        'crypto_algo').value == 'aes-128-cmac':
                                    key_string_str += ' cryptographic-algorithm AES_128_CMAC'
                                elif attributes.value(
                                        'crypto_algo').value == 'aes-128-cmac':
                                    key_string_str += ' cryptographic-algorithm AES_256_CMAC'

                            configurations.append_line(
                                attributes.format(key_string_str))

                        # key chain <key_chain> tunnel-encryption
                        #  key <key_id>
                        #   send-lifetime <lifetime_start> duration <lifetime_duration>
                        if attributes.value(
                                'lifetime_start') and attributes.value(
                                    'lifetime_duration'):

                            # send-lifetime <lifetime_start> duration <lifetime_duration>
                            lifetime_str = 'send-lifetime {lifetime_start} duration {lifetime_duration}'

                            configurations.append_line(
                                attributes.format(lifetime_str))

                    return str(configurations)
Exemple #22
0
                def build_config(self,
                                 apply=True,
                                 attributes=None,
                                 unconfig=False,
                                 **kwargs):
                    assert not apply
                    assert not kwargs, kwargs
                    attributes = AttributesHelper(self, attributes)
                    configurations = CliConfigBuilder(unconfig=unconfig)

                    # Set decider key af_name from user set address family
                    self.af_name = self.address_family.value

                    # ======
                    # enable
                    # ======
                    if attributes.value('enabled'):
                        if unconfig is False:
                            if self.af_name == 'ipv4':
                                configurations.append_line(
                                    attributes.format('feature pim'))
                            elif self.af_name == 'ipv6':
                                configurations.append_line(
                                    attributes.format('feature pim6'))
                        elif unconfig is True:
                            if self.af_name == 'ipv4':
                                configurations.append_line('no feature pim',
                                                           raw=True)
                            elif self.af_name == 'ipv6':
                                configurations.append_line('no feature pim6',
                                                           raw=True)

                    # =========
                    # multipath
                    # =========
                    if attributes.value('multipath'):
                        if unconfig is False:
                            configurations.append_line(
                                attributes.format('ip multicast multipath'))
                        elif unconfig is True:
                            configurations.append_line(
                                'no ip multicast multipath', raw=True)

                    # Mroute attributes configs
                    for mroute, attributes2 in attributes.sequence_values(
                            'mroutes', sort=True):
                        kwargs = {'vrf': self.vrf_id, 'af_name': self.af_name}
                        if unconfig:
                            configurations.append_block(
                                mroute.build_unconfig(apply=False,
                                                      attributes=attributes2,
                                                      **kwargs))
                        else:
                            configurations.append_block(
                                mroute.build_config(apply=False,
                                                    attributes=attributes2,
                                                    **kwargs))

                    return str(configurations)
                    def build_config(self,
                                     apply=True,
                                     attributes=None,
                                     unconfig=False,
                                     **kwargs):
                        assert not apply
                        attributes = AttributesHelper(self, attributes)
                        configurations = CliConfigBuilder(unconfig=unconfig)

                        # router ospfv3 1
                        #  area 2 virtual-link 7.7.7.7
                        if attributes.value('vl_router_id') and \
                                attributes.value('area_type').value != 'stub' and \
                                attributes.value('area_type').value != 'nssa':
                            with configurations.submode_context(
                                    attributes.format(
                                        'area {area} virtual-link {vl_router_id}',
                                        force=True)):

                                if unconfig and attributes.iswildcard:
                                    configurations.submode_unconfig()

                                # router ospfv3 1
                                #  area 2 virtual-link 7.7.7.7
                                #    hello-interval 55
                                if attributes.value('vl_hello_interval'):
                                    configurations.append_line(
                                        attributes.format(
                                            'hello-interval {vl_hello_interval}'
                                        ))

                                # router ospfv3 1
                                #  area 2 virtual-link 7.7.7.7
                                #    dead-interval 55
                                if attributes.value('vl_dead_interval'):
                                    configurations.append_line(
                                        attributes.format(
                                            'dead-interval {vl_dead_interval}')
                                    )

                                # router ospfv3 1
                                #  area 2 virtual-link 7.7.7.7
                                #   retransmit-interval 55
                                if attributes.value('vl_retransmit_interval'):
                                    configurations.append_line(
                                        attributes.format(
                                            'retransmit-interval {vl_retransmit_interval}'
                                        ))

                                # router ospfv3 1
                                #  area 2 virtual-link 7.7.7.7
                                #   transmit-delay 55
                                if attributes.value('vl_transmit_delay'):
                                    configurations.append_line(
                                        attributes.format(
                                            'transmit-delay {vl_transmit_delay}'
                                        ))
                        return str(configurations)
Exemple #24
0
                    def build_config(self,
                                     apply=True,
                                     attributes=None,
                                     unconfig=False,
                                     **kwargs):
                        assert not apply
                        assert not kwargs, kwargs
                        attributes = AttributesHelper(self, attributes)
                        configurations = CliConfigBuilder(unconfig=unconfig)

                        # only add vlan_id in attributes when
                        # unconfig for specific attributes is enable
                        if unconfig and attributes.attributes:
                            attributes.attributes['vlan'] = None

                        if attributes.value('vlan_id'):
                            configurations.append_line(
                                attributes.format(
                                    'spanning-tree vlan {vlan_id}'))

                        # spanning-tree vlan <vlan_id> hello-time <v_hello_time>
                        configurations.append_line(
                            attributes.format(
                                'spanning-tree vlan {vlan} hello-time {v_hello_time}'
                            ))

                        # spanning-tree vlan <vlan_id> max-age <v_max_age>
                        configurations.append_line(
                            attributes.format(
                                'spanning-tree vlan {vlan} max-age {v_max_age}'
                            ))

                        # spanning-tree vlan <vlan_id> forward-time <v_forwarding_delay>
                        configurations.append_line(
                            attributes.format(
                                'spanning-tree vlan {vlan} forward-time {v_forwarding_delay}'
                            ))

                        # spanning-tree vlan <vlan_id> priority <v_bridge_priority>
                        configurations.append_line(
                            attributes.format(
                                'spanning-tree vlan {vlan} priority {v_bridge_priority}'
                            ))

                        # interface_attr
                        for sub, attributes2 in attributes.mapping_values(
                                'interface_attr',
                                sort=True,
                                keys=self.interface_attr):
                            configurations.append_block(
                                sub.build_config(apply=False,
                                                 attributes=attributes2,
                                                 unconfig=unconfig,
                                                 vlan_id=self.vlan))

                        return str(configurations)
Exemple #25
0
                    def build_config(self,
                                     apply=True,
                                     attributes=None,
                                     unconfig=False,
                                     **kwargs):
                        assert not apply
                        assert not kwargs, kwargs
                        attributes = AttributesHelper(self, attributes)
                        configurations = CliConfigBuilder(unconfig=unconfig)

                        # only add mst_id in attributes when
                        # unconfig for specific attributes is enable
                        if unconfig and attributes.attributes:
                            attributes.attributes['mst_id'] = None

                        # the interface should have vrf(name = vrf_name) attached
                        if attributes.value('m_vlans') or \
                           attributes.value('m_name') or \
                           attributes.value('m_revision'):
                            with configurations.submode_context(
                                    attributes.format(
                                        'spanning-tree mst configuration',
                                        force=True)):

                                # instance <mst_id> vlan <m_vlans>
                                configurations.append_line(
                                    attributes.format(
                                        'instance {mst_id} vlan {m_vlans}'))

                                # name <m_name>
                                configurations.append_line(
                                    attributes.format('name {m_name}'))

                                # revision  <m_revision>
                                configurations.append_line(
                                    attributes.format('revision {m_revision}'))

                        # spanning-tree mst <mst_id> priority <m_bridge_priority>
                        configurations.append_line(
                            attributes.format(
                                'spanning-tree mst {mst_id} priority {m_bridge_priority}'
                            ))

                        # interface_attr
                        for sub, attributes2 in attributes.mapping_values(
                                'interface_attr',
                                sort=True,
                                keys=self.interface_attr):
                            configurations.append_block(
                                sub.build_config(apply=False,
                                                 attributes=attributes2,
                                                 unconfig=unconfig,
                                                 mst_id=self.mst_id))

                        return str(configurations)
Exemple #26
0
    def build_config(self,
                     apply=True,
                     attributes=None,
                     unconfig=False,
                     **kwargs):
        assert not apply
        assert not kwargs, kwargs
        attributes = AttributesHelper(self, attributes)
        configurations = CliConfigBuilder(unconfig=unconfig)

        # iosxr: l2vpn / bridge group someword / bridge-domain someword2 / vfi someword3 (config-l2vpn-bg-bd-vfi)
        if attributes.value('virtual', force=True):
            title = attributes.format('access-vfi {name}', force=True)
        else:
            title = attributes.format('vfi {name}', force=True)

        with configurations.submode_context(title):
            if unconfig and attributes.iswildcard:
                configurations.submode_unconfig()

            sub, attributes2 = attributes.namespace('autodiscovery_bgp')
            if sub is not None:
                configurations.append_block(
                    sub.build_config(apply=False,
                                     attributes=attributes2,
                                     unconfig=unconfig))

            sub, attributes2 = attributes.namespace('multicast_p2mp')
            if sub is not None:
                configurations.append_block(
                    sub.build_config(apply=False,
                                     attributes=attributes2,
                                     unconfig=unconfig))

            # iosxr: l2vpn / bridge group someword / bridge-domain someword2 / vfi someword3 / neighbor 1.2.3.4 pw-id 1 (config-l2vpn-bg-bd-vfi-pw)
            for sub, attributes2 in attributes.mapping_values(
                    'neighbor_attr', keys=self.pseudowire_neighbors,
                    sort=True):
                configurations.append_block(
                    sub.build_config(apply=False,
                                     attributes=attributes2,
                                     unconfig=unconfig))

            # iosxr: l2vpn / bridge group someword / bridge-domain someword2 / vfi someword3 / shutdown
            if attributes.value('shutdown'):
                configurations.append_line('shutdown')

            # iosxr: l2vpn / bridge group someword / bridge-domain someword2 / vfi someword3 / vpn-id 1
            configurations.append_line(attributes.format('vpn-id {vpn_id}'))

        return CliConfig(device=self.device,
                         unconfig=unconfig,
                         cli_config=configurations)
Exemple #27
0
            def build_config(self,
                             apply=True,
                             attributes=None,
                             unconfig=False,
                             **kwargs):
                assert not apply
                assert not kwargs, kwargs
                attributes = AttributesHelper(self, attributes)
                configurations = CliConfigBuilder(unconfig=unconfig)

                # global_max_groups
                if attributes.value('global_max_groups'):
                    cfg_str = 'ipv6 mld state-limit {global_max_groups}' \
                        if self.vrf_id == 'default' else \
                            'ipv6 mld vrf {vrf_id} state-limit {global_max_groups}'

                    configurations.append_line(
                        attributes.format(cfg_str, force=True))

                # ipv6 mld [vrf <vrf>] ssm-map enable
                if hasattr(attributes.value('ssm'), 'data'):
                    if attributes.value('ssm').data:
                        cfg_str = 'ipv6 mld ssm-map enable' \
                            if self.vrf_id == 'default' else \
                                'ipv6 mld vrf {} ssm-map enable'.format(self.vrf_id)

                        configurations.append_line(attributes.format(cfg_str))

                # Ssm Attributes under vrf level config
                for ssm, attributes2 in attributes.sequence_values('ssm',
                                                                   sort=True):
                    kwargs = {'vrf': self.vrf_id}
                    if unconfig:
                        configurations.append_block(
                            ssm.build_unconfig(apply=False,
                                               attributes=attributes2,
                                               **kwargs))
                    else:
                        configurations.append_block(
                            ssm.build_config(apply=False,
                                             attributes=attributes2,
                                             **kwargs))

                # InterfaceAttributes
                for sub, attributes2 in attributes.mapping_values(
                        'interface_attr', sort=True, keys=self.interface_attr):
                    configurations.append_block(
                        sub.build_config(apply=False,
                                         attributes=attributes2,
                                         unconfig=unconfig))

                return str(configurations)
Exemple #28
0
                def build_config(self,
                                 apply=True,
                                 attributes=None,
                                 unconfig=False,
                                 **kwargs):
                    assert not kwargs, kwargs
                    attributes = AttributesHelper(self, attributes)
                    configurations = CliConfigBuilder(unconfig=unconfig)
                    if unconfig and attributes.iswildcard:
                        with configurations.submode_context(
                                attributes.format('vni {evpn_vni} l2',
                                                  force=True)):

                            configurations.submode_unconfig()
                            # nxos: rd "auto"
                            if attributes.value('evpn_vni_rd'):
                                configurations.append_line(
                                    attributes.format('rd {evpn_vni_rd}'))

                            for sub, attributes2 in attributes.mapping_values(
                                    'route_target_attr',
                                    sort=True,
                                    keys=self.route_target_attr):
                                configurations.append_block(
                                    sub.build_config(apply=False,
                                                     attributes=attributes2,
                                                     unconfig=unconfig))
                    else:
                        with configurations.submode_context(
                                attributes.format('vni {evpn_vni} l2',
                                                  force=True)):
                            # nxos: rd "auto"
                            if attributes.value('evpn_vni_rd'):
                                configurations.append_line(
                                    attributes.format('rd {evpn_vni_rd}'))

                            for sub, attributes2 in attributes.mapping_values(
                                    'route_target_attr',
                                    sort=True,
                                    keys=self.route_target_attr):
                                configurations.append_block(
                                    sub.build_config(apply=False,
                                                     attributes=attributes2,
                                                     unconfig=unconfig))

                    if apply:
                        if configurations:
                            self.device.configure(configurations)
                    else:
                        return CliConfig(device=self.device,
                                         unconfig=unconfig,
                                         cli_config=configurations)
Exemple #29
0
    def build_config(self,
                     apply=True,
                     attributes=None,
                     unconfig=False,
                     **kwargs):
        assert not apply
        attributes = AttributesHelper(self, attributes)
        configurations = CliConfigBuilder(unconfig=unconfig)

        # ===================================
        # static_rp_address
        # static_rp_group_list
        # static_rp_prefix_list
        # static_rp_route_map
        # static_rp_policy
        # static_rp_bidir
        # ===================================

        if attributes.value('static_rp_address'):
            # ip/ipv6 pim rp-address <static_rp_address>
            static_str = '{ip} pim rp-address'.format(ip=kwargs['ip_type'])
            static_str += ' {static_rp_address}'

            # group-list {static_rp_group_list} |
            # route-map {static_rp_route_map} |
            # prefix-list {static_rp_prefix_list}
            if attributes.value('static_rp_group_list'):
                static_str += ' group-list {static_rp_group_list}'
            elif attributes.value('static_rp_route_map'):
                static_str += ' route-map {static_rp_route_map}'
            elif attributes.value('static_rp_prefix_list'):
                static_str += ' prefix-list {static_rp_prefix_list}'
            else:
                configurations.append_line(attributes.format(static_str))
                static_str = ''

            if static_str:
                # bidir
                if attributes.value('static_rp_bidir'):
                    static_str += ' bidir'

                # bidir |
                # override |
                # bidir override
                if attributes.value('static_rp_override') and \
                   kwargs['ip_type'] == 'ipv6':
                    static_str += ' override'

            configurations.append_line(attributes.format(static_str))

        return str(configurations)
Exemple #30
0
        def build_config(self,
                         apply=True,
                         attributes=None,
                         unconfig=False,
                         **kwargs):
            assert not kwargs, kwargs
            attributes = AttributesHelper(self, attributes)
            configurations = CliConfigBuilder(unconfig=unconfig)

            # lldp run
            if attributes.value('enabled'):
                configurations.append_line(attributes.format('lldp run'))

            # lldp timer <hello_timer>
            if attributes.value('hello_timer'):
                configurations.append_line(
                    attributes.format('lldp timer {hello_timer}'))

            # lldp holdtime <hold_timer>
            if attributes.value('hold_timer'):
                configurations.append_line(
                    attributes.format('lldp holdtime {hold_timer}'))

            # lldp reinit <reinit_timer>
            if attributes.value('reinit_timer'):
                configurations.append_line(
                    attributes.format('lldp reinit {reinit_timer}'))

            # tlv select attributes
            sub, attributes2 = attributes.namespace('tlv_select_attr')
            if sub is not None:
                configurations.append_block(
                    sub.build_config(apply=False,
                                     attributes=attributes2,
                                     unconfig=unconfig))

            # interface attributes
            for sub, attributes2 in attributes.mapping_values(
                    'interface_attr', sort=True, keys=self.interface_attr):
                configurations.append_block(
                    sub.build_config(apply=False,
                                     attributes=attributes2,
                                     unconfig=unconfig))

            if apply:
                if configurations:
                    self.device.configure(configurations)
            else:
                return CliConfig(device=self.device,
                                 unconfig=unconfig,
                                 cli_config=configurations)