【发布时间】:2016-03-03 17:05:59
【问题描述】:
我被困住了。用谷歌搜索了网络,找不到答案。
多年来我一直在使用 Ansible,但总是使用静态清单。为了区分暂存和生产等不同环境,我分别使用了不同的静态清单文件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 似乎没有意义,因为库存是动态的。我想要一种能够根据我在运行时传递给ansible-playbook 的参数从group_vars/staging 或group_vars/production 加载变量的方法。
我该怎么做?最佳做法是什么?
【问题讨论】:
-
也许你可以用单独的剧本做点什么?像 production.yml 和 staging.yml 这样的东西。然后,这些剧本将包含 site.yml,但也包含其特定于 env 的变量。