ansible - 如何区分暂存/生产与动态库存?

标签 ansible ansible-playbook

我被困住了。在网上用谷歌搜索,找不到答案。

我多年来一直在使用 Ansible,但总是使用静态 list 。为了区分暂存和生产等不同环境,我使用了不同的静态 list 文件 stagingproduction , 分别。当我需要配置登台服务器时,我会这样做:

ansible-playbook site.yml -i staging

当我想为生产做同样的事情时,我会这样做:
ansible-playbook site.yml -i production

暂存和生产都需要具有不同值的变量,所以我有 group_vars/staginggroup_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.pyec2.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/

相关文章:

python - 安装错误 : Do you have azure>=2. 0.0?

ansible - 使用 Ansible Git 模块时如何传递用户名和密码?

ansible 用户 配置中的当前用户

error-handling - 当救援 block 在文件中时,"ansible_failed_task"& "ansible_failed_result"变量未定义

ansible - 将 ansible 角色的任务拆分为多个文件

Ansible:合并已多次使用的项目变量

node.js - NodeJS 生产部署最佳实践

ansible - 无论如何,是否可以更有效地以多个用户的身份运行多个 Ansible 剧本?

python - 如何为Python虚拟环境配置Ansible?