替换config

时间:2018-08-06 12:52:10

标签: ansible ansible-2.x ansible-inventory

我有一个json,如下所示:

{
    "bootstrap": true,
    "server": true,
    "datacenter": "aws",
    "data_dir": "/var/consul",
    "log_level": "INFO",
    "enable_syslog": true
}

这是在3台服务器上,它们在清单文件中都为

[consul]
10.0.0.1
10.0.0.2
10.0.0.3

现在要使节点加入群集,我实际上还必须添加以下配置行

"start_join": ["ip_of_other_node_1", "ip_of_other_node_2"] 

这将在3台服务器中的每台上进行

所以基本上,这意味着如果10.0.0.1是群集中的那些节点之一,则其配置将类似于

{
    "bootstrap": true,
    "server": true,
    "datacenter": "aws",
    "data_dir": "/var/consul",
    "log_level": "INFO",
    "enable_syslog": true,
    "start_join": ["10.0.0.2","10.0.0.3"]
}

我正尝试通过ansible做到这一点,如下所示:

  - name: Add the ip's of other servers to join cluster
    lineinfile:
        path: /etc/consul.d/server/config.json
        regexp: '^"enable_syslog"'
        insertafter: '^"enable_syslog"'
        line: '"start_join": ["{{ groups['consul'][1] }}", "{{ groups['consul'][2] }}"]'
    when: inventory_hostname == '{{ groups['consul'][0] }}'

以下哪一项并没有真正帮助我说语法错误:,我不确定通过ansible实现此类目标的最佳方法是什么,以及当我增加库存服务器时如何解决这种情况。< / p>

1 个答案:

答案 0 :(得分:-1)

您可以使用Template module来替换服务器上的配置文件,而不必使用正则表达式对其进行更改。这样,您可以使用常规的start_join模板添加一个任务来生成一个新的配置文件,其中的jinja2字段包含主机文件的元素(或任何其他且更复杂的配置)。