Ejemplo 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)
                    with configurations.submode_context(attributes.format(
                            'ssx exporter {exp_id}', force=True)):
                        if unconfig and attributes.iswildcard:
                            configurations.submode_unconfig()

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

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

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

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

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

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

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

        if vrf == 'default':
            cmd_str = 'ipv6 mld'
        else:
            cmd_str = 'ipv6 mld vrf {}'.format(vrf)

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

            cmd_str += ' ssm-map static {ssm_group_policy} {ssm_source_addr}'
            configurations.append_line(attributes.format(cmd_str))

        return str(configurations)
Ejemplo n.º 3
0
            def build_config(self,
                             apply=True,
                             attributes=None,
                             unconfig=False,
                             **kwargs):
                assert not apply
                attributes = AttributesHelper(self, attributes)
                # "Set the interface to access or trunk mode for VLANs"
                if attributes.value('switchport_mode'):
                    self.interface.switchport_mode = \
                        attributes.value('switchport_mode')

                if attributes.value('sw_trunk_allowed_vlan'):
                    self.interface.sw_trunk_allowed_vlan = \
                        attributes.value('sw_trunk_allowed_vlan')

                if unconfig:
                    if attributes.attributes is not None:
                        configurations = \
                            self.interface.build_unconfig(
                                apply=False,
                                attributes=attributes.attributes)
                    else:
                        configurations = \
                            self.interface.build_unconfig(
                                apply=False,
                                attributes={'switchport_mode': None,
                                            'sw_trunk_allowed_vlan': None})
                else:
                    configurations = self.interface.build_config(apply=False)

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

                    self.vlan_id = self.parent.vlan_id

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

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

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

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

            # neighbor 10.10.10.10
            intf_cfg_str = 'neighbor {if_static_neighbor}'

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

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

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

            configurations.append_line(attributes.format(intf_cfg_str))

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

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

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

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

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

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

                            configurations.append_line(
                                attributes.format(key_string_str))

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

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

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

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

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

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

                    return str(configurations)
Ejemplo n.º 9
0
            def build_config(self,
                             apply=True,
                             attributes=None,
                             unconfig=False,
                             **kwargs):
                assert not apply
                attributes = AttributesHelper(self, attributes)
                configurations = CliConfigBuilder(unconfig=unconfig)
                with configurations.submode_context(
                        attributes.format('vlan access-map {access_map_id}',
                                          force=True)):
                    if unconfig and attributes.iswildcard:
                        # Never reached!
                        configurations.submode_unconfig()

                    # No point of configuring access_map_sequence
                    # nxos: vlan access-map <access_map_id> \
                    # <access_map_sequence>
                    # A workaround that needs to be better handled
                    if attributes.value('access_map_sequence'):
                        configurations.append_line(
                            attributes.format(
                                'no vlan access-map {access_map_id}'))
                        configurations.append_line(
                            attributes.format(
                                'vlan access-map {access_map_id} '
                                '{access_map_sequence}'))

                    # nxos: vlan access-map <access_map_id> / action drop
                    # nxos: vlan access-map <access_map_id> /action forward
                    # nxos: vlan access-map <access_map_id> / action \
                    # redirect <redirect_interface>
                    if attributes.value('access_map_action') and \
                       attributes.value('redirect_interface'):
                        configurations.append_line(
                            attributes.format('action {access_map_action} '
                                              '{redirect_interface}'))
                    else:
                        configurations.append_line(
                            attributes.format('action {access_map_action}'))

                    # nxos: vlan access-map <access_map_id> / statistics
                    # nxos: vlan access-map <access_map_id> / exit
                    # nxos: vlan access-map <access_map_id> / match
                    if attributes.value('access_map_match'):
                        if attributes.value('access_list_name'):
                            configurations.append_line(
                                attributes.format('match {access_map_match}'
                                                  ' address {access_list}'))

                    # nxos: vlan access-map <access_map_id> / no
                    # nxos: vlan access-map <access_map_id> / this
                    # nxos: vlan access-map <access_map_id> / pop
                    # nxos: vlan access-map <access_map_id> / push
                    # nxos: vlan access-map <access_map_id> / where

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

                    if attributes.value('ip') and attributes.value('link_layer_address'):
                        configurations.append_line(attributes.format('ipv6 neighbor {ip} {link_layer_address}'))

                    return str(configurations)
