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

                # AddressFamilyAttributes
                for sub, attributes2 in attributes.mapping_values('address_family_attr',
                                                                  sort=True,
                                                                  keys=self.address_family_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)
예제 #2
0
    def build_unconfig(self,
                       devices=None,
                       apply=True,
                       attributes=None,
                       **kwargs):
        cfgs = {}
        attributes = AttributesHelper(self, attributes)

        if devices is None:
            devices = self.devices
        devices = set(devices)

        for key, sub, attributes2 in attributes.mapping_items('device_attr',
                                                              keys=devices,
                                                              sort=True):
            cfgs[key] = sub.build_unconfig(apply=False, attributes=attributes2)

        if apply:
            self.testbed.config_on_devices(cfgs, fail_invalid=True)
        else:
            return cfgs
예제 #3
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 {intf}', force=True)):
                    # lldp transmit
                    # lldp receive
                    if attributes.value('if_enabled'):
                        configurations.append_line(
                            attributes.format('lldp transmit'))
                        configurations.append_line(
                            attributes.format('lldp receive'))

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

                # loop over all maxlength_range
                for sub, attributes2 in attributes.mapping_values(
                        'maxlength_range_attr',
                        sort=True,
                        keys=self.maxlength_range_attr.keys()):
                    configurations.append_block(
                        sub.build_config(apply=False,
                                         attributes=attributes2,
                                         unconfig=unconfig,
                                         **kwargs))

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

            # dot1x system-auth-control
            if attributes.value('system_auth_control'):
                configurations.append_line('dot1x system-auth-control')

            # dot1x supplicant force-multicast
            if attributes.value('supplicant_force_mcast'):
                configurations.append_line('dot1x supplicant force-multicast')

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

            # interfaces 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)
예제 #6
0
        def build_config(self, apply=True, attributes=None, unconfig=False,
                         **kwargs):
            assert not kwargs, kwargs
            attributes = AttributesHelper(self, attributes)
            configurations = CliConfigBuilder(unconfig=unconfig)

            # enabled
            if attributes.value('enabled'):
                if unconfig is False:
                    configurations.append_line(attributes.format(
                        'feature msdp'))
                elif unconfig is True and\
                     attributes.attributes == {'enabled': {True: None}} or \
                        attributes.iswildcard:
                    configurations.append_line('no feature msdp', raw=True)
                    if apply:
                        if configurations:
                            self.device.configure(configurations)
                    else:
                        return CliConfig(device=self.device, unconfig=unconfig,
                                         cli_config=configurations)

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

            for sub, attributes2 in attributes.mapping_values('vrf_attr',
                                                               sort=True,
                                                               keys=self.vrf_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)
예제 #7
0
    def build_config(self,
                     apply=True,
                     attributes=None,
                     unconfig=False,
                     **kwargs):
        assert not kwargs, kwargs
        attributes = AttributesHelper(self, attributes)
        configurations = CliConfigBuilder(unconfig=unconfig)

        # ===================================
        # ssm_source_addr
        # ssm_group_policy
        # ===================================

        if attributes.value('ssm_source_addr') and \
           attributes.value('ssm_group_policy'):

            configurations.append_line(
                attributes.format('ssm map static '
                                  '{ssm_source_addr} {ssm_group_policy}'))

        return str(configurations)
예제 #8
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> / \
                    # egress port-channel load-balance random
                    if attributes.value('egress_load_balance'):
                        configurations.append_line(
                            attributes.format(
                                'egress port-channel load-balance random'))
                    # nxos: vlan configuration <vlan_configuration_id> / \
                    # device-tracking
                    # nxos: vlan configuration <vlan_configuration_id> / action
                    # nxos: vlan configuration <vlan_configuration_id> / exit
                    # nxos: vlan configuration <vlan_configuration_id> / ip
                    # nxos: vlan configuration <vlan_configuration_id> / ipv6
                    # nxos: vlan configuration <vlan_configuration_id> / no
                    # nxos: vlan configuration <vlan_configuration_id> / egress
                    # nxos: vlan configuration <vlan_configuration_id> /layer-2
                    # nxos: vlan configuration <vlan_configuration_id> / \
                    # service-policy
                    # nxos: vlan configuration <vlan_configuration_id> / this
                    # nxos: vlan configuration <vlan_configuration_id> / pop
                    # nxos: vlan configuration <vlan_configuration_id> / push
                    # nxos: vlan configuration <vlan_configuration_id> / where

                return str(configurations)
