如何使用ansible module proxmox_kvm调整硬盘大小

如何使用ansible module proxmox_kvm调整硬盘大小,ansible,kvm,proxmox,Ansible,Kvm,Proxmox,我已经创建了一个8Gb disksize ProxMox VM模板。使用ansible module proxmo_kvm,我克隆了它,但无法调整SCSI磁盘的大小。有可能吗?如果是的话,你能给我一些解释,让我明白是怎么回事吗 项目文件层次结构: . ├── playbook.yml └─── proxmox-vm/    ├── tasks/    │   └── main.yml    └── vars/    └── main.yml playbook.yml: - ho

我已经创建了一个8Gb disksize ProxMox VM模板。使用ansible module proxmo_kvm,我克隆了它,但无法调整SCSI磁盘的大小。有可能吗?如果是的话,你能给我一些解释,让我明白是怎么回事吗

项目文件层次结构:

.
├── playbook.yml
└─── proxmox-vm/
    ├── tasks/
    │   └── main.yml
    └── vars/
        └── main.yml
playbook.yml

- hosts: localhost
  connection: local

  roles:
    - proxmox-vm
---
# vars file for proxmox-vm
proxmox:
  api:
    host: 127.0.0.1
    user: 'user@pam'
    password: 'password'
  node: workstation
  vm:
    name: test-debian
    clone: debian-9.8
    full: yes
    scsi:
      size: 16G
---
# tasks file for proxmox-vm
- name: create VM from template
  proxmox_kvm:
    api_host: "{{ proxmox.api.host }}"
    api_user: "{{ proxmox.api.user }}"
    api_password: "{{ proxmox.api.password }}"
    node: "{{ proxmox.node }}"
    name: "{{ proxmox.vm.name }}"
    clone: "{{ proxmox.vm.clone }}"
    full: yes
    scsi: "{{ proxmox.vm.scsi }}"
# get VMID
- name: get VM state
  proxmox_kvm:
    api_host: "{{ proxmox.api.host }}"
    api_user: "{{ proxmox.api.user }}"
    api_password: "{{ proxmox.api.password }}"
    node: "{{ proxmox.node}}"
    name: "{{ proxmox.vm.name }}"
    state: current
  register: result
- name: set fact VMID
  set_fact:
    vmid: "{{ result.msg | regex_replace('.*vmid = ([1-9][0-9]{0,3}).*', '\\1') }}"
# Authentication
- name: authentication
  uri:
    url: "https://{{ proxmox.api.host }}:8006/api2/json/access/ticket"
    method: POST
    body_format: form-urlencoded
    body:
      username: "{{ proxmox.api.user }}"
      password: "{{ proxmox.api.password }}"
  register: auth
# Resize disk
- name: resize disk
  uri:
    url: "https://{{ proxmox.api.host }}:8006/api2/json/nodes/{{ proxmox.node }}/qemu/{{ vmid }}/resize"
    method: PUT
    headers: 
      Cookie: "PVEAuthCookie={{ auth.json.data.ticket }}"
      CSRFPreventionToken: "{{ auth.json.data.CSRFPreventionToken }}"
    body_format: form-urlencoded
    body:
      disk: scsi0
      size: "{{ proxmox.vm.scsi.size }}"
proxmoxvm/vars/main.yml

- hosts: localhost
  connection: local

  roles:
    - proxmox-vm
---
# vars file for proxmox-vm
proxmox:
  api:
    host: 127.0.0.1
    user: 'user@pam'
    password: 'password'
  node: workstation
  vm:
    name: test-debian
    clone: debian-9.8
    full: yes
    scsi:
      size: 16G
---
# tasks file for proxmox-vm
- name: create VM from template
  proxmox_kvm:
    api_host: "{{ proxmox.api.host }}"
    api_user: "{{ proxmox.api.user }}"
    api_password: "{{ proxmox.api.password }}"
    node: "{{ proxmox.node }}"
    name: "{{ proxmox.vm.name }}"
    clone: "{{ proxmox.vm.clone }}"
    full: yes
    scsi: "{{ proxmox.vm.scsi }}"
# get VMID
- name: get VM state
  proxmox_kvm:
    api_host: "{{ proxmox.api.host }}"
    api_user: "{{ proxmox.api.user }}"
    api_password: "{{ proxmox.api.password }}"
    node: "{{ proxmox.node}}"
    name: "{{ proxmox.vm.name }}"
    state: current
  register: result
- name: set fact VMID
  set_fact:
    vmid: "{{ result.msg | regex_replace('.*vmid = ([1-9][0-9]{0,3}).*', '\\1') }}"
# Authentication
- name: authentication
  uri:
    url: "https://{{ proxmox.api.host }}:8006/api2/json/access/ticket"
    method: POST
    body_format: form-urlencoded
    body:
      username: "{{ proxmox.api.user }}"
      password: "{{ proxmox.api.password }}"
  register: auth
# Resize disk
- name: resize disk
  uri:
    url: "https://{{ proxmox.api.host }}:8006/api2/json/nodes/{{ proxmox.node }}/qemu/{{ vmid }}/resize"
    method: PUT
    headers: 
      Cookie: "PVEAuthCookie={{ auth.json.data.ticket }}"
      CSRFPreventionToken: "{{ auth.json.data.CSRFPreventionToken }}"
    body_format: form-urlencoded
    body:
      disk: scsi0
      size: "{{ proxmox.vm.scsi.size }}"
proxmoxvm/tasks/main.yml

- hosts: localhost
  connection: local

  roles:
    - proxmox-vm
---
# vars file for proxmox-vm
proxmox:
  api:
    host: 127.0.0.1
    user: 'user@pam'
    password: 'password'
  node: workstation
  vm:
    name: test-debian
    clone: debian-9.8
    full: yes
    scsi:
      size: 16G