Ejemplo n.º 11
0
    def build_config(self,
                     apply=True,
                     attributes=None,
                     unconfig=False,
                     **kwargs):
        attributes = AttributesHelper(self, attributes)
        configurations = CliConfigBuilder(unconfig=unconfig)
        interface_configurations = xr_ifmgr_cfg.InterfaceConfigurations()
        interface_configuration = interface_configurations.InterfaceConfiguration(
        )
        interface_configuration.active = "act"
        interface_configuration.interface_name = attributes.value('name')
        interface_configuration.interface_virtual = Empty()
        # name is a mandatory arguments
        #keep = string.digits
        #ydk_obj.name =  int(''.join(i for i in attributes.value('name') if i in keep))

        if unconfig and attributes.iswildcard:
            pass
        else:
            vrf = attributes.value('vrf')
            if vrf:
                interface_configuration.vrf = vrf.name

            ipv4 = attributes.value('ipv4')
            if ipv4:
                primary = interface_configuration.ipv4_network.addresses.Primary(
                )
                primary.address = str(ipv4.ip)
                primary.netmask = str(ipv4.netmask)
                interface_configuration.ipv4_network.addresses.primary = primary
        # instantiate crud service
        crud_service = CRUDService()
        if apply:

            # create netconf connection
            ncp = NetconfServiceProvider(self.device)

            if unconfig:
                crud_service.delete(ncp, interface_configuration)
            else:
                crud_service.create(ncp, interface_configuration)
        else:
            if unconfig:
                return YangConfig(device=self.device,
                                  unconfig=unconfig,
                                  ncp=NetconfServiceProvider,
                                  ydk_obj=interface_configuration,
                                  crud_service=crud_service.delete)
            else:
                return YangConfig(device=self.device,
                                  unconfig=unconfig,
                                  ncp=NetconfServiceProvider,
                                  ydk_obj=interface_configuration,
                                  crud_service=crud_service.create)
Ejemplo n.º 12
0
                    def build_config(self,
                                     apply=True,
                                     attributes=None,
                                     unconfig=False,
                                     **kwargs):
                        assert not apply
                        assert not kwargs, kwargs
                        attributes = AttributesHelper(self, attributes)
                        configurations = CliConfigBuilder(unconfig=unconfig)

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

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

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

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

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

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

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

                        return str(configurations)
Ejemplo n.º 13
0
    def build_config(self,
                     apply=True,
                     attributes=None,
                     unconfig=False,
                     **kwargs):
        assert not apply
        assert not kwargs, kwargs
        attributes = AttributesHelper(self, attributes)
        configurations = CliConfigBuilder(unconfig=unconfig)

        # 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)
Ejemplo n.º 14
0
        def build_config(self,
                         apply=True,
                         attributes=None,
                         unconfig=False,
                         **kwargs):
            assert not kwargs
            attributes = AttributesHelper(self, attributes)
            configurations = CliConfigBuilder(unconfig=unconfig)
            vrfs = xr_infra_rsi_cfg.Vrfs()
            if not unconfig:
                vrf = vrfs.Vrf()
                if attributes.value('name'):
                    vrf.vrf_name = attributes.value('name')
                vrf.create = Empty()

                vrfs.vrf.append(vrf)
                #crud_service = CRUDService()
                #ncp = NetconfServiceProvider(self.device)
                #x = crud_service.read(ncp, vrf)
                #abc = YangConfig(device=self.device, ydk_obj=x, ncp=ncp, crud_service=crud_service)
                #print(abc)
                # iosxr: vrf vrf1 / address-family ipv4 unicast (config-vrf-af)
                for key, sub, attributes2 in attributes.mapping_items(
                        'address_family_attr',
                        keys=self.address_families,
                        sort=True):
                    sub.build_config(apply=False,
                                     attributes=attributes2,
                                     unconfig=unconfig,
                                     vrf=vrf)

            # instantiate crud service
            crud_service = CRUDService()
            if apply:

                # create netconf connection
                ncp = NetconfServiceProvider(self.device)

                crud_service.create(ncp, vrfs)

                if unconfig:
                    crud_service.delete(ncp, vrfs)
            else:
                if unconfig:
                    return YangConfig(device=self.device,
                                      ydk_obj=vrfs,
                                      ncp=NetconfServiceProvider,
                                      crud_service=crud_service.delete)
                else:
                    return YangConfig(device=self.device,
                                      ydk_obj=vrfs,
                                      ncp=NetconfServiceProvider,
                                      crud_service=crud_service.create)
