2016-05-19 34 views
0

我有以下剧本:可变变量:你可以动态创建它们,然后通过它们循环?

--- 
- hosts: lxc_hosts 
    name: get list of lxc containers on lxc host 
    tasks: 
    - name: get list of containers 
    shell: > 
     lxc-ls | awk -vRS= -vFS="\n" '//' 
    register: containers 
    - debug: msg="{{containers.stdout}}" 

调试返回值是这样的:

TASK [debug] ******************************************************************* 
ok: [10.1.1.1] => { 
    "msg": "container1\ncontainer2\ncontainer3" 
} 
ok: [10.1.1.2] => { 
    "msg": "container22\ncontainer23\ncontainer24" 
} 

我希望有一种方法来解析结果我回来到像这样的列表:

container1 
container2 
container3 

和/或

container22 
container23 
container24 

然后以某种方式我想能够循环这些列表并运行另一个对他们的游戏。事情是这样的:

shell: lxc-attach --name={{item}} 
register: attach_results 
with_items: <list of containers> 

我怎么会去这样做呢?

+0

不回答这个问题,但你在LXC模块看着使用shell的呢? http://docs.ansible.com/ansible/lxc_container_module.html – smiller171

+0

我认为最好的解决方案是编写小型过滤器插件 –

+0

@arbabnazar我不知道你的意思是什么。我刚刚开始与理性。你能指出我可以解释一个文档/链接吗? – Happydevdays

回答

0

这是结束了工作:

- debug: msg="{{containers.stdout}}" 
    with_items: 
    - "{{ containers.stdout.split(',')|select('match', 'container*')|list }}" 
+0

我不知道你的确切情况,但很高兴我的榜样帮助你实现你的目标。 –

0

你可以尝试这样的:

- debug: 
     msg: "{{ containers.stdout | select("match", ". container*") | list }}" 
+0

你可以给我多一点关于声明的上下文,所以我知道把它放在哪里?谢谢! – Happydevdays

+0

只是在调试任务中使用它,发现它会给你所需的结果,那么你可以把它放在你想要的地方。我已经更新了这个问题 –

+0

不幸的是,这是行不通的。你必须首先分割输出...然后尝试反对选择。 – Happydevdays

相关问题