junipernetworks.junos.junos_bgp_address_family 模块 – 管理 Junos 设备上接口的 BGP 地址族属性。

注意

此模块是 junipernetworks.junos 集合(版本 9.1.0)的一部分。

如果您正在使用 ansible 包,则可能已经安装了此集合。它不包含在 ansible-core 中。要检查是否已安装,请运行 ansible-galaxy collection list

要安装它,请使用:ansible-galaxy collection install junipernetworks.junos。您需要其他要求才能使用此模块,请参阅 要求 了解详细信息。

要在 Playbook 中使用它,请指定:junipernetworks.junos.junos_bgp_address_family

junipernetworks.junos 1.3.0 中的新增功能

概要

  • 管理 Junos 网络设备上接口的 BGP 地址族属性。

要求

以下要求需要在执行此模块的主机上满足。

  • ncclient (>=v0.6.4)

  • xmltodict (>=0.12.0)

参数

参数

注释

config

字典

提供的链接 BGP 地址族字典。

address_family

列表 / elements=dictionary

启用地址族并进入其配置模式。

af_type

列表 / elements=dictionary

ipv4 的地址族类型。

accepted_prefix_limit

字典

指定从对等方接受的最大前缀数的限制。

forever

布尔值

使对等方空闲,直到用户干预。

选择

  • false

  • true

idle_timeout

布尔值

设置空闲超时节点。

选择

  • false

  • true

idle_timeout_value

整数

指定尝试重新启动对等方之前的超时时间。

limit_threshold

整数

指定前缀限制的拆除百分比以启动警告。

maximum

整数

指定从对等方接受的最大前缀数。

teardown

布尔值

达到限制时清除对等连接。

选择

  • false

  • true

add_path

字典

向对等方通告多个路径。

receive

布尔值

从对等方接收多个路径。

选择

  • false

  • true

send

字典

向对等方发送多个路径。

include_backup_path

整数

指定要通告的备份路径数。

multipath

布尔值

仅包括多路径贡献者路由。

选择

  • false

  • true

path_count

整数 / 必需

仅包括多路径贡献者路由。

path_selection_mode

字典

配置如何选择添加路径路由。

all_paths

布尔值

通告路径计数允许的所有路径。

选择

  • false

  • true

equal_cost_paths

布尔值

通告等成本路径。

选择

  • false

  • true

prefix_policy

字符串

仅对与策略匹配的前缀执行添加路径。

aggregate_label

字典

聚合具有相同 FEC 的传入路由的标签。

community

字符串

标识传入路由的 FEC 的社区 C。

set

布尔值

设置具有相同 FEC 的传入路由的聚合标签

选择

  • false

  • true

aigp

字典

允许发送和接收 AIGP 属性。

disable

布尔值

不允许发送和接收 AIGP 属性。

选择

  • false

  • true

set

布尔值

设置 AIGP。

选择

  • false

  • true

damping

布尔值

启用路由抖动抑制。

选择

  • false

  • true

defer_initial_multipath_build

字典

将初始多路径构建延迟到收到 EOR 时。

maximum_delay

整数

对等方启动后最大延迟(秒)多路径构建。

set

布尔值

设置延迟初始多路径构建。

选择

  • false

  • true

delay_route_advertisements

字典

将此族的路由更新延迟到 FIB 同步。

max_delay_route_age

整数

设置最大延迟通告路由年龄。

max_delay_routing_uptime

整数

设置最大延迟通告路由年龄。

min_delay_inbound_convergence

整数

在源对等方发送所有路由后,设置最小延迟通告。

min_delay_routing_uptime

整数

设置最小延迟通告路由年龄。

set

布尔值

设置延迟路由通告。

选择

  • false

  • true

entropy_label

字典

将熵标签用于支持熵标签的 BGP LSP。

import

字符串

选择要使用熵标签的 BGP LSP 的策略。

no_next_hop_validation

布尔值

不验证下一跳字段是否与路由下一跳匹配。

选择

  • false

  • true

set

布尔值

设置 entropy-label 属性。

选择

  • false

  • true

explicit_null

字典

通告显式空值。

connected_only

布尔值

仅对连接的路由通告显式空值。

选择

  • false

  • true

set

布尔值

设置 explicit-null 属性。

选择

  • false

  • true

extended_nexthop

布尔值

启用扩展下一跳编码。

选择

  • false

  • true

extended_nexthop_color

布尔值

使用扩展颜色下一跳进行解析。

选择

  • false

  • true

graceful_restart_forwarding_state_bit

字符串

指定 BGP 平滑重启选项。

选择

  • "from-fib"

  • "set"

legacy_redirect_ip_action

字典

配置旧版重定向到 IP 支持。

receive

布尔值

接受旧版编码的重定向到 IP 操作属性

选择

  • false

  • true

send

布尔值

将重定向操作通告为旧版重定向属性。

选择

  • false

  • true

set

布尔值

设置 legacy-redirect-ip-action。

选择

  • false

  • true

local_ipv4_address

字符串

指定本地 IPv4 地址。

loops

整数

允许在接收到的 AS 路径中出现本地 AS。

no_install

布尔值

不要在转发中安装接收到的路由。

选择

  • false

  • true

no_validate

字符串

绕过匹配策略的路由的验证程序。

output_queue_priority_expedited

布尔值

快速队列;最高优先级。

选择

  • false

  • true

output_queue_priority_priority

整数

输出队列优先级;越高越好。

per_group_label

布尔值

为每个组播发带有唯一标签的前缀。

选择

  • false

  • true

per_prefix_label

布尔值

为每个播发的前缀分配唯一标签。

选择

  • false

  • true

prefix_limit

字典

限制来自对等体的最大前缀数。

forever

布尔值

使对等方空闲,直到用户干预。

选择

  • false

  • true

idle_timeout

布尔值

设置空闲超时节点。

选择

  • false

  • true

idle_timeout_value

整数

指定尝试重新启动对等方之前的超时时间。

limit_threshold

整数

启动警告的前缀限制的百分比。

maximum

整数

指定来自对等体的最大前缀数。

teardown

布尔值

达到限制时清除对等连接。

选择

  • false

  • true

resolve_vpn

布尔值

同时在 inet.3 中安装接收到的 NLRI。

选择

  • false

  • true

rib

字符串

选择由标签单播路由使用的表。

选择

  • "inet.3"

ribgroup_name

字符串

路由表组的名称。

route_refresh_priority_expedited

布尔值

快速队列;最高优先级。

选择

  • false

  • true

route_refresh_priority_priority

整数

输出队列优先级;越高越好。

secondary_independent_resolution

布尔值

在 VRF 表中独立于 VPN FLOW 路由解析 FLOW 路由。

选择

  • false

  • true

set

布尔值

设置 NLRI。

选择

  • false

  • true

strip_nexthop

布尔值

从传出的流更新中剥离下一跳。

选择

  • false

  • true

topology

列表 / elements=dictionary

多拓扑路由表。

community

list / elements=string

用于标识多拓扑路由的社区。

name

字符串

指定拓扑名称。

traffic_statistics

字典

收集 BGP 标签交换路径的统计信息

file

字典

统计文件选项。

filename

字符串

写入跟踪信息的文件名。

files

整数

最大跟踪文件数。

no_world_readable

布尔值

不允许任何用户读取日志文件。

选择

  • false

  • true

size

整数

最大跟踪文件大小。

world_readable

布尔值

不允许任何用户读取日志文件。

选择

  • false

  • true

interval

整数

收集统计信息的时间(秒)。

labeled_path

布尔值

启用入口标签路径统计信息。

选择

  • false

  • true

set

布尔值

设置 traffic-statistics。

选择

  • false

  • true

type

字符串

指定 NLRI 的类型。

选择

  • "any"

  • "flow"

  • "labeled-unicast"

  • "multicast"

  • "segment-routing-te"

  • "unicast"

  • "signaling"

  • "auto-discovery-mspw"

  • "auto-discovery-only"

withdraw_priority_expedited

布尔值

快速队列;最高优先级。

选择

  • false

  • true

withdraw_priority_priority

整数

输出队列优先级;越高越好。

afi

字符串

地址族。

选择

  • "evpn"

  • "inet"

  • "inet-mdt"

  • "inet-mvpn"

  • "inet-vpn"

  • "inet6"

  • "inet6-mvpn"

  • "inet6-vpn"

  • "iso-vpn"

  • "l2vpn"

  • "route-target"

  • "traffic-engineering"

groups

列表 / elements=dictionary

指定组的地址族配置。

address_family

列表 / elements=dictionary

启用地址族并进入其配置模式。

af_type

列表 / elements=dictionary

ipv4 的地址族类型。

accepted_prefix_limit

字典

指定从对等方接受的最大前缀数的限制。

forever

布尔值

使对等方空闲,直到用户干预。

选择

  • false

  • true

idle_timeout

布尔值

设置空闲超时节点。

选择

  • false

  • true

