如何解决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
我相信这就是您要寻找的行为。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。