Ansible中如何正确调用deploy_host_group变量获取目标值?
解决Ansible变量引用错误:获取字典变量中app_profile的值
错误原因
你当前的deploy_host_group变量是字符串类型的ui_cluster1,而非指向同名的字典变量。直接对字符串调用['app_profile']会触发属性不存在的错误,因为字符串没有该字典属性。
解决方案
方法1:使用vars关键字动态引用变量(推荐,无需修改原有变量定义)
修改deployment_tasks.yml中的debug任务,通过vars[变量名]的方式动态获取目标字典:
- debug: msg: "{{ vars[deploy_host_group]['app_profile'] }}"
vars[deploy_host_group]会根据deploy_host_group的字符串值ui_cluster1,找到对应的字典变量,进而提取app_profile的值。
方法2:调整变量定义,让deploy_host_group直接指向字典
如果允许修改变量文件,可将deploy_host_group改为直接引用目标字典:
# vars file for deployment_role deploy_host_group: "{{ ui_cluster1 }}" ui_cluster1: app_profile: Hello,world,message
此时原debug任务msg: "{{deploy_host_group['app_profile']}}"可正常执行。同时需要调整when条件,因为此时deploy_host_group是字典而非字符串:
- name: Performing deployment tasks for UI cluster1 include_tasks: deployment_tasks.yml when: - deploy_host_group.app_profile is defined # 或根据实际需求调整判断逻辑
验证效果
执行playbook后,debug模块会输出:
ok: [localhost] => { "msg": "Hello,world,message" }
内容的提问来源于stack exchange,提问作者Akhil S
相关产品推荐
相关产品推荐

