如何结合with_dict和with_sequence?

时间:2019-06-25 09:53:27

标签: grep ansible jinja2 ansible-inventory

我正在尝试检查是否已创建JBoss管理用户。我有一个工作剧

- name: Check if Management user has already been created
  shell: "grep -i '{{jbossvars.mgmt_user}}' {{env_home}}/standalone/configuration/mgmt-users.properties | grep -v '#'"
  register: mgmt_users_file
  changed_when: false
  failed_when: mgmt_users_file.rc != 1 and mgmt_users_file.rc != 0
- name: Add Management user if it has not been created
  shell: "{{env_home}}/bin/add-user.sh --silent=true {{jbossvars.mgmt_user}} {{jbossvars.mgmt_pass}}"
  when: mgmt_users_file.stdout == ""

现在,我在保持相同功能的同时尝试遍历一个字典 仅当mgmt_users_file.results [X] .stdout(以X为索引)为空时,才能执行脚本。

我在想

- name: Add Management user if it has not been created
  shell: "{{ item.value['env_home'] }}/bin/add-user.sh --silent=true {{ item.value['mgmt_user'] }} {{ item.value['mgmt_pass'] }}"
  when: mgmt_users_file.results[{{item2}}].stdout == ""
  with_dict: "{{jbossvars_extra.environments}}"
  with_sequence:
    start=0
    end={{jbossvars_extra.environments|count}}

实际上,我只需要能够嵌套2个循环( item item2

我怎么能得到这个?

1 个答案:

答案 0 :(得分:0)

无法以这种方式连接变量名称

mgmt_users_file_{{ item.value['env_home'] }}.stdout == ""

与以前一样使用寄存器

register: mgmt_users_file

打印 mgmt_users_file 以查看循环创建的结构

- debug: var=mgmt_users_file

在下一个循环中使用 mgmt_users_file 的结构。