idle_timeout_value

整数

指定尝试重新启动对等方之前的超时时间。

limit_threshold

整数

指定前缀限制的拆除百分比以启动警告。

maximum

整数

指定从对等方接受的最大前缀数。

teardown

布尔值

达到限制时清除对等连接。

选择

  • false

  • true

add_path

字典

向对等方通告多个路径。

receive

布尔值

从对等方接收多个路径。

选择

  • false

  • true

send

字典

向对等方发送多个路径。

include_backup_path

整数

指定要通告的备份路径数。

multipath

布尔值

仅包括多路径贡献者路由。

选择

  • false

  • true

path_count

整数 / 必需

仅包括多路径贡献者路由。

path_selection_mode

字典

配置如何选择添加路径路由。

all_paths

布尔值

通告路径计数允许的所有路径。

选择

  • false

  • true

equal_cost_paths

布尔值

通告等成本路径。

选择

  • false

  • true

prefix_policy

字符串

仅对与策略匹配的前缀执行添加路径。

aggregate_label

字典

聚合具有相同 FEC 的传入路由的标签。

community

字符串

标识传入路由的 FEC 的社区 C。

set

布尔值

设置具有相同 FEC 的传入路由的聚合标签

选择

  • false

  • true

aigp

字典

允许发送和接收 AIGP 属性。

disable

布尔值

不允许发送和接收 AIGP 属性。

选择

  • false

  • true

set

布尔值

设置 AIGP。

选择

  • false

  • true

damping

布尔值

启用路由抖动抑制。

选择

  • false

  • true

defer_initial_multipath_build

字典

将初始多路径构建延迟到收到 EOR 时。

maximum_delay

整数

对等方启动后最大延迟(秒)多路径构建。

set

布尔值

设置延迟初始多路径构建。

选择

  • false

  • true

delay_route_advertisements

字典

将此族的路由更新延迟到 FIB 同步。

max_delay_route_age

整数

设置最大延迟通告路由年龄。

max_delay_routing_uptime

整数

设置最大延迟通告路由年龄。

min_delay_inbound_convergence

整数

在源对等方发送所有路由后,设置最小延迟通告。

min_delay_routing_uptime

整数

设置最小延迟通告路由年龄。

set

布尔值

设置延迟路由通告。

选择

  • false

  • true

entropy_label

字典

将熵标签用于支持熵标签的 BGP LSP。

import

字符串

选择要使用熵标签的 BGP LSP 的策略。

no_next_hop_validation

布尔值

不验证下一跳字段是否与路由下一跳匹配。

选择

  • false

  • true

set

布尔值

设置 entropy-label 属性。

选择

  • false

  • true

explicit_null

字典

通告显式空值。

connected_only

布尔值

仅对连接的路由通告显式空值。

选择

  • false

  • true

set

布尔值

设置 explicit-null 属性。

选择

  • false

  • true

extended_nexthop

布尔值

启用扩展下一跳编码。

选择

  • false

  • true

extended_nexthop_color

布尔值

使用扩展颜色下一跳进行解析。

选择

  • false

  • true

graceful_restart_forwarding_state_bit

字符串

指定 BGP 平滑重启选项。

选择

  • "from-fib"

  • "set"

legacy_redirect_ip_action

字典

配置旧版重定向到 IP 支持。

receive

布尔值

接受旧版编码的重定向到 IP 操作属性

选择

  • false

  • true

send

布尔值

将重定向操作通告为旧版重定向属性。

选择

  • false

  • true

set

布尔值

设置 legacy-redirect-ip-action。

选择

  • false

  • true

local_ipv4_address

字符串

指定本地 IPv4 地址。

loops

整数

允许在接收到的 AS 路径中出现本地 AS。

no_install

布尔值

不要在转发中安装接收到的路由。

选择

  • false

  • true

no_validate

字符串

绕过匹配策略的路由的验证程序。

output_queue_priority_expedited

布尔值

快速队列;最高优先级。

选择

  • false

  • true

output_queue_priority_priority

整数

输出队列优先级;越高越好。

per_group_label

布尔值

为每个组播发带有唯一标签的前缀。

选择

  • false

  • true

per_prefix_label

布尔值

为每个播发的前缀分配唯一标签。

选择

  • false

  • true

prefix_limit

字典

限制来自对等体的最大前缀数。

forever

布尔值

使对等方空闲,直到用户干预。

选择

  • false

  • true

idle_timeout

布尔值

设置空闲超时节点。

选择

  • false

  • true

idle_timeout_value

整数

指定尝试重新启动对等方之前的超时时间。

limit_threshold

整数

启动警告的前缀限制的百分比。

maximum

整数

指定来自对等体的最大前缀数。

teardown

布尔值

达到限制时清除对等连接。

选择

  • false

  • true

resolve_vpn

布尔值

同时在 inet.3 中安装接收到的 NLRI。

选择

  • false

  • true

rib

字符串

选择由标签单播路由使用的表。

选择

  • "inet.3"

ribgroup_name

字符串

路由表组的名称。

route_refresh_priority_expedited

布尔值

快速队列;最高优先级。

选择

  • false

  • true

route_refresh_priority_priority

整数

输出队列优先级;越高越好。

secondary_independent_resolution

布尔值

在 VRF 表中独立于 VPN FLOW 路由解析 FLOW 路由。

选择

  • false

  • true

set

布尔值

设置 NLRI。

选择

  • false

  • true

strip_nexthop

布尔值

从传出的流更新中剥离下一跳。

选择

  • false

  • true

topology

列表 / elements=dictionary

多拓扑路由表。

community

list / elements=string

用于标识多拓扑路由的社区。

name

字符串

指定拓扑名称。

traffic_statistics

字典

收集 BGP 标签交换路径的统计信息

file

字典

统计文件选项。

filename

字符串

写入跟踪信息的文件名。

files

整数

最大跟踪文件数。

no_world_readable

布尔值

不允许任何用户读取日志文件。

选择

  • false

  • true

size

整数

最大跟踪文件大小。

world_readable

布尔值

不允许任何用户读取日志文件。

选择

  • false

  • true

interval

整数

收集统计信息的时间(秒)。

labeled_path

布尔值

启用入口标签路径统计信息。

选择

  • false

  • true

set

布尔值

设置 traffic-statistics。

选择

  • false

  • true

type

字符串

指定 NLRI 的类型。

选择

  • "any"

  • "flow"

  • "labeled-unicast"

  • "multicast"

  • "segment-routing-te"

  • "unicast"

  • "signaling"

  • "auto-discovery-mspw"

  • "auto-discovery-only"

withdraw_priority_expedited

布尔值

快速队列;最高优先级。

选择

  • false

  • true

withdraw_priority_priority

整数

输出队列优先级;越高越好。

afi

字符串

地址族。

选择

  • "evpn"

  • "inet"

  • "inet-mdt"

  • "inet-mvpn"

  • "inet-vpn"

  • "inet6"

  • "inet6-mvpn"

  • "inet6-vpn"

  • "iso-vpn"

  • "l2vpn"

  • "route-target"

  • "traffic-engineering"

name

字符串

指定组的名称

neighbors

列表 / elements=dictionary

指定每个邻居的地址族配置。

address_family

列表 / elements=dictionary

启用地址族并进入其配置模式。

af_type

列表 / elements=dictionary

ipv4 的地址族类型。

accepted_prefix_limit

字典

指定从对等方接受的最大前缀数的限制。

forever

布尔值

使对等方空闲,直到用户干预。

选择

  • false

  • true

idle_timeout

布尔值

设置空闲超时节点。

选择

  • false

  • true

idle_timeout_value

整数

指定尝试重新启动对等方之前的超时时间。

limit_threshold

整数

指定前缀限制的拆除百分比以启动警告。

maximum

整数

指定从对等方接受的最大前缀数。

teardown

布尔值

达到限制时清除对等连接。

选择

  • false

  • true

add_path

字典

向对等方通告多个路径。

receive

布尔值

从对等方接收多个路径。

选择

  • false

  • true

send

字典

向对等方发送多个路径。

include_backup_path

整数

指定要通告的备份路径数。

multipath

布尔值

仅包括多路径贡献者路由。

选择

  • false

  • true

path_count

整数 / 必需

仅包括多路径贡献者路由。

path_selection_mode

字典

配置如何选择添加路径路由。

all_paths

布尔值

通告路径计数允许的所有路径。

选择

  • false

  • true

equal_cost_paths

布尔值

通告等成本路径。

选择

  • false

  • true

prefix_policy

字符串

仅对与策略匹配的前缀执行添加路径。

aggregate_label

字典

聚合具有相同 FEC 的传入路由的标签。

community

字符串

标识传入路由的 FEC 的社区 C。

set

布尔值

设置具有相同 FEC 的传入路由的聚合标签

选择

  • false

  • true

aigp

字典

允许发送和接收 AIGP 属性。

disable

布尔值

不允许发送和接收 AIGP 属性。