예제 #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)

                # spanning-tree mode {mode}
                if attributes.value('mode'):
                    mode = 'mst' if 'mstp' in self.mode else self.mode
                    configurations.append_line(
                        attributes.format('spanning-tree mode {}'.format(mode),
                                          force=True))

                # spanning-tree transmit hold-count {hold_count}
                configurations.append_line(
                    attributes.format(
                        'spanning-tree transmit hold-count {hold_count}'))

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

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

                return str(configurations)
예제 #10
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 / pbb (config-l2vpn)
                if attributes.value('enabled', force=True):
                    with configurations.submode_context('pbb'):
                        if unconfig and attributes.iswildcard:
                            configurations.submode_unconfig()

                        # iosxr: l2vpn / pbb / backbone-source-mac aaaa.bbbb.cccc
                        configurations.append_line(
                            attributes.format(
                                'backbone-source-mac {backbone_source_mac}'))

                return str(configurations)
예제 #11
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)

        # ===================================
        # ipv4
        # prefix_length
        # ipv4_secondary
        # secondary_vrf
        # ===================================

        if attributes.value('ipv4') and attributes.value('prefix_length'):
            # convert prefix_length to netmask
            ret = IPv4Network('1.1.1.1/{}'.format(
                attributes.value('prefix_length')), strict=False)
            mask = ret.with_netmask.split('/')[1]

            if attributes.value('ipv4_secondary'):
                configurations.append_line('ip address'
                    ' {ipv4} {prefix_length} secondary'
                    .format(ipv4=attributes.value('ipv4'),
                        prefix_length=mask))
                if attributes.value('secondary_vrf'):
                    configurations.append_line('ip address'
                        ' {ipv4} {prefix_length} secondary'
                        ' vrf {secondary_vrf}'
                        .format(ipv4=attributes.value('ipv4'), 
                            prefix_length=mask,
                            secondary_vrf=attributes.value('secondary_vrf')))
            else:
                configurations.append_line('ip address'
                    ' {ipv4} {prefix_length}'
                    .format(ipv4=attributes.value('ipv4'), 
                        prefix_length=mask))

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

                    # peer_address
                    if not attributes.value('peer_address') and not unconfig:
                        return str()

                    conf_line = 'ntp peer {peer_address}'

                    # peer_key_id
                    if attributes.value('peer_key_id'):
                        conf_line += ' key {peer_key_id}'

                    # peer_maxpoll
                    if attributes.value('peer_maxpoll'):
                        conf_line += ' maxpoll {peer_maxpoll}'

                    # peer_minpoll
                    if attributes.value('peer_minpoll'):
                        conf_line += ' minpoll {peer_minpoll}'

                    # peer_prefer
                    if attributes.value('peer_prefer'):
                        conf_line += ' prefer'

                    if self.vrf_name and self.vrf_name != 'default':
                        conf_line += ' use-vrf {vrf_name}'

                    # append the line
                    configurations.append_line(
                        attributes.format(conf_line, force=True))

                    return str(configurations)
예제 #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)

                # address_family
                for address_family_sub, address_family_attributes in \
                    attributes.mapping_values(
                        'address_family_attr', sort=True,
                        keys = self.address_family_attr):
                    configurations.append_block(
                        address_family_sub.build_config(
                            apply=False,
                            attributes=address_family_attributes,
                            unconfig=unconfig))

                return str(configurations)
예제 #14
0
    def build_config(self,
                     devices=None,
                     interfaces=None,
                     links=None,
                     apply=True,
                     attributes=None,
                     **kwargs):
        attributes = AttributesHelper(self, attributes)
        cfgs = {}

        devices, interfaces, links = \
            consolidate_feature_args(self, devices, interfaces, links)

        for key, sub, attributes2 in attributes.mapping_items('device_attr',
                                                              keys=devices,
                                                              sort=True):
            cfgs[key] = sub.build_config(apply=False, attributes=attributes2)
        if apply:
            for device_name, cfg in sorted(cfgs.items()):
                self.testbed.config_on_devices(cfg, fail_invalid=True)
        else:
            return cfgs
예제 #15
0
        def build_config(self,
                         devices=None,
                         apply=True,
                         attributes=None,
                         unconfig=False,
                         **kwargs):
            assert not apply
            attributes = AttributesHelper(self, attributes)
            configurations = CliConfigBuilder(unconfig=unconfig)

            # loop over all prefixes
            for sub, attributes2 in attributes.mapping_values(
                    'prefix_attr', keys=self.prefix_attr.keys(), sort=True):
                configurations.append_block(
                    sub.build_config(apply=False,
                                     attributes=attributes2,
                                     unconfig=unconfig,
                                     **kwargs))

            return CliConfig(device=self.device,
                             unconfig=unconfig,
                             cli_config=configurations)
