使用 Ansible 推送动态配置文件
Pushing a dynamic configuration file using Ansible
我正在尝试将配置文件推送到所有 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']
有没有什么简单的方法可以解决这个问题,让事情变得简单而动态?
如果只是对远程主机上现有文件的一行更改,您可以使用 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
}
我正在尝试将配置文件推送到所有 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']
有没有什么简单的方法可以解决这个问题,让事情变得简单而动态?
如果只是对远程主机上现有文件的一行更改,您可以使用 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
}