选择

  • false

  • true

set

布尔值

设置 AIGP。

选择

  • false

  • true

damping

布尔值

启用路由抖动抑制。

选择

  • false

  • true

defer_initial_multipath_build

字典

将初始多路径构建延迟到收到 EOR 时。

maximum_delay

整数

对等方启动后最大延迟(秒)多路径构建。

set

布尔值

设置延迟初始多路径构建。

选择

  • false

  • true

delay_route_advertisements

字典

将此族的路由更新延迟到 FIB 同步。

max_delay_route_age

整数

设置最大延迟通告路由年龄。

max_delay_routing_uptime

整数

设置最大延迟通告路由年龄。

min_delay_inbound_convergence

整数

在源对等方发送所有路由后,设置最小延迟通告。

min_delay_routing_uptime

整数

设置最小延迟通告路由年龄。

set

布尔值

设置延迟路由通告。

选择

  • false

  • true

entropy_label

字典

将熵标签用于支持熵标签的 BGP LSP。

import

字符串

选择要使用熵标签的 BGP LSP 的策略。

no_next_hop_validation

布尔值

不验证下一跳字段是否与路由下一跳匹配。

选择

  • false

  • true

set

布尔值

设置 entropy-label 属性。

选择

  • false

  • true

explicit_null

字典

通告显式空值。

connected_only

布尔值

仅对连接的路由通告显式空值。

选择

  • false

  • true

set

布尔值

设置 explicit-null 属性。

选择

  • false

  • true

extended_nexthop

布尔值

启用扩展下一跳编码。

选择

  • false

  • true

extended_nexthop_color

布尔值

使用扩展颜色下一跳进行解析。

选择

  • false

  • true

graceful_restart_forwarding_state_bit

字符串

指定 BGP 平滑重启选项。

选择

  • "from-fib"

  • "set"

legacy_redirect_ip_action

字典

配置旧版重定向到 IP 支持。

receive

布尔值

接受旧版编码的重定向到 IP 操作属性

选择

  • false

  • true

send

布尔值

将重定向操作通告为旧版重定向属性。

选择

  • false

  • true

set

布尔值

设置 legacy-redirect-ip-action。

选择

  • false

  • true

local_ipv4_address

字符串

指定本地 IPv4 地址。

loops

整数

允许在接收到的 AS 路径中出现本地 AS。

no_install

布尔值

不要在转发中安装接收到的路由。

选择

  • false

  • true

no_validate

字符串

绕过匹配策略的路由的验证程序。

output_queue_priority_expedited

布尔值

快速队列;最高优先级。

选择

  • false

  • true

output_queue_priority_priority

整数

输出队列优先级;越高越好。

per_group_label

布尔值

为每个组播发带有唯一标签的前缀。

选择

  • false

  • true

per_prefix_label

布尔值

为每个播发的前缀分配唯一标签。

选择

  • false

  • true

prefix_limit

字典

限制来自对等体的最大前缀数。

forever

布尔值

使对等方空闲,直到用户干预。

选择

  • false

  • true

idle_timeout

布尔值

设置空闲超时节点。

选择

  • false

  • true

idle_timeout_value

整数

指定尝试重新启动对等方之前的超时时间。

limit_threshold

整数

启动警告的前缀限制的百分比。

maximum

整数

指定来自对等体的最大前缀数。

teardown

布尔值

达到限制时清除对等连接。

选择

  • false

  • true

resolve_vpn

布尔值

同时在 inet.3 中安装接收到的 NLRI。

选择

  • false

  • true

rib

字符串

选择由标签单播路由使用的表。

选择

  • "inet.3"

ribgroup_name

字符串

路由表组的名称。

route_refresh_priority_expedited

布尔值

快速队列;最高优先级。

选择

  • false

  • true

route_refresh_priority_priority

整数

输出队列优先级;越高越好。

secondary_independent_resolution

布尔值

在 VRF 表中独立于 VPN FLOW 路由解析 FLOW 路由。

选择

  • false

  • true

set

布尔值

设置 NLRI。

选择

  • false

  • true

strip_nexthop

布尔值

从传出的流更新中剥离下一跳。

选择

  • false

  • true

topology

列表 / elements=dictionary

多拓扑路由表。

community

list / elements=string

用于标识多拓扑路由的社区。

name

字符串

指定拓扑名称。

traffic_statistics

字典

收集 BGP 标签交换路径的统计信息

file

字典

统计文件选项。

filename

字符串

写入跟踪信息的文件名。

files

整数

最大跟踪文件数。

no_world_readable

布尔值

不允许任何用户读取日志文件。

选择

  • false

  • true

size

整数

最大跟踪文件大小。

world_readable

布尔值

不允许任何用户读取日志文件。

选择

  • false

  • true

interval

整数

收集统计信息的时间(秒)。

labeled_path

布尔值

启用入口标签路径统计信息。

选择

  • false

  • true

set

布尔值

设置 traffic-statistics。

选择

  • false

  • true

type

字符串

指定 NLRI 的类型。

选择

  • "any"

  • "flow"

  • "labeled-unicast"

  • "multicast"

  • "segment-routing-te"

  • "unicast"

  • "signaling"

  • "auto-discovery-mspw"

  • "auto-discovery-only"

withdraw_priority_expedited

布尔值

快速队列;最高优先级。

选择

  • false

  • true

withdraw_priority_priority

整数

输出队列优先级;越高越好。

afi

字符串

地址族。

选择

  • "evpn"

  • "inet"

  • "inet-mdt"

  • "inet-mvpn"

  • "inet-vpn"

  • "inet6"

  • "inet6-mvpn"

  • "inet6-vpn"

  • "iso-vpn"

  • "l2vpn"

  • "route-target"

  • "traffic-engineering"

neighbor_address

字符串

指定邻居地址。

running_config

字符串

此选项仅用于状态parsed

此选项的值应是通过执行命令 show protocols bgp 从 Junos 设备接收到的输出。

状态 parsedrunning_config 选项读取配置,并根据资源模块的 argspec 将其转换为 Ansible 结构化数据,然后该值在结果的 parsed 键中返回

state

字符串

配置应保留的状态。

状态 deleted 仅删除此模块管理的 BGP 地址族属性,而不完全否定 BGP 邻居地址族。因此,保留 BGP 组邻居上下文下的地址族相关配置。

要删除与邻居关联的地址族,请使用 junipernetworks.junos.junos_bgp_neighbor_address_family 模块进行预先清理。

有关更多详细信息,请参阅示例。

选择

  • "merged" ← (默认)

  • "replaced"

  • "overridden"

  • "deleted"

  • "parsed"

  • "gathered"

  • "rendered"

备注

注意

  • 此模块要求在被管理的设备上启用 netconf 系统服务。

  • 此模块与连接 netconf 一起使用。请参阅 Junos OS 平台选项

  • 已针对 JunOS v18.4R1 进行测试

示例

# Using merged
#
# Before state
# ------------
#
# admin# show protocols bgp
#
# [edit]

- name: Merge Junos BGP address family configuration
  junipernetworks.junos.junos_bgp_address_family:
    config:
      address_family:
        - afi: 'evpn'
          af_type:
            - type: 'signaling'
              accepted_prefix_limit:
                maximum: 20
                limit_threshold: 98
                idle_timeout_value: 2001
              damping: true
              defer_initial_multipath_build:
                maximum_delay: 2
        - afi: 'inet'
          af_type:
            - type: 'flow'
              legacy_redirect_ip_action:
                send: true
                receive: true
              loops: 4
              no_install: true
              output_queue_priority_expedited: true
              secondary_independent_resolution: true

            - type: 'unicast'
              extended_nexthop: true
              extended_nexthop_color: true
              local_ipv4_address: '9.9.9.9'

            - type: 'labeled-unicast'
              entropy_label:
                no_next_hop_validation: true
              explicit_null:
                connected_only: true
              per_prefix_label: true
              per_group_label: true
              prefix_limit:
                maximum: 20
                limit_threshold: 99
                forever: true
              resolve_vpn: true
              rib: 'inet.3'
              route_refresh_priority_expedited: true
              route_refresh_priority_priority: 3

            - type: 'any'
              accepted_prefix_limit:
                maximum: 20
                limit_threshold: 99
                idle_timeout_value: 2000
              damping: true
              defer_initial_multipath_build:
                maximum_delay: 2
              delay_route_advertisements:
                max_delay_route_age: 20
                max_delay_routing_uptime: 32000
                min_delay_inbound_convergence: 32000
                min_delay_routing_uptime: 23000
              graceful_restart_forwarding_state_bit: 'from-fib'
    state: merged

