ACLs resource module
Version added: 1.0.0
- Manage named IP ACLs on the Cisco NX-OS platform
Note
- Tested against NX-OS 7.3.(0)D1(1) on VIRL
- Unsupported for Cisco MDS
- As NX-OS allows configuring a rule again with different sequence numbers, the user is expected to provide sequence numbers for the access control entries to preserve idempotency. If no sequence number is given, the rule will be added as a new rule by the device.
# Using merged
# Before state:
# -------------
# nxos-9k# show running-config | section '^ip(v6)* access-list'
- name: Merge provided ACLs configuration with device configuration
cisco.nxos.nxos_acls:
state: merged
config:
- afi: ipv4
acls:
- name: ACL1v4
aces:
- grant: deny
destination:
address: 192.0.2.64
wildcard_bits: 0.0.0.255
source:
any: true
port_protocol:
lt: 55
protocol: tcp
protocol_options:
tcp:
ack: true
fin: true
sequence: 50
- afi: ipv6
acls:
- name: ACL1v6
aces:
- grant: permit
sequence: 10
source:
any: true
destination:
prefix: 2001:db8:12::/32
protocol: sctp
# Task Output
# -----------
# before: []
#
# commands:
# - ip access-list ACL1v4
# - 50 deny tcp any lt 55 192.0.2.64 0.0.0.255 ack fin
# - ipv6 access-list ACL1v6
# - 10 permit sctp any 2001:db8:12::/32
#
# after:
# - acls:
# - aces:
# - destination:
# prefix: 2001:db8:12::/32
# grant: permit
# protocol: sctp
# sequence: 10
# source:
# any: true
# name: ACL1v6
# afi: ipv6
# - acls:
# - aces:
# - destination:
# address: 192.0.2.64
# wildcard_bits: 0.0.0.255
# grant: deny
# protocol: tcp
# protocol_options:
# tcp:
# ack: true
# fin: true
# sequence: 50
# source:
# any: true
# port_protocol:
# lt: '55'
# name: ACL1v4
# afi: ipv4
# After state:
# ------------
#
# nxos-9k# show running-config | section '^ip(v6)* access-list'
# ip access-list ACL1v4
# 50 deny tcp any lt 55 192.0.2.64 0.0.0.255 ack fin
# ipv6 access-list ACL1v6
# 10 permit sctp any any
# Using replaced
# Before state:
# ----------------
# nxos-9k# show running-config | section '^ip(v6)* access-list'
# ip access-list ACL1v4
# 10 permit ip any any
# 20 deny udp any any
# ip access-list ACL2v4
# 10 permit ahp 192.0.2.0 0.0.0.255 any
# ipv6 access-list ACL1v6
# 10 permit sctp any any
# 20 remark IPv6 ACL
# ipv6 access-list ACL2v6
# 10 deny ipv6 any 2001:db8:3000::/36
# 20 permit tcp 2001:db8:2000:2::2/128 2001:db8:2000:ab::2/128
- name: Replace existing ACL configuration with provided configuration
cisco.nxos.nxos_acls:
config:
- afi: ipv4
- afi: ipv6
acls:
- name: ACL1v6
aces:
- sequence: 20
grant: permit
source:
any: true
destination:
any: true
protocol: pim
- remark: Replaced ACE
- name: ACL2v6
state: replaced
# Task Output
# -----------
# before:
# - acls:
# - aces:
# - destination:
# any: true
# grant: permit
# protocol: sctp
# sequence: 10
# source:
# any: true
# - remark: IPv6 ACL
# sequence: 20
# name: ACL1v6
# - aces:
# - destination:
# prefix: 2001:db8:3000::/36
# grant: deny
# protocol: ipv6
# sequence: 10
# source:
# any: true
# - destination:
# host: 2001:db8:2000:ab::2
# grant: permit
# protocol: tcp
# sequence: 20
# source:
# host: 2001:db8:2000:2::2
# name: ACL2v6
# afi: ipv6
# - acls:
# - aces:
# - destination:
# any: true
# grant: permit
# protocol: ip
# sequence: 10
# source:
# any: true
# - destination:
# any: true
# grant: deny
# protocol: udp
# sequence: 20
# source:
# any: true
# name: ACL1v4
# - aces:
# - destination:
# any: true
# grant: permit
# protocol: ahp
# sequence: 10
# source:
# address: 192.0.2.0
# wildcard_bits: 0.0.0.255
# name: ACL2v4
# afi: ipv4
#
# commands:
# - no ip access-list ACL1v4
# - no ip access-list ACL2v4
# - ipv6 access-list ACL1v6
# - no 10 permit sctp any any
# - no 20 remark IPv6 ACL
# - remark Replaced ACE
# - 20 permit pim any any
# - ipv6 access-list ACL2v6
# - no 10 deny ipv6 any 2001:db8:3000::/36
# - no 20 permit tcp host 2001:db8:2000:2::2 host 2001:db8:2000:ab::2
#
# after:
# - acls:
# - aces:
# - remark: Replaced ACE
# sequence: 10
# - destination:
# any: true
# grant: permit
# protocol: pim
# sequence: 20
# source:
# any: true
# name: ACL1v6
# - name: ACL2v6
# afi: ipv6
# After state:
# ---------------
# nxos-9k# show running-config | section '^ip(v6)* access-list'
# ipv6 access-list ACL1v6
# 10 remark Replaced ACE
# 20 permit pim any any
# ipv6 access-list ACL2v6
# Using overridden
# Before state:
# ----------------
# nxos-9k# show running-config | section '^ip(v6)* access-list'
# ip access-list ACL1v4
# 10 permit ip any any
# 20 deny udp any any
# ip access-list ACL2v4
# 10 permit ahp 192.0.2.0 0.0.0.255 any
# ipv6 access-list ACL1v6
# 10 permit sctp any any
# 20 remark IPv6 ACL
# ipv6 access-list ACL2v6
# 10 deny ipv6 any 2001:db8:3000::/36
# 20 permit tcp 2001:db8:2000:2::2/128 2001:db8:2000:ab::2/128
- name: Override existing configuration with provided configuration
cisco.nxos.nxos_acls:
config:
- afi: ipv4
acls:
- name: NewACL
aces:
- grant: deny
source:
address: 192.0.2.0
wildcard_bits: 0.0.255.255
destination:
any: true
protocol: eigrp
- remark: Example for overridden state
state: overridden
# Task Output
# -----------
#
# before:
# - acls:
# - aces:
# - destination:
# any: true
# grant: permit
# protocol: sctp
# sequence: 10
# source:
# any: true
# - remark: IPv6 ACL
# sequence: 20
# name: ACL1v6
# - aces:
# - destination:
# prefix: 2001:db8:3000::/36
# grant: deny
# protocol: ipv6
# sequence: 10
# source:
# any: true
# - destination:
# host: 2001:db8:2000:ab::2
# grant: permit
# protocol: tcp
# sequence: 20
# source:
# host: 2001:db8:2000:2::2
# name: ACL2v6
# afi: ipv6
# - acls:
# - aces:
# - destination:
# any: true
# grant: permit
# protocol: ip
# sequence: 10
# source:
# any: true
# - destination:
# any: true
# grant: deny
# protocol: udp
# sequence: 20
# source:
# any: true
# name: ACL1v4
# - aces:
# - destination:
# any: true
# grant: permit
# protocol: ahp
# sequence: 10
# source:
# address: 192.0.2.0
# wildcard_bits: 0.0.0.255
# name: ACL2v4
# afi: ipv4
#
# commands:
# - no ipv6 access-list ACL1v6
# - no ipv6 access-list ACL2v6
# - no ip access-list ACL1v4
# - no ip access-list ACL2v4
# - ip access-list NewACL
# - deny eigrp 192.0.2.0 0.0.255.255 any
# - remark Example for overridden state
#
# after:
# - acls:
# - aces:
# - destination:
# any: true
# grant: deny
# protocol: eigrp
# sequence: 10
# source:
# address: 192.0.2.0
# wildcard_bits: 0.0.255.255
# - remark: Example for overridden state
# sequence: 20
# name: NewACL
# afi: ipv4
# After state:
# ------------
# nxos-9k# show running-config | section '^ip(v6)* access-list'
# ip access-list NewACL
# 10 deny eigrp 192.0.2.0 0.0.255.255 any
# 20 remark Example for overridden state
# Using deleted - delete all
#
# Before state:
# -------------
# nxos-9k# show running-config | section '^ip(v6)* access-list'
# ip access-list ACL1v4
# 10 permit ip any any
# 20 deny udp any any
# ip access-list ACL2v4
# 10 permit ahp 192.0.2.0 0.0.0.255 any
# ip access-list ACL1v6
# 10 permit sctp any any
# 20 remark IPv6 ACL
# ip access-list ACL2v6
# 10 deny ipv6 any 2001:db8:3000::/36
# 20 permit tcp 2001:db8:2000:2::2/128 2001:db8:2000:ab::2/128
- name: Delete all ACLs
cisco.nxos.nxos_acls:
state: deleted
# Task Output
# -----------
#
# before:
# - acls:
# - aces:
# - destination:
# any: true
# grant: permit
# protocol: sctp
# sequence: 10
# source:
# any: true
# - remark: IPv6 ACL
# sequence: 20
# name: ACL1v6
# - aces:
# - destination:
# prefix: 2001:db8:3000::/36
# grant: deny
# protocol: ipv6
# sequence: 10
# source:
# any: true
# - destination:
# host: 2001:db8:2000:ab::2
# grant: permit
# protocol: tcp
# sequence: 20
# source:
# host: 2001:db8:2000:2::2
# name: ACL2v6
# afi: ipv6
# - acls:
# - aces:
# - destination:
# any: true
# grant: permit
# protocol: ip
# sequence: 10
# source:
# any: true
# - destination:
# any: true
# grant: deny
# protocol: udp
# sequence: 20
# source:
# any: true
# name: ACL1v4
# - aces:
# - destination:
# any: true
# grant: permit
# protocol: ahp
# sequence: 10
# source:
# address: 192.0.2.0
# wildcard_bits: 0.0.0.255
# name: ACL2v4
# afi: ipv4
#
# commands:
# - no ip access-list ACL1v4
# - no ip access-list ACL2v4
# - no ipv6 access-list ACL1v6
# - no ipv6 access-list ACL2v6
#
# after: []
# After state:
# -----------
# nxos-9k# show running-config | section '^ip(v6)* access-list'
#
# Using deleted - delete AFI
# Before state:
# -------------
# nxos-9k# show running-config | section '^ip(v6)* access-list'
# ip access-list ACL1v4
# 10 permit ip any any
# 20 deny udp any any
# ip access-list ACL2v4
# 10 permit ahp 192.0.2.0 0.0.0.255 any
# ip access-list ACL1v6
# 10 permit sctp any any
# 20 remark IPv6 ACL
# ip access-list ACL2v6
# 10 deny ipv6 any 2001:db8:3000::/36
# 20 permit tcp 2001:db8:2000:2::2/128 2001:db8:2000:ab::2/128
- name: Delete all ACLs in given AFI
cisco.nxos.nxos_acls:
config:
- afi: ipv4
state: deleted
# Task Output
# -----------
#
# before:
# - acls:
# - aces:
# - destination:
# any: true
# grant: permit
# protocol: sctp
# sequence: 10
# source:
# any: true
# - remark: IPv6 ACL
# sequence: 20
# name: ACL1v6
# - aces:
# - destination:
# prefix: 2001:db8:3000::/36
# grant: deny
# protocol: ipv6
# sequence: 10
# source:
# any: true
# - destination:
# host: 2001:db8:2000:ab::2
# grant: permit
# protocol: tcp
# sequence: 20
# source:
# host: 2001:db8:2000:2::2
# name: ACL2v6
# afi: ipv6
# - acls:
# - aces:
# - destination:
# any: true
# grant: permit
# protocol: ip
# sequence: 10
# source:
# any: true
# - destination:
# any: true
# grant: deny
# protocol: udp
# sequence: 20
# source:
# any: true
# name: ACL1v4
# - aces:
# - destination:
# any: true
# grant: permit
# protocol: ahp
# sequence: 10
# source:
# address: 192.0.2.0
# wildcard_bits: 0.0.0.255
# name: ACL2v4
# afi: ipv4
#
# commands:
# - no ip access-list ACL1v4
# - no ip access-list ACL2v4
#
# after:
# - acls:
# - aces:
# - destination:
# any: true
# grant: permit
# protocol: sctp
# sequence: 10
# source:
# any: true
# - remark: IPv6 ACL
# sequence: 20
# name: ACL1v6
# - aces:
# - destination:
# prefix: 2001:db8:3000::/36
# grant: deny
# protocol: ipv6
# sequence: 10
# source:
# any: true
# - destination:
# host: 2001:db8:2000:ab::2
# grant: permit
# protocol: tcp
# sequence: 20
# source:
# host: 2001:db8:2000:2::2
# name: ACL2v6
# afi: ipv6
# After state:
# ------------
# nxos-9k# show running-config | section '^ip(v6)* access-list'
# ip access-list ACL1v6
# 10 permit sctp any any
# 20 remark IPv6 ACL
# ip access-list ACL2v6
# 10 deny ipv6 any 2001:db8:3000::/36
# 20 permit tcp 2001:db8:2000:2::2/128 2001:db8:2000:ab::2/128
# Using deleted - delete ACLs
# Before state:
# -------------
# nxos-9k# show running-config | section '^ip(v6)* access-list'
# ip access-list ACL1v4
# 10 permit ip any any
# 20 deny udp any any
# ip access-list ACL2v4
# 10 permit ahp 192.0.2.0 0.0.0.255 any
# ipv6 access-list ACL1v6
# 10 permit sctp any any
# 20 remark IPv6 ACL
# ipv6 access-list ACL2v6
# 10 deny ipv6 any 2001:db8:3000::/36
# 20 permit tcp 2001:db8:2000:2::2/128 2001:db8:2000:ab::2/128
- name: Delete specific ACLs
cisco.nxos.nxos_acls:
state: deleted
config:
- afi: ipv4
acls:
- name: ACL1v4
- name: ACL2v4
- afi: ipv6
acls:
- name: ACL1v6
# Task Output
# -----------
#
# before:
# - acls:
# - aces:
# - destination:
# any: true
# grant: permit
# protocol: sctp
# sequence: 10
# source:
# any: true
# - remark: IPv6 ACL
# sequence: 20
# name: ACL1v6
# - aces:
# - destination:
# prefix: 2001:db8:3000::/36
# grant: deny
# protocol: ipv6
# sequence: 10
# source:
# any: true
# - destination:
# host: 2001:db8:2000:ab::2
# grant: permit
# protocol: tcp
# sequence: 20
# source:
# host: 2001:db8:2000:2::2
# name: ACL2v6
# afi: ipv6
# - acls:
# - aces:
# - destination:
# any: true
# grant: permit
# protocol: ip
# sequence: 10
# source:
# any: true
# - destination:
# any: true
# grant: deny
# protocol: udp
# sequence: 20
# source:
# any: true
# name: ACL1v4
# - aces:
# - destination:
# any: true
# grant: permit
# protocol: ahp
# sequence: 10
# source:
# address: 192.0.2.0
# wildcard_bits: 0.0.0.255
# name: ACL2v4
# afi: ipv4
#
# commands:
# - no ip access-list ACL1v4
# - no ip access-list ACL2v4
# - no ipv6 access-list ACL1v6
#
# after:
# - acls:
# - aces:
# - destination:
# prefix: 2001:db8:3000::/36
# grant: deny
# protocol: ipv6
# sequence: 10
# source:
# any: true
# - destination:
# host: 2001:db8:2000:ab::2
# grant: permit
# protocol: tcp
# sequence: 20
# source:
# host: 2001:db8:2000:2::2
# name: ACL2v6
# afi: ipv6
# After state:
# ------------
# nxos-9k# show running-config | section '^ip(v6)* access-list'
# ipv6 access-list ACL2v6
# 10 deny ipv6 any 2001:db8:3000::/36
# 20 permit tcp 2001:db8:2000:2::2/128 2001:db8:2000:ab::2/128
# Using parsed
- name: Parse given config to structured data
cisco.nxos.nxos_acls:
running_config: |
ip access-list ACL1v4
50 deny tcp any lt 55 192.0.2.64 0.0.0.255 ack fin
ipv6 access-list ACL1v6
10 permit sctp any any
state: parsed
# Task Output
# ------------
#
# parsed:
# - afi: ipv4
# acls:
# - name: ACL1v4
# aces:
# - grant: deny
# destination:
# address: 192.0.2.64
# wildcard_bits: 0.0.0.255
# source:
# any: true
# port_protocol:
# lt: 55
# protocol: tcp
# protocol_options:
# tcp:
# ack: true
# fin: true
# sequence: 50
#
# - afi: ipv6
# acls:
# - name: ACL1v6
# aces:
# - grant: permit
# sequence: 10
# source:
# any: true
# destination:
# prefix: 2001:db8:12::/32
# protocol: sctp
# Using gathered:
# Before state:
# ------------
# nxos-9k# show running-config | section '^ip(v6)* access-list'
# ip access-list ACL1v4
# 50 deny tcp any lt 55 192.0.2.64 0.0.0.255 ack fin
# ipv6 access-list ACL1v6
# 10 permit sctp any any
- name: Gather existing configuration
cisco.nxos.nxos_acls:
state: gathered
# Task Output
# -----------
#
# gathered:
# - afi: ipv4
# acls:
# - name: ACL1v4
# aces:
# - grant: deny
# destination:
# address: 192.0.2.64
# wildcard_bits: 0.0.0.255
# source:
# any: true
# port_protocol:
# lt: 55
# protocol: tcp
# protocol_options:
# tcp:
# ack: true
# fin: true
# sequence: 50
# - afi: ipv6
# acls:
# - name: ACL1v6
# aces:
# - grant: permit
# sequence: 10
# source:
# any: true
# destination:
# prefix: 2001:db8:12::/32
# protocol: sctp
# Using rendered
- name: Render required configuration to be pushed to the device
cisco.nxos.nxos_acls:
config:
- afi: ipv4
acls:
- name: ACL1v4
aces:
- grant: deny
destination:
address: 192.0.2.64
wildcard_bits: 0.0.0.255
source:
any: true
port_protocol:
lt: 55
protocol: tcp
protocol_options:
tcp:
ack: true
fin: true
sequence: 50
- afi: ipv6
acls:
- name: ACL1v6
aces:
- grant: permit
sequence: 10
source:
any: true
destination:
prefix: '2001:db8:12::/32'
protocol: sctp
state: rendered
# Task Output
# -----------
#
# rendered:
# ip access-list ACL1v4
# 50 deny tcp any lt 55 192.0.2.64 0.0.0.255 ack fin
# ipv6 access-list ACL1v6
# 10 permit sctp any any
Common return values are documented here, the following are the fields unique to this module:
- Adharsh Srivats Rangarajan (@adharshsrivatsr)