您如何指定特定于环境的清单文件?
How do you specify environment specific inventory files?
我的文件夹结构如下:
.
├── 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 中指定环境特定的清单文件?
我认为 {{ env }}/inventory
应该可以,而不是 /inventory/{{ env }}
。另外,如果你可以请分享你现在是如何使用它的,以及当你将配置更改为 envs one 时出现的错误
我假设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
内部的环境。
我的文件夹结构如下:
.
├── 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 中指定环境特定的清单文件?
我认为 {{ env }}/inventory
应该可以,而不是 /inventory/{{ env }}
。另外,如果你可以请分享你现在是如何使用它的,以及当你将配置更改为 envs one 时出现的错误
我假设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
内部的环境。