Ansible 在配置中替换行的一种简单方法

Ansible 在配置中替换行的一种简单方法,ansible,ansible-2.x,ansible-inventory,Ansible,Ansible 2.x,Ansible Inventory,我有一个json,如下所示: { "bootstrap": true, "server": true, "datacenter": "aws", "data_dir": "/var/consul", "log_level": "INFO", "enable_syslog": true } 这是在ansible清单文件中的3台服务器上,如下所示: [consul] 10.0.0.1 10.0.0.2 10.0.0.3 现在,为了让节点加入集群,我

我有一个json,如下所示:

{
    "bootstrap": true,
    "server": true,
    "datacenter": "aws",
    "data_dir": "/var/consul",
    "log_level": "INFO",
    "enable_syslog": true
}
这是在ansible清单文件中的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实现这种效果的最佳方法是什么,也不确定当我增加库存中的服务器时如何处理这种情况。

您可以使用替换服务器上的配置文件,而不是用正则表达式就地更改它。通过这种方式,您可以使用常规的
jinja2
模板添加一个任务,使用包含主机文件元素(或任何其他更复杂配置)的
start\u join
字段生成一个新的配置文件。

标题表明问题是关于“替换配置中的一行”;问题主体显示原始文件中有6行,预期文件中有7行。确切地说,哪一行被替换为什么?