我被困住了。在网上用谷歌搜索,找不到答案。
我多年来一直在使用 Ansible,但总是使用静态 list 。为了区分暂存和生产等不同环境,我使用了不同的静态 list 文件 staging
和 production
, 分别。当我需要配置登台服务器时,我会这样做:
ansible-playbook site.yml -i staging
当我想为生产做同样的事情时,我会这样做:
ansible-playbook site.yml -i production
暂存和生产都需要具有不同值的变量,所以我有
group_vars/staging
和 group_vars/production
.一切都很好,并且根据最佳实践。现在,我需要在 AWS 中预置 EC2 实例。我正在使用 this AWS guide .我有一本包含两部戏剧的剧本。第一个是针对
localhost
,在 AWS 中创建/查找所需的 EC2 实例,并使用 add_host
填充组.第二场比赛使用该组运行在第一场比赛中发现的 EC2 实例。一切都按照那个指南。除了一件事,这一切都很好。我不知道如何指定要配置的环境,因此未从
group_vars/(staging|production)
加载所需的变量.基本上,我想要的是类似于 -i (staging|production)
这些年来我一直使用静态库存,但似乎使用 -i
现在没有意义,因为库存是动态的。我想要一种能够从 group_vars/staging
加载变量的方法或 group_vars/production
基于我传递给 ansible-playbook
的参数当我运行它时。我怎么做?最佳做法是什么?
最佳答案
虽然我不确定如何使用 ansible EC2 模块,因为我们不使用它从 ansible 级别构建盒子,但有一种简单的方法可以通过 ec2 external inventory script 获得您想要的东西。 inventories/main
中的简单设置.您需要做的是设置 ec2.py
和 ec2.ini
在你的inventories
所以它将被用作实例的来源。确保取消注释 group_by_tag_keys = True
ec2.ini
内部.
下一步是区分哪个实例去哪里。虽然 ec2.py
中有许多选择方法可用,我更喜欢相应地专门标记每个实例。所以我所有的实例都有一个名为 environment
的标签相应地填充(在您的情况下,它将是分期或生产)。然后剩下的就是在你的inventories/main
里面处理它。 ,这里有一个小例子。
首先,您必须为要使用的标签定义空组:
[tag_environment_staging]
[tag_environment_production]
所以我们以后可以引用它们。之后,剩下要做的就是将这些组指定为适当阶段的子组。因此,之后我们的最小文件将如下所示:
[tag_environment_staging]
[tag_environment_production]
[staging:children]
tag_environment_staging
[production:children]
tag_environment_production
你去吧。从现在开始,通过环境标签附带的动态 list 脚本从 ec2 中提取的每个实例都将匹配到
group_vars
中的适当配置.您必须记住,在处理动态库存时,您需要您的 -i
指向inventories
目录而不是特定文件才能正常工作。
关于ansible - 如何区分暂存/生产与动态库存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35778501/