dictionary - 在 Ansible 中动态扩展字典变量
问题描述
我正在尝试统一我安装软件包的方式,我有以下
vars/main.yml:
---
packages:
system:
common:
- crudini
- dump
- duplicity
- git
- mdadm
- irssi
- lynx
- postfix
- powerline
- rsync
- tmux
- vim
Debian:
- ntp
Fedora:
- langpacks-en
- langpacks-nl
- livecd-tools
- rktime
- tmux-powerline
- tuned
- vim-powerline
以及以下任务:
- name: install ansible dependencies
package: name={{ item }} state=present
with_flattened:
- "{{ packages.system.common }}"
- "{{ packages.system.Fedora }}"
- "{{ vars['packages.system.' + ansible_distribution] }}"
when: ansible_distribution == "Fedora"
tags:
install_custom2
这会导致以下错误:
TASK [common : install ansible dependencies] *******************************************************************************************
fatal: [host]: FAILED! => {"msg": "'dict object' has no attribute u'packages.system.Fedora'"}
请注意,"{{ packages.system.Fedora }}"
工作正常但"{{ vars['packages.system.' + ansible_distribution] }}"
失败(也扩展packages.system.Fedora
为)。它看起来像一个类型错误。当我将 vars/main.yml 中的包名称组织为单独的列表时,它确实有效。但我想创建这个字典结构,因为它很好地组织了变量。有没有办法像列表变量一样动态扩展字典变量?
解决方案
明白了,它适用于:"{{ packages.system[ansible_distribution] }}"
推荐阅读
- python - corpus gensim 中的热门词
- c# - IQbservable 查询中的多态性 (Qactive)
- javascript - 单词的正则表达式,后跟 32 个字符,后跟特殊字符
- bash - 在命令行中从 python 脚本捕获返回值
- c++ - C++透明字符串内存压缩
- azure - CloudBlobClient.startCopyAsync() 的源代码
- c++ - 如何使用指针遍历结构数组中的数组
- javascript - 托管在 firebase 上的 node.js/express.js 无法导出数据库和身份验证侦听器
- excel - 将 If 语句添加到条件格式 VBA 宏
- java - 为什么我可以将数值变量声明为 double 但仍使用 .nextInt()?