Ansible中YAML嵌套变量使用问题:跨架构包安装遇阻
问题解决方法
你的核心问题有两个:
- 变量引用用了双大括号嵌套,Ansible里变量只需要一层
{{ }}包裹 - 直接拼接变量名的写法无法被解析为对应的变量,需要通过动态变量查找的方式获取值
不需要拆分任务,用以下两种方式都能在同一个任务里完成不同架构的包安装:
方式一:动态调用现有变量
修改yum模块的name字段,通过vars字典结合字符串拼接来获取对应架构的包列表:
vars: x86_64_pckg: - p1 - p2 - p3 s390x_pckg: - p4 - p5 name: install backup tool yum: name: "{{ vars[ansible_architecture ~ '_pckg'] }}" state: latest
这里ansible_architecture ~ '_pckg'会拼接出x86_64_pckg或s390x_pckg,再通过vars[]获取对应的变量值。
方式二:重构变量结构(更推荐)
把变量改成字典映射的形式,结构更清晰,后续扩展其他架构也更方便:
vars: arch_packages: x86_64: - p1 - p2 - p3 s390x: - p4 - p5 name: install backup tool yum: name: "{{ arch_packages[ansible_architecture] }}" state: latest
直接通过arch_packages[ansible_architecture]就能拿到对应架构的包列表,逻辑更直观。
内容的提问来源于stack exchange,提问作者Suffren
相关产品推荐
相关产品推荐