예제 #16
0
    def build_config(self,
                     apply=True,
                     attributes=None,
                     unconfig=False,
                     **kwargs):
        assert not kwargs, kwargs
        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 = 'ipv6 mld join-group {join_group}'

            # build up configuration string
            if attributes.value('join_group_source_addr') and \
               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 = 'ipv6 mld static-oif {static_group}'

            # build up configuration string
            if attributes.value('static_group_source_addr') and \
               attributes.value('static_group_source_addr') != '*':
                cmd_str += ' source {static_group_source_addr}'

            configurations.append_line(attributes.format(cmd_str))

        return str(configurations)
예제 #17
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)

        # iosxe: l2vpn vfi context {name}
        with configurations.submode_context(
                attributes.format('l2vpn vfi context {name}', force=True)):
            if unconfig and attributes.iswildcard:
                configurations.submode_unconfig()

            # iosxr: l2vpn vfi context {name} / vpn id {vpn_id}
            assert self.vpn_id is not None
            configurations.append_line(attributes.format('vpn id {vpn_id}'))

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

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

        return CliConfig(device=self.device,
                         unconfig=unconfig,
                         cli_config=configurations)
예제 #18
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_proxy_enable') or \
                        attributes.value('if_local_proxy_enable') or\
                        attributes.value('if_expire_time'):
                    with configurations.submode_context(
                            attributes.format('interface {interface}',
                                              force=True)):

                        if attributes.value('if_proxy_enable'):
                            configurations.append_line(
                                attributes.format('ip proxy-arp'))

                        if attributes.value('if_local_proxy_enable'):
                            configurations.append_line(
                                attributes.format('ip local-proxy-arp'))

                        if attributes.value('if_expire_time'):
                            configurations.append_line(
                                attributes.format(
                                    'arp timeout {if_expire_time}'))

                for sub, attributes2 in attributes.mapping_values(
                        'static_arp_attr', sort=True,
                        keys=self.static_arp_attr):
                    configurations.append_block(
                        sub.build_config(apply=False,
                                         attributes=attributes2,
                                         unconfig=unconfig))
                return str(configurations)
예제 #19
0
        def build_config(self,
                         apply=True,
                         attributes=None,
                         unconfig=False,
                         **kwargs):
            assert not apply
            assert not kwargs
            attributes = AttributesHelper(self, attributes)
            configurations = CliConfigBuilder(unconfig=unconfig)

            # iosxe: interface tunnel1 / tunnel mpls traffic-eng path-option 1 dynamic
            if attributes.value('dynamic'):
                configurations.append_line(
                    attributes.format(
                        'tunnel mpls traffic-eng path-option {path_option} dynamic'
                    ))

            # iosxe: interface tunnel1 / tunnel mpls traffic-eng path-option 1 explicit name someword
            configurations.append_line(attributes.format\
                    ('tunnel mpls traffic-eng path-option {path_option} explicit name {explicit_name}'))

            return str(configurations)
예제 #20
0
    def build_config(self, apply=True, attributes=None):
        attributes = AttributesHelper(self, attributes)
        configurations = CliConfigBuilder()

        # nxos: logging logfile messages <0-7>  # 0-emerg;1-alert;2-crit;3-err;4-warn;5-notif;6-inform;7-debug
        configurations.append_line(attributes.format('logging logfile messages {logfile_messages_level}'))

        configurations.append_block(super().build_config(apply=False, attributes=attributes))

        # TODO -- exception dump?
        # nodename
        if attributes.value('nodename'):
            configurations.append_line(
                attributes.format('hostname {nodename}'))

        if apply:
            if configurations:
                self.configure(str(configurations), fail_invalid=True)
        else:
            # Return configuration
            return CliConfig(device=self, unconfig=False,
                             cli_config=configurations, fail_invalid=True)
예제 #21
0
            def build_config(self,
                             ydk_obj,
                             apply=True,
                             attributes=None,
                             unconfig=False,
                             **kwargs):
                assert not apply
                # instantiate crud service
                crud_service = CRUDService()
                attributes = AttributesHelper(self, attributes)
                configurations = CliConfigBuilder(unconfig=unconfig)

                if unconfig:
                    return YangConfig(device=self.device,
                                      ydk_obj=ydk_obj,
                                      ncp=NetconfServiceProvider,
                                      crud_service=crud_service.delete)
                else:
                    return YangConfig(device=self.device,
                                      ydk_obj=ydk_obj,
                                      ncp=NetconfServiceProvider,
                                      crud_service=crud_service.create)
