deploy_aldpro/blank_proxmoxer.py

93 lines
2.9 KiB
Python
Executable File
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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')