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

                with configurations.submode_context(
                        attributes.format(
                            'dot1x credential {credential_profile}',
                            force=True)):

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

                    # username <credential_username>
                    configurations.append_line(
                        attributes.format('username {credential_username}'))

                    # password [<credential_pwd_type>] <credential_secret>
                    if attributes.value('credential_pwd_type'):
                        configurations.append_line(
                            attributes.format(
                                'password {credential_pwd_type} {credential_secret}'
                            ))
                    else:
                        configurations.append_line(
                            attributes.format('password {credential_secret}'))

                return str(configurations)
예제 #2
0
            def build_config(self,
                             apply=True,
                             attributes=None,
                             unconfig=False,
                             **kwargs):
                assert not apply
                attributes = AttributesHelper(self, attributes)
                configurations = CliConfigBuilder(unconfig=unconfig)
                with configurations.submode_context(
                        attributes.format(
                            'vlan configuration {vlan_configuration_id}',
                            force=True)):
                    if unconfig and attributes.iswildcard:
                        # Never reached!
                        configurations.submode_unconfig()

                    # iosxe: vlan configuration <vlan_configuration_id> / \
                    # datalink flow monitor
                    if attributes.value('datalink_flow_monitor'):
                        configurations.append_line(
                            attributes.format('datalink flow monitor'))
                    # iosxe: vlan configuration <vlan_configuration_id> / \
                    # device-tracking
                    # iosxe: vlan configuration <vlan_configuration_id> / \
                    # action
                    # iosxe: vlan configuration <vlan_configuration_id> / exit
                    # iosxe: vlan configuration <vlan_configuration_id> / ip
                    # iosxe: vlan configuration <vlan_configuration_id> / ipv6
                    # iosxe: vlan configuration <vlan_configuration_id> / no

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

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

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

                            # ======
                            # if_enable
                            # ======
                            if attributes.value('if_enable'):
                                configurations.append_line(
                                    attributes.format('enable'))

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

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

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

            if apply:
                if configurations:
                    self.device.configure(configurations, fail_invalid=True)
            else:
                return CliConfig(device=self.device,
                                 unconfig=unconfig,
                                 cli_config=configurations,
                                 fail_invalid=True)
예제 #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(
                            '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)
예제 #7
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)
예제 #8
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)
예제 #9
0
        def build_config(self,
                         apply=True,
                         attributes=None,
                         unconfig=False,
                         **kwargs):
            assert not kwargs, kwargs
            attributes = AttributesHelper(self, attributes)
            configurations = CliConfigBuilder(unconfig=unconfig)

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

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

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

            # virtual neighbor 70.70.70.70 pw-id 17300005
            with configurations.submode_context(
                    attributes.format('virtual neighbor {ip} pw-id {pw_id}',
                                      force=True)):
                if unconfig and attributes.iswildcard:
                    configurations.submode_unconfig()

                # iosxr: evpn / virtual neighbor 70.70.70.70 pw-id 17300005 / ethernet-segment (config-evpn-ac-es)
                ns, attributes2 = attributes.namespace('ethernet_segment')
                if ns is not None:
                    configurations.append_block(
                        ns.build_config(apply=False,
                                        attributes=attributes2,
                                        unconfig=unconfig,
                                        **kwargs))

            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)

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

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

                if attributes.value('shutdown'):
                    warnings.warn('vrf shutdown', UnsupportedAttributeWarning)

                # iosxe: vrf definition vrf1 / vpn id 0:0
                configurations.append_line(attributes.format('vpn id {vpn_id}'))
                # iosxr: vrf vrf1 / description some line data
                configurations.append_line(attributes.format('description {description}'))
                configurations.append_line(attributes.format('rd {rd}'))

                # iosxr: vrf vrf1 / address-family ipv4 unicast (config-vrf-af)
                for key, sub, attributes2 in attributes.mapping_items(
                        'address_family_attr', keys=self.address_family_attr, sort=True):
                    configurations.append_block(
                        sub.build_config(apply=False, attributes=attributes2, unconfig=unconfig))

                # iosxe: vrf vrf1 / vpn id 0:0
                configurations.append_line(attributes.format('vpn id {vpn_id}'))

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

                with configurations.submode_context(
                        attributes.format(
                            'evpn multisite border-gateway {evpn_msite_bgw}',
                            force=True)):
                    if unconfig and attributes.iswildcard:
                        configurations.submode_unconfig()

                    # nxos : delay-restore time <int 30-1000>
                    if attributes.value('evpn_msite_bgw_delay_restore_time'):
                        configurations.append_line(\
                            attributes.format('delay-restore time {evpn_msite_bgw_delay_restore_time}'))

                    # nxos : dci-advertise-pip
                    if attributes.value('evpn_msite_dci_advertise_pip'):
                        configurations.append_line( \
                            attributes.format('dci-advertise-pip'))

                    # nxos: split-horizon per-site
                    if attributes.value('evpn_msite_split_horizon_per_site'):
                        configurations.append_line( \
                            attributes.format('split-horizon per-site'))

                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)
                with configurations.submode_context(
                        attributes.format(
                            'tunnel-encryption peer-ip {peer_ip}',
                            force=True)):
                    if unconfig and attributes.iswildcard:
                        configurations.submode_unconfig()

                    # nxos: keychain and policy
                    if attributes.value('keychain_name'):
                        peerip_cfg = 'keychain {keychain_name} '

                        if attributes.value('tunnelpolicy_name'):
                            peerip_cfg += 'policy {tunnelpolicy_name}'

                    configurations.append_line(attributes.format(peerip_cfg))

                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)
                with configurations.submode_context(
                        attributes.format(
                            'tunnel-encryption policy {policy_name}',
                            force=True)):
                    if unconfig and attributes.iswildcard:
                        configurations.submode_unconfig()

                    # nxos:
                    if attributes.value('cipher_suite'):
                        if attributes.value(
                                'cipher_suite').value == 'gcm-aes-xpn-128':
                            configurations.append_line(
                                attributes.format(
                                    'cipher-suite GCM-AES-XPN-128'))
                        elif attributes.value(
                                'cipher_suite').value == 'gcm-aes-xpn-256':
                            configurations.append_line(
                                attributes.format(
                                    'cipher-suite GCM-AES-XPN-257'))

                    # nxos: auto-recovery reload-delay <value>
                    if attributes.value('sak_rekey_time'):
                        configurations.append_line(
                            attributes.format(
                                'sak-rekey-time {sak_rekey_time}'))
                return str(configurations)
