variables - ansible 变量名本身就是一个变量。如何阅读?需要语法
问题描述
我在变量文件中定义了一个 ansible 变量,如下所示:
cat myvarsfile.yml
newpass1: oldpass3
newpass2: oldpass9
newpass3: oldpass5
…
在我的主机剧本中,我加载如下变量文件:
- name: Load password variable file
include_vars: "{{ playbook_dir }}/myvarsfile.yml"
当用户传递参数时,newpass2
我应该将其视为变量并从myvarsfile.yml
文件中加载其值。
ansible-playbook -i /var/test.hosts test.yml -e mypass="newpass2"
old_pass
考虑到未定义,我尝试了以下代码;但它不起作用。
- debug:
msg: "The old value for {{ mypass }} is {{ old_pass | default( vars[mypass] ) }}"
收到以下错误:
"msg": "The task includes an option with an undefined variable. The error was: 'dict object' has no attribute u'newpass2'\n\nThe error appears to have been in ….
解决方案
假设myvarsfile.yml
在您的问题中,鉴于此剧本:
- hosts: localhost
gather_facts: false
tasks:
- include_vars: myvarsfile.yml
- debug:
msg: "given mypass={{ mypass }}, old password={{old_pass|default(vars[mypass])}}"
运行此命令:
ansible-playbook playbook.yml -e mypass=newpass1
产生:
PLAY [localhost] **********************************************************************************************************************************************************
TASK [include_vars] *******************************************************************************************************************************************************
ok: [localhost]
TASK [debug] **************************************************************************************************************************************************************
ok: [localhost] => {
"msg": "given mypass=newpass1, old password=oldpass3"
}
PLAY RECAP ****************************************************************************************************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
我相信这就是你正在寻找的行为。
推荐阅读
- lme4 - gtsummary 和 lmerTest
- python - 为什么我的 django 模板无法识别我在 views.py 文件中设置的 url 参数?
- ruby-on-rails - Rails 协会变得难以理解
- typescript - 基于可选参数的打字稿函数返回类型
- sql - 触发器捕获数据并将其移动到具有不同列的另一个表
- r - 如何遍历多个列以生成多个交叉表
- python - Pig Latin Program 出于某种原因删除了标点符号。为什么有任何线索?
- javascript - 使用 FileReader 加载后透明图像不透明
- python - 无法从 df 中删除案例
- javascript - 为什么我不能以这种方式在泛型中声明方法?