我有3环境的项目。发展(Vangrant),分期(云)和生产(云)。我想有我的剧本使用是在一个文件中的每个环境的所有环境变量。它工作正常,如果我有每个环境中的一个服务器如下:
my_proj/
src/
provisioner/
host_vars/
dev-vm.yml
staging/
host_vars/
staging-web.yml
inventory
prod/
host_vars/
prod-web.yml
inventory
playbook.yml
Vagrantfile
这样,我的流浪使用ansible_local
自动应用的剧本和剧本使用变量从/my_proj/provisioner/host_vars/dev-vm.yml
分段/生产可以从流浪本身或任何其它计算机使用Ansible命令ansible-playbook provisioner/playbook.yml -i provisioner/staging
内被提供。
我的问题是,当我在我的分期/生产库存文件中添加多台服务器。我有重复my_proj/provisioner/staging/host_vars/web-staging.yml
为每个新服务器。有没有办法让每个环境中的“默认” env_vars文件?
例如,如果我的分期库存有3台服务器[staging-web
,staging-cli-01
,staging-cli-02
]我不想有3个相似的文件withing my_proj/provisioner/host_vars/
为staging-web.yml
,staging-cli-01.yml
,staging-cli-02.yml
。理想情况下,我只想有my_proj/provisioner/host_vars/all.yml
如何完成它或者更好的方式来组织项目建议任何想法?
这取决于。如果我没有理解你的问题,你的要求,符合您的问题被写入的方式(即你只需要在临时和生产群体行为),那么你可以添加一个group_vars
目录下staging
和production
并在那里放置all.yml
,所有的瓦尔移动到这个文件。
当您使用-i
to指定清单文件,group_vars
的内容,像host_vars
将被载入。
您可以将您的主机到组您的库存之内,并与all.yml
更换<group_name>.yml
进一步完善这一做法。
但要小心,如果你使用这种技术为您的游民主机(即放置group_vars
目录在相同的目录中的策略),你可能会得不到所期望的结果。这是由于在具有比在库存水平更高的优先级的剧本水平group_vars。
见Ansible Variables docs更多信息。