# Task Output:
# ------------
#
# before: {}
#
# commands:
# - <nc:protocols xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"><nc:bgp><nc:family><nc:evpn><nc:signaling>
#   <nc:accepted-prefix-limit><nc:maximum>20</nc:maximum><nc:teardown><nc:limit-threshold>98</nc:limit-threshold>
#   <nc:idle-timeout><nc:timeout>2001</nc:timeout></nc:idle-timeout></nc:teardown></nc:accepted-prefix-limit>
#   <nc:damping/><nc:defer-initial-multipath-build><nc:maximum-delay>2</nc:maximum-delay>
#   </nc:defer-initial-multipath-build></nc:signaling></nc:evpn><nc:inet><nc:flow><nc:legacy-redirect-ip-action>
#   <nc:send/><nc:receive/></nc:legacy-redirect-ip-action><nc:loops>4</nc:loops><nc:no-install/>
#   <nc:output-queue-priority><nc:expedited/></nc:output-queue-priority><nc:secondary-independent-resolution/>
#   </nc:flow><nc:unicast><nc:extended-nexthop/><nc:extended-nexthop-color/><nc:local-ipv4-address>9.9.9.9</nc:local-ipv4-address>
#   </nc:unicast><nc:labeled-unicast><nc:entropy-label><nc:no-next-hop-validation/></nc:entropy-label>
#   <nc:explicit-null><nc:connected-only/></nc:explicit-null><nc:per-prefix-label/><nc:per-group-label/>
#   <nc:prefix-limit><nc:maximum>20</nc:maximum><nc:teardown>99<nc:idle-timeout><nc:forever/></nc:idle-timeout>
#   </nc:teardown></nc:prefix-limit><nc:resolve-vpn/><nc:rib><nc:inet.3/></nc:rib><nc:route-refresh-priority>
#   <nc:expedited/><nc:priority>3</nc:priority></nc:route-refresh-priority></nc:labeled-unicast><nc:any>
#   <nc:accepted-prefix-limit><nc:maximum>20</nc:maximum><nc:teardown><nc:limit-threshold>99</nc:limit-threshold>
#   <nc:idle-timeout><nc:timeout>2000</nc:timeout></nc:idle-timeout></nc:teardown></nc:accepted-prefix-limit>
#   <nc:damping/><nc:defer-initial-multipath-build><nc:maximum-delay>2</nc:maximum-delay></nc:defer-initial-multipath-build>
#   <nc:delay-route-advertisements><nc:maximum-delay><nc:route-age>20</nc:route-age><nc:routing-uptime>32000</nc:routing-uptime>
#   </nc:maximum-delay><nc:minimum-delay><nc:inbound-convergence>32000</nc:inbound-convergence>
#   <nc:routing-uptime>23000</nc:routing-uptime></nc:minimum-delay></nc:delay-route-advertisements><nc:graceful-restart>
#   <nc:forwarding-state-bit>from-fib</nc:forwarding-state-bit></nc:graceful-restart></nc:any></nc:inet></nc:family>
#   </nc:bgp></nc:protocols>
# - <nc:routing-options xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"/>
#
# after:
#   address_family:
#   - af_type:
#     - accepted_prefix_limit:
#         idle_timeout_value: 2001
#         limit_threshold: 98
#         maximum: 20
#       damping: true
#       defer_initial_multipath_build:
#         maximum_delay: 2
#       type: signaling
#     afi: evpn
#   - af_type:
#     - accepted_prefix_limit:
#         idle_timeout_value: 2000
#         limit_threshold: 99
#         maximum: 20
#       damping: true
#       defer_initial_multipath_build:
#         maximum_delay: 2
#       delay_route_advertisements:
#         max_delay_route_age: 20
#         max_delay_routing_uptime: 32000
#         min_delay_inbound_convergence: 32000
#         min_delay_routing_uptime: 23000
#       graceful_restart_forwarding_state_bit: from-fib
#       type: any
#     - legacy_redirect_ip_action:
#         receive: true
#         send: true
#       loops: 4
#       no_install: true
#       output_queue_priority_expedited: true
#       secondary_independent_resolution: true
#       type: flow
#     - entropy_label:
#         no_next_hop_validation: true
#       explicit_null:
#         connected_only: true
#       per_group_label: true
#       per_prefix_label: true
#       prefix_limit:
#         forever: true
#         limit_threshold: 99
#         maximum: 20
#       resolve_vpn: true
#       rib: inet.3
#       route_refresh_priority_priority: 3
#       type: labeled-unicast
#     - extended_nexthop: true
#       extended_nexthop_color: true
#       local_ipv4_address: 9.9.9.9
#       type: unicast
#     afi: inet

# After state
# -----------
#
# admin# show protocols bgp
# family inet {
#     unicast {
#         local-ipv4-address 9.9.9.9;
#         extended-nexthop;
#         extended-nexthop-color;
#     }
#     flow {
#         loops 4;
#         no-install;
#         output-queue-priority expedited;
#         legacy-redirect-ip-action {
#             receive;
#             send;
#         }
#         secondary-independent-resolution;
#     }
#     any {
#         accepted-prefix-limit {
#             maximum 20;
#             teardown 99 idle-timeout 2000;
#         }
#         damping;
#         delay-route-advertisements {
#             minimum-delay {
#                 routing-uptime 23000;
#                 inbound-convergence 32000;
#             }
#             maximum-delay {
#                 route-age 20;
#                 routing-uptime 32000;
#             }
#         }
#         defer-initial-multipath-build {
#             maximum-delay 2;
#         }
#         graceful-restart {
#             forwarding-state-bit from-fib;
#         }
#     }
#     labeled-unicast {
#         prefix-limit {
#             maximum 20;
#             teardown 99 idle-timeout forever;
#         }
#         route-refresh-priority priority 3;
#         per-prefix-label;
#         per-group-label;
#         rib {
#             inet.3;
#         }
#         explicit-null connected-only;
#         resolve-vpn;
#         entropy-label {
#             no-next-hop-validation;
#         }
#     }
# }
# family evpn {
#     signaling {
#         accepted-prefix-limit {
#             maximum 20;
#             teardown 98 idle-timeout 2001;
#         }
#         damping;
#         defer-initial-multipath-build {
#             maximum-delay 2;
#         }
#     }
# }

#
# Using replaced
#
# Before state
# ------------
#
# admin# show protocols bgp
# preference 2;
# hold-time 5;
# advertise-inactive;
# out-delay 10;
# bgp-error-tolerance {
#     malformed-route-limit 40000000;
# }
# authentication-algorithm md5;
# advertise-bgp-static {
#     policy static-to-bgp;
# }
# family inet {
#     unicast {
#         local-ipv4-address 9.9.9.9;
#         extended-nexthop;
#         extended-nexthop-color;
#     }
#     flow {
#         loops 4;
#         no-install;
#         output-queue-priority expedited;
#         legacy-redirect-ip-action {
#             receive;
#             send;
#         }
#         secondary-independent-resolution;
#     }
#     any {
#         accepted-prefix-limit {
#             maximum 20;
#             teardown 99 idle-timeout 2000;
#         }
#         damping;
#         delay-route-advertisements {
#             minimum-delay {
#                 routing-uptime 23000;
#                 inbound-convergence 32000;
#             }
#             maximum-delay {
#                 route-age 20;
#                 routing-uptime 32000;
#             }
#         }
#         defer-initial-multipath-build {
#             maximum-delay 2;
#         }
#         graceful-restart {
#             forwarding-state-bit from-fib;
#         }
#     }
#     labeled-unicast {
#         prefix-limit {
#             maximum 20;
#             teardown 99 idle-timeout forever;
#         }
#         route-refresh-priority priority 3;
#         per-prefix-label;
#         per-group-label;
#         rib {
#             inet.3;
#         }
#         explicit-null connected-only;
#         resolve-vpn;
#         entropy-label {
#             no-next-hop-validation;
#         }
#     }
# }
# family evpn {
#     signaling {
#         accepted-prefix-limit {
#             maximum 20;
#             teardown 98 idle-timeout 2001;
#         }
#         damping;
#         defer-initial-multipath-build {
#             maximum-delay 2;
#         }
#     }
# }

- name: Replace existing Junos BGP address family config with provided config
  junipernetworks.junos.junos_bgp_address_family:
    config:
      address_family:
        - afi: 'evpn'
          af_type:
            - type: 'signaling'
              accepted_prefix_limit:
                maximum: 21
                limit_threshold: 99
                idle_timeout_value: 2002
              delay_route_advertisements:
                max_delay_route_age: 20
                max_delay_routing_uptime: 32000
                min_delay_inbound_convergence: 32000
                min_delay_routing_uptime: 23000
              damping: true
    state: replaced