예제 #22
0
    def build_config(self,
                     apply=True,
                     attributes=None,
                     unconfig=False,
                     **kwargs):
        assert not kwargs
        attributes = AttributesHelper(self, attributes)
        configurations = CliConfigBuilder(unconfig=unconfig)

        with self._build_config_create_interface_submode_context(
                configurations):
            self._build_config_interface_submode(configurations=configurations,
                                                 attributes=attributes,
                                                 unconfig=unconfig)

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

                # iosxr: evpn / bgp (config-evpn-bgp)
                with configurations.submode_context('bgp'):
                    if not attributes.value('enabled', force=True):
                        configurations.submode_cancel()
                    if unconfig and attributes.iswildcard:
                        configurations.submode_unconfig()

                    # iosxr: evpn / bgp / rd 100:200000
                    # iosxr: evpn / bgp / rd 65536:200
                    # iosxr: evpn / bgp / rd 1.2.3.4:1
                    configurations.append_line(attributes.format('rd {rd}'))

                return str(configurations)
예제 #24
0
    def build_config(self, apply=True, attributes=None):
        attributes = AttributesHelper(self, attributes)
        configurations = CliConfigBuilder()

        configurations.append_block(super().build_config(
            apply=False, attributes=attributes))

        # TODO -- exception dump?
        # nodename
        if attributes.value('nodename'):
            configurations.append_line(
                attributes.format('hostname {nodename}'))

        if apply:
            if configurations:
                self.configure(str(configurations), fail_invalid=True)
        else:
            # Return configuration
            return CliConfig(device=self,
                             unconfig=False,
                             cli_config=configurations,
                             fail_invalid=True)
예제 #25
0
        def build_config(self,
                         devices=None,
                         apply=True,
                         attributes=None,
                         unconfig=False,
                         **kwargs):

            assert not apply
            attributes = AttributesHelper(self, attributes)
            configurations = CliConfigBuilder(unconfig=unconfig)
            hsrp_config = []

            # loop over all interfaces
            for sub, attributes2 in attributes.mapping_values(
                    'interface_attr', keys=self.interface_attr.keys()):

                hsrp_config.append(
                    sub.build_config(apply=False,
                                     attributes=attributes2,
                                     unconfig=unconfig,
                                     **kwargs))

            # instantiate crud service
            crud_service = CRUDService()

            if apply:
                for interface in hsrp_config:
                    interface.apply()

            else:
                ydks = []
                if unconfig:
                    for interface in hsrp_config:
                        ydks.append(interface)
                else:
                    for interface in hsrp_config:
                        ydks.append(interface)

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

        # ===================================
        # ssm_group_range
        # ssm_source_addr
        # ===================================

        if attributes.value('ssm_group_range') and \
           attributes.value('ssm_source_addr'):

            configurations.append_line(
                attributes.format('ip igmp ssm-translate '
                                  '{ssm_group_range} {ssm_source_addr}'))

        return str(configurations)
예제 #27
0
파일: lisp.py 프로젝트: karmoham/genielibs
        def build_config(self,
                         devices=None,
                         apply=True,
                         attributes=None,
                         unconfig=False,
                         **kwargs):

            attributes = AttributesHelper(self, attributes)
            configurations = CliConfigBuilder(unconfig=unconfig)

            vrf = list(self.vrf_attr.keys())
            with configurations.submode_context(
                    attributes.
                    format('router lisp {router_lisp_id}', force=True) if self.
                    router_lisp_id is not None else attributes.
                    format('router lisp', force=True)):

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

                for sub, attributes2 in attributes.mapping_values('vrf_attr',
                                                                  sort=True):
                    configurations.append_block(
                        sub.build_config(apply=False,
                                         attributes=attributes2,
                                         unconfig=unconfig,
                                         **kwargs))

            if len(self.vrf_attr.keys()) > 1:
                raise Exception('One Vrf must be part of \'device_attr\', '
                                'but it has {vrf}'.format(vrf=vrf))
            if apply:
                if configurations:
                    self.device.configure(str(configurations))
            else:
                return CliConfig(device=self.device,
                                 unconfig=unconfig,
                                 cli_config=configurations)
