我正在尝试将配置文件推送到所有app_server
这是我的库存文件
[app_servers]
1.2.3.4
5.6.7.8
我的配置文件如下所示
conf
{
name : configuration file
ip : a.b.c.d
}
我的任务是推送此配置文件,IP值应替换为该服务器的IP。
例如,在1.2.3.4中配置文件将是conf
{
name : configuration file
ip : 1.2.3.4
}
在5.6.7.8中,它将是
conf
{
name : configuration file
ip : 5.6.7.8
}
我尝试使用replace命令并使用group进行迭代,如下所示,但是对于每个服务器,它的循环次数是由于没有得到正确的IP替换。
- hosts: all
sudo: yes
tasks:
- replace: dest=/home/ubuntu/config regexp='a\.b\.c\.d' replace=' {{ hostvars[item]['inventory_hostname'] }}'
with_items: groups['app_servers']
有没有什么容易接近这个并且简单而有活力的东西?
答案 0 :(得分:1)
如果它只是对远程主机上现有文件的单行更改,则可以使用lineinfile
。
但是,你说配置文件应该被推送到远程主机,在这种情况下最好使用template
模块,在Jinja2模板中编写文件,然后在推送前用变量填充它它
从facts gathered by Ansible获取远程主机的IP,例如从ansible_default_ipv4
获取。
您当地有config.j2
:
{
name: configuration file
ip: {{ ansible_default_ipv4.address }}
}
从模板构建文件的任务:
- name: upload config file
template:
dest: /home/ubuntu/config
src: config.j2
例如,IP 192.168.10.10的远程主机上的结果文件/home/ubuntu/config
将是:
{
name: configuration file
ip: 192.168.10.10
}