예제 #17
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)
예제 #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)

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

                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)
예제 #20
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 / virtual vfi ac-vfi-5 / 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 / virtual vfi ac-vfi-5 / 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 / virtual vfi ac-vfi-5 / 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}'))

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

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

                # iosxr: l2vpn / redundancy / iccp group 1 / interface Bundle-Ether1 (config-l2vpn)
                with configurations.submode_context(
                        attributes.format('interface {interface_name}',
                                          force=True)):
                    if unconfig and attributes.iswildcard:
                        configurations.submode_unconfig()

                    # iosxr: l2vpn / redundancy / iccp group 1 / interface Bundle-Ether1 / mac-flush stp-tcn
                    configurations.append_line(
                        attributes.format('mac-flush {mac_flush}'))

                    # iosxr: l2vpn / redundancy / iccp group 1 / interface Bundle-Ether1 / primary vlan someword
                    configurations.append_line(
                        attributes.format('primary vlan {primary_vlan}'))

                    # iosxr: l2vpn / redundancy / iccp group 1 / interface Bundle-Ether1 / recovery delay 30
                    configurations.append_line(
                        attributes.format('recovery delay {recovery_delay}'))

                    # iosxr: l2vpn / redundancy / iccp group 1 / interface Bundle-Ether1 / secondary vlan someword
                    configurations.append_line(
                        attributes.format('secondary vlan {secondary_vlan}'))

                return str(configurations)
