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 build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): # assert not kwargs, kwargs assert not apply attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) # =================================== # mroute_address # mroute_prefix_mask # mroute_neighbor_address # mroute_interface_name # mroute_admin_distance # =================================== # get vrf and address_family info vrf = kwargs['vrf'] af = kwargs['af_name'] begin_with = {'ip': 'ip mroute', 'ipv6': 'ipv6 route'} if vrf == 'default': cmd_str = begin_with[af] else: cmd_str = begin_with[af] + ' vrf {}'.format(vrf) if attributes.value('mroute_address') and \ attributes.value('mroute_prefix_mask'): if af == 'ip': # convert prefix_length to netmask ret = IPv4Network('1.1.1.1/{}'.format( attributes.value('mroute_prefix_mask')), strict=False) mask = ret.with_netmask.split('/')[1] address = '{addr} {mask}'.format(addr=attributes.value('mroute_address'), mask=mask) else: address = '{addr}/{mask}'.format( addr=attributes.value('mroute_address'), mask=attributes.value('mroute_prefix_mask')) # build up configuration string if attributes.value('mroute_neighbor_address'): cmd_str += ' {address} {nei}'.format( address=address, nei=attributes.value('mroute_neighbor_address')) elif attributes.value('mroute_interface_name'): cmd_str += ' {address} {int}'.format( address=address, int=attributes.value('mroute_interface_name')) else: cmd_str = '' if attributes.value('mroute_admin_distance') and cmd_str: cmd_str += ' ' + str(attributes.value('mroute_admin_distance')) configurations.append_line(cmd_str) return str(configurations)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) # Get area information area = kwargs['area'] # router ospf 1 # network 192.168.1.0 0.0.0.0 area 2 # network 192.168.1.1 1.1.1.1 area 3 if attributes.value('area_network') and attributes.value( 'area_network_wildcard'): # network 192.168.1.0 0.0.0.0 an_str = 'network {area_network} {area_network_wildcard}' # + area 2 an_str += ' area {}'.format(area) configurations.append_line(attributes.format(an_str)) return str(configurations)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): assert not apply attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) # =================================== # mroute_address/mroute_prefix_mask # mroute_interface_name # mroute_neighbor_address # =================================== if attributes.value('mroute_address') and \ attributes.value('mroute_prefix_mask') and \ attributes.value('mroute_interface_name') and \ attributes.value('mroute_neighbor_address'): # Final config string configurations.append_line( attributes.format( 'static-rpf {mroute_address} {mroute_prefix_mask}' ' {mroute_interface_name} {mroute_neighbor_address}')) 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) # router ospf 1 # max-metric router-lsa external-lsa include-stub summary-lsa # max-metric router-lsa external-lsa include-stub summary-lsa on-startup 50 if attributes.value('stub_router_always') or \ attributes.value('stub_router_on_startup'): # max-metric router-lsa sr_str = 'max-metric router-lsa' # + external-lsa if attributes.value('stub_router_external_lsa'): sr_str += ' external-lsa' # + include-stub if attributes.value('stub_router_include_stub'): sr_str += ' include-stub' # + summary-lsa if attributes.value('stub_router_summary_lsa'): sr_str += ' summary-lsa' # + on-startup {stub_router_on_startup} if attributes.value('stub_router_on_startup'): sr_str += ' on-startup {stub_router_on_startup}' configurations.append_line(attributes.format(sr_str)) return str(configurations)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): assert not kwargs, kwargs assert not apply attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) # =================================== # ipv6 # ipv6_prefix_length # ipv6_anycast # ipv6_eui_64 # =================================== # ipv6 address <ipv6prefix> [ anycast | eui-64 ] if attributes.value('ipv6') and attributes.value('ipv6_prefix_length'): cmd = 'ipv6 address {ipv6}/{ipv6_prefix_length}'.\ format(ipv6=attributes.value('ipv6'), ipv6_prefix_length=attributes.value('ipv6_prefix_length')) if attributes.value('ipv6_eui_64'): cmd += ' eui-64' elif attributes.value('ipv6_anycast'): cmd += ' anycast' configurations.append_line(cmd) 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) # router ospf 1 # nsf cisco # nsf ietf # nsf ietf helper disable # nsf interval 500 if attributes.value('gr_enable'): # nsf gr_str = 'nsf' # + {gr_type} if attributes.value('gr_type').value == 'cisco': gr_str += ' cisco' elif attributes.value('gr_type').value == 'ietf': gr_str += ' ietf' # + helper disable if attributes.value('gr_helper_enable') is False: gr_str += ' helper disable' elif attributes.value('gr_restart_interval'): gr_str += ' interval {gr_restart_interval}' configurations.append_line(attributes.format(gr_str)) 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)
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_unconfig(self, apply=True, attributes=None, **kwargs): '''IOS-XR CommunitySet unconfiguration. Note: Selective unconfiguration is not supported on IOS-XR; The whole community-set is always removed. ''' assert not kwargs, kwargs attributes = AttributesHelper(self, attributes) if not attributes.iswildcard: warnings.warn( UnsupportedSelectiveCommunitySetConfig, 'IOS-XR does not support selective community-set' ' unconfiguration.') attributes = AttributesHelper(self) configurations = CliConfigBuilder() configurations.append_line( attributes.format('no community-set {name}', force=True)) if apply: if configurations: self.device.configure(configurations, fail_invalid=True) else: 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) 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): attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) # router ospfv3 1 # address-family ipv6 unicast # summary-address 2001:1::1:1/112 # summary-address 2001:1::1:1/112 tag 10 # summary-address 2001:1::1:1/112 not-advertise if attributes.value('summary_address_prefix'): sum_str = 'summary-address' # + range {area_range_prefix} if re.search(r"\/", attributes.value('summary_address_prefix')): sum_str += ' {summary_address_prefix}' # + not-advertise if attributes.value('summary_address_not_advertise'): sum_str += ' not-advertise' # + tag {summary_address_tag} elif attributes.value('summary_address_tag'): sum_str += ' tag {summary_address_tag}' configurations.append_line(attributes.format(sum_str)) 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) 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, unconfig=False, **kwargs): assert not apply assert not kwargs, kwargs attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) with configurations.submode_context( None if self.vrf_name == 'default' else attributes. format('vrf context {vrf_id}', force=True)): # AddressFamilyAttributes for sub, attributes2 in attributes.mapping_values( 'address_family_attr', sort=True, keys=self.address_family_attr): configurations.append_block( sub.build_config(apply=False, attributes=attributes2, unconfig=unconfig)) return str(configurations)
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): 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 = 'ip igmp' else: cmd_str = 'ip igmp 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)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) # router ospf 1 # area 2 range 2001:1::1:1/112 cost 10 # area 2 range 2001:1::1:1/112 advertise cost 10 # area 2 range 2001:1::1:1/112 not-advertise cost 10 if attributes.value('range_area_id') and attributes.value( 'area_range_prefix'): # area {area} ar_str = 'area {range_area_id}' # + range {area_range_prefix} if re.search(r"\/", attributes.value('area_range_prefix')): ar_str += ' range {area_range_prefix}' # + not-advertise if attributes.value('area_range_not_advertise'): ar_str += ' not-advertise' # + cost {area_range_cost} if attributes.value('area_range_cost'): ar_str += ' cost {area_range_cost}' configurations.append_line(attributes.format(ar_str)) 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) # router ospf 1 # range 192.168.1.0 255.255.255.0 # range 192.168.1.0 255.255.255.0 advertise # range 192.168.1.0 255.255.255.0 not-advertise if attributes.value('area_range_prefix'): # + range {area_range_prefix} if re.search("\/", attributes.value('area_range_prefix')): range_val = IPNetwork(attributes.value('area_range_prefix')) prefix = str(range_val.ip) netmask = str(range_val.netmask) ar_str = ' range {} {}'.format(prefix, netmask) else: ar_str = ' range {area_range_prefix}' # + advertise # + not-advertise if attributes.value('area_range_advertise') is True: ar_str += ' advertise' elif attributes.value('area_range_advertise') is False: ar_str += ' not-advertise' configurations.append_line(attributes.format(ar_str)) return str(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]" # } 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_unconfig(self, apply=True, attributes=None, **kwargs): configurations = CliConfigBuilder() configurations.append_line( attributes.format('no route-policy {policy_definition}', force=True)) 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) if attributes.value('ip') and attributes.value('link_layer_address'): configurations.append_line(attributes.format('ipv6 neighbor {ip} {link_layer_address}')) return str(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 / autodiscovery bgp / signaling-protocol bgp (config-l2vpn-bg-bd-vfi-ad-sig) with configurations.submode_context('signaling-protocol bgp'): if not attributes.value('enabled', force=True): configurations.submode_cancel() # iosxr: l2vpn / bridge group someword / bridge-domain someword2 / vfi someword3 / autodiscovery bgp / signaling-protocol bgp / load-balancing flow-label both # iosxr: l2vpn / bridge group someword / bridge-domain someword2 / vfi someword3 / autodiscovery bgp / signaling-protocol bgp / load-balancing flow-label both static # iosxr: l2vpn / bridge group someword / bridge-domain someword2 / vfi someword3 / autodiscovery bgp / signaling-protocol bgp / load-balancing flow-label receive # iosxr: l2vpn / bridge group someword / bridge-domain someword2 / vfi someword3 / autodiscovery bgp / signaling-protocol bgp / load-balancing flow-label receive static # iosxr: l2vpn / bridge group someword / bridge-domain someword2 / vfi someword3 / autodiscovery bgp / signaling-protocol bgp / load-balancing flow-label transmit # iosxr: l2vpn / bridge group someword / bridge-domain someword2 / vfi someword3 / autodiscovery bgp / signaling-protocol bgp / load-balancing flow-label transmit static # iosxr: l2vpn / bridge group someword / bridge-domain someword2 / vfi someword3 / autodiscovery bgp / signaling-protocol bgp / ve-id 1 configurations.append_line( attributes.format('ve-id {ve_id}')) # iosxr: l2vpn / bridge group someword / bridge-domain someword2 / vfi someword3 / autodiscovery bgp / signaling-protocol bgp / ve-range 11 configurations.append_line( attributes.format('ve-range {ve_range}')) return str(configurations)
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)
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)
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.vrf = self.parent.vrf self.af = self.parent.af self.route = self.parent.route if attributes.value('af'): af = 'ip' if attributes.value('af').value == 'ipv4' else 'ipv6' join_all = "{} route".format(af) if attributes.value('vrf') and 'default' not in attributes.value('vrf'): join_all += " vrf {}".format(attributes.value('vrf')) if attributes.value('route'): if 'ipv6' in attributes.value('af').value: join_all += " {}".format(attributes.value('route')) else: if '/' in attributes.value('route'): network_netmask = IPNetwork(attributes.value('route')) network = str(network_netmask.network) netmask = str(network_netmask.netmask) join_all += " {} {}".format(network,netmask) else: join_all += " {}".format(attributes.value('route')) if attributes.value('interface'): join_all += " {}".format(attributes.value('interface')) if attributes.value('if_nexthop'): join_all += ' {}'.format(attributes.value('if_nexthop')) if attributes.value('if_preference'): join_all += ' {}'.format(attributes.value('if_preference')) if attributes.value('if_tag'): join_all += " tag {}".format(attributes.value('if_tag')) if attributes.value('if_track'): join_all += " track {}".format(attributes.value('if_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): 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 / multicast p2mp / signaling-protocol bgp (config-l2vpn-bg-bd-vfi-ad-sig) with configurations.submode_context('signaling-protocol bgp'): if not attributes.value('enabled', force=True): configurations.submode_cancel() return str(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) # mac address-table learning vlan <vlan_id> if attributes.value('vlan_mac_learning'): configurations.append_line( attributes.format( 'mac address-table learning vlan {vlan_id}', force=True)) # mac address-table aging-time <vlan_mac_aging_time> vlan <vlan_id> configurations.append_line( attributes.format( 'mac address-table aging-time ' '{vlan_mac_aging_time} vlan {vlan_id}', force=True)) # mac_address_attr for sub, attributes2 in attributes.mapping_values( 'mac_address_attr', sort=True, keys=self.mac_address_attr): configurations.append_block( sub.build_config(apply=False, attributes=attributes2, unconfig=unconfig)) return str(configurations)
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, kwargs attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) # source_interface if attributes.value('source_interface') and \ self.vrf_name == 'default': configurations.append_line( attributes.format( 'ntp source-interface {source_interface}')) # ServerAttributes for sub, attributes1 in attributes.mapping_values( 'server_attr', sort=True, keys=self.server_attr): configurations.append_block( sub.build_config(apply=False, attributes=attributes1, unconfig=unconfig)) # PeerAttributes for sub, attributes2 in attributes.mapping_values( 'peer_attr', sort=True, keys=self.peer_attr): configurations.append_block( sub.build_config(apply=False, attributes=attributes2, unconfig=unconfig)) return str(configurations)
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)