ansible - 我可以为给定 Ansible 环境中的所有主机设置默认的 host_vars 文件吗?
问题描述
我有一个有 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
这样我的 Vagrantansible_local
用来自动应用剧本,剧本使用来自的变量/my_proj/provisioner/host_vars/dev-vm.yml
暂存/生产可以从 Vagrant 本身或任何其他具有 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 个类似的文件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
指定您的库存文件时,将加载group_vars
, like的内容。host_vars
您可以通过将主机放入清单中的组并替换all.yml
为<group_name>.yml
.
但是请注意,如果您将这种技术用于您的 vagrant 主机(group_vars
即将一个目录与您的 playbook 放在同一目录中),您可能不会得到您期望的结果。这是因为 playbook 级别的 group_vars 具有比库存级别更高的优先级。
有关更多信息,请参阅Ansible 变量文档。
推荐阅读
- dialogflow-es-fulfillment - 当用户单击对话框流按钮链接时如何触发后续意图
- sql-server - Django 迁移不包含与 MSSQL 数据库的复合外键关系和复合主键
- apache-kafka - 是否可以在 DCOS 中监控 kafka 生产者/消费者指标?
- android - 我正在开发 Cordova/Ionic 应用程序,全屏视频播放已停止在 Chrome 73 中工作
- ajax - 我在 django 中对这个 AJAX 做错了什么?
- angular - rxjs-5-to-6 “找不到任何可能的迁移”
- python - Python 运行所需的最少文件/库是什么?
- android - 当我尝试从服务器获取图像时出现 IndexOutOfBoundsException
- firebase - Firebase 功能触发两次
- javascript - 如何在新状态道具中访问其他状态/属性值