在 Ansible yaml 模板内渲染数字

问题描述 投票:0回答:1

非常接近 使用 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 端口号,否则它会崩溃。

由于其他子设置的循环,我知道我需要将其保留在模板文件中,如何投射它?

ansible casting jinja2 ansible-template
1个回答
0
投票

对于 Jinja2 模板 文件

service.yml.j2

---
my_service:
  enable_ipv6: false
  node_listen:
    - port: {{ HTTP_PORT }}
      ip: '{{ SRV_IP }}'

一个最小示例剧本

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
      dest: service.yml

将生成一个输出文件

service.yml
,内容为

---
my_service:
  enable_ipv6: false
  node_listen:
    - port: 8080
      ip: '127.0.0.1'
© www.soinside.com 2019 - 2024. All rights reserved.