使用Ansible推送动态配置文件

时间:2015-10-27 11:09:25

标签: ansible ansible-playbook

我正在尝试将配置文件推送到所有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']

有没有什么容易接近这个并且简单而有活力的东西?

1 个答案:

答案 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
}