【问题标题】:How to manage ansible created resources if their deletion requires removal from other resources?如果删除需要从其他资源中删除,如何管理 ansible 创建的资源?
【发布时间】:2021-08-03 18:45:38
【问题描述】:

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

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

【问题讨论】:

    标签: ansible ansible-2.x fortigate


    【解决方案1】:

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

    答:您必须分 3 步完成

    1. 如果地址不存在,则将其从组中删除。
    2. 如果地址存在,则创建地址。 如果地址不存在,则删除该地址。
    3. 如果地址存在,则创建一个组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-02
      • 2018-09-13
      • 2020-12-23
      相关资源
      最近更新 更多