Ejemplo n.º 15
0
                def build_config(self, apply=True, attributes=None, unconfig=False,
                                 **kwargs):
                    assert not kwargs, kwargs
                    attributes = AttributesHelper(self, attributes)
                    configurations = CliConfigBuilder(unconfig=unconfig)

                    with configurations.submode_context(attributes.format(
                            'ssx record {rec_id}', force=True)):
                        if unconfig and attributes.iswildcard:
                            configurations.submode_unconfig()

                        if attributes.value('egress_queue_drops'):
                            configurations.append_line(
                                attributes.format('collect egress queue drops'))

                        if attributes.value('egress_queue_peak'):
                            configurations.append_line(
                                attributes.format('collect egress queue peak'))

                        if attributes.value('egress_queue_depth'):
                            configurations.append_line(
                                attributes.format('collect egress queue depth'))

                        if attributes.value('ingress_queue_drops'):
                            configurations.append_line(
                                attributes.format('collect ingress queue drops'))

                        if attributes.value('ingress_queue_depth'):
                            configurations.append_line(
                                attributes.format('collect ingress queue depth'))

                        if attributes.value('egress_queue_microburst'):
                            configurations.append_line(
                                attributes.format('collect egress queue microburst'))

                        if attributes.value('ethernet_counters'):
                            configurations.append_line(
                                attributes.format('collect ethernet counters'))

                        if attributes.value('egress_pool_group_depth'):
                            configurations.append_line(
                                attributes.format('collect egress pool-group depth'))

                        if attributes.value('egress_buffer_depth'):
                            configurations.append_line(
                                attributes.format('collect egress buffer depth'))

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

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

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

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

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

                        configurations.append_line(attributes.format(cfg_str))

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

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

                return str(configurations)
Ejemplo n.º 17
0
    def build_config(self,
                     apply=True,
                     attributes=None,
                     unconfig=False,
                     **kwargs):
        attributes = AttributesHelper(self, attributes)
        configurations = CliConfigBuilder(unconfig=unconfig)
        ydk_obj = ned.Native.Interface.Gigabitethernet()
        keep = string.digits + '//'
        ydk_obj.name = ''.join(i for i in attributes.value('name')
                               if i in keep)

        shutdown = attributes.value('shutdown')
        if shutdown is not None:
            if unconfig:
                # Special case: unconfiguring always applies shutdown
                ydk_obj.shutdown = Empty()
            elif shutdown:
                ydk_obj.shutdown = Empty()
            else:
                ydk_obj.shutdown = DELETE()

        ipv4 = attributes.value('ipv4')
        if ipv4:
            if unconfig:
                ydk_obj.ip.address.primary.address = DELETE()
                ydk_obj.ip.address.primary.mask = DELETE()
            else:
                ydk_obj.ip.address.primary.address = str(ipv4.ip)
                ydk_obj.ip.address.primary.mask = str(ipv4.netmask)

        vrf = attributes.value('vrf')
        if vrf:
            if unconfig:
                ydk_obj.vrf.forwarding = DELETE()
            else:
                ydk_obj.vrf.forwarding = vrf.name

        # instantiate crud service
        crud_service = CRUDService()

        if apply:

            # create netconf connection
            ncp = NetconfServiceProvider(self.device)

            crud_service.create(ncp, ydk_obj)
        else:
            return YangConfig(device=self.device,
                              ydk_obj=ydk_obj,
                              ncp=NetconfServiceProvider,
                              crud_service=crud_service.create)
Ejemplo 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)
                    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)
Ejemplo 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)

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

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

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

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

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

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

            if apply:
                if configurations:
                    self.device.configure(configurations)
            else:
                return CliConfig(device=self.device,
                                 unconfig=unconfig,
                                 cli_config=configurations)
