pve_tests/main.py

184 lines
4.7 KiB
Python
Raw Normal View History

from time import sleep
2023-10-11 14:38:56 +03:00
from typing import Optional
2023-03-24 16:31:22 +03:00
from pathlib import Path
2023-10-11 14:38:56 +03:00
import urllib3
2023-03-24 16:31:22 +03:00
from proxmoxer import ProxmoxAPI
2023-10-11 14:38:56 +03:00
urllib3.disable_warnings()
2023-03-24 16:31:22 +03:00
PROXMOX_HOST = 'pve.office.basealt.ru'
PROXMOX_USER = 'stepchenkoas@BaseALT'
PROXMOX_PASSWORD = Path('pve_secret').read_text().strip()
def create_vm(
proxmox,
2023-10-11 14:38:56 +03:00
node: Optional[str] = None,
vmid: Optional[int] = None,
name: Optional[str] = None,
prefix: str = 'stepchenkoas',
cores: int = 2,
memory: int = 2048,
disk_size: int = 16,
start: int = 1,
2023-03-24 16:31:22 +03:00
):
if node is None:
nodes = proxmox.nodes.get()
nodes = list(filter(lambda node: node['status'] == 'online', nodes))
node = min(nodes, key=lambda node: node['disk'])['node']
if vmid is None:
vmid = proxmox.cluster.get('nextid')
if name is None:
name = f'{prefix}-{vmid}'
proxmox.nodes(node).qemu.post(
node=node,
vmid=vmid,
description='This VM was created automatically through Proxmox VE API',
cores=cores,
cpu='host',
memory=memory,
name=name,
net0='virtio,bridge=vmbr0,tag=103,firewall=1',
ostype='l26',
pool='Virt_LAB',
#alt-server-v-10.1-rc3-x86_64.iso
sata2='templates:iso/alt-server-v-10.1-rc3-x86_64.iso,media=cdrom',
scsi0=f'rbd-storage:{disk_size},discard=on',
scsihw='virtio-scsi-pci',
sockets=1,
start=start,
2023-03-24 16:31:22 +03:00
)
print(f'VM {vmid} was created successfully!')
def delete_vm(
proxmox,
node,
vmid,
):
proxmox.nodes(node).qemu(vmid).delete(
node=node,
vmid=vmid,
)
print(f'VM {vmid} was deleted successfully!')
def clone_template(
proxmox,
2023-03-27 15:51:32 +03:00
node: str,
vmid: int,
2023-10-11 14:38:56 +03:00
newid: Optional[int] = None,
name: Optional[str] = None,
prefix: str ='stepchenkoas',
) -> int:
2023-03-24 16:31:22 +03:00
if newid is None:
newid = proxmox.cluster.get('nextid')
if name is None:
name = f'{prefix}-{newid}'
2023-10-11 14:38:56 +03:00
res = proxmox.nodes(node).qemu(vmid).clone.post(
2023-03-27 15:51:32 +03:00
newid=newid,
node=node,
vmid=vmid,
format='raw',
full=1,
name=name,
2023-03-27 15:51:32 +03:00
pool='Virt_LAB',
storage='rbd-storage',
target=node,
)
2023-10-11 14:38:56 +03:00
print(res)
print(f'VM {vmid} was cloned to {newid} successfully!')
return newid
def get_vm_ip(
proxmox,
node: 'str',
vmid: int,
):
res = proxmox.nodes(node).qemu(vmid).agent('network-get-interfaces').get()
vm_ip_address = None
for net in res['result']:
if net['name'] == 'eth0':
for ip in net['ip-addresses']:
if ip['ip-address-type'] == 'ipv4':
vm_ip_address = ip['ip-address']
return vm_ip_address
2023-03-27 15:51:32 +03:00
2023-03-24 16:31:22 +03:00
def main():
proxmox = ProxmoxAPI(
PROXMOX_HOST, user=PROXMOX_USER, password=PROXMOX_PASSWORD, verify_ssl=False
)
nodes = proxmox.nodes.get()
nodes = list(filter(lambda node: node['status'] == 'online', nodes))
node = min(nodes, key=lambda node: node['disk'])['node']
2023-10-11 14:38:56 +03:00
template_id = 374
prefix = 'stepchenkaos-test-k8s'
vm_id_master = clone_template(
proxmox,
node,
template_id,
name=f'{prefix}-master',
)
proxmox.nodes(node).qemu(vm_id_master).status.start.post()
2023-03-24 16:31:22 +03:00
vm_id_worker1 = clone_template(
proxmox,
node,
template_id,
name=f'{prefix}-node1',
)
proxmox.nodes(node).qemu(vm_id_worker1).status.start.post()
vm_id_worker2 = clone_template(
proxmox,
node,
template_id,
name=f'{prefix}-node2',
)
proxmox.nodes(node).qemu(vm_id_worker2).status.start.post()
vms_statuses = [False, False, False]
2023-10-11 14:38:56 +03:00
print(vms_statuses)
while not all(vms_statuses):
sleep(5)
vms_statuses[0] = proxmox.nodes(node).qemu(vm_id_master).status.current.get()['status'] == 'running'
vms_statuses[1] = proxmox.nodes(node).qemu(vm_id_worker1).status.current.get()['status'] == 'running'
vms_statuses[2] = proxmox.nodes(node).qemu(vm_id_worker2).status.current.get()['status'] == 'running'
print(vms_statuses)
sleep(60)
vm_ip_master = get_vm_ip(proxmox, node, vm_id_master)
vm_ip_worker1 = get_vm_ip(proxmox, node, vm_id_worker1)
vm_ip_worker2 = get_vm_ip(proxmox, node, vm_id_worker2)
with open('vm_ids' ,'w') as ofile:
vm_ids = f'{vm_id_master}\tmaster\n'
vm_ids += f'{vm_id_worker1}\tworker1\n'
vm_ids += f'{vm_id_worker2}\tworker2\n'
ofile.write(vm_ids)
with open('hosts' ,'w') as ofile:
hosts = f'{vm_ip_master}\tmaster\n'
hosts += f'{vm_ip_worker1}\tworker1\n'
hosts += f'{vm_ip_worker2}\tworker2\n'
ofile.write(hosts)
2023-03-24 16:31:22 +03:00
proxmox.logout()
if __name__ == '__main__':
main()