Пример #1
0
    def build_config(self,
                     apply=True,
                     attributes=None,
                     unconfig=False,
                     **kwargs):
        attributes = AttributesHelper(self, attributes)
        configurations = CliConfigBuilder(unconfig=unconfig)

        if unconfig and attributes.iswildcard:
            configurations.append_line('default interface {}'.format(
                self.name),
                                       raw=True)

        else:
            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)
Пример #2
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)

        # ===================================
        # mroute_address
        # mroute_prefix_mask
        # mroute_neighbor_address
        # mroute_interface_name
        # mroute_admin_distance
        # ===================================

        # get vrf and address_family info
        vrf = kwargs['vrf']
        af = kwargs['af_name']

        begin_with = {'ip': 'ip mroute', 'ipv6': 'ipv6 route'}

        if vrf == 'default':
            cmd_str = begin_with[af]
        else:
            cmd_str = begin_with[af] + ' vrf {}'.format(vrf)

        if attributes.value('mroute_address') and \
           attributes.value('mroute_prefix_mask'):

            if af == 'ip':
                # convert prefix_length to netmask
                ret = IPv4Network('1.1.1.1/{}'.format(
                    attributes.value('mroute_prefix_mask')), strict=False)
                mask = ret.with_netmask.split('/')[1]
                address = '{addr} {mask}'.format(addr=attributes.value('mroute_address'),
                                                 mask=mask)
            else:
                address = '{addr}/{mask}'.format(
                    addr=attributes.value('mroute_address'),
                    mask=attributes.value('mroute_prefix_mask'))

            # build up configuration string                
            if attributes.value('mroute_neighbor_address'):
                cmd_str += ' {address} {nei}'.format(
                            address=address,
                            nei=attributes.value('mroute_neighbor_address'))

            elif attributes.value('mroute_interface_name'):
                cmd_str += ' {address} {int}'.format(
                            address=address,
                            int=attributes.value('mroute_interface_name'))
            else:
                cmd_str = ''
      
            if attributes.value('mroute_admin_distance') and cmd_str:
                cmd_str += ' ' + str(attributes.value('mroute_admin_distance'))

            configurations.append_line(cmd_str)

        return str(configurations)
Пример #3
0
    def build_config(self,
                     apply=True,
                     attributes=None,
                     unconfig=False,
                     **kwargs):
        attributes = AttributesHelper(self, attributes)
        configurations = CliConfigBuilder(unconfig=unconfig)

        # Get area information
        area = kwargs['area']

        # router ospf 1
        #   network 192.168.1.0 0.0.0.0 area 2
        #   network 192.168.1.1 1.1.1.1 area 3
        if attributes.value('area_network') and attributes.value(
                'area_network_wildcard'):

            # network 192.168.1.0 0.0.0.0
            an_str = 'network {area_network} {area_network_wildcard}'

            # + area 2
            an_str += ' area {}'.format(area)

            configurations.append_line(attributes.format(an_str))

        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)

        # ===================================
        # mroute_address/mroute_prefix_mask
        # mroute_interface_name
        # mroute_neighbor_address
        # ===================================

        if attributes.value('mroute_address') and \
            attributes.value('mroute_prefix_mask') and \
            attributes.value('mroute_interface_name') and \
            attributes.value('mroute_neighbor_address'):

            # Final config string
            configurations.append_line(
                attributes.format(
                    'static-rpf {mroute_address} {mroute_prefix_mask}'
                    ' {mroute_interface_name} {mroute_neighbor_address}'))

        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)

        # router ospf 1
        #   max-metric router-lsa external-lsa include-stub summary-lsa
        #   max-metric router-lsa external-lsa include-stub summary-lsa on-startup 50
        if attributes.value('stub_router_always') or \
            attributes.value('stub_router_on_startup'):
            
            # max-metric router-lsa
            sr_str = 'max-metric router-lsa'

            # + external-lsa
            if attributes.value('stub_router_external_lsa'):
                sr_str += ' external-lsa'

            # + include-stub
            if attributes.value('stub_router_include_stub'):
                sr_str += ' include-stub'

            # + summary-lsa
            if attributes.value('stub_router_summary_lsa'):
                sr_str += ' summary-lsa'

            # + on-startup {stub_router_on_startup}
            if attributes.value('stub_router_on_startup'):
                sr_str += ' on-startup {stub_router_on_startup}'

            configurations.append_line(attributes.format(sr_str))

        return str(configurations)
