ansible - 在配置中替换一行的 Ansible 方法
问题描述
我有一个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 实现这样的事情的最佳方法是什么,以及当我增加库存服务器时如何解决这种情况。
解决方案
您可以使用模板模块替换服务器上的配置文件,而不是使用正则表达式更改它。这样,您可以使用常规模板添加任务以生成新的配置文件,其中start_join
包含主机文件(或任何其他更复杂的配置)元素的字段。jinja2
推荐阅读
- html - 在不使用 AJAX 的情况下检查 django 中已经存在的用户名
- javascript - 我试图在弹出窗口打开的情况下为滚动设置动画,但它不起作用
- unity3d - 如果片段着色器只接收顶点输入,它如何为每个像素运行?
- keras - Keras 在自己的模型上迁移学习
- apache-spark-sql - Spark:带有架构的 Json 返回 Null
- c++ - C ++文件可配置的编译时多态模式?
- docker - 请等待....对于第一个基于 docker 的詹金斯引导
- android - 在多个设备上进行 Android 测试分片
- scala - 在 Scala 中安静地关闭多个资源的更清洁方法
- javascript - 如何修复 gulp 任务 - css 任务不停地工作?