使用ansible输出为集合_事实与循环
我使用ansible在proxmox中创建和运行lxc容器。 运行容器任务:使用ansible输出为集合_事实与循环,ansible,Ansible,我使用ansible在proxmox中创建和运行lxc容器。 运行容器任务: - name: "DHCP IP" proxmox: ... hostname: "{{ item }}" ... pubkey: "{{ pubkey }}" with_items: - "{{ (servers_name_suggested | union(servers_name_list)) | unique }
- 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
输出是一个列表,如果您仅提取带有[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'}`