在Ansible中,有没有办法将多个字典传递给with_dict任务循环?

时间:2015-12-05 04:53:39

标签: python loops dictionary yaml ansible

我试图在任务循环中将多个词典输入with_dict。

vars / users.yml文件

---
ssh_users:
  - "{{ server_admins }}"
  - "{{ developers }}"

group_vars / webservers.yml

---
- name: create users
  user: name={{ item.key }} {{ item.value }}
  with_dict: "{{ ssh_users }}"

的任务/ main.yml

public class panel1 extends JPanel implements ActionListener(){
    private panel2 p2=new panel2();
    private JButton button;

    public panel1(){
    button=new JButton("open panel2");
    add(button,BorderLayout.BEFORE_FIRST_LINE);
    button.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent ae) {

            add(p2);

        }

    });

  }

如果我在{{ssh_users}}中只定义了一个字典,则任务按预期运行。但是当我添加第二个字典时,我得到" with_dict期望一个字典"。显然它并没有期待其中两个!

到目前为止,我的解决方法是为每组用户创建一个新角色,但这已经失控,并且看起来不是一个好的解决方案,因为我重复了每个角色都有相同的逻辑。

关于如何将多个字典传递或连接到with_dict,或以任务循环可以处理的方式构造数据的任何想法;一直保持单一角色?

1 个答案:

答案 0 :(得分:2)

来自Ansible 2.0,有一个Jinja过滤器combine,为此:

  ---
  - name: create users
    user: name={{ item.key }} {{ item.value }}
    with_dict: "{{ server_admins | combine(developers) }}"