我正在使用打包程序构建AMI,并为其提供Ansible。 AMI需要根据环境使用不同的变量来构建。因此,基于this文章,我使用了以下结构:
├── ansible.cfg
├── bamboo-server-dev.yml
├── environments
├── group_vars
│ ├── bamboo_packer_dev.yml
│ └── bamboo_packer_prod.yml
└── roles/
├── bamboo-server/
│ └── vars/
│ ├── bamboo-dev.yml
│ ├── bamboo-prod.yml
│ └── main.yml
└── ubuntu-server/
我的环境文件是我定义清单的位置,如下所示:
[bamboo_packer_dev]
localhost
[bamboo_packer_prod]
localhost
group_vars / bamboo_packer_dev.yml如下所示:
---
# Setup specific variables per environment
environment: "dev"
剧本Bamboo-server-dev.yml如下:
---
- hosts: bamboo_packer_dev
become: true
roles:
- ubuntu-server
- bamboo-server
最后,role / bamboo-server / vars / main.yml看起来像这样:
---
# Provide variables according to the environment
- name: provide variables
include_vars:
file: "bamboo-{{ environment }}.yml"
但是当我运行剧本时,会收到以下消息:
ERROR! failed to combine variables, expected dicts but got a 'dict' and a 'AnsibleSequence':
{}
[{"name": "provide variables", "include_vars": {"file": "bamboo-{{ environment }}.yml"}}]
似乎“环境”变量没有被获取。我不知道为什么。有人可以建议我的剧本出什么问题吗?还是实现这一目标的更好方法?我的Ansible版本是在Mojave上运行的2.9.1。
答案 0 :(得分:0)
您的vars
文件不能包含您完成的任务。 vars
中的文件必须(很清楚地告知您)是dict
而不是list
,因为vars
文件的密钥成为变量名,并且{{ 1}}不是变量名
也许您打算将该内容放入[]
,这将使您可以将roles/bamboo-server/tasks/main.yml
作为动作