Пример #6
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)

        # ===================================
        # ipv6
        # ipv6_prefix_length
        # ipv6_anycast
        # ipv6_eui_64
        # ===================================

        #  ipv6 address <ipv6prefix> [ anycast | eui-64 ]
        if attributes.value('ipv6') and attributes.value('ipv6_prefix_length'):

            cmd = 'ipv6 address {ipv6}/{ipv6_prefix_length}'.\
                    format(ipv6=attributes.value('ipv6'),
                           ipv6_prefix_length=attributes.value('ipv6_prefix_length'))

            if attributes.value('ipv6_eui_64'):
                cmd += ' eui-64'
            elif attributes.value('ipv6_anycast'):
                cmd += ' anycast'

            configurations.append_line(cmd)

        return str(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)

        # router ospf 1
        #   nsf cisco
        #   nsf ietf
        #   nsf ietf helper disable
        #   nsf interval 500
        if attributes.value('gr_enable'):

            # nsf
            gr_str = 'nsf'

            # + {gr_type}
            if attributes.value('gr_type').value == 'cisco':
                gr_str += ' cisco'
            elif attributes.value('gr_type').value == 'ietf':
                gr_str += ' ietf'
                # + helper disable
                if attributes.value('gr_helper_enable') is False:
                    gr_str += ' helper disable'
            elif attributes.value('gr_restart_interval'):
                gr_str += ' interval {gr_restart_interval}'

            configurations.append_line(attributes.format(gr_str))

        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)

        # interface GigabitEthernet1
        #   neighbor 10.10.10.10 cost 100 poll-interval 66 priority 12
        if attributes.value('if_static_neighbor'):
            
            # neighbor 10.10.10.10 
            intf_cfg_str = 'neighbor {if_static_neighbor}'

            # + cost {if_static_cost}
            if attributes.value('if_static_cost'):
                intf_cfg_str += ' cost {if_static_cost}'

            # + poll-interval {if_static_poll_interval}
            if attributes.value('if_static_poll_interval'):
                intf_cfg_str += ' poll-interval {if_static_poll_interval}'

            # + priority {if_static_priority}
            if attributes.value('if_static_priority'):
                intf_cfg_str += ' priority {if_static_priority}'

            configurations.append_line(attributes.format(intf_cfg_str))

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

        # lacp system-priority <lag_lacp_system_priority>
        configurations.append_line(
            attributes.format(
                'lacp system-priority {lag_lacp_system_priority}'))

        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)
Пример #10
0
        def build_unconfig(self, apply=True, attributes=None, **kwargs):
            '''IOS-XR CommunitySet unconfiguration.

            Note:
                Selective unconfiguration is not supported on IOS-XR; The whole
                community-set is always removed.
            '''
            assert not kwargs, kwargs
            attributes = AttributesHelper(self, attributes)
            if not attributes.iswildcard:
                warnings.warn(
                    UnsupportedSelectiveCommunitySetConfig,
                    'IOS-XR does not support selective community-set'
                    ' unconfiguration.')
                attributes = AttributesHelper(self)
            configurations = CliConfigBuilder()

            configurations.append_line(
                attributes.format('no community-set {name}', force=True))

            if apply:
                if configurations:
                    self.device.configure(configurations, fail_invalid=True)
            else:
                return str(configurations)
Пример #11
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)
Пример #12
0
    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
        #     summary-address 2001:1::1:1/112
        #     summary-address 2001:1::1:1/112 tag 10
        #     summary-address 2001:1::1:1/112 not-advertise
        if attributes.value('summary_address_prefix'):

            sum_str = 'summary-address'
            # + range {area_range_prefix}
            if re.search(r"\/", attributes.value('summary_address_prefix')):
                sum_str += ' {summary_address_prefix}'

            # + not-advertise
            if attributes.value('summary_address_not_advertise'):
                sum_str += ' not-advertise'
            # + tag {summary_address_tag}
            elif attributes.value('summary_address_tag'):
                sum_str += ' tag {summary_address_tag}'

            configurations.append_line(attributes.format(sum_str))

        return str(configurations)
Пример #13
0
            def build_config(self,
                             apply=True,
                             attributes=None,
                             unconfig=False,
                             **kwargs):
                assert not kwargs, kwargs
                attributes = AttributesHelper(self, attributes)
                configurations = CliConfigBuilder(unconfig=unconfig)
                vrf_context = ""
                if attributes.value('vrf') != 'default':
                    vrf_context = attributes.format('vrf context {vrf}',
                                                    force=True)
                # AddressFamilyAttributes
                with configurations.submode_context(vrf_context):
                    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)
