我使用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
如果启动了一个容器,任务“ 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 :(得分:0)
output_dhcp.results
是一个列表,如果仅用[0]
提取第一项,则只有第一项。
您需要将列表转换为可以在“启动容器”任务中迭代的另一个列表:
- 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
解释转换部分:
output_dhcp.results | map(attribute='msg')
=>获取msg
列表(http://jinja.pocoo.org/docs/dev/templates/#map)中每个项目的output_dhcp.results
属性| map('regex_search', '[0-9][0-9][0-9]')
=>在列表的每个项目上应用regex_search
| list
=>将生成器转换为列表