在Ansible中为每个环境分配变量问题

时间:2019-12-02 17:57:17

标签: ansible ansible-2.x packer ansible-inventory

我正在使用打包程序构建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。

1 个答案:

答案 0 :(得分:0)

您的vars文件不能包含您完成的任务。 vars中的文件必须(很清楚地告知您)是dict而不是list,因为vars文件的密钥成为变量名,并且{{ 1}}不是变量名

也许您打算将该内容放入[],这将使您可以将roles/bamboo-server/tasks/main.yml作为动作