如何指定特定于环境的库存文件?

时间:2016-05-13 22:46:57

标签: ansible ansible-2.x

我有一个像这样的文件夹结构:

.
├── ansible.cfg
├── etc
│   ├── dev
│   │   ├── common
│   │   │   ├── graphite.yml
│   │   │   ├── mongo.yml
│   │   │   ├── mysql.yml
│   │   │   └── rs4.yml
│   │   ├── inventory
│   │   └── products
│   │       ├── a.yml
│   │       ├── b.yml
│   │       └── c.yml
│   └── prod
│       ├── common
│       │   ├── graphite.yml
│       │   ├── mongo.yml
│       │   ├── redis.yml
│       │   └── rs4.yml
│       ├── inventory
│       └── products
│           ├── a.yml
│           ├── b.yml
│           └── c.yml
├── globals.yml
├── startup.yml
├── roles
|   └── [...]
└── requirements.txt

在我的ansible.cfg中,我想做的事情如下:hostfile=./etc/{{ env }}/inventory,但这不起作用。有没有办法在Ansible中指定特定于环境的库存文件?

2 个答案:

答案 0 :(得分:1)

我认为普通产品和产品是可变文件。

正如@Deepali Mittal已经提到的,您的广告资源应该看起来像inventory/{{ env }}

inventory/prod中,您将定义一个组prod,在inventory/dev中,您将定义一个组dev

[prod]
host1
host2
hostN

这使您可以为proddev定义组变量。为此,只需创建一个文件夹group_vars/prod并将您的vars文件放入其中。

重新订购您的结构将如下所示:

.
├── ansible.cfg
├── inventory
│   ├── dev
│   └── prod
├── group_vars
│   ├── dev
│   │   ├── common
│   │   │   ├── graphite.yml
│   │   │   ├── mongo.yml
│   │   │   ├── mysql.yml
│   │   │   └── rs4.yml
│   │   └── products
│   │       ├── a.yml
│   │       ├── b.yml
│   │       └── c.yml
│   └── prod
│       ├── common
│       │   ├── graphite.yml
│       │   ├── mongo.yml
│       │   ├── mysql.yml
│       │   └── rs4.yml
│       └── products
│           ├── a.yml
│           ├── b.yml
│           └── c.yml
├── globals.yml
├── startup.yml
├── roles
|   └── [...]
└── requirements.txt

我不确定globals.yml是什么。如果是剧本,则它位于正确的位置。如果它是具有全局定义的变量文件,则应将其保存为group_vars/all.yml,并自动为所有主机加载。

现在您使用正确的库存文件调用ansible-playbook:

ansible-playbook -i inventory/prod startup.yml

我认为不可能像你问的那样评估ansible.cfg内的环境。

答案 1 :(得分:0)

我认为{{ env }}/inventory应该有效,而不是/inventory/{{ env }}。另外,如果你可以请分享你现在如何使用它以及你改变配置以获得一个

时得到的错误
相关问题