Ejemplo n.º 20
0
        def build_config(self,
                         apply=True,
                         attributes=None,
                         unconfig=False,
                         **kwargs):

            attributes = AttributesHelper(self, attributes)
            configurations = CliConfigBuilder(unconfig=unconfig)
            ospf = xr_ipv4_ospf_cfg.Ospf()
            process = ospf.processes.Process()
            id = attributes.value('ospf_name', force=True)
            process.process_name = str(id)
            ospf.processes.process.append(process)
            if not unconfig:
                process.start = Empty()
                # crud_service = CRUDService()
                # ncp = NetconfServiceProvider(self.device)
                # x = crud_service.read(ncp, process)
                # abc = YangConfig(device=self.device, ydk_obj=x, ncp=ncp, crud_service=crud_service)
                # print(abc)
                v = attributes.value('nsr')
                if v == True:
                    process.nsr = "true"
                for sub, attributes2 in attributes.mapping_values(
                        'vrf_attr', sort=VrfSubAttributes._sort_key):
                    sub.build_config(apply=False,
                                     attributes=attributes2,
                                     unconfig=unconfig,
                                     process=process,
                                     **kwargs)
            # instantiate crud service
            crud_service = CRUDService()
            if apply:

                # create netconf connection3
                ncp = NetconfServiceProvider(self.device)
                if unconfig:
                    crud_service.delete(ncp, process)
                else:
                    crud_service.create(ncp, process)
            else:
                if unconfig:
                    return YangConfig(device=self.device,
                                      ydk_obj=process,
                                      ncp=NetconfServiceProvider,
                                      crud_service=crud_service.delete)
                else:
                    return YangConfig(device=self.device,
                                      ydk_obj=process,
                                      ncp=NetconfServiceProvider,
                                      crud_service=crud_service.create)
Ejemplo n.º 21
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)

                with configurations.submode_context(attributes.format(
                    'address-family {address_family.value}', force=True)):
                    if unconfig and attributes.iswildcard:
                        configurations.submode_unconfig()

                    # import_from_global_map
                    if attributes.value('import_from_global_map'):
                        configurations.append_line(
                            attributes.format('import {address_family.value} '
                                              'map {import_from_global_map}', force=True))

                    # export_to_global_map
                    if attributes.value('export_to_global_map'):
                        configurations.append_line(
                            attributes.format('export {address_family.value} '
                                              'map {export_to_global_map}', force=True))

                    # routing_table_limit_number
                    if attributes.value('routing_table_limit_number') and \
                       attributes.value('alert_percent_value'):
                        configurations.append_line(
                            attributes.format('maximum routes {routing_table_limit_number} '
                                              '{alert_percent_value}'))
                    elif attributes.value('routing_table_limit_number') and \
                       attributes.value('simple_alert'):
                        configurations.append_line(
                            attributes.format('maximum routes {routing_table_limit_number} '
                                              'warning-only'))

                    # keep old handle
                    if self.address_family.value == 'ipv4 unicast':
                        if attributes.value('export_route_targets'):
                            for v, attributes3 in attributes.sequence_values('export_route_targets'):
                                configurations.append_line('route-target export {}'.format(v.route_target))

                        if attributes.value('import_route_targets'):
                            for v, attributes3 in attributes.sequence_values('import_route_targets'):
                                configurations.append_line('route-target import {}'.format(v.route_target))
                    
                    if attributes.value('maximum_routes'):
                        configurations.append(attributes.format('maximum routes {maximum_routes}'))


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

                return str(configurations)
Ejemplo n.º 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)

                # 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)
Ejemplo n.º 23
0
            def build_config(self,
                             apply=True,
                             attributes=None,
                             unconfig=False,
                             **kwargs):
                assert not apply
                attributes = AttributesHelper(self, attributes)
                configurations = CliConfigBuilder(unconfig=unconfig)
                with configurations.submode_context(
                        attributes.format('vlan access-map {access_map_id}',
                                          force=True)):
                    if unconfig and attributes.iswildcard:
                        # Never reached!
                        configurations.submode_unconfig()

                    # iosxe: vlan access-map <access_map_id> \
                    # <vlan_access_map_sequence>
                    # A workaround that needs to be better handled
                    if attributes.value('access_map_sequence'):
                        configurations.append_line(
                            attributes.format(
                                'no vlan access-map {access_map_id}'))
                        configurations.append_line(
                            attributes.format('vlan access-map {access_map_id}\
                                     {access_map_sequence}'))

                    # iosxe: vlan access-map <access_map_id> / action drop
                    # iosxe: vlan access-map <access_map_id> / \
                    # action forward
                    configurations.append_line(
                        attributes.format('action {access_map_action}'))

                    # iosxe: vlan access-map <access_map_id> / default

                    # iosxe: vlan access-map <access_map_id> / \
                    # match ip address <access-list name>
                    # iosxe: vlan access-map <access_map_id> / \
                    # match ipv6 address <access-list name>
                    # iosxe: vlan access-map <access_map_id> / \
                    # match mac address <access-list name>
                    if attributes.value('access_map_match'):
                        if attributes.value('access_list'):
                            configurations.append_line(
                                attributes.format('match {access_map_match}\
                                     address {access_list}'))

                    # iosxe: vlan access-map <access_map_id> / no

                return str(configurations)