---
# tasks file for proxmox-vm
- name: create VM from template
  proxmox_kvm:
    api_host: "{{ proxmox.api.host }}"
    api_user: "{{ proxmox.api.user }}"
    api_password: "{{ proxmox.api.password }}"
    node: "{{ proxmox.node }}"
    name: "{{ proxmox.vm.name }}"
    clone: "{{ proxmox.vm.clone }}"
    full: yes
    scsi: "{{ proxmox.vm.scsi }}"
# get VMID
- name: get VM state
  proxmox_kvm:
    api_host: "{{ proxmox.api.host }}"
    api_user: "{{ proxmox.api.user }}"
    api_password: "{{ proxmox.api.password }}"
    node: "{{ proxmox.node}}"
    name: "{{ proxmox.vm.name }}"
    state: current
  register: result
- name: set fact VMID
  set_fact:
    vmid: "{{ result.msg | regex_replace('.*vmid = ([1-9][0-9]{0,3}).*', '\\1') }}"
# Authentication
- name: authentication
  uri:
    url: "https://{{ proxmox.api.host }}:8006/api2/json/access/ticket"
    method: POST
    body_format: form-urlencoded
    body:
      username: "{{ proxmox.api.user }}"
      password: "{{ proxmox.api.password }}"
  register: auth
# Resize disk
- name: resize disk
  uri:
    url: "https://{{ proxmox.api.host }}:8006/api2/json/nodes/{{ proxmox.node }}/qemu/{{ vmid }}/resize"
    method: PUT
    headers: 
      Cookie: "PVEAuthCookie={{ auth.json.data.ticket }}"
      CSRFPreventionToken: "{{ auth.json.data.CSRFPreventionToken }}"
    body_format: form-urlencoded
    body:
      disk: scsi0
      size: "{{ proxmox.vm.scsi.size }}"
运行Ansible剧本:

ansible playbook playbook.yml
播放[本地主机]***************************************************************
任务[收集事实]*********************************************************
确定:[本地主机]
任务[ProxBox vm:从模板创建vm]************************************
已更改:[localhost]
重演*********************************************************************
localhost:ok=2 changed=1 unreachable=0 failed=0

我期待一个新的16Gb disksize虚拟机,但实际的disksize是8Gb(初始disksize模板)

目前不可能,因为ansible module proxmox_kvm不允许它(无论是克隆还是更新都不允许)。见:

#[…]
def create_vm(模块、proxmox、vmid、newid、节点、名称、内存、cpu、内核、套接字、超时、更新、**kwargs):
# [...]
#valide克隆参数
有效的克隆参数=['format'、'full'、'pool'、'snapname'、'storage'、'target']
# [...]
elif模块.params['clone']不是无:
对于有效克隆参数中的参数:
如果module.params[param]不是无:
clone_params[param]=module.params[param]
克隆参数更新(如果存在(v,bool)),则克隆参数项()中k,v的dict([k,int(v)])
taskid=proxmox\u node.qemu(vmid).clone.post(newid=newid,name=name,**克隆参数)
# [...]
#如果更新,则不更新磁盘(virtio、ide、sata、scsi)和网络接口
如果更新:
# [...]
如果kwargs中的“scsi”:
del kwargs['scsi']
# [...]

可以使用ansible模块uri。将以下任务添加到文件
proxmox vm/tasks/main.yml

- hosts: localhost
  connection: local

  roles:
    - proxmox-vm
---
# vars file for proxmox-vm
proxmox:
  api:
    host: 127.0.0.1
    user: 'user@pam'
    password: 'password'
  node: workstation
  vm:
    name: test-debian
    clone: debian-9.8
    full: yes
    scsi:
      size: 16G
---
# tasks file for proxmox-vm
- name: create VM from template
  proxmox_kvm:
    api_host: "{{ proxmox.api.host }}"
    api_user: "{{ proxmox.api.user }}"
    api_password: "{{ proxmox.api.password }}"
    node: "{{ proxmox.node }}"
    name: "{{ proxmox.vm.name }}"
    clone: "{{ proxmox.vm.clone }}"
    full: yes
    scsi: "{{ proxmox.vm.scsi }}"
# get VMID
- name: get VM state
  proxmox_kvm:
    api_host: "{{ proxmox.api.host }}"
    api_user: "{{ proxmox.api.user }}"
    api_password: "{{ proxmox.api.password }}"
    node: "{{ proxmox.node}}"
    name: "{{ proxmox.vm.name }}"
    state: current
  register: result
- name: set fact VMID
  set_fact:
    vmid: "{{ result.msg | regex_replace('.*vmid = ([1-9][0-9]{0,3}).*', '\\1') }}"
# Authentication
- name: authentication
  uri:
    url: "https://{{ proxmox.api.host }}:8006/api2/json/access/ticket"
    method: POST
    body_format: form-urlencoded
    body:
      username: "{{ proxmox.api.user }}"
      password: "{{ proxmox.api.password }}"
  register: auth
# Resize disk
- name: resize disk
  uri:
    url: "https://{{ proxmox.api.host }}:8006/api2/json/nodes/{{ proxmox.node }}/qemu/{{ vmid }}/resize"
    method: PUT
    headers: 
      Cookie: "PVEAuthCookie={{ auth.json.data.ticket }}"
      CSRFPreventionToken: "{{ auth.json.data.CSRFPreventionToken }}"
    body_format: form-urlencoded
    body:
      disk: scsi0
      size: "{{ proxmox.vm.scsi.size }}"

似乎调整端点大小不是异步的。。我正在获取
/usr/bin/qemu img resize-f raw/data/pool1/images/101/vm-101-disk-0.raw 10737418240'失败:响应中获取超时时间
。。。似乎有一些悬而未决的任务必须完成。