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

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

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

                    # instance_attr
                    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))
                    # interface_attr
                    for sub, attributes2 in attributes.mapping_values(
                            'interface_attr', sort=True,
                            keys=self.interface_attr):
                        configurations.append_block(
                            sub.build_config(apply=False,
                                             attributes=attributes2,
                                             unconfig=unconfig))
                    return str(configurations)
예제 #4
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)
                    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)
예제 #5
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)
예제 #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)
                    if unconfig and attributes.iswildcard:
                        with configurations.submode_context(
                                attributes.format('vni {evpn_vni} l2',
                                                  force=True)):

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

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

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

                    if apply:
                        if configurations:
                            self.device.configure(configurations)
                    else:
                        return CliConfig(device=self.device,
                                         unconfig=unconfig,
                                         cli_config=configurations)
예제 #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)

                # hardware-telemetry ssx
                with configurations.submode_context(attributes.format(
                        'hardware-telemetry ssx', force=True)):
                    if unconfig and attributes.iswildcard:
                        configurations.submode_unconfig()

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

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

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

                    if attributes.value('ssx_system_monitor'):
                        for monitor in attributes.value('ssx_system_monitor'):
                            attributes.obj.monitor_ssx = monitor
                            configurations.append_line(
                                attributes.format('ssx system monitor {monitor_ssx}'))

                    if attributes.value('ssx_id'):
                        configurations.append_line(
                            attributes.format('ssx system system-id {ssx_id}'))

                return str(configurations)
예제 #8
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 mst max-hops <m_max_hop>
                    configurations.append_line(
                        attributes.format(
                            'spanning-tree mst max-hops {m_max_hop}'))

                    # spanning-tree mst hello-time <m_hello_time>
                    configurations.append_line(
                        attributes.format(
                            'spanning-tree mst hello-time {m_hello_time}'))

                    # spanning-tree mst max-age <m_max_age>
                    configurations.append_line(
                        attributes.format(
                            'spanning-tree mst max-age {m_max_age}'))

                    # spanning-tree mst forward-time <m_forwarding_delay>
                    configurations.append_line(
                        attributes.format(
                            'spanning-tree mst forward-time {m_forwarding_delay}'
                        ))

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

                    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)
                # acl_type
                # 'ipv4-acl-type','ipv6-acl-type','eth-acl-type
                if attributes.value('acl_type'):
                    if 'ipv4-acl-type' in attributes.value('acl_type'):
                        self.cmd = 'ip access-list extended '
                    elif 'ipv6-acl-type' in attributes.value('acl_type'):
                        self.cmd = 'ipv6 access-list '
                    elif 'eth-acl-type' in attributes.value('acl_type'):
                        self.cmd = 'mac access-list extended '
                    else:
                        self.cmd = None
                else:
                    self.cmd = None

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

                        self.acl_type = self.parent.acl_type

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

                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: router pim / vrf someword (config-pim-<vrf>)
                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_family_attr,
                            sort=True):
                        configurations.append_block(
                            sub.build_config(apply=False,
                                             attributes=attributes2,
                                             unconfig=unconfig))

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

                        # iosxr: l2vpn / xconnect group someword / mp2mp someword2 / autodiscovery bgp / signaling-protocol bgp / ce-id 1 (config-l2vpn)
                        with configurations.submode_context(
                                attributes.format('ce-id {ce_id}',
                                                  force=True)):
                            if unconfig and attributes.iswildcard:
                                configurations.submode_unconfig()

                            # iosxr: l2vpn / xconnect group someword / mp2mp someword2 / autodiscovery bgp / signaling-protocol bgp / ce-id 1 / interface Bundle-Ether1 remote-ce-id 1
                            for ns, attributes2 in attributes.mapping_values(
                                    'interface_attr',
                                    keys=self.interfaces,
                                    sort=True):
                                configurations.append_block(
                                    ns.build_config(apply=False,
                                                    unconfig=unconfig,
                                                    attributes=attributes2))

                        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)

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

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

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

            # 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)
예제 #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)
예제 #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)
예제 #18
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 <intf> (config-if)
                with configurations.submode_context(attributes.format('interface {interface.name}',force=True),cancel_empty=True):
                    for sub, attributes2 in attributes.mapping_values('address_family_attr',keys=self.address_families, sort=True):
                        if sub.address_family.name.startswith('ipv4'):
                            configurations.append_line(attributes.format('ip router isis {pid}',force=True))
                        if sub.address_family.name.startswith('ipv6'):
                            configurations.append_line(attributes.format('ipv6 router isis {pid}',force=True))

                    # iosxe: interface <intf> / isis network point-to-point
                    if attributes.value('point_to_point'):
                        configurations.append_line(attributes.format('isis network point-to-point'))

                    # iosxe: interface <intf> / isis circuit-type level-1
                    # iosxe: interface <intf> / isis circuit-type level-2-only
                    # iosxe: interface <intf> / isis circuit-type level-1-2
                    configurations.append_line(attributes.format('isis circuit-type {circuit_type}', transform={
                        _Isis.IsType.level_1: 'level-1',
                        _Isis.IsType.level_2: 'level-2-only',
                        _Isis.IsType.level_1_2: 'level-1-2',
                    }))

                    # iosxe: interface <intf> / isis metric 10
                    configurations.append_line(attributes.format('isis metric {metric}'))

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

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

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

                # global_max_groups -- not supported on nxos

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

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

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

                return str(configurations)
예제 #23
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)
예제 #24
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)
예제 #25
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 chain {key_chain}',
                                          force=True)):

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

                        # No attributes

                    for sub, attributes2 in attributes.mapping_values(
                            'key_id_attr', sort=True, keys=self.key_id_attr):
                        configurations.append_block(
                            sub.build_config(apply=False,
                                             attributes=attributes2,
                                             unconfig=unconfig))
                return str(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)

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

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

                if 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)
예제 #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)

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

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