from proxmoxer import ProxmoxAPI import yaml import os.path import urllib.request with open('vars.yaml') as data: vars_dict = yaml.safe_load(data) # параметры хоста Proxmox proxmox_node = vars_dict['proxmox_node']['name'] pve_host = vars_dict['proxmox_node']['host'] pve_port = vars_dict['proxmox_node']['port'] pve_admin = vars_dict['proxmox_node']['username'] pve_passwd = vars_dict['proxmox_node']['password'] pve_storage = vars_dict['proxmox_node']['storage'] pve_net = vars_dict['proxmox_node']['net'] # параметры создаваемого шаблона tmpl_id = vars_dict['template']['id'] tmpl_name = vars_dict['template']['name'] tmpl_cores = vars_dict['template']['cores'] tmpl_memory = vars_dict['template']['memory'] tmpl_user = vars_dict['template']['username'] tmpl_passwd = vars_dict['template']['password'] # ссылка на образ img_url = vars_dict['img']['url'] img_name = vars_dict['img']['name'] def download_img(name, url): """ Проверка наличия образа в текущей директории. Если образа нет, он скачивается. Params: name - (str), имя образа; url - (str), url-ссылка на директорию с образом. Return: None """ if os.path.isfile(name): print(f'Файл с именем "{name}" присутствует в текущей директории') else: print(f'Образа "{name}" нет в текущей директории, скачиваю..') urllib.request.urlretrieve(f'{url}/{name}', name) print('Скачивание завершено.') def create_vm(node, **kwargs): """ Создание шаблона ВМ из ранее скачанного образа. Params: node - (class 'proxmoxer.core.ProxmoxResource'), хост Proxmox, на котором создаётся шаблон. Return: None """ node.qemu.create( vmid=tmpl_id, name=tmpl_name, cores=tmpl_cores, memory=tmpl_memory, net0=f'virtio,bridge={pve_net}', bootdisk='scsi0', ide0=f'{pve_storage}:cloudinit', ide2='none,media=cdrom', vga='qxl', ciuser=tmpl_user, cipassword=tmpl_passwd, agent=1) def importdisk(node, img, stor, **kwargs): """ Импорт образа в ВМ. Params: node - (class 'proxmoxer.core.ProxmoxResource'), хост Proxmox, на котором создаётся шаблон. Return: None """ node.qemu.importdisk(img, stor) proxmox = ProxmoxAPI(host=pve_host, user=pve_admin, password=pve_passwd, port=pve_port, verify_ssl=True) pve_node = proxmox.nodes(proxmox_node) # download_img(name=img_name, url=img_url) # create_vm(node=pve_node) # importdisk(node=pve_node, img=img_name, stor=pve_storage) pve_node.qemu(f'disk import {tmpl_id} {img_name} {pve_storage},format=qcow2')