我可以为给定Ansible环境中的所有主机设置默认主机\u vars文件吗?

我可以为给定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/

我有一个项目与3个环境。开发(Vangrant)、登台(cloud)和生产(cloud)。我希望playbook使用的所有环境变量都位于每个环境的一个文件中。如果每个环境有一台服务器,则工作正常,如下所示:

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
的组。