Exemplo n.º 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)
            # Seperate CliConfigBuilder for InterfaceAttribute configuration
            self.interface_config = CliConfigBuilder(unconfig=unconfig)

            # feature ospfv3
            if attributes.value('enabled'):
                if unconfig is False:
                    configurations.append_line(
                        attributes.format('feature ospfv3'))

                # Make sure that only enabled was provided in attributes
                # If wildcard,  then delete everything
                elif unconfig is True and\
                    attributes.attributes == {'enabled': {True: None}} or \
                        attributes.iswildcard:
                    configurations.append_line('no feature ospfv3', raw=True)
                    if apply:
                        if configurations:
                            self.device.configure(configurations)
                    else:
                        return CliConfig(device=self.device,
                                         unconfig=unconfig,
                                         cli_config=configurations)

            #  +- DeviceAttributes
            #      +- VrfAttributes
            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))

            # Add InterfaceAttribute configuration
            configurations.append_block(self.interface_config)

            if apply:
                if configurations:
                    self.device.configure(configurations)
            else:
                return CliConfig(device=self.device,
                                 unconfig=unconfig,
                                 cli_config=configurations)
Exemplo n.º 2
0
        def build_config(self,
                         apply=True,
                         attributes=None,
                         unconfig=False,
                         contained=False,
                         **kwargs):
            assert not kwargs, kwargs
            attributes = AttributesHelper(self, attributes)
            configurations = CliConfigBuilder(unconfig=unconfig)

            # iosxr: l2vpn / pw-class someword (config-l2vpn)
            with configurations.submode_context(
                    attributes.format('pw-class {name}', force=True)):
                if unconfig and attributes.iswildcard:
                    configurations.submode_unconfig()

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

            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)
Exemplo n.º 3
0
        def build_config(self,
                         apply=True,
                         attributes=None,
                         unconfig=False,
                         **kwargs):
            assert not kwargs, kwargs
            attributes = AttributesHelper(self, attributes)
            configurations = CliConfigBuilder(unconfig=unconfig)

            # mac address-table aging-time <mac_aging_time>
            configurations.append_line(
                attributes.format(
                    'mac address-table aging-time {mac_aging_time}'))

            # vlan attributes
            for sub, attributes2 in attributes.mapping_values(
                    'vlan_attr', sort=True, keys=self.vlan_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)
Exemplo n.º 4
0
        def build_config(self, apply=True, attributes=None, unconfig=False):
            attributes = AttributesHelper(self, attributes)
            configurations = CliConfigBuilder(unconfig=unconfig)

            # nxos: evpn esi multihoming

            # nxos: evpn (config-evpn)
            with configurations.submode_context('evpn'):
                if unconfig and attributes.iswildcard:
                    configurations.submode_unconfig()

                # nxos: evpn / vni 4096 l2 (config-evpn-evi)
                for sub, attributes2 in attributes.mapping_values(
                        'vni_attr', keys=self.vnis, sort=True):
                    configurations.append_block(
                        sub.build_config(apply=False,
                                         attributes=attributes2,
                                         unconfig=unconfig))

            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)
Exemplo n.º 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)

            # require_router_alert
            if attributes.value('require_router_alert'):
                configurations.append_line('ip igmp enforce-router-alert')

            # VrfAttributes
            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)
Exemplo n.º 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)

            # multicast-routing
            with configurations.submode_context('multicast-routing'):
                if unconfig and attributes.iswildcard:
                    configurations.submode_unconfig()

                # VrfAttributes
                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)
Exemplo n.º 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)
                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)
Exemplo n.º 8
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]"
        # }
        # 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)
Exemplo n.º 9
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)
Exemplo n.º 10
0
                    def build_config(self, apply=True, attributes=None, unconfig=False,
                                     **kwargs):
                        assert not kwargs, kwargs
                        attributes = AttributesHelper(self, attributes)
                        configurations = CliConfigBuilder(unconfig=unconfig)

                        # 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))
                        # NextHopAttributes
                        for sub, attributes2 in attributes.mapping_values('next_hop_attr',
                                                                          sort=True,
                                                                          keys=self.next_hop_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)
Exemplo n.º 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)
Exemplo n.º 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)

            # ip pim bidir-enable
            if attributes.value('enabled_bidir'):
                configurations.append_line(
                    attributes.format('ip pim bidir-enable'))

            # VrfAttributes
            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)
