deploy_aldpro/blank_proxmoxer.py

93 lines
2.9 KiB
Python
Raw Normal View History

2023-03-11 17:19:54 +03:00
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')