Пример #14
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(
                        None if self.vrf_name == 'default' else attributes.
                        format('vrf context {vrf_id}', force=True)):

                    # 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))

                return str(configurations)
Пример #15
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)

                            if attributes.value('route'):
                                join_all = "{}".format(attributes.value('route'))

                            if attributes.value('nexthop'):
                                join_all += ' {}'.format(attributes.value('nexthop'))

                            if attributes.value('preference'):
                                join_all += ' {}'.format(attributes.value('preference'))

                            if attributes.value('tag'):
                                join_all += " tag {}".format(attributes.value('tag'))

                            if attributes.value('track'):
                                join_all += " track {}".format(attributes.value('track'))

                            configurations.append_line(join_all)

                            if apply:
                                if configurations:
                                    self.device.configure(configurations)
                            else:
                                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 apply
        attributes = AttributesHelper(self, attributes)
        configurations = CliConfigBuilder(unconfig=unconfig)

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

        # get vrf info
        vrf = kwargs['vrf']

        if vrf == 'default':
            cmd_str = 'ip igmp'
        else:
            cmd_str = 'ip igmp vrf {}'.format(vrf)

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

            cmd_str += ' ssm-map static {ssm_group_policy} {ssm_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):
        attributes = AttributesHelper(self, attributes)
        configurations = CliConfigBuilder(unconfig=unconfig)

        # router ospf 1
        #   area 2 range 2001:1::1:1/112 cost 10
        #   area 2 range 2001:1::1:1/112 advertise cost 10
        #   area 2 range 2001:1::1:1/112 not-advertise cost 10
        if attributes.value('range_area_id') and attributes.value(
                'area_range_prefix'):

            # area {area}
            ar_str = 'area {range_area_id}'

            # + range {area_range_prefix}
            if re.search(r"\/", attributes.value('area_range_prefix')):
                ar_str += ' range {area_range_prefix}'

            # + not-advertise
            if attributes.value('area_range_not_advertise'):
                ar_str += ' not-advertise'

            # + cost {area_range_cost}
            if attributes.value('area_range_cost'):
                ar_str += ' cost {area_range_cost}'

            configurations.append_line(attributes.format(ar_str))

        return str(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)

        # router ospf 1
        #   range 192.168.1.0 255.255.255.0
        #   range 192.168.1.0 255.255.255.0 advertise
        #   range 192.168.1.0 255.255.255.0 not-advertise
        if attributes.value('area_range_prefix'):

            # + range {area_range_prefix}
            if re.search("\/", attributes.value('area_range_prefix')):
                range_val = IPNetwork(attributes.value('area_range_prefix'))
                prefix = str(range_val.ip)
                netmask = str(range_val.netmask)
                ar_str = ' range {} {}'.format(prefix, netmask)
            else:
                ar_str = ' range {area_range_prefix}'

            # + advertise
            # + not-advertise
            if attributes.value('area_range_advertise') is True:
                ar_str += ' advertise'
            elif attributes.value('area_range_advertise') is False:
                ar_str += ' not-advertise'

            configurations.append_line(attributes.format(ar_str))

        return str(configurations)
Пример #19
0
    def build_config(self, apply=True, attributes=None):
        attributes = AttributesHelper(self, attributes)
        configurations = CliConfigBuilder()

        # TODO - logging levels

        # TODO - IOS: no parser cache

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

        # TODO
        # enaGetTftpServerInfo arr_tftp_info -router $router -default_sub_dir "hfr-mpls" ;# XXXJST /hfr-mpls ???
        # if { [info exists arr_tftp_info(tftp_addr)] } {
        #     lappend cfgs($router) \
        #         "exception protocol tftp" \
        #         "exception dump $arr_tftp_info(tftp_addr)" \
        #         "exception core-file [file join $arr_tftp_info(sub_dir) $::env(TESTBED)-$router.core]"
        # }

        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)
Пример #20
0
            def build_unconfig(self, apply=True, attributes=None, **kwargs):

                configurations = CliConfigBuilder()
                configurations.append_line(
                    attributes.format('no route-policy {policy_definition}',
                                      force=True))

                return str(configurations)
Пример #21
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('ip') and attributes.value('link_layer_address'):
                        configurations.append_line(attributes.format('ipv6 neighbor {ip} {link_layer_address}'))

                    return str(configurations)
Пример #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)

                # 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)