# Task Output:
# ------------
#
#  before:
#   address_family:
#   - af_type:
#     - accepted_prefix_limit:
#         idle_timeout_value: 2001
#         limit_threshold: 98
#         maximum: 20
#       damping: true
#       defer_initial_multipath_build:
#         maximum_delay: 2
#       type: signaling
#     afi: evpn
#   - af_type:
#     - accepted_prefix_limit:
#         idle_timeout_value: 2000
#         limit_threshold: 99
#         maximum: 20
#       damping: true
#       defer_initial_multipath_build:
#         maximum_delay: 2
#       delay_route_advertisements:
#         max_delay_route_age: 20
#         max_delay_routing_uptime: 32000
#         min_delay_inbound_convergence: 32000
#         min_delay_routing_uptime: 23000
#       graceful_restart_forwarding_state_bit: from-fib
#       type: any
#     - legacy_redirect_ip_action:
#         receive: true
#         send: true
#       loops: 4
#       no_install: true
#       output_queue_priority_expedited: true
#       secondary_independent_resolution: true
#       type: flow
#     - entropy_label:
#         no_next_hop_validation: true
#       explicit_null:
#         connected_only: true
#       per_group_label: true
#       per_prefix_label: true
#       prefix_limit:
#         forever: true
#         limit_threshold: 99
#         maximum: 20
#       resolve_vpn: true
#       rib: inet.3
#       route_refresh_priority_priority: 3
#       type: labeled-unicast
#     - extended_nexthop: true
#       extended_nexthop_color: true
#       local_ipv4_address: 9.9.9.9
#       type: unicast
#     afi: inet
#
# commands:
# - <nc:protocols xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"><nc:bgp><nc:family>
#   <nc:evpn delete="delete"/></nc:family><nc:family><nc:evpn><nc:signaling><nc:accepted-prefix-limit>
#   <nc:maximum>21</nc:maximum><nc:teardown><nc:limit-threshold>99</nc:limit-threshold><nc:idle-timeout>
#   <nc:timeout>2002</nc:timeout></nc:idle-timeout></nc:teardown></nc:accepted-prefix-limit><nc:damping/>
#   <nc:delay-route-advertisements><nc:maximum-delay><nc:route-age>20</nc:route-age>
#   <nc:routing-uptime>32000</nc:routing-uptime></nc:maximum-delay><nc:minimum-delay>
#   <nc:inbound-convergence>32000</nc:inbound-convergence><nc:routing-uptime>23000</nc:routing-uptime>
#   </nc:minimum-delay></nc:delay-route-advertisements></nc:signaling></nc:evpn></nc:family></nc:bgp></nc:protocols>
# - <nc:routing-options xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"/>
#
# after:
#   address_family:
#   - af_type:
#     - accepted_prefix_limit:
#         idle_timeout_value: 2002
#         limit_threshold: 99
#         maximum: 21
#       damping: true
#       delay_route_advertisements:
#         max_delay_route_age: 20
#         max_delay_routing_uptime: 32000
#         min_delay_inbound_convergence: 32000
#         min_delay_routing_uptime: 23000
#       type: signaling
#     afi: evpn
#   - af_type:
#     - accepted_prefix_limit:
#         idle_timeout_value: 2000
#         limit_threshold: 99
#         maximum: 20
#       damping: true
#       defer_initial_multipath_build:
#         maximum_delay: 2
#       delay_route_advertisements:
#         max_delay_route_age: 20
#         max_delay_routing_uptime: 32000
#         min_delay_inbound_convergence: 32000
#         min_delay_routing_uptime: 23000
#       graceful_restart_forwarding_state_bit: from-fib
#       type: any
#     - legacy_redirect_ip_action:
#         receive: true
#         send: true
#       loops: 4
#       no_install: true
#       output_queue_priority_expedited: true
#       secondary_independent_resolution: true
#       type: flow
#     - entropy_label:
#         no_next_hop_validation: true
#       explicit_null:
#         connected_only: true
#       per_group_label: true
#       per_prefix_label: true
#       prefix_limit:
#         forever: true
#         limit_threshold: 99
#         maximum: 20
#       resolve_vpn: true
#       rib: inet.3
#       route_refresh_priority_priority: 3
#       type: labeled-unicast
#     - extended_nexthop: true
#       extended_nexthop_color: true
#       local_ipv4_address: 9.9.9.9
#       type: unicast
#     afi: inet
#
# After state
# -----------
#
# admin# show protocols bgp
# family inet {
#     unicast {
#         local-ipv4-address 9.9.9.9;
#         extended-nexthop;
#         extended-nexthop-color;
#     }
#     flow {
#         loops 4;
#         no-install;
#         output-queue-priority expedited;
#         legacy-redirect-ip-action {
#             receive;
#             send;
#         }
#         secondary-independent-resolution;
#     }
#     any {
#         accepted-prefix-limit {
#             maximum 20;
#             teardown 99 idle-timeout 2000;
#         }
#         damping;
#         delay-route-advertisements {
#             minimum-delay {
#                 routing-uptime 23000;
#                 inbound-convergence 32000;
#             }
#             maximum-delay {
#                 route-age 20;
#                 routing-uptime 32000;
#             }
#         }
#         defer-initial-multipath-build {
#             maximum-delay 2;
#         }
#         graceful-restart {
#             forwarding-state-bit from-fib;
#         }
#     }
#     labeled-unicast {
#         prefix-limit {
#             maximum 20;
#             teardown 99 idle-timeout forever;
#         }
#         route-refresh-priority priority 3;
#         per-prefix-label;
#         per-group-label;
#         rib {
#             inet.3;
#         }
#         explicit-null connected-only;
#         resolve-vpn;
#         entropy-label {
#             no-next-hop-validation;
#         }
#     }
# }
# family evpn {
#     signaling {
#         accepted-prefix-limit {
#             maximum 21;
#             teardown 99 idle-timeout 2002;
#         }
#         damping;
#         delay-route-advertisements {
#             minimum-delay {
#                 routing-uptime 23000;
#                 inbound-convergence 32000;
#             }
#             maximum-delay {
#                 route-age 20;
#                 routing-uptime 32000;
#             }
#         }
#     }
# }

# Using overridden
#
# Before state
# ------------
#
# admin# show protocols bgp
# family inet {
#     unicast {
#         local-ipv4-address 9.9.9.9;
#         extended-nexthop;
#         extended-nexthop-color;
#     }
#     flow {
#         loops 4;
#         no-install;
#         output-queue-priority expedited;
#         legacy-redirect-ip-action {
#             receive;
#             send;
#         }
#         secondary-independent-resolution;
#     }
#     any {
#         accepted-prefix-limit {
#             maximum 20;
#             teardown 99 idle-timeout 2000;
#         }
#         damping;
#         delay-route-advertisements {
#             minimum-delay {
#                 routing-uptime 23000;
#                 inbound-convergence 32000;
#             }
#             maximum-delay {
#                 route-age 20;
#                 routing-uptime 32000;
#             }
#         }
#         defer-initial-multipath-build {
#             maximum-delay 2;
#         }
#         graceful-restart {
#             forwarding-state-bit from-fib;
#         }
#     }
#     labeled-unicast {
#         prefix-limit {
#             maximum 20;
#             teardown 99 idle-timeout forever;
#         }
#         route-refresh-priority priority 3;
#         per-prefix-label;
#         per-group-label;
#         rib {
#             inet.3;
#         }
#         explicit-null connected-only;
#         resolve-vpn;
#         entropy-label {
#             no-next-hop-validation;
#         }
#     }
# }
# family evpn {
#     signaling {
#         accepted-prefix-limit {
#             maximum 20;
#             teardown 98 idle-timeout 2001;
#         }
#         damping;
#         defer-initial-multipath-build {
#             maximum-delay 2;
#         }
#     }
# }

- name: Override Junos BGP address family config
  junipernetworks.junos.junos_bgp_address_family:
    config:
      address_family:
        - afi: 'evpn'
          af_type:
            - type: 'signaling'
              accepted_prefix_limit:
                maximum: 21
                limit_threshold: 99
                idle_timeout_value: 2002
              delay_route_advertisements:
                max_delay_route_age: 20
                max_delay_routing_uptime: 32000
                min_delay_inbound_convergence: 32000
                min_delay_routing_uptime: 23000
              damping: true
    state: overridden

