使用ansible输出为集合_事实与循环

使用ansible输出为集合_事实与循环,ansible,Ansible,我使用ansible在proxmox中创建和运行lxc容器。 运行容器任务: - name: "DHCP IP" proxmox: ... hostname: "{{ item }}" ... pubkey: "{{ pubkey }}" with_items: - "{{ (servers_name_suggested | union(servers_name_list)) | unique }

我使用ansible在proxmox中创建和运行lxc容器。 运行容器任务:

    - name: "DHCP IP"
      proxmox:
   ...
        hostname: "{{ item }}"
   ...
        pubkey: "{{  pubkey  }}"
      with_items:
          - "{{ (servers_name_suggested | union(servers_name_list)) | unique }}"
          register: output_dhcp
          when: not static_ip

    - set_fact:
        vmid: "{{ output_dhcp.results[0].msg | regex_search('[0-9][0-9][0-9]') }}"

    - name: "Start container {{ vmid }}"
      proxmox:
        vmid: "{{ vmid }}"
        api_user: root@pam
        api_password: "{{  api_password }}"
        api_host: "{{  api_host }}"
        state: started
      when: start_lxc
- set_fact:
  vmids: "{{ output_dhcp.results | map(attribute='msg') | map('regex_search', '[0-9][0-9][0-9]') | list }}"

- name: "Start container {{ item }}"
  proxmox:
    vmid: "{{ item }}"
    api_user: root@pam
    api_password: "{{ api_password }}"
    api_host: "{{ api_host }}"
    state: started
  with_items: "{{ vmids }}"
  when: start_lxc
如果在任务“DHCP IP”中启动一个容器和一个项目,这是可行的。如果我设定 两个或多个项目,我的任务只启动了第一个容器。因为我正在准备

output_dhcp.results[0].msg
例如,如果我要创建树容器,如何获取所有容器的信息:

output_dhcp.results[1].msg
output_dhcp.results[2].msg
收到

- name: "Start container {{ vmid }}"
  proxmox:
    vmid: "{{ vmid }}"

用于运行所有我的新参与者。

输出结果是一个列表,如果您仅提取带有
[0]
的第一项,则您将只拥有第一项

您需要将列表转换为可以在“开始容器”任务中迭代的另一个列表:

要解释转换部分,请执行以下操作:

  • output_dhcp.results | map(attribute='msg')
    =>获取
    output_dhcp.results
    列表()
  • | map('regex_search','[0-9][0-9][0-9]')
    =>在列表的每个项目上应用
    regex_search
  • | list
    =>将生成器转换为列表

dhcp.results的
输出是一个列表,如果您仅提取带有
[0]
的第一项,则您将只拥有第一项

您需要将列表转换为可以在“开始容器”任务中迭代的另一个列表:

要解释转换部分,请执行以下操作:

  • output_dhcp.results | map(attribute='msg')
    =>获取
    output_dhcp.results
    列表()
  • | map('regex_search','[0-9][0-9][0-9]')
    =>在列表的每个项目上应用
    regex_search
  • | list
    =>将生成器转换为列表

output\u dhcp变量应包含stdout\u行中的所有值。您是否可以在var output_dhcp而不是output_dhcp[0]上执行调试而不是设置_fact。output_dhcp变量应包含stdout_行中的所有值。您是否可以进行调试,而不是在var输出上设置事实,而不是在输出上设置事实?dhcp[0]不错,但我遇到了错误“item”:“msg”:“VM启动失败,出现异常:int()的文本无效,以10为基数:”“”`应通过添加
\list
(答案已更新)来修复此问题现在我在set_fact stage上收到了一条消息:`列表索引必须是整数,而不是str“}`不错,但我得到了错误`“item”:“,”msg“:“VM启动失败,出现异常:int()的文本无效,基数为10:''”`应该通过添加
;list
(答案更新)来修复现在我在set_fact stage上得到了一条消息:`列表索引必须是整数,而不是str'}`