首页 > 解决方案 > 如何在 ansible 中使用嵌套变量来动态设置 playbook 运行的主机组?

问题描述

我是 ansible 的新手,似乎无法弄清楚这一点。我有一个配置一堆 kubernetes 对象的剧本。主机值应动态插值。Ansible 不允许嵌套变量,所以我不确定如何让它工作。**live: **"{{ k8s-{{cluster}} -{{ datacenter }} or lookup('live_node', server)}}"****

任何建议将不胜感激。

- 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

标签: ansibleansible-template

解决方案


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

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

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


推荐阅读