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