Ejemplo n.º 24
0
                def build_config(self,
                                 apply=True,
                                 attributes=None,
                                 unconfig=False,
                                 **kwargs):
                    assert not apply
                    assert not kwargs, kwargs
                    attributes = AttributesHelper(self, attributes)
                    configurations = CliConfigBuilder(unconfig=unconfig)

                    self.acl_name = self.parent.acl_name

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

                        if attributes.value(
                                'if_in') and 'ipv4' in self.parent.acl_type:
                            configurations.append_line(
                                attributes.format(
                                    'ip access-group {acl_name} in',
                                    force=True))
                        elif attributes.value(
                                'if_in') and 'ipv6' in self.parent.acl_type:
                            configurations.append_line(
                                attributes.format(
                                    'ipv6 traffic-filter {acl_name} in',
                                    force=True))
                        elif attributes.value(
                                'if_in') and 'eth' in self.parent.acl_type:
                            configurations.append_line(
                                attributes.format(
                                    'mac access-group {acl_name} in',
                                    force=True))

                        if attributes.value(
                                'if_out') and 'ipv4' in self.parent.acl_type:
                            configurations.append_line(
                                attributes.format(
                                    'ip access-group {acl_name} out',
                                    force=True))
                        elif attributes.value(
                                'if_out') and 'ipv6' in self.parent.acl_type:
                            configurations.append_line(
                                attributes.format(
                                    'ipv6 traffic-filter {acl_name} out',
                                    force=True))

                    return str(configurations)
Ejemplo n.º 25
0
    def build_config(self,
                     apply=True,
                     attributes=None,
                     unconfig=False,
                     **kwargs):
        attributes = AttributesHelper(self, attributes)
        configurations = CliConfigBuilder(unconfig=unconfig)
        interface_configurations = xr_ifmgr_cfg.InterfaceConfigurations()
        interface_configuration = interface_configurations.InterfaceConfiguration(
        )
        interface_configuration.active = "act"
        interface_configuration.interface_name = attributes.value('name')
        if unconfig and attributes.iswildcard:
            interface_configuration = DELETE()
        else:
            shutdown = attributes.value('shutdown')
            if shutdown is not None:
                if unconfig:
                    # Special case: unconfiguring always applies shutdown
                    interface_configuration.shutdown = Empty()
                elif shutdown:
                    interface_configuration.shutdown = Empty()
                else:
                    interface_configuration.shutdown = DELETE()

            ipv4 = attributes.value('ipv4')
            primary = interface_configuration.ipv4_network.addresses.Primary()
            if ipv4:
                primary.address = str(ipv4.ip)
                primary.netmask = str(ipv4.netmask)

            vrf = attributes.value('vrf')
            if vrf:
                interface_configuration.vrf = vrf.name

        # instantiate crud service
        crud_service = CRUDService()
        if apply:

            # create netconf connection
            ncp = NetconfServiceProvider(self.device)

            return crud_service.create(ncp, interface_configuration)
        else:
            return YangConfig(device=self.device,
                              unconfig=unconfig,
                              ncp=NetconfServiceProvider,
                              interface_configuration=interface_configuration,
                              crud_service=crud_service.create)
Ejemplo n.º 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)
                # 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)
Ejemplo n.º 27
0
                def build_config(self,
                                 apply=True,
                                 attributes=None,
                                 unconfig=False,
                                 **kwargs):
                    assert not apply
                    attributes = AttributesHelper(self, attributes)
                    configurations = CliConfigBuilder(unconfig=unconfig)

                    # <protocol> prefix-list <prefix_set_name> permit <prefix> [ge length | le length]
                    if attributes.value('protocol'):
                        ip = attributes.value('protocol').value
                        cfg_str = '{}'.format(ip) if ip == 'ipv6' else 'ip'
                    else:
                        return str(configurations)

                    # prefix-list <prefix_set_name>
                    cfg_str += ' prefix-list {}'.format(self.name)

                    # prefix <prefix>
                    cfg_str += ' permit {prefix}'.format(prefix=self.prefix)

                    if not attributes.value('maxlength_range_attr'):
                        configurations.append_line(cfg_str)
                        return str(configurations)

                    # get range edge value from the maxlength_range
                    [min_val, max_val] = self.maxlength_range.split('..')
                    min_val = int(min_val)
                    max_val = int(max_val)

                    # get mask of prefix to compare
                    mask = int(self.prefix.split('/')[1])

                    # compare with range edge values
                    if mask == min_val:
                        if min_val < max_val:
                            cfg_str += ' le {}'.format(max_val)
                    elif mask < min_val:
                        if max_val == 32 or max_val == 128:
                            cfg_str += ' ge {}'.format(min_val)
                        else:
                            cfg_str += ' ge {a} le {b}'.format(a=min_val,
                                                               b=max_val)

                    configurations.append_line(cfg_str)

                    return str(configurations)