Exemplo n.º 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)

            # arp entries interface-limit <max_entries>
            if attributes.value('max_entries'):
                configurations.append_line(
                    attributes.format(
                        'arp entries interface-limit {max_entries}'))

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

            if apply:
                if configurations:
                    self.device.configure(configurations)
            else:
                return CliConfig(device=self.device,
                                 unconfig=unconfig,
                                 cli_config=configurations)
Exemplo n.º 14
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)
Exemplo n.º 15
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)
Exemplo n.º 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)
            # Seperate CliConfigBuilder for InterfaceAttribute configuration
            self.interface_config = CliConfigBuilder(unconfig=unconfig)

            #  +- DeviceAttributes
            #      +- VrfAttributes
            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))

            # Add InterfaceAttribute configuration
            configurations.append_block(self.interface_config)

            if apply:
                if configurations:
                    self.device.configure(configurations)
            else:
                return CliConfig(device=self.device, unconfig=unconfig,
                                 cli_config=configurations)
Exemplo n.º 17
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)

            # iosxr: router hsrp
            configurations.append_line(
                attributes.format('router hsrp', force=True))

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

            return CliConfig(device=self.device,
                             unconfig=unconfig,
                             cli_config=configurations)
Exemplo n.º 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)

            # iosxr: router pim (config-pim)
            with configurations.submode_context('router pim'):
                if unconfig and attributes.iswildcard:
                    configurations.submode_unconfig()

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

            if apply:
                if configurations:
                    self.device.configure(configurations, fail_invalid=True)
            else:
                return CliConfig(device=self.device,
                                 unconfig=unconfig,
                                 cli_config=configurations)
Exemplo n.º 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)

            # iosxr: segment-routing (config-sr)
            with configurations.submode_context('segment-routing'):
                if unconfig and attributes.iswildcard:
                    configurations.submode_unconfig()

                # iosxr: segment-routing / global-block 16000 16001
                v = attributes.value('global_block')
                if v is not None:
                    configurations.append_line(
                        'global-block {first} {last}'.format(first=v.start,
                                                             last=v[-1]))

            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)
Exemplo n.º 20
0
        def build_config(self, apply=True, attributes=None, unconfig=False,
                         **kwargs):
            assert not kwargs, kwargs
            attributes = AttributesHelper(self, attributes)
            configurations = CliConfigBuilder(unconfig=unconfig)

            # InterfaceAttributes
            with configurations.submode_context(attributes.format(
                    'interface {interface}', force=True)):
                if unconfig and attributes.iswildcard:
                    configurations.submode_unconfig()

                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)
Exemplo n.º 21
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))

        # 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)
Exemplo n.º 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 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)
Exemplo n.º 23
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)
Exemplo n.º 24
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)
Exemplo n.º 25
0
def _clean_cfgs_dict_inner(cfgs,
                           *,
                           testbed=None,
                           device=None,
                           add_to_cfgs=None):
    if add_to_cfgs is None:
        add_to_cfgs = {}
    if not cfgs:
        return add_to_cfgs

    if isinstance(cfgs, str):
        # Need a device object to instantiate CliConfig
        if device is None:
            raise ValueError(cfgs)
        if isinstance(device, str):
            if not testbed:
                testbed = Genie.testbed
            device = testbed.devices[device]
        elif not isinstance(device, Device):
            # A Feature?
            device = device.device
            assert isinstance(device, Device)
        cfgs = CliConfig(cfgs, device=device)
        # Fallthrough to Config case below...

    elif isinstance(cfgs, abc.Mapping):
        for device, device_cfgs in cfgs.items():
            _clean_cfgs_dict_inner(device_cfgs,
                                   testbed=testbed,
                                   device=device,
                                   add_to_cfgs=add_to_cfgs)
        return add_to_cfgs

    elif isinstance(cfgs, abc.Iterable):
        for device_cfg in cfgs:
            _clean_cfgs_dict_inner(device_cfg,
                                   testbed=testbed,
                                   device=device,
                                   add_to_cfgs=add_to_cfgs)
        return add_to_cfgs

    if isinstance(cfgs, Config):
        device = cfgs.device.name
        add_to_cfgs.setdefault(device, []).append(cfgs)
        return add_to_cfgs

    raise ValueError(cfgs)
