0

我正在尝试使用 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

此外,这个问题不仅限于地址和地址组,我最终将面对可以在其他地方引用的所有资源(接口、区域、服务等)

4

1 回答 1

0

问:如果地址存在则先创建地址再创建组,如果地址不存在则先将其从组中删除,然后再删除地址。

A:你必须分三步完成

  1. 如果地址不存在,则将其从组中删除。
  2. 如果地址存在,则创建地址。如果地址不存在,则删除该地址。
  3. 如果地址存在,则创建一个组。
于 2021-08-03T19:44:29.523 回答