# Task Output:
# ------------
#
# before:
#   address_family:
#   - af_type:
#     - accepted_prefix_limit:
#         idle_timeout_value: 2002
#         limit_threshold: 99
#         maximum: 21
#       damping: true
#       delay_route_advertisements:
#         max_delay_route_age: 20
#         max_delay_routing_uptime: 32000
#         min_delay_inbound_convergence: 32000
#         min_delay_routing_uptime: 23000
#       type: signaling
#     afi: evpn
#   - af_type:
#     - accepted_prefix_limit:
#         idle_timeout_value: 2000
#         limit_threshold: 99
#         maximum: 20
#       damping: true
#       defer_initial_multipath_build:
#         maximum_delay: 2
#       delay_route_advertisements:
#         max_delay_route_age: 20
#         max_delay_routing_uptime: 32000
#         min_delay_inbound_convergence: 32000
#         min_delay_routing_uptime: 23000
#       graceful_restart_forwarding_state_bit: from-fib
#       type: any
#     - legacy_redirect_ip_action:
#         receive: true
#         send: true
#       loops: 4
#       no_install: true
#       output_queue_priority_expedited: true
#       secondary_independent_resolution: true
#       type: flow
#     - entropy_label:
#         no_next_hop_validation: true
#       explicit_null:
#         connected_only: true
#       per_group_label: true
#       per_prefix_label: true
#       prefix_limit:
#         forever: true
#         limit_threshold: 99
#         maximum: 20
#       resolve_vpn: true
#       rib: inet.3
#       route_refresh_priority_priority: 3
#       type: labeled-unicast
#     - extended_nexthop: true
#       extended_nexthop_color: true
#       local_ipv4_address: 9.9.9.9
#       type: unicast
#     afi: inet
#
# commands:
# - <nc:protocols xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"><nc:bgp><nc:family>
#   <nc:evpn delete="delete"/><nc:inet delete="delete"/></nc:family><nc:family><nc:evpn delete="delete"/>
#   </nc:family><nc:family><nc:evpn><nc:signaling><nc:accepted-prefix-limit><nc:maximum>21</nc:maximum>
#   <nc:teardown><nc:limit-threshold>99</nc:limit-threshold><nc:idle-timeout><nc:timeout>2002</nc:timeout>
#   </nc:idle-timeout></nc:teardown></nc:accepted-prefix-limit><nc:damping/><nc:delay-route-advertisements>
#   <nc:maximum-delay><nc:route-age>20</nc:route-age><nc:routing-uptime>32000</nc:routing-uptime>
#   </nc:maximum-delay><nc:minimum-delay><nc:inbound-convergence>32000</nc:inbound-convergence>
#   <nc:routing-uptime>23000</nc:routing-uptime></nc:minimum-delay></nc:delay-route-advertisements>
#   </nc:signaling></nc:evpn></nc:family></nc:bgp></nc:protocols>
# - <nc:routing-options xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"/>
#
# After state
# -----------
#
# admin# show protocols bgp
# family evpn {
#     signaling {
#         accepted-prefix-limit {
#             maximum 21;
#             teardown 99 idle-timeout 2002;
#         }
#         damping;
#         delay-route-advertisements {
#             minimum-delay {
#                 routing-uptime 23000;
#                 inbound-convergence 32000;
#             }
#             maximum-delay {
#                 route-age 20;
#                 routing-uptime 32000;
#             }
#         }
#     }
# }

# Using deleted
#
# Before state
# ------------
#
# admin# show protocols bgp
# preference 2;
# hold-time 5;
# advertise-inactive;
# out-delay 10;
# family inet {
#     unicast {
#         local-ipv4-address 9.9.9.9;
#         extended-nexthop;
#         extended-nexthop-color;
#     }
#     flow {
#         loops 4;
#         no-install;
#         output-queue-priority expedited;
#         legacy-redirect-ip-action {
#             receive;
#             send;
#         }
#         secondary-independent-resolution;
#     }
#     any {
#         accepted-prefix-limit {
#             maximum 20;
#             teardown 99 idle-timeout 2000;
#         }
#         damping;
#         delay-route-advertisements {
#             minimum-delay {
#                 routing-uptime 23000;
#                 inbound-convergence 32000;
#             }
#             maximum-delay {
#                 route-age 20;
#                 routing-uptime 32000;
#             }
#         }
#         defer-initial-multipath-build {
#             maximum-delay 2;
#         }
#         graceful-restart {
#             forwarding-state-bit from-fib;
#         }
#     }
#     labeled-unicast {
#         prefix-limit {
#             maximum 20;
#             teardown 99 idle-timeout forever;
#         }
#         route-refresh-priority priority 3;
#         per-prefix-label;
#         per-group-label;
#         rib {
#             inet.3;
#         }
#         explicit-null connected-only;
#         resolve-vpn;
#         entropy-label {
#             no-next-hop-validation;
#         }
#     }
# }
# family evpn {
#     signaling {
#         accepted-prefix-limit {
#             maximum 20;
#             teardown 98 idle-timeout 2001;
#         }
#         damping;
#         defer-initial-multipath-build {
#             maximum-delay 2;
#         }
#     }
# }

- name: Delete Junos BGP address family config based on the afi
  junipernetworks.junos.junos_bgp_address_family:
    config:
      address_family:
        - afi: 'inet'
    state: deleted

# Task Output:
# ------------
#
# before:
#   address_family:
#   - af_type:
#     - accepted_prefix_limit:
#         idle_timeout_value: 2001
#         limit_threshold: 98
#         maximum: 20
#       damping: true
#       defer_initial_multipath_build:
#         maximum_delay: 2
#       type: signaling
#     afi: evpn
#   - af_type:
#     - accepted_prefix_limit:
#         idle_timeout_value: 2000
#         limit_threshold: 99
#         maximum: 20
#       damping: true
#       defer_initial_multipath_build:
#         maximum_delay: 2
#       delay_route_advertisements:
#         max_delay_route_age: 20
#         max_delay_routing_uptime: 32000
#         min_delay_inbound_convergence: 32000
#         min_delay_routing_uptime: 23000
#       graceful_restart_forwarding_state_bit: from-fib
#       type: any
#     - legacy_redirect_ip_action:
#         receive: true
#         send: true
#       loops: 4
#       no_install: true
#       output_queue_priority_expedited: true
#       secondary_independent_resolution: true
#       type: flow
#     - entropy_label:
#         no_next_hop_validation: true
#       explicit_null:
#         connected_only: true
#       per_group_label: true
#       per_prefix_label: true
#       prefix_limit:
#         forever: true
#         limit_threshold: 99
#         maximum: 20
#       resolve_vpn: true
#       rib: inet.3
#       route_refresh_priority_priority: 3
#       type: labeled-unicast
#     - extended_nexthop: true
#       extended_nexthop_color: true
#       local_ipv4_address: 9.9.9.9
#       type: unicast
#     afi: inet
#
# commands:
# - <nc:protocols xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"><nc:bgp>
#   <nc:family><nc:inet delete="delete"/></nc:family></nc:bgp></nc:protocols>
# - <nc:routing-options xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"/>
#
# after:
#   address_family:
#   - af_type:
#     - accepted_prefix_limit:
#         idle_timeout_value: 2001
#         limit_threshold: 98
#         maximum: 20
#       damping: true
#       defer_initial_multipath_build:
#         maximum_delay: 2
#       type: signaling
#     afi: evpn
#
# After state
# -----------
#
# admin# show protocols bgp
# family evpn {
#     signaling {
#         accepted-prefix-limit {
#             maximum 20;
#             teardown 98 idle-timeout 2001;
#         }
#         damping;
#         defer-initial-multipath-build {
#             maximum-delay 2;
#         }
#     }
# }

# Using deleted
#
# Before state
# ------------
#
# admin# show protocols bgp
# family inet {
#     unicast {
#         local-ipv4-address 9.9.9.9;
#         extended-nexthop;
#         extended-nexthop-color;
#     }
#     flow {
#         loops 4;
#         no-install;
#         output-queue-priority expedited;
#         legacy-redirect-ip-action {
#             receive;
#             send;
#         }
#         secondary-independent-resolution;
#     }
#     any {
#         accepted-prefix-limit {
#             maximum 20;
#             teardown 99 idle-timeout 2000;
#         }
#         damping;
#         delay-route-advertisements {
#             minimum-delay {
#                 routing-uptime 23000;
#                 inbound-convergence 32000;
#             }
#             maximum-delay {
#                 route-age 20;
#                 routing-uptime 32000;
#             }
#         }
#         defer-initial-multipath-build {
#             maximum-delay 2;
#         }
#         graceful-restart {
#             forwarding-state-bit from-fib;
#         }
#     }
#     labeled-unicast {
#         prefix-limit {
#             maximum 20;
#             teardown 99 idle-timeout forever;
#         }
#         route-refresh-priority priority 3;
#         per-prefix-label;
#         per-group-label;
#         rib {
#             inet.3;
#         }
#         explicit-null connected-only;
#         resolve-vpn;
#         entropy-label {
#             no-next-hop-validation;
#         }
#     }
# }
# family evpn {
#     signaling {
#         accepted-prefix-limit {
#             maximum 20;
#             teardown 98 idle-timeout 2001;
#         }
#         damping;
#         defer-initial-multipath-build {
#             maximum-delay 2;
#         }
#     }
# }

- name: Delete complete Junos BGP address family config
  junipernetworks.junos.junos_bgp_address_family:
    config:
    state: deleted

