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