我可以为一个给定Ansible环境中的所有主机的默认host_vars文件?

问题描述 投票:0回答:1

我有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-webstaging-cli-01staging-cli-02]我不想有3个相似的文件withing my_proj/provisioner/host_vars/staging-web.ymlstaging-cli-01.ymlstaging-cli-02.yml。理想情况下,我只想有my_proj/provisioner/host_vars/all.yml

如何完成它或者更好的方式来组织项目建议任何想法?

ansible
1个回答
1
投票

这取决于。如果我没有理解你的问题,你的要求,符合您的问题被写入的方式(即你只需要在临时和生产群体行为),那么你可以添加一个group_vars目录下stagingproduction并在那里放置all.yml,所有的瓦尔移动到这个文件。

当您使用-ito指定清单文件,group_vars的内容,像host_vars将被载入。

您可以将您的主机到组您的库存之内,并与all.yml更换<group_name>.yml进一步完善这一做法。

但要小心,如果你使用这种技术为您的游民主机(即放置group_vars目录在相同的目录中的策略),你可能会得不到所期望的结果。这是由于在具有比在库存水平更高的优先级的剧本水平group_vars。

Ansible Variables docs更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.