首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ansible YAML中的条件列表元素

Ansible YAML中的条件列表元素
EN

Stack Overflow用户
提问于 2018-07-24 12:41:15
回答 2查看 3.2K关注 0票数 2

我有一本战术手册可以把领事部署在我们服务器上的码头集装箱里。我基本上是这样的:

代码语言:javascript
复制
- name: run consul
  hosts: all
  tasks:
    - name: consul | run consul servers and agents
      docker_container:
        name: consul
        network_mode: bridge
        published_ports:
          - "{{ docker_host_ip }}:8301:8301"
          - "{% if consul_server is defined %}{{ docker_host_ip }}:8300:8300{% endif %}"
...

..。但最后一行不起作用。我只想公开端口8300,如果领事是作为服务器部署的,服务器存储在每个主机的consul_server变量中。

如何有条件地将元素附加到YAML列表/数组?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-24 13:15:06

过滤器是你的朋友。

代码语言:javascript
复制
- set_fact:
   myTrue  : true
   myFalse : false
   myList  :
    - first
   myAdd   :
    - second

- debug:
    msg: "When TRUE: {{ myTrue |
           ternary( myList | union( myAdd ), myList ) }}"

- debug:
    msg: "When FALSE: {{ myFalse |
           ternary( myList | union( myAdd ), myList ) }}"

产出(略作修改以消除无关之处):

代码语言:javascript
复制
TASK [test : debug] 
     "msg": "When TRUE: [u'first', u'second']"

TASK [test : debug] 
     "msg": "When FALSE: [u'first']"
票数 2
EN

Stack Overflow用户

发布于 2018-07-24 13:11:27

您可以使用数组concat:

代码语言:javascript
复制
- name: consul | run consul servers and agents
  docker_container:
    name: consul
    network_mode: bridge
    published_ports: "{{ [ docker_host_ip ~ ':8301:8301' ] + ([ docker_host_ip ~ ':8300:8300' ] if consul_server is defined else [])}}"

在示例代码中,如果定义了{{ docker_host_ip }}:8300:8300,则将consul_server添加到list中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51498898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档