# Task Output:
# ------------
#
# before:
#   address_family:
#   - af_type:
#     - accepted_prefix_limit:
#         idle_timeout_value: 2001
#         limit_threshold: 98
#         maximum: 20
#       damping: true
#       defer_initial_multipath_build:
#         maximum_delay: 2
#       type: signaling
#     afi: evpn
#   - af_type:
#     - accepted_prefix_limit:
#         idle_timeout_value: 2000
#         limit_threshold: 99
#         maximum: 20
#       damping: true
#       defer_initial_multipath_build:
#         maximum_delay: 2
#       delay_route_advertisements:
#         max_delay_route_age: 20
#         max_delay_routing_uptime: 32000
#         min_delay_inbound_convergence: 32000
#         min_delay_routing_uptime: 23000
#       graceful_restart_forwarding_state_bit: from-fib
#       type: any
#     - legacy_redirect_ip_action:
#         receive: true
#         send: true
#       loops: 4
#       no_install: true
#       output_queue_priority_expedited: true
#       secondary_independent_resolution: true
#       type: flow
#     - entropy_label:
#         no_next_hop_validation: true
#       explicit_null:
#         connected_only: true
#       per_group_label: true
#       per_prefix_label: true
#       prefix_limit:
#         forever: true
#         limit_threshold: 99
#         maximum: 20
#       resolve_vpn: true
#       rib: inet.3
#       route_refresh_priority_priority: 3
#       type: labeled-unicast
#     - extended_nexthop: true
#       extended_nexthop_color: true
#       local_ipv4_address: 9.9.9.9
#       type: unicast
#     afi: inet
# commands:
# - <nc:protocols xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">
#   <nc:bgp><nc:family><nc:evpn delete="delete"/><nc:inet delete="delete"/>
#   </nc:family></nc:bgp></nc:protocols>
# - <nc:routing-options xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"/>
#
# after: {}

# After state
# -----------
#
# admin# show protocols bgp
#

# Using gathered
#
# Before state
# ------------
#
# admin# show protocols bgp
# family inet {
#     unicast {
#         local-ipv4-address 9.9.9.9;
#         extended-nexthop;
#         extended-nexthop-color;
#     }
#     flow {
#         loops 4;
#         no-install;
#         output-queue-priority expedited;
#         legacy-redirect-ip-action {
#             receive;
#             send;
#         }
#         secondary-independent-resolution;
#     }
#     any {
#         accepted-prefix-limit {
#             maximum 20;
#             teardown 99 idle-timeout 2000;
#         }
#         damping;
#         delay-route-advertisements {
#             minimum-delay {
#                 routing-uptime 23000;
#                 inbound-convergence 32000;
#             }
#             maximum-delay {
#                 route-age 20;
#                 routing-uptime 32000;
#             }
#         }
#         defer-initial-multipath-build {
#             maximum-delay 2;
#         }
#         graceful-restart {
#             forwarding-state-bit from-fib;
#         }
#     }
#     labeled-unicast {
#         prefix-limit {
#             maximum 20;
#             teardown 99 idle-timeout forever;
#         }
#         route-refresh-priority priority 3;
#         per-prefix-label;
#         per-group-label;
#         rib {
#             inet.3;
#         }
#         explicit-null connected-only;
#         resolve-vpn;
#         entropy-label {
#             no-next-hop-validation;
#         }
#     }
# }
# family evpn {
#     signaling {
#         accepted-prefix-limit {
#             maximum 20;
#             teardown 98 idle-timeout 2001;
#         }
#         damping;
#         defer-initial-multipath-build {
#             maximum-delay 2;
#         }
#     }
# }

- name: Gather Junos BGP address family config
  junipernetworks.junos.junos_bgp_address_family:
    config:
    state: gathered
#
#
# Task Output:
# ------------
#
# gathered:
#   address_family:
#   - af_type:
#     - accepted_prefix_limit:
#         idle_timeout_value: 2001
#         limit_threshold: 98
#         maximum: 20
#       damping: true
#       defer_initial_multipath_build:
#         maximum_delay: 2
#       type: signaling
#     afi: evpn
#   - af_type:
#     - accepted_prefix_limit:
#         idle_timeout_value: 2000
#         limit_threshold: 99
#         maximum: 20
#       damping: true
#       defer_initial_multipath_build:
#         maximum_delay: 2
#       delay_route_advertisements:
#         max_delay_route_age: 20
#         max_delay_routing_uptime: 32000
#         min_delay_inbound_convergence: 32000
#         min_delay_routing_uptime: 23000
#       graceful_restart_forwarding_state_bit: from-fib
#       type: any
#     - legacy_redirect_ip_action:
#         receive: true
#         send: true
#       loops: 4
#       no_install: true
#       output_queue_priority_expedited: true
#       secondary_independent_resolution: true
#       type: flow
#     - entropy_label:
#         no_next_hop_validation: true
#       explicit_null:
#         connected_only: true
#       per_group_label: true
#       per_prefix_label: true
#       prefix_limit:
#         forever: true
#         limit_threshold: 99
#         maximum: 20
#       resolve_vpn: true
#       rib: inet.3
#       route_refresh_priority_priority: 3
#       type: labeled-unicast
#     - extended_nexthop: true
#       extended_nexthop_color: true
#       local_ipv4_address: 9.9.9.9
#       type: unicast
#     afi: inet

# Using parsed
# parsed.cfg
# ------------
# <?xml version="1.0" encoding="UTF-8"?>
# <rpc-reply message-id="urn:uuid:0cadb4e8-5bba-47f4-986e-72906227007f">
#     <configuration changed-seconds="1590139550" changed-localtime="2020-05-22 09:25:50 UTC">
#         <version>18.4R1-S2.4</version>
#         <protocols>
#             <bgp>
#                 <preference>2</preference>
#                 <hold-time>5</hold-time>
#                 <advertise-inactive/>
#                 <out-delay>10</out-delay>
#                 <family>
#                     <inet>
#                         <unicast>
#                             <local-ipv4-address>9.9.9.9</local-ipv4-address>
#                             <extended-nexthop/>
#                             <extended-nexthop-color/>
#                         </unicast>
#                         <flow>
#                             <loops>
#                                 <loops>4</loops>
#                             </loops>
#                             <no-install/>
#                             <output-queue-priority>
#                                 <expedited/>
#                             </output-queue-priority>
#                             <legacy-redirect-ip-action>
#                                 <receive/>
#                                 <send/>
#                             </legacy-redirect-ip-action>
#                             <secondary-independent-resolution/>
#                         </flow>
#                         <any>
#                             <accepted-prefix-limit>
#                                 <maximum>20</maximum>
#                                 <teardown>
#                                     <limit-threshold>99</limit-threshold>
#                                     <idle-timeout>
#                                         <timeout>2000</timeout>
#                                     </idle-timeout>
#                                 </teardown>
#                             </accepted-prefix-limit>
#                             <damping/>
#                             <delay-route-advertisements>
#                                 <minimum-delay>
#                                     <routing-uptime>23000</routing-uptime>
#                                     <inbound-convergence>32000</inbound-convergence>
#                                 </minimum-delay>
#                                 <maximum-delay>
#                                     <route-age>20</route-age>
#                                     <routing-uptime>32000</routing-uptime>
#                                 </maximum-delay>
#                             </delay-route-advertisements>
#                             <defer-initial-multipath-build>
#                                 <maximum-delay>2</maximum-delay>
#                             </defer-initial-multipath-build>
#                             <graceful-restart>
#                                 <forwarding-state-bit>from-fib</forwarding-state-bit>
#                             </graceful-restart>
#                         </any>
#                         <labeled-unicast>
#                             <prefix-limit>
#                                 <maximum>20</maximum>
#                                 <teardown>
#                                     <limit-threshold>99</limit-threshold>
#                                     <idle-timeout>
#                                         <forever/>
#                                     </idle-timeout>
#                                 </teardown>
#                             </prefix-limit>
#                             <route-refresh-priority>
#                                 <priority>3</priority>
#                             </route-refresh-priority>
#                             <per-prefix-label/>
#                             <per-group-label/>
#                             <rib>
#                                 <inet.3/>
#                             </rib>
#                             <explicit-null>
#                                 <connected-only/>
#                             </explicit-null>
#                             <resolve-vpn/>
#                             <entropy-label>
#                                 <no-next-hop-validation/>
#                             </entropy-label>
#                         </labeled-unicast>
#                     </inet>
#                     <evpn>
#                         <signaling>
#                             <accepted-prefix-limit>
#                                 <maximum>20</maximum>
#                                 <teardown>
#                                     <limit-threshold>98</limit-threshold>
#                                     <idle-timeout>
#                                         <timeout>2001</timeout>
#                                     </idle-timeout>
#                                 </teardown>
#                             </accepted-prefix-limit>
#                             <damping/>
#                             <defer-initial-multipath-build>
#                                 <maximum-delay>2</maximum-delay>
#                             </defer-initial-multipath-build>
#                         </signaling>
#                     </evpn>
#                 </family>
#             </bgp>
#             <ospf3>
#                 <area>
#                     <name>0.0.0.100</name>
#                     <stub>
#                         <default-metric>200</default-metric>
#                     </stub>
#                     <interface>
#                         <name>so-0/0/0.0</name>
#                         <metric>5</metric>
#                         <priority>3</priority>
#                     </interface>
#                 </area>
#             </ospf3>
#         </protocols>
#         <routing-options>
#             <static>
#                 <route>
#                     <name>172.16.17.0/24</name>
#                     <discard />
#                 </route>
#             </static>
#             <router-id>10.200.16.75</router-id>
#             <autonomous-system>
#                 <as-number>65432</as-number>
#             </autonomous-system>
#         </routing-options>
#     </configuration>
# </rpc-reply>