Пример #23
0
                def build_config(self,
                                 devices=None,
                                 apply=True,
                                 attributes=None,
                                 unconfig=False,
                                 **kwargs):
                    attributes = AttributesHelper(self, attributes)
                    configurations = CliConfigBuilder(unconfig=unconfig)
                    with configurations.submode_context(
                            attributes.format('instance-id {instance_id}',
                                              force=True)):
                        if unconfig and attributes.iswildcard:
                            configurations.submode_unconfig()
                        for sub, attributes2 in attributes.mapping_values(
                                'service_attr',
                                keys=self.service_attr.keys(),
                                inherited=False):
                            configurations.append_block(
                                sub.build_config(apply=False,
                                                 attributes=attributes2,
                                                 unconfig=unconfig,
                                                 **kwargs))
                        for sub, attributes2 in attributes.mapping_values(
                                'dynamic_eid_attr',
                                keys=self.dynamic_eid_attr.keys(),
                                inherited=False):
                            configurations.append_block(
                                sub.build_config(apply=False,
                                                 attributes=attributes2,
                                                 unconfig=unconfig,
                                                 **kwargs))

                    return str(configurations)
Пример #24
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('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)
Пример #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)

                            self.vrf = self.parent.vrf
                            self.af = self.parent.af
                            self.route = self.parent.route

                            if attributes.value('af'):
                                af = 'ip' if attributes.value('af').value == 'ipv4' else 'ipv6'
                                join_all = "{} route".format(af)

                            if attributes.value('vrf') and 'default' not in attributes.value('vrf'):
                                join_all += " vrf {}".format(attributes.value('vrf'))

                            if attributes.value('route'):
                                if 'ipv6' in attributes.value('af').value:
                                    join_all += " {}".format(attributes.value('route'))
                                else:
                                    if '/' in attributes.value('route'):
                                        network_netmask = IPNetwork(attributes.value('route'))
                                        network = str(network_netmask.network)
                                        netmask = str(network_netmask.netmask)
                                        join_all += " {} {}".format(network,netmask)
                                    else:
                                        join_all += " {}".format(attributes.value('route'))

                            if attributes.value('interface'):
                                join_all += " {}".format(attributes.value('interface'))

                            if attributes.value('if_nexthop'):
                                join_all += ' {}'.format(attributes.value('if_nexthop'))

                            if attributes.value('if_preference'):
                                join_all += ' {}'.format(attributes.value('if_preference'))

                            if attributes.value('if_tag'):
                                join_all += " tag {}".format(attributes.value('if_tag'))

                            if attributes.value('if_track'):
                                join_all += " track {}".format(attributes.value('if_track'))

                            configurations.append_line(join_all)

                            if apply:
                                if configurations:
                                    self.device.configure(configurations)
                            else:
                                return CliConfig(device=self.device, unconfig=unconfig,
                                                 cli_config=configurations)
Пример #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 / multicast p2mp / 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()

                return str(configurations)
Пример #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)

                # 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)
Пример #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)


            for bd, attributes2 in attributes.sequence_values('bridge_domains'):
                configurations.append_block(
                    str(bd.build_config(apply=False, attributes=attributes2, unconfig=unconfig,
                                    contained=True)))

            for xc, attributes2 in attributes.sequence_values('xconnects'):
                configurations.append_block(
                    str(xc.build_config(apply=False, attributes=attributes2, unconfig=unconfig,
                                    contained=True)))

            for pwc, attributes2 in attributes.sequence_values('pseudowire_classes'):
                configurations.append_block(
                    str(pwc.build_config(apply=False, attributes=attributes2, unconfig=unconfig,
                                     contained=True)))

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

                # source_interface
                if attributes.value('source_interface') and \
                   self.vrf_name == 'default':
                    configurations.append_line(
                        attributes.format(
                            'ntp source-interface {source_interface}'))

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

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

                return str(configurations)
Пример #30
0
        def build_config(self,
                         links=None,
                         apply=True,
                         attributes=None,
                         unconfig=False,
                         **kwargs):
            '''Device build config'''
            assert not apply
            attributes = AttributesHelper(self, attributes)
            configurations = CliConfigBuilder(unconfig=unconfig)

            if attributes.iswildcard:
                # iosxe : mpls traffic-eng tunnels
                configurations.append_line('mpls traffic-eng tunnels', \
                                            unconfig_cmd = 'default mpls traffic-eng tunnels')

            if attributes.value('advertise_expnull'):
                configurations.append_line(
                    'mpls traffic-eng signalling advertise explicit-null')

            # Add per-interface config
            for sub, attributes2 in attributes.mapping_values(
                    'interface_attr', keys=self.interfaces, 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)