Ejemplo n.º 28
0
            def build_config(self,
                             apply=True,
                             attributes=None,
                             unconfig=False,
                             **kwargs):
                assert not apply
                attributes = AttributesHelper(self, attributes)
                configurations = CliConfigBuilder(unconfig=unconfig)

                # iosxr: evpn / interface Bundle-Ether1 / ethernet-segment (config-evpn-ac-es)
                with configurations.submode_context('ethernet-segment'):
                    if not attributes.value('enabled', force=True):
                        configurations.submode_cancel()
                    if unconfig and attributes.iswildcard:
                        configurations.submode_unconfig()

                    # iosxr: evpn / interface Bundle-Ether1 / ethernet-segment / backbone-source-mac aaaa.bbbb.cccc
                    configurations.append_line(
                        attributes.format(
                            'backbone-source-mac {backbone_source_mac}'))

                    # iosxr: evpn / interface Bundle-Ether1 / ethernet-segment / bgp route-target aaaa.bbbb.cccc
                    ns, attributes2 = attributes.namespace('bgp')
                    if ns is not None:
                        configurations.append_block(
                            ns.build_config(apply=False,
                                            attributes=attributes2,
                                            unconfig=unconfig,
                                            **kwargs))

                    # iosxr: evpn / interface Bundle-Ether1 / ethernet-segment / force single-homed
                    if attributes.value('force_single_homed'):
                        configurations.append_line('force single-homed')

                    # iosxr: evpn / interface Bundle-Ether1 / ethernet-segment / identifier type 0 00.11.22.33.44.55.66.77.88
                    configurations.append_line(
                        attributes.format(
                            'identifier type {esi.type} {esi.dotted}'))

                    # iosxr: evpn / interface Bundle-Ether1 / ethernet-segment / load-balancing-mode single-active
                    configurations.append_line(
                        attributes.format(
                            'load-balancing-mode {load_balancing_mode}'))

                    # iosxr: evpn / interface Bundle-Ether1 / ethernet-segment / service-carving manual (config-evpn-ac-es-vlan-man)
                    # iosxr: evpn / interface Bundle-Ether1 / ethernet-segment / service-carving manual / primary someword secondary someword2

                return str(configurations)
Ejemplo n.º 29
0
    def build_config(self,
                     apply=True,
                     attributes=None,
                     unconfig=False,
                     **kwargs):
        attributes = AttributesHelper(self, attributes)
        configurations = CliConfigBuilder(unconfig=unconfig)
        ydk_obj = ned.Native.Interface.Loopback()
        # name is a mandatory arguments
        keep = string.digits
        ydk_obj.name = int(''.join(i for i in attributes.value('name')
                                   if i in keep))

        if unconfig and attributes.iswildcard:
            pass
        else:
            ipv4 = attributes.value('ipv4')
            if ipv4:
                ydk_obj.ip.address.primary.address = str(ipv4.ip)
                ydk_obj.ip.address.primary.mask = str(ipv4.netmask)

            vrf = attributes.value('vrf')
            if vrf:
                ydk_obj.vrf.forwarding = vrf.name
        # instantiate crud service
        crud_service = CRUDService()
        if apply:

            # create netconf connection
            ncp = NetconfServiceProvider(self.device)

            if unconfig:
                crud_service.delete(ncp, ydk_obj)
            else:
                crud_service.create(ncp, ydk_obj)
        else:
            if unconfig:
                return YangConfig(device=self.device,
                                  unconfig=unconfig,
                                  ncp=NetconfServiceProvider,
                                  ydk_obj=ydk_obj,
                                  crud_service=crud_service.delete)
            else:
                return YangConfig(device=self.device,
                                  unconfig=unconfig,
                                  ncp=NetconfServiceProvider,
                                  ydk_obj=ydk_obj,
                                  crud_service=crud_service.create)
Ejemplo n.º 30
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)