提问人:samb 提问时间:11/14/2023 更新时间:11/15/2023 访问量:42
在 Ansible yaml 模板中呈现数字
Render numbers inside an Ansible yaml template
问:
非常接近使用 Ansible 的三元运算符创建一个 int var,该答案 https://stackoverflow.com/a/69109779/446302
在 Ansible 项目中,我尝试使用一个包含整数内容的 yaml 模板文件,如下所示:
---
my_service:
enable_ipv6: false
node_listen:
- port: '{{ http_port | int }}'
ip: '{{ srv_ip }}'
不幸的是,它呈现为:
---
my_service:
enable_ipv6: false
node_listen:
- port: '8080'
ip: '192.0.0.2'
我使用的应用程序对端口类型非常严格,这意味着除非我能给它一个 int 端口号,否则它会崩溃。
由于其他子设置的循环,我怎么能知道我需要将其保留在模板文件中?
答:
2赞
U880D
11/14/2023
#1
对于 Jinja2 模板文件 service.yml.j2
作为输入
---
my_service:
enable_ipv6: false
node_listen:
- port: {{ HTTP_PORT }}
ip: '{{ SRV_IP }}'
通过最小示例 playbook main.yml
进行处理
---
- hosts: localhost
become: false
gather_facts: false
vars:
HTTP_PORT: 8080
SRV_IP: 127.0.0.1
tasks:
- template:
src: service.yml.j2 # input file
dest: service.yml # output file
将生成一个输出文件 service.yml
,其内容为
---
my_service:
enable_ipv6: false
node_listen:
- port: 8080
ip: '127.0.0.1'
评论
0赞
samb
11/14/2023
啊......我在 Jinja2 文件中混合了 Ansible 的 yml 语法和 yml。咔嚓咔嚓!
1赞
Vladimir Botka
11/14/2023
#2
给定模板
shell> cat my_service.yml
---
my_service:
enable_ipv6: false
node_listen:
port: {{ http_port }}
ip: {{ srv_ip }}
和变量
http_port: 8080
srv_ip: 192.0.0.2
使用模板查找插件读取它
data: "{{ lookup('template', 'my_service.yml')|from_yaml }}"
给
data:
my_service:
enable_ipv6: false
node_listen:
ip: 192.0.0.2
port: 8080
data.my_service.node_listen.port|type_debug: int
用于测试的完整 playbook 示例
- hosts: all
vars:
http_port: 8080
srv_ip: 192.0.0.2
data: "{{ lookup('template', 'my_service.yml')|from_yaml }}"
tasks:
- debug:
var: data
- debug:
var: data.my_service.node_listen.port
- debug:
var: data.my_service.node_listen.port|type_debug
评论