ansible - 如何在 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
解决方案
在处理 jinja2 时,您犯了一个常见错误:胡须内的所有内容都是(加号或减号)python 表达式;所以不要尝试做更多的模板,只需像在 print 语句中一样引用变量或表达式:
vars:
live: "{{ ('k8s-' + cluster + '-' + datacenter) or lookup('live_node', server) }}"
现在,因为你的问题太不精确了,严格来说这并不准确,因为左边总是真实的,因此lookup
永远不会运行,但如果你按照杰克所说的去做并更新一些例子,我们可以提供帮助你有一个语法更准确的答案
推荐阅读
- numpy - 提取 Numpy 数组的第一列和最后一列并填充一维数组
- javascript - JavaScript 阅读更多,阅读更少按钮,包含来自 MySQL 数据库和 PHP 的动态数据
- list - 在给定所有可能组合的列表的情况下实现排列
- linux - 如何强制 g++ 尊重#define _POSIX_C_SOURCE 200809L
- delphi - 使用 StringList 解析文本:\n vs #13#10 vs sLineBreak
- html - 更新方法传递旧值而不是 Angular 中的新值
- c - 如何在需要用户输入的程序中使用 c 中的 gnu 调试器
- php - 使用 laravel 服务并将代码注入控制器
- android - 如何使用 ARCORE 从 ARScene 相机扫描二维码
- java - OKHttp的BufferedSink(或BufferedSource)中如何实现seek()函数?