예제 #24
0
                def build_config(self,
                                 apply=True,
                                 attributes=None,
                                 unconfig=False,
                                 **kwargs):

                    assert not kwargs, kwargs
                    attributes = AttributesHelper(self, attributes)
                    configurations = CliConfigBuilder(unconfig=unconfig)

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

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

                        # key chain <key_chain> tunnel-encryption
                        #  key <key_id>
                        #   key-octet-string [key_enc_type] <key_string> [cryptographic-algorithm <crypto_algo>]
                        if attributes.value('key_string'):

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

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

                            # + <key_string>
                            key_string_str += attributes.format(
                                ' {key_string}')

                            # + [cryptographic-algorithm <crypto_algo>]
                            if attributes.value('crypto_algo'):
                                if attributes.value(
                                        'crypto_algo').value == 'aes-128-cmac':
                                    key_string_str += ' cryptographic-algorithm AES_128_CMAC'
                                elif attributes.value(
                                        'crypto_algo').value == 'aes-128-cmac':
                                    key_string_str += ' cryptographic-algorithm AES_256_CMAC'

                            configurations.append_line(
                                attributes.format(key_string_str))

                        # key chain <key_chain> tunnel-encryption
                        #  key <key_id>
                        #   send-lifetime <lifetime_start> duration <lifetime_duration>
                        if attributes.value(
                                'lifetime_start') and attributes.value(
                                    'lifetime_duration'):

                            # send-lifetime <lifetime_start> duration <lifetime_duration>
                            lifetime_str = 'send-lifetime {lifetime_start} duration {lifetime_duration}'

                            configurations.append_line(
                                attributes.format(lifetime_str))

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

                        # router ospfv3 1
                        #  area 2 virtual-link 7.7.7.7
                        if attributes.value('vl_router_id') and \
                                attributes.value('area_type').value != 'stub' and \
                                attributes.value('area_type').value != 'nssa':
                            with configurations.submode_context(
                                    attributes.format(
                                        'area {area} virtual-link {vl_router_id}',
                                        force=True)):

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

                                # router ospfv3 1
                                #  area 2 virtual-link 7.7.7.7
                                #    hello-interval 55
                                if attributes.value('vl_hello_interval'):
                                    configurations.append_line(
                                        attributes.format(
                                            'hello-interval {vl_hello_interval}'
                                        ))

                                # router ospfv3 1
                                #  area 2 virtual-link 7.7.7.7
                                #    dead-interval 55
                                if attributes.value('vl_dead_interval'):
                                    configurations.append_line(
                                        attributes.format(
                                            'dead-interval {vl_dead_interval}')
                                    )

                                # router ospfv3 1
                                #  area 2 virtual-link 7.7.7.7
                                #   retransmit-interval 55
                                if attributes.value('vl_retransmit_interval'):
                                    configurations.append_line(
                                        attributes.format(
                                            'retransmit-interval {vl_retransmit_interval}'
                                        ))

                                # router ospfv3 1
                                #  area 2 virtual-link 7.7.7.7
                                #   transmit-delay 55
                                if attributes.value('vl_transmit_delay'):
                                    configurations.append_line(
                                        attributes.format(
                                            'transmit-delay {vl_transmit_delay}'
                                        ))
                        return str(configurations)
예제 #26
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)
예제 #27
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)
예제 #28
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)
예제 #29
0
                def build_config(self,
                                 apply=True,
                                 attributes=None,
                                 unconfig=False,
                                 **kwargs):
                    """method to build the configuration based on attributes

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

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

                    Return:
                        `str`
                    """
                    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()

                        configurations.append_line(
                            attributes.format(
                                'default-metric {default_metric}'))

                        configurations.append_line(
                            attributes.format('distance {distance}'))

                        configurations.append_line(
                            attributes.format('maximum-paths {maximum_paths}'))

                        configurations.append_line(
                            attributes.format(
                                'redistribute lisp route-map {redistribute_lisp_rmap}'
                            ))

                        configurations.append_line(
                            attributes.format(
                                'redistribute direct route-map {redistribute_direct_rmap}'
                            ))

                        configurations.append_line(
                            attributes.format(
                                'redistribute static route-map {redistribute_static_rmap}'
                            ))

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

        # iosxr: l2vpn / bridge group someword / bridge-domain someword2 / vfi someword3 (config-l2vpn-bg-bd-vfi)
        if attributes.value('virtual', force=True):
            title = attributes.format('access-vfi {name}', force=True)
        else:
            title = attributes.format('vfi {name}', force=True)

        with configurations.submode_context(title):
            if unconfig and attributes.iswildcard:
                configurations.submode_unconfig()

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

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

            # iosxr: l2vpn / bridge group someword / bridge-domain someword2 / vfi someword3 / neighbor 1.2.3.4 pw-id 1 (config-l2vpn-bg-bd-vfi-pw)
            for sub, attributes2 in attributes.mapping_values(
                    'neighbor_attr', keys=self.pseudowire_neighbors,
                    sort=True):
                configurations.append_block(
                    sub.build_config(apply=False,
                                     attributes=attributes2,
                                     unconfig=unconfig))

            # iosxr: l2vpn / bridge group someword / bridge-domain someword2 / vfi someword3 / shutdown
            if attributes.value('shutdown'):
                configurations.append_line('shutdown')

            # iosxr: l2vpn / bridge group someword / bridge-domain someword2 / vfi someword3 / vpn-id 1
            configurations.append_line(attributes.format('vpn-id {vpn_id}'))

        return CliConfig(device=self.device,
                         unconfig=unconfig,
                         cli_config=configurations)