def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): assert not kwargs, kwargs attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) # Seperate CliConfigBuilder for InterfaceAttribute configuration self.interface_config = CliConfigBuilder(unconfig=unconfig) # feature ospfv3 if attributes.value('enabled'): if unconfig is False: configurations.append_line( attributes.format('feature ospfv3')) # Make sure that only enabled was provided in attributes # If wildcard, then delete everything elif unconfig is True and\ attributes.attributes == {'enabled': {True: None}} or \ attributes.iswildcard: configurations.append_line('no feature ospfv3', raw=True) if apply: if configurations: self.device.configure(configurations) else: return CliConfig(device=self.device, unconfig=unconfig, cli_config=configurations) # +- DeviceAttributes # +- VrfAttributes for sub, attributes2 in attributes.mapping_values( 'vrf_attr', sort=True, keys=self.vrf_attr): configurations.append_block( sub.build_config(apply=False, attributes=attributes2, unconfig=unconfig)) # Add InterfaceAttribute configuration configurations.append_block(self.interface_config) if apply: if configurations: self.device.configure(configurations) else: return CliConfig(device=self.device, unconfig=unconfig, cli_config=configurations)
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)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): assert not kwargs, kwargs attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) # mac address-table aging-time <mac_aging_time> configurations.append_line( attributes.format( 'mac address-table aging-time {mac_aging_time}')) # vlan attributes for sub, attributes2 in attributes.mapping_values( 'vlan_attr', sort=True, keys=self.vlan_attr): configurations.append_block( sub.build_config(apply=False, attributes=attributes2, unconfig=unconfig)) if apply: if configurations: self.device.configure(configurations) else: return CliConfig(device=self.device, unconfig=unconfig, cli_config=configurations)
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)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): assert not kwargs, kwargs attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) # require_router_alert if attributes.value('require_router_alert'): configurations.append_line('ip igmp enforce-router-alert') # VrfAttributes for sub, attributes2 in attributes.mapping_values( 'vrf_attr', sort=True, keys=self.vrf_attr): configurations.append_block( sub.build_config(apply=False, attributes=attributes2, unconfig=unconfig)) if apply: if configurations: self.device.configure(configurations) else: return CliConfig(device=self.device, unconfig=unconfig, cli_config=configurations)
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)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): assert not kwargs, kwargs attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) vrf_context = "" if attributes.value('vrf') != 'default': vrf_context = attributes.format('vrf context {vrf}', force=True) # AddressFamilyAttributes with configurations.submode_context(vrf_context): for sub, attributes2 in attributes.mapping_values( 'address_family_attr', sort=True, keys=self.address_family_attr): configurations.append_block( sub.build_config(apply=False, attributes=attributes2, unconfig=unconfig)) if apply: if configurations: self.device.configure(configurations) else: return CliConfig(device=self.device, unconfig=unconfig, cli_config=configurations)
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)
def build_config(self, links=None, apply=True, attributes=None, unconfig=False, **kwargs): '''Device build config''' assert not apply attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) if attributes.iswildcard: # iosxe : mpls traffic-eng tunnels configurations.append_line('mpls traffic-eng tunnels', \ unconfig_cmd = 'default mpls traffic-eng tunnels') if attributes.value('advertise_expnull'): configurations.append_line( 'mpls traffic-eng signalling advertise explicit-null') # Add per-interface config for sub, attributes2 in attributes.mapping_values( 'interface_attr', keys=self.interfaces, sort=True): configurations.append_block( sub.build_config(apply=False, attributes=attributes2, unconfig=unconfig, **kwargs)) return CliConfig(device=self.device, unconfig=unconfig, cli_config=configurations)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): assert not kwargs, kwargs attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) # InterfaceAttributes for sub, attributes2 in attributes.mapping_values('interface_attr', sort=True, keys=self.interface_attr): configurations.append_block( sub.build_config(apply=False, attributes=attributes2, unconfig=unconfig)) # NextHopAttributes for sub, attributes2 in attributes.mapping_values('next_hop_attr', sort=True, keys=self.next_hop_attr): configurations.append_block( sub.build_config(apply=False, attributes=attributes2, unconfig=unconfig)) if apply: if configurations: self.device.configure(configurations) else: return CliConfig(device=self.device, unconfig=unconfig, cli_config=configurations)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): assert not kwargs, kwargs attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) if attributes.value('if_ra_interval'): configurations.append_line( attributes.format('ipv6 nd ra-interval {if_ra_interval}')) if attributes.value('if_ra_lifetime'): configurations.append_line( attributes.format('ipv6 nd ra-lifetime {if_ra_lifetime}')) if attributes.value('if_ra_suppress') == True: configurations.append_line( attributes.format('ipv6 nd suppress-ra')) # NeighborAttributes for sub, attributes2 in attributes.mapping_values('neighbor_attr', sort=True, keys=self.neighbor_attr): configurations.append_block( sub.build_config(apply=False, attributes=attributes2, unconfig=unconfig)) if apply: if configurations: self.device.configure(configurations) else: return CliConfig(device=self.device, unconfig=unconfig, cli_config=configurations)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): assert not kwargs, kwargs attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) # ip pim bidir-enable if attributes.value('enabled_bidir'): configurations.append_line( attributes.format('ip pim bidir-enable')) # VrfAttributes for sub, attributes2 in attributes.mapping_values( 'vrf_attr', sort=True, keys=self.vrf_attr): configurations.append_block( sub.build_config(apply=False, attributes=attributes2, unconfig=unconfig)) if apply: if configurations: self.device.configure(configurations) else: return CliConfig(device=self.device, unconfig=unconfig, cli_config=configurations)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): assert not kwargs, kwargs attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) # arp entries interface-limit <max_entries> if attributes.value('max_entries'): configurations.append_line( attributes.format( 'arp entries interface-limit {max_entries}')) # InterfaceAttributes for sub, attributes2 in attributes.mapping_values( 'interface_attr', sort=True, keys=self.interface_attr): configurations.append_block( sub.build_config(apply=False, attributes=attributes2, unconfig=unconfig)) if apply: if configurations: self.device.configure(configurations) else: return CliConfig(device=self.device, unconfig=unconfig, cli_config=configurations)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): assert not kwargs, kwargs attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) for bd, attributes2 in attributes.sequence_values('bridge_domains'): configurations.append_block( str(bd.build_config(apply=False, attributes=attributes2, unconfig=unconfig, contained=True))) for xc, attributes2 in attributes.sequence_values('xconnects'): configurations.append_block( str(xc.build_config(apply=False, attributes=attributes2, unconfig=unconfig, contained=True))) for pwc, attributes2 in attributes.sequence_values('pseudowire_classes'): configurations.append_block( str(pwc.build_config(apply=False, attributes=attributes2, unconfig=unconfig, contained=True))) if apply: if configurations: self.device.configure(configurations, fail_invalid=True) else: return CliConfig(device=self.device, unconfig=unconfig, cli_config=configurations, fail_invalid=True)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): assert not kwargs attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) # lacp system-priority <lag_lacp_system_priority> configurations.append_line( attributes.format( 'lacp system-priority {lag_lacp_system_priority}')) with self._build_config_create_interface_submode_context( configurations): self._build_config_interface_submode(configurations=configurations, attributes=attributes, unconfig=unconfig) if apply: if configurations: self.device.configure(configurations, fail_invalid=True) else: return CliConfig(device=self.device, unconfig=unconfig, cli_config=configurations)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): assert not kwargs, kwargs attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) # Seperate CliConfigBuilder for InterfaceAttribute configuration self.interface_config = CliConfigBuilder(unconfig=unconfig) # +- DeviceAttributes # +- VrfAttributes for sub, attributes2 in attributes.mapping_values('vrf_attr', sort=True, keys=self.vrf_attr): configurations.append_block( sub.build_config(apply=False, attributes=attributes2, unconfig=unconfig)) # Add InterfaceAttribute configuration configurations.append_block(self.interface_config) if apply: if configurations: self.device.configure(configurations) else: return CliConfig(device=self.device, unconfig=unconfig, cli_config=configurations)
def build_config(self, devices=None, apply=True, attributes=None, unconfig=False, **kwargs): assert not apply attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) # iosxr: router hsrp configurations.append_line( attributes.format('router hsrp', force=True)) # loop over all interfaces for sub, attributes2 in attributes.mapping_values( 'interface_attr', keys=self.interface_attr.keys()): configurations.append_block( sub.build_config(apply=False, attributes=attributes2, unconfig=unconfig, **kwargs)) return CliConfig(device=self.device, unconfig=unconfig, cli_config=configurations)
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)
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)
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)
def build_config(self, apply=True, attributes=None): attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder() # TODO - logging levels # TODO - IOS: no parser cache configurations.append_block(super().build_config( apply=False, attributes=attributes)) # nodename if attributes.value('nodename'): configurations.append_line( attributes.format('hostname {nodename}')) if apply: if configurations: self.configure(str(configurations), fail_invalid=True) else: # Return configuration return CliConfig(device=self, unconfig=False, cli_config=configurations, fail_invalid=True)
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)
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)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) if unconfig and attributes.iswildcard: configurations.append_line('default interface {}'.format( self.name), raw=True) else: with self._build_config_create_interface_submode_context( configurations): self._build_config_interface_submode( configurations=configurations, attributes=attributes, unconfig=unconfig) if apply: if configurations: self.device.configure(configurations, fail_invalid=True) else: return CliConfig(device=self.device, unconfig=unconfig, cli_config=configurations)
def _clean_cfgs_dict_inner(cfgs, *, testbed=None, device=None, add_to_cfgs=None): if add_to_cfgs is None: add_to_cfgs = {} if not cfgs: return add_to_cfgs if isinstance(cfgs, str): # Need a device object to instantiate CliConfig if device is None: raise ValueError(cfgs) if isinstance(device, str): if not testbed: testbed = Genie.testbed device = testbed.devices[device] elif not isinstance(device, Device): # A Feature? device = device.device assert isinstance(device, Device) cfgs = CliConfig(cfgs, device=device) # Fallthrough to Config case below... elif isinstance(cfgs, abc.Mapping): for device, device_cfgs in cfgs.items(): _clean_cfgs_dict_inner(device_cfgs, testbed=testbed, device=device, add_to_cfgs=add_to_cfgs) return add_to_cfgs elif isinstance(cfgs, abc.Iterable): for device_cfg in cfgs: _clean_cfgs_dict_inner(device_cfg, testbed=testbed, device=device, add_to_cfgs=add_to_cfgs) return add_to_cfgs if isinstance(cfgs, Config): device = cfgs.device.name add_to_cfgs.setdefault(device, []).append(cfgs) return add_to_cfgs raise ValueError(cfgs)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): assert not kwargs, kwargs attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) # spanning-tree bridge assurance if attributes.value('bridge_assurance'): configurations.append_line( attributes.format('spanning-tree bridge assurance')) # spanning-tree etherchannel guard misconfig if attributes.value('etherchannel_misconfig_guard'): configurations.append_line( attributes.format( 'spanning-tree etherchannel guard misconfig')) # errdisable recovery interval <bpduguard_timeout_recovery> if attributes.value('bpduguard_timeout_recovery'): configurations.append_line( attributes.format('errdisable recovery ' 'interval {bpduguard_timeout_recovery}')) # spanning-tree loopguard default if attributes.value('loop_guard'): configurations.append_line( attributes.format('spanning-tree loopguard default')) # spanning-tree portfast bpduguard default if attributes.value('bpdu_guard'): configurations.append_line( attributes.format( 'spanning-tree portfast bpduguard default')) # spanning-tree portfast bpdufilter default if attributes.value('bpdu_filter'): configurations.append_line( attributes.format( 'spanning-tree portfast bpdufilter default')) # mpde attributes for sub, attributes2 in attributes.mapping_values( 'mode_attr', sort=True, keys=self.mode_attr): configurations.append_block( sub.build_config(apply=False, attributes=attributes2, unconfig=unconfig)) if apply: if configurations: self.device.configure(configurations) else: return CliConfig(device=self.device, unconfig=unconfig, cli_config=configurations)
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)
def build_config(self, apply=True, attributes=None, unconfig=False): assert not apply attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) # TODO pass return CliConfig(device=self.device, unconfig=unconfig, cli_config=configurations)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): assert not kwargs, kwargs attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) # featue hardware-telemetry if attributes.value('enable_hardware_telemetry'): if unconfig is False: configurations.append_line( attributes.format('feature hardware-telemetry')) # Make sure that only enabled was provided in attributes # If wildcard, then delete everything elif unconfig and\ attributes.attributes == {'enable_hardware_telemetry': {True: None}} or \ attributes.iswildcard: configurations.append_line( 'no feature hardware-telemetry', raw=True) if apply: if configurations: self.device.configure(configurations) else: return CliConfig(device=self.device, unconfig=unconfig, cli_config=configurations) # +- DeviceAttributes # +- SsxAttributes for sub, attributes2 in attributes.mapping_values('hwtele_attr', sort=True, keys=self.hwtele_attr): configurations.append_block( sub.build_config(apply=False, attributes=attributes2, unconfig=unconfig)) if apply: if configurations: self.device.configure(configurations) else: return CliConfig(device=self.device, unconfig=unconfig, cli_config=configurations)
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)