如何使用ansible module proxmox_kvm调整硬盘大小
我已经创建了一个8Gb disksize ProxMox VM模板。使用ansible module proxmo_kvm,我克隆了它,但无法调整SCSI磁盘的大小。有可能吗?如果是的话,你能给我一些解释,让我明白是怎么回事吗 项目文件层次结构:如何使用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
.
├── 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'失败:响应中获取超时时间
。。。似乎有一些悬而未决的任务必须完成。