0

我需要将记录添加到我的区域的角色(bind9)

在 hostvars 中,我创建了如下所示的 var:

zones:
    zone.name1:
      - [ type: A, name: mike, ip: 192.168.1.10 ]
      - [ type: A, name: bob, ip: 192.168.1.11 ]

    zone.name2:
      - [ type: A, name: alice, ip: 192.168.1.12 ]
      - [ type: A, name: joanne, ip: 192.168.1.13 ]

在角色/tasks/main.yaml

- lineinfile:
    path: "/etc/bind/zones/{{ item }}.zone"
    line: '@   IN   "{{ item.value.type }}"   "{{ item.value.name }}" "{{ item.value.i }}"'
  with_items: "{{ zones | dict2items }}"

如何获得将新记录添加到区域文件的结果?

4

1 回答 1

0

这里有几件事是错误的。

  1. 您正在使用(应该)的list符号dict[ type: A, name: mike, ip: 192.168.1.10 ]{ type: A, name: mike, ip: 192.168.1.10 }
  2. 您的数据结构需要两个循环,您不能直接在 playbook 中执行这些循环。
  3. 您可能还希望在不需要记录时可以自由删除记录,这与使用lineinfile.

以下解决方案解决了上述所有问题:

# main.yaml

---

- hosts: all
  gather_facts: no
  connection: local
  vars:
    zones:
      zone.name1:
        - { type: A, name: mike, ip: 192.168.1.10 }
        # Remove this record
        - { type: A, name: bob,  ip: 192.168.1.11, state: absent }
      zone.name2:
        - { type: A, name: alice,  ip: 192.168.1.12 }
        - { type: A, name: joanne, ip: 192.168.1.13 }
  tasks:
    - include_tasks: lines.yaml
      loop: "{{ zones | dict2items }}"
      loop_control:
        loop_var: records

我们循环的另一个任务文件:

# lines.yaml

---

- lineinfile:
    path: /tmp/{{ records.key }}.zone
    line: >-
      @   IN   "{{ item.type }}"   "{{ item.name }}" "{{ item.ip }}"
    regexp: >-
      ^@\s+IN\s+"{{ item.type }}"\s+"{{ item.name }}"\s+"{{ item.ip }}"$
    state: >-
      {{ 'present' if 'state' not in item or item.state == 'present' else 'absent' }}
  loop: "{{ records.value }}"

使用以下命令执行它:

ansible-playbook -i localhost, --diff main.yaml
于 2021-02-23T03:25:35.797 回答