93 lines
2.9 KiB
Python
Executable File
93 lines
2.9 KiB
Python
Executable File
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')
|