我正在更换我们的 DNS 服务器。作为此操作的一部分,我们需要更新静态配置的服务器接口的 DNS 条目。但是,我遇到了一个问题。接口当前定义了 2 个条目,我想用 3 个条目替换它们。
此剧本使用 演示了该问题replace
。它将替换 DNS1 和 DNS2,但无法添加 DNS3。lineinfile
有类似的问题。
---
- hosts: canary
vars:
nameservers: [ '', 192.0.2.1, 192.0.2.2, 192.0.2.3 ]
tasks:
- name: nameservers
replace:
path: /etc/sysconfig/network-scripts/ifcfg-{{ansible_default_ipv4.interface}}
replace: \1="{{ item.1 }}"
regexp: (DNS{{ item.0 }}).+
with_indexed_items:
- "{{ nameservers }}"
when: ansible_distribution == "CentOS" and "nameservers" not in group_names
tags:
- debug
答案1
有什么问题lineinfile
?
如果存在行正则表达式,则将替换行;否则将添加新行。
---
- hosts: localhost
gather_facts: no
vars:
srv_list: [192.168.0.1, 192.168.0.2, 192.168.0.3]
tasks:
- lineinfile:
dest: /tmp/dns_test
regexp: ^DNS{{ item.0+1 }}
line: DNS{{ item.0+1 }}={{ item.1 }}
with_indexed_items: "{{ srv_list }}"
如果文件中存在相应值,则此代码将替换DNS<N>
为相应值srv_list
;如果文件中未定义具有此类索引的 DNS,则添加新行。