예제 #28
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: router pim / [vrf someword] / address-family ipv4|ipv6 / interface GigabitEthernet0/0/0/0 (config-pim-<af>-if)
                        with configurations.submode_context(
                                attributes.format('interface {interface_name}',
                                                  force=True)):
                            if unconfig and attributes.iswildcard:
                                configurations.submode_unconfig()

                            # iosxr: router pim / [vrf someword] / address-family ipv4|ipv6 / interface GigabitEthernet0/0/0/0 / bfd fast-detect
                            # iosxr: router pim / [vrf someword] / address-family ipv4|ipv6 / interface GigabitEthernet0/0/0/0 / bfd minimum-interval 3
                            # iosxr: router pim / [vrf someword] / address-family ipv4|ipv6 / interface GigabitEthernet0/0/0/0 / bfd multiplier 2
                            # iosxr: router pim / [vrf someword] / address-family ipv4|ipv6 / interface GigabitEthernet0/0/0/0 / bsr-border
                            # iosxr: router pim / [vrf someword] / address-family ipv4|ipv6 / interface GigabitEthernet0/0/0/0 / disable
                            # iosxr: router pim / [vrf someword] / address-family ipv4|ipv6 / interface GigabitEthernet0/0/0/0 / dr-priority <0-4294967295>
                            # iosxr: router pim / [vrf someword] / address-family ipv4|ipv6 / interface GigabitEthernet0/0/0/0 / enable
                            # iosxr: router pim / [vrf someword] / address-family ipv4|ipv6 / interface GigabitEthernet0/0/0/0 / hello-interval 1
                            # iosxr: router pim / [vrf someword] / address-family ipv4|ipv6 / interface GigabitEthernet0/0/0/0 / join-prune-interval 10
                            # iosxr: router pim / [vrf someword] / address-family ipv4|ipv6 / interface GigabitEthernet0/0/0/0 / join-prune-mtu 576
                            # iosxr: router pim / [vrf someword] / address-family ipv4|ipv6 / interface GigabitEthernet0/0/0/0 / maximum route-interfaces 1
                            # iosxr: router pim / [vrf someword] / address-family ipv4|ipv6 / interface GigabitEthernet0/0/0/0 / maximum route-interfaces 1 someword
                            # iosxr: router pim / [vrf someword] / address-family ipv4|ipv6 / interface GigabitEthernet0/0/0/0 / maximum route-interfaces 1 threshold 1
                            # iosxr: router pim / [vrf someword] / address-family ipv4|ipv6 / interface GigabitEthernet0/0/0/0 / maximum route-interfaces 1 threshold 1 someword
                            # iosxr: router pim / [vrf someword] / address-family ipv4|ipv6 / interface GigabitEthernet0/0/0/0 / neighbor-filter someword
                            # iosxr: router pim / [vrf someword] / address-family ipv4|ipv6 / interface GigabitEthernet0/0/0/0 / override-interval 400
                            # iosxr: router pim / [vrf someword] / address-family ipv4|ipv6 / interface GigabitEthernet0/0/0/0 / propagation-delay 100
                            # iosxr: router pim / address-family ipv4 / interface GigabitEthernet0/0/0/0 / rpf-redirect bundle someword
                            # iosxr: router pim / address-family ipv4 / interface GigabitEthernet0/0/0/0 / rpf-redirect bundle someword bandwidth <0-100000000> threshold <0-100000000>

                        return str(configurations)
예제 #29
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)

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

            # iosxr: evpn / evi 1 / advertise-mac
            if attributes.value('advertise_mac'):
                configurations.append_line('advertise-mac')

            # iosxr: evpn / evi 1 / control-word-disable
            if attributes.value('control_word_disable'):
                configurations.append_line('control-word-disable')

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

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

        return CliConfig(device=self.device,
                         unconfig=unconfig,
                         cli_config=configurations)
예제 #30
0
            def build_config(self,
                             apply=True,
                             attributes=None,
                             unconfig=False,
                             **kwargs):
                """method to build the configuration based on attributes

                Api to build the configuration of an `VrfAttributes` object.
                This configuration depends of the configurable attributes of
                this object.

                Args:
                    kwargs (`dict`): Argument to drive configuration

                Return:
                    `str`
                """
                assert not apply  # not supported
                attributes = AttributesHelper(self, attributes)
                configurations = CliConfigBuilder(unconfig=unconfig)

                with configurations.submode_context(
                        None if self.vrf_name == 'default' else attributes.
                        format('vrf {vrf_name}', force=True)):
                    if self.vrf_name != 'default' and unconfig and attributes.iswildcard:
                        configurations.submode_unconfig()

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

                return str(configurations)