使用 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
}