如何使用ansible中的嵌套变量动态设置playbook运行的主机组?

如何使用ansible中的嵌套变量动态设置playbook运行的主机组?,ansible,ansible-template,Ansible,Ansible Template,我是ansible的新手,似乎无法理解这一点。我有一个剧本,它配置了一堆kubernetes对象。应该动态插入hosts值。Ansible不允许嵌套变量,因此我不确定如何使其工作**live:*“{{k8s-{cluster}}-{{datacenter}}或查找('live_节点,服务器)}}”**** 如有任何建议,将不胜感激 - hosts: "{{ Live }}" max_fail_percentage: 1 gather_facts: no vars: live:

我是ansible的新手,似乎无法理解这一点。我有一个剧本,它配置了一堆kubernetes对象。应该动态插入hosts值。Ansible不允许嵌套变量,因此我不确定如何使其工作**live:*“{{k8s-{cluster}}-{{datacenter}}或查找('live_节点,服务器)}}”****

如有任何建议,将不胜感激

- hosts: "{{ Live }}"
  max_fail_percentage: 1
  gather_facts: no
  vars:
    live: **"{{ k8s-{{cluster}} -{{ datacenter }} or lookup('live_node', server)}}"**
  tasks:
    - block:
        - include: kubernetes_tasks/k8s.yaml

在处理jinja2时,您犯了一个常见错误:mustaches中的所有内容都是(加号或减号)python表达式;因此,不要尝试进行更多的模板化,只需像在print语句中一样引用变量或表达式:

vars:
  live: "{{ ('k8s-' + cluster + '-' + datacenter) or lookup('live_node', server) }}"

现在,因为你的问题太不精确了,严格来说这并不准确,因为左手边总是真实的,因此
查找将永远不会运行,但是如果你按照Jack说的做,并用一些例子更新,我们可以帮助您提供更准确的语法答案

您确实需要一些示例来说明您的期望。在
-{{{datacenter}
之前真的应该有空格吗?(也不要认为
之类的东西会起作用。非常感谢Jack和mdaniel。对于一个相当模糊的问题,我深表歉意。然而,你的指导给了我我所需要的。我正在寻找一种在变量中插入变量的方法。你们两人都绝对正确地认为“或”逻辑从未运行过,因为等式的第一部分总是正确的。这就是我最后所做的。live:{{lookup('live_node',server)if(server已定义,server | length!=0)else('k8s-'+cluster+'-'+datacenter)}。再次感谢!