variables - Ansible:在另一个变量声明中使用一个变量
问题描述
我一直试图在另一个变量声明中使用一个变量。这是我的剧本中的代码:
- hosts: operate
roles:
- { role: dns, vargroup: 'test' }
- hosts: test
roles:
- common
- certbot
- ...
现在我的 dns 角色的第一行:
- debug: var=vargroup
- name: Extracting IP(s) {{vargroup}}
vars:
extractip: "{{ hostvars[groups['{{ vargroup }}'][0]]['ip'] }}"
set_fact:
newip: "{{ item.expose }}"
with_items:
- '{{ extractip }}'
Vargroup 在调试和我的任务名称中正确打印。但是在 extractip 部分,我遇到了这个错误:
{
"msg": "'dict object' has no attribute '{{ vargroup }}'",
"_ansible_no_log": false
}
显然,我尝试硬编码该行,例如:
extractip: "{{ hostvars[groups['test'][0]]['ip'] }}"
它就像一个魅力。我真的不知道如何在我的 var 声明中使用这个 var :)
解决方案
这可能是由 YAML 中引号的工作方式引起的。变量替换后'{{ extractip }}'
会变成'{{ hostvars[groups['{{ vargroup }}'][0]]['ip'] }}'
. 它将尝试解释'{{ vargroup }}'
为纯字符串而不是变量。
只需使用双引号即可
with_items:
- "{{ extractip }}"
由于 Ansible 不支持嵌套 "{{ }}" 构造,但您可以简单地删除该部分并使用"{{ hostvars[groups[vargroup][0]]['ip'] }}"
.
推荐阅读
- sql - 从具有自动增量列的一个表中复制
- asp.net-core-webapi - Hangfire 可以作为一个简单的方法计时器工作吗?
- java - 如何更新文本时钟?
- php - Laravel .htaccess 子文件夹
- google-sheets - 具有合并下拉菜单的 Google 电子表格动态条件格式
- android - 在 ffmpeg android 中打开编码器流时出错
- c# - WinForm 应用程序关闭时未完成的 .NET WebClient 异步操作会发生什么?
- ejabberd - Ejabberd api set_vcard database_failure
- jquery - 使用带有 li 元素的 jquery 进行 DOM 遍历
- python - 无法对齐图形,因为多个标签 doc2vec 在 doctag_syn0 中返回的项目多于训练数据中的项目