我有一个具有3个环境的项目。开发(担保),登台(云)和生产(云)。我希望我的剧本使用的所有环境变量都放在每个环境的一个文件中。如果每个环境中只有一台服务器,则如下所示:
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-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/
为{ {1}},staging-web.yml
,staging-cli-01.yml
。理想情况下,我只需要staging-cli-02.yml
关于如何完成它的任何想法或建议更好的组织项目的方式?
答案 0 :(得分:1)
这取决于。如果我正确理解了您的问题,并且您的要求与问题的编写方式相符(即,您仅需要在暂存和生产中使用组行为),则可以在group_vars
和{下添加一个staging
目录{1}},然后在其中放置production
,将所有变量都移到该文件中。
使用all.yml
指定清单文件时,将加载-i
的内容,例如group_vars
。
您可以通过将主机放在清单中的组中并将host_vars
替换为all.yml
来进一步完善此方法。
但是请注意,如果您对流浪汉主机采用此技术(即,将<group_name>.yml
目录放置在与剧本相同的目录中),则可能无法获得预期的结果。这是因为在剧本级别的group_vars的优先级高于在广告资源级别的group_vars。
有关更多信息,请参见Ansible Variables docs。