我正在尝试使用 fortios ansible 模块来管理 ipv4 地址、地址组和策略。创建资源很容易。当孩子被标记为缺席时,我一直在想办法管理父资源。
我正在创建这样的地址:
- name: Manage IPv4 addresses.
fortios_firewall_address:
vdom: "{{ vdom }}"
state: "{{ item.state | default ('present') }}"
access_token: "{{ fortios_access_token }}"
firewall_address:
allow_routing: "{{ item.allow_routing | default ('enable')}}"
associated_interface: ""
cache_ttl: "{{ item.cache_ttl | default ('5') }}"
clearpass_spt: "{{ item.clearpass_spt | default ('unknown') }}"
color: "{{ item.color | default ('7') }}"
comment: "{{ item.comment | default ('ANSIBLE MANAGED') }}"
fabric_object: "enable"
interface: "{{ item.interface | default ('any') }}"
name: "{{ item.name }}"
subnet: "{{ item.subnet }}"
subnet_name: "{{ item.subnet_name | default ('') }}"
type: "subnet"
with_items: "{{ addresses_ipv4 }}"
然后我创建组并将地址添加为成员:
- name: Manage address groups.
fortios_firewall_addrgrp:
vdom: "{{ vdom }}"
state: "{{ item.state | default ('present') }}"
access_token: "{{ fortios_access_token }}"
firewall_addrgrp:
allow_routing: "{{ item.allow_routing | default ('enable') }}"
category: "{{ item.category | default ('default') }}"
color: "{{ item.color | default ('5') }}"
comment: "{{ item.comment | default ('ANSIBLE MANAGED') }}"
exclude: "disable"
fabric_object: "enable"
member: "{{ item.members }}"
name: "{{ item.name }}"
type: "{{ item.type | default ('default') }}"
with_items: "{{ address_groups }}"
当我将地址标记为不存在时,它无法删除它,因为该地址在它所属的组中被引用。
如何创建一个遵循逻辑“如果地址存在则先创建地址然后创建组但如果地址不存在则先将其从组中删除然后删除地址”的剧本
我目前正在定义这样的资源:
addresses_ipv4:
- allow_routing: enable
interface: any
name: test_1
subnet: 192.168.1.2/32
state: absent
- allow_routing: enable
interface: any
name: test_2
subnet: 192.168.1.3/32
- allow_routing: enable
interface: any
name: test_3
subnet: 192.168.1.4/32
- allow_routing: enable
interface: any
name: test_4
subnet: 192.168.1.5/32
addresses_fqdn:
- allow_routing: enable
interface: any
name: test_5
fqdn: test5.example.com
- allow_routing: enable
interface: any
name: test_6
fqdn: test6.example.com
- allow_routing: enable
interface: any
name: test_7
fqdn: test7.example.com
- allow_routing: enable
state: absent
interface: any
name: test_8
fqdn: test8.example.com
address_groups:
- members:
- name: test_1
- name: test_2
name: test_group_1
此外,这个问题不仅限于地址和地址组,我最终将面对可以在其他地方引用的所有资源(接口、区域、服务等)