Exemplo n.º 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)

            # spanning-tree bridge assurance
            if attributes.value('bridge_assurance'):
                configurations.append_line(
                    attributes.format('spanning-tree bridge assurance'))

            # spanning-tree etherchannel guard misconfig
            if attributes.value('etherchannel_misconfig_guard'):
                configurations.append_line(
                    attributes.format(
                        'spanning-tree etherchannel guard misconfig'))

            # errdisable recovery interval <bpduguard_timeout_recovery>
            if attributes.value('bpduguard_timeout_recovery'):
                configurations.append_line(
                    attributes.format('errdisable recovery '
                                      'interval {bpduguard_timeout_recovery}'))

            # spanning-tree loopguard default
            if attributes.value('loop_guard'):
                configurations.append_line(
                    attributes.format('spanning-tree loopguard default'))

            # spanning-tree portfast bpduguard default
            if attributes.value('bpdu_guard'):
                configurations.append_line(
                    attributes.format(
                        'spanning-tree portfast bpduguard default'))

            # spanning-tree portfast bpdufilter default
            if attributes.value('bpdu_filter'):
                configurations.append_line(
                    attributes.format(
                        'spanning-tree portfast bpdufilter default'))

            # mpde attributes
            for sub, attributes2 in attributes.mapping_values(
                    'mode_attr', sort=True, keys=self.mode_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)
Exemplo n.º 27
0
        def build_config(self,
                         apply=True,
                         attributes=None,
                         unconfig=False,
                         contained=False,
                         **kwargs):
            assert not kwargs, kwargs
            attributes = AttributesHelper(self, attributes)
            configurations = CliConfigBuilder(unconfig=unconfig)

            # create vfi configurations
            for vfi, attributes2 in attributes.sequence_values('vfis'):
                configurations.append_block(
                    str(
                        vfi.build_config(apply=False,
                                         attributes=attributes2,
                                         unconfig=unconfig,
                                         **kwargs)))

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

                for evi, attributes2 in attributes.mapping_values(
                        'evi_attr', keys=self.evis, sort=True):
                    cfg = attributes2.format('member evpn-instance {evi_id}')
                    if cfg:
                        cfg += attributes2.format(' vlan {vlan}', force=True)
                        configurations.append_line(cfg)

                for vfi, attributes2 in attributes.sequence_values('vfis'):
                    configurations.append_line(
                        attributes2.format('member vfi {name}'))

                for sub, attributes2 in attributes.mapping_values(
                        'interface_attr', keys=self.interfaces, sort=True):
                    if isinstance(sub.interface, EFPInterface):
                        configurations.append_line(
                            attributes2.format(
                                'member {interface.parent_interface.name} service-instance {interface.service_instance}'
                            ))
                    elif isinstance(sub.interface, EthernetInterface):
                        configurations.append_line(
                            attributes2.format('member {interface.name}'))
                    else:
                        raise NotImplementedError(sub.interface)

            if apply:
                if configurations:
                    self.device.configure(str(configurations),
                                          fail_invalid=True)
            else:
                return CliConfig(device=self.device,
                                 unconfig=unconfig,
                                 cli_config=configurations,
                                 fail_invalid=True)
Exemplo n.º 28
0
        def build_config(self, apply=True, attributes=None, unconfig=False):
            assert not apply
            attributes = AttributesHelper(self, attributes)
            configurations = CliConfigBuilder(unconfig=unconfig)

            # TODO
            pass

            return CliConfig(device=self.device,
                             unconfig=unconfig,
                             cli_config=configurations)
Exemplo n.º 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)

            # featue hardware-telemetry
            if attributes.value('enable_hardware_telemetry'):
                if unconfig is False:
                    configurations.append_line(
                        attributes.format('feature hardware-telemetry'))

            # Make sure that only enabled was provided in attributes
                # If wildcard,  then delete everything
                elif unconfig and\
                    attributes.attributes == {'enable_hardware_telemetry': {True: None}} or \
                        attributes.iswildcard:
                    configurations.append_line(
                        'no feature hardware-telemetry', raw=True)
                    if apply:
                        if configurations:
                            self.device.configure(configurations)
                    else:
                        return CliConfig(device=self.device, unconfig=unconfig,
                                         cli_config=configurations)

            # +- DeviceAttributes
            #     +- SsxAttributes
            for sub, attributes2 in attributes.mapping_values('hwtele_attr',
                                                              sort=True, keys=self.hwtele_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)
Exemplo n.º 30
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)