0

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

.
├── 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 中指定环境特定的清单文件?

4

2 回答 2

1

我假设 common 和 products 是可变文件。

正如@Deepali Mittal 已经提到的那样,您的库存应该看起来像inventory/{{ env }}

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

[prod]
host1
host2
hostN

这使您能够为prod和定义组变量dev。为此,只需创建一个文件夹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像你问的那样评估内部环境。

于 2016-05-14T11:31:48.867 回答
0

我认为应该工作而不是{{ env }}/inventory, 。/inventory/{{ env }}另外,如果您可以请分享您现在如何使用它以及将配置更改为 envs one 时遇到的错误

于 2016-05-14T07:49:18.823 回答