我可以为给定Ansible环境中的所有主机设置默认主机\u vars文件吗?
我有一个项目与3个环境。开发(Vangrant)、登台(cloud)和生产(cloud)。我希望playbook使用的所有环境变量都位于每个环境的一个文件中。如果每个环境有一台服务器,则工作正常,如下所示:我可以为给定Ansible环境中的所有主机设置默认主机\u vars文件吗?,ansible,Ansible,我有一个项目与3个环境。开发(Vangrant)、登台(cloud)和生产(cloud)。我希望playbook使用的所有环境变量都位于每个环境的一个文件中。如果每个环境有一台服务器,则工作正常,如下所示: my_proj/ src/ provisioner/ host_vars/ dev-vm.yml staging/ host_vars/ staging-web.yml inventory prod/
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\u local
自动应用剧本,剧本使用/my\u proj/provisioner/host\u vars/dev vm.yml
可以使用命令Ansible playbook provisioner/playbook.yml-i provisioner/Staging
从Vagrant本身或任何其他具有Ansible的计算机中设置登台/生产
我的问题是在我的暂存/生产库存文件中添加多个服务器时。我必须为每个新服务器复制my_proj/provisioner/staging/host_vars/web staging.yml
。有没有一种方法可以让每个环境都有一个“默认”的env_vars文件
例如,如果我的登台资源清册有3台服务器[staging web
,staging-cli-01
,staging-cli-02
],我不希望有3个类似的文件,其中包含my_proj/provisioner/host_vars/
作为staging web.yml
,staging-cli-01.yml
,staging-cli-02.yml
。理想情况下,我只需要my_proj/provisioner/host_vars/all.yml
对如何完成这项工作有什么想法,或者对更好的项目组织方式有什么建议吗?视情况而定。如果我正确理解了您的问题,并且您的要求与您的问题的编写方式相匹配(即,您只需要在登台和制作中使用组行为),那么您可以在
登台
和制作
下添加一个组变量
目录,并在其中放置一个all.yml
,正在将所有变量移到此文件中
使用-i
指定库存文件时,将加载组变量
的内容,如主机变量
您可以通过在资源清册中将主机分组并将all.yml
替换为.yml
来进一步完善此方法
但是,请注意,如果您对您的流浪主机使用此技术(即将group\u vars
目录与您的playbook放在同一目录中),您可能不会得到预期的结果。这是因为剧本级别的组变量的优先级高于库存级别的组变量
有关更多信息,请参阅。有库存组及其VAR用于此目的。太好了,我将我的Vagrant与
host\u vars
一起保存,而对于暂存/生产,我将文件夹host\u vars
重命名为group\u vars
,并将all.yml
与之一起保存。。。在staging/prod inventory上,我用所有服务器创建了一个名为all
的组。