ansible - 在ansible中替换Jijnja模板文件中的主机变量
问题描述
我需要用主机文件中定义的变量替换文件。
- 以下是“host_vars/abc.1234.com”中定义的主机变量
env: acc
abcserverName:
- name: abc1
- name: abc2
- playbook文件有以下内容
- hosts: "abc.1234.com"
become: yes
tasks:
- name: deploy abc control file
template:
src: abc-control.j2
dest: /etc/init.d/{{ env }}-{{ item.name }}
with_items:
- "{{ abcservername }}"
- name: start abcserver
command: /etc/init.d/control-{{ env }}-{{ item.name }} start
with_items:
- "{{ abcserverName }}"
这将复制 init.d 中的 2 个文件,如下所示:
/etc/init.d/control-acc-abc1
/etc/init.d/control-acc-abc2
要求:
在上述每个控制文件中,我还需要获取正确的“abcserverName”
例如在“/etc/init.d/control-acc-abc1”中,我想要
SERVER_NAME=abc1
例如在“/etc/init.d/control-acc-abc2”中
SERVER_NAME=abc2
我对 jinja 模板了解不多,谷歌向我展示了复杂的示例。任何帮助实现这一点表示赞赏。
解决方案
以这个 jinja2 代码为例:
SERVER_NAME={{ server_name }}
server_name
实际上并没有定义,要使用它,您需要将它作为变量传递给您的模板。
使用您的任务:
- name: deploy abc control file
template:
src: abc-control.j2
dest: /etc/init.d/{{ env }}-{{ item.name }}
with_items:
- "{{ abcservername }}"
vars:
server_name: {{ item.name }}
现在“control-acc-abc1”将 server_name 设置为 abc1,“control-acc-abc2”将 server_name 设置为 abc2
推荐阅读
- docker - 远程 AWS 上的 Zalenium 集线器 IP
- android - Android 上的“su”既不报错也不生效。如何在 root 设备上成功运行 su 命令?
- javascript - 如何优化重新训练的 ssd_mobilenet_v2_coco 以进行 tensorflowjs 推理?
- php - 我尝试使用 PHPMailer 发送电子邮件,但出现错误:
- javascript - 如何编写可重用和模块化的 Redux 选择器?
- mysql - 如何通过聚合和标记来编写a?
- python - 如何在 Selenium for Python 上由 .click() 打开的新选项卡上使用 driver.current_url
- php - 无法在 html 表单中获取 id 值
- odata - 更正 UI5 中 Edm.Int16 数据类型的 filterOperator
- javascript - 错误:必须使用解构状态分配