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)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): assert not apply attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) # =================================== # ssm_group_policy # ssm_source_addr # =================================== # get vrf info vrf = kwargs['vrf'] if vrf == 'default': cmd_str = 'ipv6 mld' else: cmd_str = 'ipv6 mld vrf {}'.format(vrf) if attributes.value('ssm_group_policy') and \ attributes.value('ssm_source_addr'): cmd_str += ' ssm-map static {ssm_group_policy} {ssm_source_addr}' configurations.append_line(attributes.format(cmd_str)) return str(configurations)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): assert not apply attributes = AttributesHelper(self, attributes) # "Set the interface to access or trunk mode for VLANs" if attributes.value('switchport_mode'): self.interface.switchport_mode = \ attributes.value('switchport_mode') if attributes.value('sw_trunk_allowed_vlan'): self.interface.sw_trunk_allowed_vlan = \ attributes.value('sw_trunk_allowed_vlan') if unconfig: if attributes.attributes is not None: configurations = \ self.interface.build_unconfig( apply=False, attributes=attributes.attributes) else: configurations = \ self.interface.build_unconfig( apply=False, attributes={'switchport_mode': None, 'sw_trunk_allowed_vlan': None}) else: configurations = self.interface.build_config(apply=False) return str(configurations)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): assert not apply assert not kwargs, kwargs attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) self.vlan_id = self.parent.vlan_id # mac address-table static <mac_address> vlan <vlan_id> interface <interface> if attributes.value('interface'): interface = ' '.join(attributes.value('interface')) cmd = 'mac address-table static {mac_address} vlan {vlan_id}' cmd += ' interface {interface}'.format( interface=interface) configurations.append_line( attributes.format(cmd, force=True)) # mac address-table static <mac_address> vlan <vlan_id> drop if attributes.value('drop'): configurations.append_line( attributes.format( 'mac address-table static {mac_address} vlan {vlan_id} drop' )) return str(configurations)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): assert not kwargs, kwargs attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) # interface GigabitEthernet1 # neighbor 10.10.10.10 cost 100 poll-interval 66 priority 12 if attributes.value('if_static_neighbor'): # neighbor 10.10.10.10 intf_cfg_str = 'neighbor {if_static_neighbor}' # + cost {if_static_cost} if attributes.value('if_static_cost'): intf_cfg_str += ' cost {if_static_cost}' # + poll-interval {if_static_poll_interval} if attributes.value('if_static_poll_interval'): intf_cfg_str += ' poll-interval {if_static_poll_interval}' # + priority {if_static_priority} if attributes.value('if_static_priority'): intf_cfg_str += ' priority {if_static_priority}' configurations.append_line(attributes.format(intf_cfg_str)) return str(configurations)
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)
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 assert not kwargs, kwargs attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) # Set decider key af_name from user set address family self.af_name = self.address_family.value # ====== # enable # ====== if attributes.value('enabled'): if unconfig is False: if self.af_name == 'ipv4': configurations.append_line( attributes.format('feature pim')) elif self.af_name == 'ipv6': configurations.append_line( attributes.format('feature pim6')) elif unconfig is True: if self.af_name == 'ipv4': configurations.append_line('no feature pim', raw=True) elif self.af_name == 'ipv6': configurations.append_line('no feature pim6', raw=True) # ========= # multipath # ========= if attributes.value('multipath'): if unconfig is False: configurations.append_line( attributes.format('ip multicast multipath')) elif unconfig is True: configurations.append_line( 'no ip multicast multipath', raw=True) # Mroute attributes configs for mroute, attributes2 in attributes.sequence_values( 'mroutes', sort=True): kwargs = {'vrf': self.vrf_id, 'af_name': self.af_name} if unconfig: configurations.append_block( mroute.build_unconfig(apply=False, attributes=attributes2, **kwargs)) else: configurations.append_block( mroute.build_config(apply=False, attributes=attributes2, **kwargs)) return str(configurations)
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)
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): attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) interface_configurations = xr_ifmgr_cfg.InterfaceConfigurations() interface_configuration = interface_configurations.InterfaceConfiguration( ) interface_configuration.active = "act" interface_configuration.interface_name = attributes.value('name') interface_configuration.interface_virtual = Empty() # name is a mandatory arguments #keep = string.digits #ydk_obj.name = int(''.join(i for i in attributes.value('name') if i in keep)) if unconfig and attributes.iswildcard: pass else: vrf = attributes.value('vrf') if vrf: interface_configuration.vrf = vrf.name ipv4 = attributes.value('ipv4') if ipv4: primary = interface_configuration.ipv4_network.addresses.Primary( ) primary.address = str(ipv4.ip) primary.netmask = str(ipv4.netmask) interface_configuration.ipv4_network.addresses.primary = primary # instantiate crud service crud_service = CRUDService() if apply: # create netconf connection ncp = NetconfServiceProvider(self.device) if unconfig: crud_service.delete(ncp, interface_configuration) else: crud_service.create(ncp, interface_configuration) else: if unconfig: return YangConfig(device=self.device, unconfig=unconfig, ncp=NetconfServiceProvider, ydk_obj=interface_configuration, crud_service=crud_service.delete) else: return YangConfig(device=self.device, unconfig=unconfig, ncp=NetconfServiceProvider, ydk_obj=interface_configuration, crud_service=crud_service.create)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): assert not apply assert not kwargs, kwargs attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) # only add mst_id in attributes when # unconfig for specific attributes is enable if unconfig and attributes.attributes: attributes.attributes['mst_id'] = None # the interface should have vrf(name = vrf_name) attached if attributes.value('m_vlans') or \ attributes.value('m_name') or \ attributes.value('m_revision'): with configurations.submode_context( attributes.format( 'spanning-tree mst configuration', force=True)): # instance <mst_id> vlan <m_vlans> configurations.append_line( attributes.format( 'instance {mst_id} vlan {m_vlans}')) # name <m_name> configurations.append_line( attributes.format('name {m_name}')) # revision <m_revision> configurations.append_line( attributes.format('revision {m_revision}')) # spanning-tree mst <mst_id> priority <m_bridge_priority> configurations.append_line( attributes.format( 'spanning-tree mst {mst_id} priority {m_bridge_priority}' )) # interface_attr for sub, attributes2 in attributes.mapping_values( 'interface_attr', sort=True, keys=self.interface_attr): configurations.append_block( sub.build_config(apply=False, attributes=attributes2, unconfig=unconfig, mst_id=self.mst_id)) return str(configurations)
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)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): assert not kwargs attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) vrfs = xr_infra_rsi_cfg.Vrfs() if not unconfig: vrf = vrfs.Vrf() if attributes.value('name'): vrf.vrf_name = attributes.value('name') vrf.create = Empty() vrfs.vrf.append(vrf) #crud_service = CRUDService() #ncp = NetconfServiceProvider(self.device) #x = crud_service.read(ncp, vrf) #abc = YangConfig(device=self.device, ydk_obj=x, ncp=ncp, crud_service=crud_service) #print(abc) # iosxr: vrf vrf1 / address-family ipv4 unicast (config-vrf-af) for key, sub, attributes2 in attributes.mapping_items( 'address_family_attr', keys=self.address_families, sort=True): sub.build_config(apply=False, attributes=attributes2, unconfig=unconfig, vrf=vrf) # instantiate crud service crud_service = CRUDService() if apply: # create netconf connection ncp = NetconfServiceProvider(self.device) crud_service.create(ncp, vrfs) if unconfig: crud_service.delete(ncp, vrfs) else: if unconfig: return YangConfig(device=self.device, ydk_obj=vrfs, ncp=NetconfServiceProvider, crud_service=crud_service.delete) else: return YangConfig(device=self.device, ydk_obj=vrfs, ncp=NetconfServiceProvider, crud_service=crud_service.create)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): assert not kwargs, kwargs attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) with configurations.submode_context(attributes.format( 'ssx record {rec_id}', force=True)): if unconfig and attributes.iswildcard: configurations.submode_unconfig() if attributes.value('egress_queue_drops'): configurations.append_line( attributes.format('collect egress queue drops')) if attributes.value('egress_queue_peak'): configurations.append_line( attributes.format('collect egress queue peak')) if attributes.value('egress_queue_depth'): configurations.append_line( attributes.format('collect egress queue depth')) if attributes.value('ingress_queue_drops'): configurations.append_line( attributes.format('collect ingress queue drops')) if attributes.value('ingress_queue_depth'): configurations.append_line( attributes.format('collect ingress queue depth')) if attributes.value('egress_queue_microburst'): configurations.append_line( attributes.format('collect egress queue microburst')) if attributes.value('ethernet_counters'): configurations.append_line( attributes.format('collect ethernet counters')) if attributes.value('egress_pool_group_depth'): configurations.append_line( attributes.format('collect egress pool-group depth')) if attributes.value('egress_buffer_depth'): configurations.append_line( attributes.format('collect egress buffer depth')) if attributes.value('record_interval'): configurations.append_line( attributes.format('interval {record_interval}')) return str(configurations)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): assert not apply assert not kwargs, kwargs attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) # global_max_groups if attributes.value('global_max_groups'): cfg_str = 'ipv6 mld state-limit {global_max_groups}' \ if self.vrf_id == 'default' else \ 'ipv6 mld vrf {vrf_id} state-limit {global_max_groups}' configurations.append_line( attributes.format(cfg_str, force=True)) # ipv6 mld [vrf <vrf>] ssm-map enable if hasattr(attributes.value('ssm'), 'data'): if attributes.value('ssm').data: cfg_str = 'ipv6 mld ssm-map enable' \ if self.vrf_id == 'default' else \ 'ipv6 mld vrf {} ssm-map enable'.format(self.vrf_id) configurations.append_line(attributes.format(cfg_str)) # Ssm Attributes under vrf level config for ssm, attributes2 in attributes.sequence_values('ssm', sort=True): kwargs = {'vrf': self.vrf_id} if unconfig: configurations.append_block( ssm.build_unconfig(apply=False, attributes=attributes2, **kwargs)) else: configurations.append_block( ssm.build_config(apply=False, attributes=attributes2, **kwargs)) # InterfaceAttributes for sub, attributes2 in attributes.mapping_values( 'interface_attr', sort=True, keys=self.interface_attr): configurations.append_block( sub.build_config(apply=False, attributes=attributes2, unconfig=unconfig)) return str(configurations)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) ydk_obj = ned.Native.Interface.Gigabitethernet() keep = string.digits + '//' ydk_obj.name = ''.join(i for i in attributes.value('name') if i in keep) shutdown = attributes.value('shutdown') if shutdown is not None: if unconfig: # Special case: unconfiguring always applies shutdown ydk_obj.shutdown = Empty() elif shutdown: ydk_obj.shutdown = Empty() else: ydk_obj.shutdown = DELETE() ipv4 = attributes.value('ipv4') if ipv4: if unconfig: ydk_obj.ip.address.primary.address = DELETE() ydk_obj.ip.address.primary.mask = DELETE() else: ydk_obj.ip.address.primary.address = str(ipv4.ip) ydk_obj.ip.address.primary.mask = str(ipv4.netmask) vrf = attributes.value('vrf') if vrf: if unconfig: ydk_obj.vrf.forwarding = DELETE() else: ydk_obj.vrf.forwarding = vrf.name # instantiate crud service crud_service = CRUDService() if apply: # create netconf connection ncp = NetconfServiceProvider(self.device) crud_service.create(ncp, ydk_obj) else: return YangConfig(device=self.device, ydk_obj=ydk_obj, ncp=NetconfServiceProvider, crud_service=crud_service.create)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): assert not kwargs, kwargs attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) if unconfig and attributes.iswildcard: with configurations.submode_context( attributes.format('vni {evpn_vni} l2', force=True)): configurations.submode_unconfig() # nxos: rd "auto" if attributes.value('evpn_vni_rd'): configurations.append_line( attributes.format('rd {evpn_vni_rd}')) for sub, attributes2 in attributes.mapping_values( 'route_target_attr', sort=True, keys=self.route_target_attr): configurations.append_block( sub.build_config(apply=False, attributes=attributes2, unconfig=unconfig)) else: with configurations.submode_context( attributes.format('vni {evpn_vni} l2', force=True)): # nxos: rd "auto" if attributes.value('evpn_vni_rd'): configurations.append_line( attributes.format('rd {evpn_vni_rd}')) for sub, attributes2 in attributes.mapping_values( 'route_target_attr', sort=True, keys=self.route_target_attr): configurations.append_block( sub.build_config(apply=False, attributes=attributes2, unconfig=unconfig)) if apply: if configurations: self.device.configure(configurations) else: return CliConfig(device=self.device, unconfig=unconfig, cli_config=configurations)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): assert not kwargs, kwargs attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) # lldp run if attributes.value('enabled'): configurations.append_line(attributes.format('lldp run')) # lldp timer <hello_timer> if attributes.value('hello_timer'): configurations.append_line( attributes.format('lldp timer {hello_timer}')) # lldp holdtime <hold_timer> if attributes.value('hold_timer'): configurations.append_line( attributes.format('lldp holdtime {hold_timer}')) # lldp reinit <reinit_timer> if attributes.value('reinit_timer'): configurations.append_line( attributes.format('lldp reinit {reinit_timer}')) # tlv select attributes sub, attributes2 = attributes.namespace('tlv_select_attr') if sub is not None: configurations.append_block( sub.build_config(apply=False, attributes=attributes2, unconfig=unconfig)) # interface attributes for sub, attributes2 in attributes.mapping_values( 'interface_attr', sort=True, keys=self.interface_attr): configurations.append_block( sub.build_config(apply=False, attributes=attributes2, unconfig=unconfig)) if apply: if configurations: self.device.configure(configurations) else: return CliConfig(device=self.device, unconfig=unconfig, cli_config=configurations)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) ospf = xr_ipv4_ospf_cfg.Ospf() process = ospf.processes.Process() id = attributes.value('ospf_name', force=True) process.process_name = str(id) ospf.processes.process.append(process) if not unconfig: process.start = Empty() # crud_service = CRUDService() # ncp = NetconfServiceProvider(self.device) # x = crud_service.read(ncp, process) # abc = YangConfig(device=self.device, ydk_obj=x, ncp=ncp, crud_service=crud_service) # print(abc) v = attributes.value('nsr') if v == True: process.nsr = "true" for sub, attributes2 in attributes.mapping_values( 'vrf_attr', sort=VrfSubAttributes._sort_key): sub.build_config(apply=False, attributes=attributes2, unconfig=unconfig, process=process, **kwargs) # instantiate crud service crud_service = CRUDService() if apply: # create netconf connection3 ncp = NetconfServiceProvider(self.device) if unconfig: crud_service.delete(ncp, process) else: crud_service.create(ncp, process) else: if unconfig: return YangConfig(device=self.device, ydk_obj=process, ncp=NetconfServiceProvider, crud_service=crud_service.delete) else: return YangConfig(device=self.device, ydk_obj=process, ncp=NetconfServiceProvider, crud_service=crud_service.create)
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)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): assert not kwargs, kwargs attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) # hardware-telemetry ssx with configurations.submode_context(attributes.format( 'hardware-telemetry ssx', force=True)): if unconfig and attributes.iswildcard: configurations.submode_unconfig() # +- DeviceAttributes # +- ExporterAttributes for sub, attributes2 in attributes.mapping_values('exporter_attr', sort=True, keys=self.exporter_attr): configurations.append_block( sub.build_config(apply=False, attributes=attributes2, unconfig=unconfig)) #+- SsxAttributes # +- RecordAttributes for sub, attributes2 in attributes.mapping_values('record_attr', sort=True, keys=self.record_attr): configurations.append_block( sub.build_config(apply=False, attributes=attributes2, unconfig=unconfig)) #+- SsxAttributes # +- MonitorAttributes for sub, attributes2 in attributes.mapping_values('monitor_attr', sort=True, keys=self.monitor_attr): configurations.append_block( sub.build_config(apply=False, attributes=attributes2, unconfig=unconfig)) if attributes.value('ssx_system_monitor'): for monitor in attributes.value('ssx_system_monitor'): attributes.obj.monitor_ssx = monitor configurations.append_line( attributes.format('ssx system monitor {monitor_ssx}')) if attributes.value('ssx_id'): configurations.append_line( attributes.format('ssx system system-id {ssx_id}')) return str(configurations)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): assert not apply attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) with configurations.submode_context( attributes.format('vlan access-map {access_map_id}', force=True)): if unconfig and attributes.iswildcard: # Never reached! configurations.submode_unconfig() # iosxe: vlan access-map <access_map_id> \ # <vlan_access_map_sequence> # A workaround that needs to be better handled if attributes.value('access_map_sequence'): configurations.append_line( attributes.format( 'no vlan access-map {access_map_id}')) configurations.append_line( attributes.format('vlan access-map {access_map_id}\ {access_map_sequence}')) # iosxe: vlan access-map <access_map_id> / action drop # iosxe: vlan access-map <access_map_id> / \ # action forward configurations.append_line( attributes.format('action {access_map_action}')) # iosxe: vlan access-map <access_map_id> / default # iosxe: vlan access-map <access_map_id> / \ # match ip address <access-list name> # iosxe: vlan access-map <access_map_id> / \ # match ipv6 address <access-list name> # iosxe: vlan access-map <access_map_id> / \ # match mac address <access-list name> if attributes.value('access_map_match'): if attributes.value('access_list'): configurations.append_line( attributes.format('match {access_map_match}\ address {access_list}')) # iosxe: vlan access-map <access_map_id> / no return str(configurations)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): assert not apply assert not kwargs, kwargs attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) self.acl_name = self.parent.acl_name with configurations.submode_context( attributes.format('interface {interface_id}', force=True)): if attributes.value( 'if_in') and 'ipv4' in self.parent.acl_type: configurations.append_line( attributes.format( 'ip access-group {acl_name} in', force=True)) elif attributes.value( 'if_in') and 'ipv6' in self.parent.acl_type: configurations.append_line( attributes.format( 'ipv6 traffic-filter {acl_name} in', force=True)) elif attributes.value( 'if_in') and 'eth' in self.parent.acl_type: configurations.append_line( attributes.format( 'mac access-group {acl_name} in', force=True)) if attributes.value( 'if_out') and 'ipv4' in self.parent.acl_type: configurations.append_line( attributes.format( 'ip access-group {acl_name} out', force=True)) elif attributes.value( 'if_out') and 'ipv6' in self.parent.acl_type: configurations.append_line( attributes.format( 'ipv6 traffic-filter {acl_name} out', force=True)) return str(configurations)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) interface_configurations = xr_ifmgr_cfg.InterfaceConfigurations() interface_configuration = interface_configurations.InterfaceConfiguration( ) interface_configuration.active = "act" interface_configuration.interface_name = attributes.value('name') if unconfig and attributes.iswildcard: interface_configuration = DELETE() else: shutdown = attributes.value('shutdown') if shutdown is not None: if unconfig: # Special case: unconfiguring always applies shutdown interface_configuration.shutdown = Empty() elif shutdown: interface_configuration.shutdown = Empty() else: interface_configuration.shutdown = DELETE() ipv4 = attributes.value('ipv4') primary = interface_configuration.ipv4_network.addresses.Primary() if ipv4: primary.address = str(ipv4.ip) primary.netmask = str(ipv4.netmask) vrf = attributes.value('vrf') if vrf: interface_configuration.vrf = vrf.name # instantiate crud service crud_service = CRUDService() if apply: # create netconf connection ncp = NetconfServiceProvider(self.device) return crud_service.create(ncp, interface_configuration) else: return YangConfig(device=self.device, unconfig=unconfig, ncp=NetconfServiceProvider, interface_configuration=interface_configuration, crud_service=crud_service.create)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): assert not apply assert not kwargs, kwargs attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) # acl_type # 'ipv4-acl-type','ipv6-acl-type','eth-acl-type if attributes.value('acl_type'): if 'ipv4-acl-type' in attributes.value('acl_type'): self.cmd = 'ip access-list extended ' elif 'ipv6-acl-type' in attributes.value('acl_type'): self.cmd = 'ipv6 access-list ' elif 'eth-acl-type' in attributes.value('acl_type'): self.cmd = 'mac access-list extended ' else: self.cmd = None else: self.cmd = None with configurations.submode_context( attributes.format('{cmd}{name}'.format( cmd=self.cmd, name=self.acl_name), force=True)): if unconfig and attributes.iswildcard: configurations.submode_unconfig() self.acl_type = self.parent.acl_type # ace attributes for sub, attributes2 in attributes.mapping_values( 'ace_attr', sort=True, keys=self.ace_attr): configurations.append_block( sub.build_config(apply=False, attributes=attributes2, unconfig=unconfig)) # interface attributes for sub, attributes2 in attributes.mapping_values( 'interface_attr', sort=True, keys=self.interface_attr): configurations.append_block( sub.build_config(apply=False, attributes=attributes2, unconfig=unconfig)) return str(configurations)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): assert not apply attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) # <protocol> prefix-list <prefix_set_name> permit <prefix> [ge length | le length] if attributes.value('protocol'): ip = attributes.value('protocol').value cfg_str = '{}'.format(ip) if ip == 'ipv6' else 'ip' else: return str(configurations) # prefix-list <prefix_set_name> cfg_str += ' prefix-list {}'.format(self.name) # prefix <prefix> cfg_str += ' permit {prefix}'.format(prefix=self.prefix) if not attributes.value('maxlength_range_attr'): configurations.append_line(cfg_str) return str(configurations) # get range edge value from the maxlength_range [min_val, max_val] = self.maxlength_range.split('..') min_val = int(min_val) max_val = int(max_val) # get mask of prefix to compare mask = int(self.prefix.split('/')[1]) # compare with range edge values if mask == min_val: if min_val < max_val: cfg_str += ' le {}'.format(max_val) elif mask < min_val: if max_val == 32 or max_val == 128: cfg_str += ' ge {}'.format(min_val) else: cfg_str += ' ge {a} le {b}'.format(a=min_val, b=max_val) configurations.append_line(cfg_str) return str(configurations)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): assert not apply attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) # iosxr: evpn / interface Bundle-Ether1 / ethernet-segment (config-evpn-ac-es) with configurations.submode_context('ethernet-segment'): if not attributes.value('enabled', force=True): configurations.submode_cancel() if unconfig and attributes.iswildcard: configurations.submode_unconfig() # iosxr: evpn / interface Bundle-Ether1 / ethernet-segment / backbone-source-mac aaaa.bbbb.cccc configurations.append_line( attributes.format( 'backbone-source-mac {backbone_source_mac}')) # iosxr: evpn / interface Bundle-Ether1 / ethernet-segment / bgp route-target aaaa.bbbb.cccc ns, attributes2 = attributes.namespace('bgp') if ns is not None: configurations.append_block( ns.build_config(apply=False, attributes=attributes2, unconfig=unconfig, **kwargs)) # iosxr: evpn / interface Bundle-Ether1 / ethernet-segment / force single-homed if attributes.value('force_single_homed'): configurations.append_line('force single-homed') # iosxr: evpn / interface Bundle-Ether1 / ethernet-segment / identifier type 0 00.11.22.33.44.55.66.77.88 configurations.append_line( attributes.format( 'identifier type {esi.type} {esi.dotted}')) # iosxr: evpn / interface Bundle-Ether1 / ethernet-segment / load-balancing-mode single-active configurations.append_line( attributes.format( 'load-balancing-mode {load_balancing_mode}')) # iosxr: evpn / interface Bundle-Ether1 / ethernet-segment / service-carving manual (config-evpn-ac-es-vlan-man) # iosxr: evpn / interface Bundle-Ether1 / ethernet-segment / service-carving manual / primary someword secondary someword2 return str(configurations)
def build_config(self, apply=True, attributes=None, unconfig=False, **kwargs): attributes = AttributesHelper(self, attributes) configurations = CliConfigBuilder(unconfig=unconfig) ydk_obj = ned.Native.Interface.Loopback() # name is a mandatory arguments keep = string.digits ydk_obj.name = int(''.join(i for i in attributes.value('name') if i in keep)) if unconfig and attributes.iswildcard: pass else: ipv4 = attributes.value('ipv4') if ipv4: ydk_obj.ip.address.primary.address = str(ipv4.ip) ydk_obj.ip.address.primary.mask = str(ipv4.netmask) vrf = attributes.value('vrf') if vrf: ydk_obj.vrf.forwarding = vrf.name # instantiate crud service crud_service = CRUDService() if apply: # create netconf connection ncp = NetconfServiceProvider(self.device) if unconfig: crud_service.delete(ncp, ydk_obj) else: crud_service.create(ncp, ydk_obj) else: if unconfig: return YangConfig(device=self.device, unconfig=unconfig, ncp=NetconfServiceProvider, ydk_obj=ydk_obj, crud_service=crud_service.delete) else: return YangConfig(device=self.device, unconfig=unconfig, ncp=NetconfServiceProvider, ydk_obj=ydk_obj, crud_service=crud_service.create)
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)