【发布时间】:2015-02-07 22:34:43
【问题描述】:
我必须处理来自 CloudFormation Outputs 的输出,即:
产生此输出的 Ansible 代码:
- debug:
var: stack.stack_outputs
输出:
ok: [localhost] => {
"stack.stack_outputs": {
"Roles": "webserver balancer dbserver",
"dbserver": "54.0.1.1 54.0.1.2",
"balancer": "54.0.2.3",
"webserver": "54.0.2.5 54.0.2.7 54.0.3.1"
}}
有了这个,我想创建 3 个(动态编号!)组,相应地命名并填充适当的 IP。
我想帮助的 Ansible 代码:
- name: fill roles with proper hosts
local_action: add_host hostname={{item}} groupname={{role}}
with_whatever: ?...?
在伪 ansible python 中它看起来像这样:
for role in stack.stack_outputs.Roles.split(): # Python
for ip in stack.stack_outputs[role].split(): # Python
local_action: add_host hostname={{ip}} groupname={{role}} # Ansible
注意:
这三个角色静态的做法显然是:
- name: fill role WEBSERVER
local_action: add_host hostname={{item}} groupname=webserver
with_items: stack.stack_outputs.webserver.split()
- name: fill role DBSERVER
local_action: add_host hostname={{item}} groupname=dbserver
with_items: stack.stack_outputs.dbserver.split()
- name: fill role BALANCER
local_action: add_host hostname={{item}} groupname=balancer
with_items: stack.stack_outputs.balancer.split()
我想动态地,在 Ansible 中甚至可以吗?
是的,我可以使用shell module 破解它,将所有内容放在临时文件中,然后循环遍历它;但是有更好的解决方案吗?
感谢您的任何建议。
【问题讨论】:
-
我为此写了
lookup_plugin。现有的能解决吗?