- name: Parsed the bgp address family running config to get the facts
  junipernetworks.junos.junos_bgp_address_family:
    running_config: "{{ lookup('file', './parsed.cfg') }}"
    state: parsed
#
# Task Output:
# ------------
#
# parsed:
#   address_family:
#   - af_type:
#     - accepted_prefix_limit:
#         idle_timeout_value: 2001
#         limit_threshold: 98
#         maximum: 20
#       damping: true
#       defer_initial_multipath_build:
#         maximum_delay: 2
#       type: signaling
#     afi: evpn
#   - af_type:
#     - accepted_prefix_limit:
#         idle_timeout_value: 2000
#         limit_threshold: 99
#         maximum: 20
#       damping: true
#       defer_initial_multipath_build:
#         maximum_delay: 2
#       delay_route_advertisements:
#         max_delay_route_age: 20
#         max_delay_routing_uptime: 32000
#         min_delay_inbound_convergence: 32000
#         min_delay_routing_uptime: 23000
#       graceful_restart_forwarding_state_bit: from-fib
#       type: any
#     - legacy_redirect_ip_action:
#         receive: true
#         send: true
#       loops: 4
#       no_install: true
#       output_queue_priority_expedited: true
#       secondary_independent_resolution: true
#       type: flow
#     - entropy_label:
#         no_next_hop_validation: true
#       explicit_null:
#         connected_only: true
#       per_group_label: true
#       per_prefix_label: true
#       prefix_limit:
#         forever: true
#         limit_threshold: 99
#         maximum: 20
#       resolve_vpn: true
#       rib: inet.3
#       route_refresh_priority_priority: 3
#       type: labeled-unicast
#     - extended_nexthop: true
#       extended_nexthop_color: true
#       local_ipv4_address: 9.9.9.9
#       type: unicast
#     afi: inet

# Using rendered
#
- name: Render the commands for provided  configuration
  junipernetworks.junos.junos_bgp_address_family:
    config:
      address_family:
        - afi: 'evpn'
          af_type:
            - type: 'signaling'
              accepted_prefix_limit:
                maximum: 20
                limit_threshold: 98
                idle_timeout_value: 2001
              damping: true
              defer_initial_multipath_build:
                maximum_delay: 2
        - afi: 'inet'
          af_type:
            - type: 'flow'
              legacy_redirect_ip_action:
                send: true
                receive: true
              loops: 4
              no_install: true
              output_queue_priority_expedited: true
              secondary_independent_resolution: true

            - type: 'unicast'
              extended_nexthop: true
              extended_nexthop_color: true
              local_ipv4_address: '9.9.9.9'

            - type: 'labeled-unicast'
              entropy_label:
                no_next_hop_validation: true
              explicit_null:
                connected_only: true
              per_prefix_label: true
              per_group_label: true
              prefix_limit:
                maximum: 20
                limit_threshold: 99
                forever: true
              resolve_vpn: true
              rib: 'inet.3'
              route_refresh_priority_expedited: true
              route_refresh_priority_priority: 3

            - type: 'any'
              accepted_prefix_limit:
                maximum: 20
                limit_threshold: 99
                idle_timeout_value: 2000
              damping: true
              defer_initial_multipath_build:
                maximum_delay: 2
              delay_route_advertisements:
                max_delay_route_age: 20
                max_delay_routing_uptime: 32000
                min_delay_inbound_convergence: 32000
                min_delay_routing_uptime: 23000
              graceful_restart_forwarding_state_bit: 'from-fib'
    state: rendered

# Task Output:
# ------------
#
# rendered: "<nc:protocols xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">
# <nc:bgp><nc:family><nc:evpn><nc:signaling><nc:accepted-prefix-limit><nc:maximum>20</nc:maximum>
# <nc:teardown><nc:limit-threshold>98</nc:limit-threshold><nc:idle-timeout><nc:timeout>2001</nc:timeout>
# </nc:idle-timeout></nc:teardown></nc:accepted-prefix-limit><nc:damping/><nc:defer-initial-multipath-build>
# <nc:maximum-delay>2</nc:maximum-delay></nc:defer-initial-multipath-build></nc:signaling>
# </nc:evpn><nc:inet><nc:flow><nc:legacy-redirect-ip-action><nc:send/><nc:receive/>
# </nc:legacy-redirect-ip-action><nc:loops>4</nc:loops><nc:no-install/>
# <nc:output-queue-priority><nc:expedited/></nc:output-queue-priority>
# <nc:secondary-independent-resolution/></nc:flow><nc:unicast><nc:extended-nexthop/>
# <nc:extended-nexthop-color/><nc:local-ipv4-address>9.9.9.9</nc:local-ipv4-address>
# </nc:unicast><nc:labeled-unicast><nc:entropy-label><nc:no-next-hop-validation/>
# </nc:entropy-label><nc:explicit-null><nc:connected-only/></nc:explicit-null>
# <nc:per-prefix-label/><nc:per-group-label/><nc:prefix-limit><nc:maximum>20</nc:maximum>
# <nc:teardown>99<nc:idle-timeout><nc:forever/></nc:idle-timeout></nc:teardown>
# </nc:prefix-limit><nc:resolve-vpn/><nc:rib><nc:inet.3/></nc:rib><nc:route-refresh-priority>
# <nc:expedited/><nc:priority>3</nc:priority></nc:route-refresh-priority></nc:labeled-unicast>
# <nc:any><nc:accepted-prefix-limit><nc:maximum>20</nc:maximum><nc:teardown>
# <nc:limit-threshold>99</nc:limit-threshold><nc:idle-timeout><nc:timeout>2000</nc:timeout>
# </nc:idle-timeout></nc:teardown></nc:accepted-prefix-limit><nc:damping/>
# <nc:defer-initial-multipath-build><nc:maximum-delay>2</nc:maximum-delay>
# </nc:defer-initial-multipath-build><nc:delay-route-advertisements>
# <nc:maximum-delay><nc:route-age>20</nc:route-age><nc:routing-uptime>32000</nc:routing-uptime>
# </nc:maximum-delay><nc:minimum-delay><nc:inbound-convergence>32000</nc:inbound-convergence>
# <nc:routing-uptime>23000</nc:routing-uptime></nc:minimum-delay></nc:delay-route-advertisements>
# <nc:graceful-restart><nc:forwarding-state-bit>from-fib</nc:forwarding-state-bit>
# </nc:graceful-restart></nc:any></nc:inet></nc:family></nc:bgp></nc:protocols>"

返回值

常用返回值记录在 此处,以下是此模块独有的字段

描述

after

字典

生成的配置模型调用。

返回: 当发生更改时

示例: "返回的 配置 始终 上述参数的 格式相同。\n"

before

字典

模型调用之前的配置。

返回: 始终

示例: "返回的 配置 始终 上述参数的 格式相同。\n"

commands

list / elements=string

推送到远程设备的命令集。

返回: 始终

示例: ["<nc:protocols xmlns:nc=\"urn:ietf:params:xml:ns:netconf:base:1.0\"> <nc:bgp><nc:family><nc:evpn><nc:signaling><nc:accepted-prefix-limit> <nc:maximum>21</nc:maximum><nc:teardown><nc:limit-threshold>99</nc:limit-threshold> <nc:idle-timeout><nc:timeout>2002</nc:timeout></nc:idle-timeout> </nc:teardown></nc:accepted-prefix-limit><nc:damping/> <nc:delay-route-advertisements><nc:maximum-delay> <nc:route-age>20</nc:route-age><nc:routing-uptime>32000</nc:routing-uptime> </nc:maximum-delay><nc:minimum-delay><nc:inbound-convergence>32000</nc:inbound-convergence> <nc:routing-uptime>23000</nc:routing-uptime></nc:minimum-delay></nc:delay-route-advertisements> </nc:signaling></nc:evpn></nc:family></nc:bgp></nc:protocols>", "xml 2", "xml 3"]

gathered

list / elements=string

从远程设备收集的有关网络资源的结构化数据的事实。

返回:stategathered

示例: ["此输出的格式始终与模块的 argspec 相同。\n"]

parsed

list / elements=string

running_config 选项中提供的设备本机配置根据模块 argspec 解析为结构化数据。

返回:stateparsed

示例: ["此输出的格式始终与模块的 argspec 相同。\n"]

rendered

list / elements=string

以设备本机格式(脱机)呈现的任务中提供的配置。

返回:staterendered

示例: ["<nc:protocols xmlns:nc=\"urn:ietf:params:xml:ns:netconf:base:1.0\">"]

作者

  • Rohit Thakur (@rohitthakur2590)