Template funtions for CCC
Spring til navigation
Spring til søgning
Some usefull template funtions for Cisco Catalyst Center / DNAc / DNA Center.
{#
Function to convert IP/(CIDR|MASK) or IP,(CIDR|MASK) to the network adress
If IP/(CIDR1|MASK1),(CIDR2|MASK2) then (CIDR2|MASK2) is used.
The MASK can contain holes, like 255.0.255.0
#}
{%- macro ip_to_net(ip__cidr_or_mask, cidr_or_mask) -%}
{%- set ip = ip__cidr_or_mask.split('[/]')[0] -%}
{%- set ip_parts = ip.split('[.]') -%}
{%- if cidr_or_mask is not defined -%}
{%- set cidr_or_mask = ip__cidr_or_mask.split('[/]')[1] -%}
{%- endif -%}
{%- set subnet_masks = [
[0,0,0,0],
[128,0,0,0],
[192,0,0,0],
[224,0,0,0],
[240,0,0,0],
[248,0,0,0],
[252,0,0,0],
[254,0,0,0],
[255,0,0,0],
[255,128,0,0],
[255,192,0,0],
[255,224,0,0],
[255,240,0,0],
[255,248,0,0],
[255,252,0,0],
[255,254,0,0],
[255,255,0,0],
[255,255,128,0],
[255,255,192,0],
[255,255,224,0],
[255,255,240,0],
[255,255,248,0],
[255,255,252,0],
[255,255,254,0],
[255,255,255,0],
[255,255,255,128],
[255,255,255,192],
[255,255,255,224],
[255,255,255,240],
[255,255,255,248],
[255,255,255,252],
[255,255,255,254],
[255,255,255,255]
] -%}
{%- if cidr_or_mask | int(-1) != -1 -%}
{%- set mask_parts = subnet_masks[cidr_or_mask] -%}
{%- else -%}
{%- set mask_parts = cidr_or_mask.split('[.]') -%}
{%- endif -%}
{%- set result = [] -%}
{%- for i in range(0, 4) -%}
{%- set result_parts = ip_parts[i] | int // ( 256 - mask_parts[i] | int ) * ( 256 - mask_parts[i] | int ) -%}
{%- do result.append(result_parts) -%}
{%- endfor -%}
{{result | join('.')}}
{%- endmacro -%}
{#
Function to check if IP is ( NET/(CIDR|MASK) or NET,(CIDR|MASK) )
If NET/(CIDR1|MASK1),(CIDR2|MASK2) then (CIDR2|MASK2) is used.
The MASK can contain holes, like 255.0.255.0
#}
{%- macro ip_in_net(ip, net, cidr_or_mask) -%}
{%- set ip = ip.split('[/]')[0] -%}
{%- if cidr_or_mask is not defined -%}
{%- set cidr_or_mask = net.split('[/]')[1] -%}
{%- endif -%}
{%- set net = net.split('[/]')[0] -%}
{%- if ip_to_net(ip,cidr_or_mask) == ip_to_net(net,cidr_or_mask) -%}
True
{%- endif -%}
{%- endmacro -%}