【发布时间】:2017-01-12 10:22:01
【问题描述】:
我正在尝试更改远程节点的主机名,这部分有效:
- name: Change the hostname
lineinfile: dest=/etc/hosts
regexp='.*{{ item }}$'
line="{{ hostvars[item].ansible_default_ipv4.address }} {{ LOCAL_HOSTNAME }} {{ LOCAL_HOSTNAME }}.{{ LOCAL_DOMAIN_NAME }}"
state=present
when: hostvars[item].ansible_default_ipv4.address is defined
with_items: "{{ groups['dbservers'] }}"
因此,它会将IP hostname FQDN 附加到/etc/hosts 文件的末尾。
我想要实现的是删除现有条目,然后添加此部分,这是我尝试过的:
- name: Change the hostname
lineinfile: dest=/etc/hosts
# regexp='.*{{ item }}$'
regexp='{{ hostvars[item].ansible_default_ipv4.address }}'
state=absent
# line="{{ hostvars[item].ansible_default_ipv4.address }} {{ LOCAL_HOSTNAME }} {{ LOCAL_HOSTNAME }}.{{ LOCAL_DOMAIN_NAME }}"
# state=present
when: hostvars[item].ansible_default_ipv4.address is defined
with_items: "{{ groups['dbservers'] }}"
但是,这一直显示以下错误:
The offending line appears to be:
# regexp='.*{{ item }}$'
regexp="{{ hostvars[item].ansible_default_ipv4.address }}"
^ here
We could be wrong, but this one looks like it might be an issue with
missing quotes.
将引号从 '' 更改为 "" 似乎不起作用。我的问题是:
- 这是查询 IP 的正确方法吗,以便删除 在主机文件中的条目?
- 如果是这样,有人可以指出 句法?
- 有没有更高效的方法来完成移除任务
(所有)现有条目,然后在
/etc/hosts? 中添加该行?
【问题讨论】:
-
@techraf - 这是我最初的例子中被注释掉的部分。以下是完整代码:gist.github.com/anonymous/948c813d6ab4f5bcbd7cd0bee0a21d69
标签: regex linux ansible devops