python-compute/README.md

92 lines
4.2 KiB
Markdown
Raw Normal View History

2023-06-17 20:07:50 +03:00
# Node Agent
Агент для работы на ворк-нодах.
2023-07-22 23:59:49 +03:00
# Как это должно выглядеть
`node-agent` должен стать обычным DEB-пакетом. Вместе с самим приложением пойдут вспомагательные утилиты:
- **na-vmctl** "Своя" версия virsh, которая дёргает код из Node Agent. Базовые операции с VM и также установка и миграция ВМ. Реализована частично.
- **na-vmexec**. Обёртка для вызова QEMU guest agent на машинах, больше нчего уметь не должна. Реализована целиком.
- **na-volctl**. Предполагается здесь оставить всю работу с дисками. Не реализовано.
Этими утилитами Нет цели заменять virsh, нужно реализовать только специфичные для Node Agent вещи.
Зависимости (версии из APT репозитория Debian 12):
- `python3-lxml` 4.9.2
- `python3-docopt` 0.6.2
- `python3-libvirt` 9.0.0 (актуальная новее)
# Классы
Весь пакет разбит на модули, а основной функционал на классы.
## `ConfigLoader`
Наследуется от `UserDict`. Принимает в конструктор путь до файла, после чего экземпляром `ConfigLoader` можно пользоваться как обычным словарём. Вызывается внутри `LibvirtSession` при инициализации.
## `LibvirtSession`
Устанавливает сессию с libvirtd и создаёт объект virConnect. Класс умеет принимать в конструктор один аргумент — путь до файла конфигурации, но его можно опустить.
2023-06-17 20:07:50 +03:00
2023-07-22 23:59:49 +03:00
```python
from node_agent import LibvirtSession
session = LibvirtSession()
session.close()
2023-06-17 20:07:50 +03:00
```
2023-07-22 23:59:49 +03:00
Также этот класс является контекстным менеджером и его можно использвоать так:
```python
from node_agent import LibvirtSession, VirtualMachine
with LibvirtSession() as session:
vm = VirtualMachine(session, 'имя_вм')
vm.status
2023-06-17 20:07:50 +03:00
```
2023-07-22 23:59:49 +03:00
## `VirtualMachine`
Класс для базового управления виртуалкой. В конструктор принимает объект LibvirtSession, который в себе содержит объект virConnect и конфиг в виде словаря.
## `QemuAgent`
2023-06-17 20:07:50 +03:00
2023-07-22 23:59:49 +03:00
Класс для работы с агентом на гостях. Его можно считать законченным. Он умеет:
2023-06-17 20:07:50 +03:00
2023-07-22 23:59:49 +03:00
- Выполнять шелл команды через метод `shellexec()`.
- Выполнять команды через `execute()`.
Внутри также способен:
- Поллить выполнение команды. То есть можно дождаться вывода долгой команды.
- Декодирует base64 вывод STDERR и STDOUT если надо.
- Принимать STDIN
2023-06-17 20:07:50 +03:00
# TODO
2023-07-22 23:59:49 +03:00
- [ ] Установка ВМ
- [ ] Конструктор XML
- [ ] Управление дисками
- [ ] Удаление ВМ
- [ ] Изменение CPU
- [ ] Изменение RAM
- [ ] Миграция ВМ между нодами
- [x] Работа с qemu-ga
- [x] Управление питанием
- [ ] Вкл/выкл автостарт ВМ
- [ ] Статистика потребления ресурсов
- [ ] Получение инфомрации из/о ВМ
- [ ] SSH-ключи
- [ ] Сеть
- [ ] ???
2023-06-17 20:07:50 +03:00
2023-07-22 23:59:49 +03:00
# Заметки
xml.py наверное лучше реализовать через lxml.objectify: https://stackoverflow.com/questions/47304314/adding-child-element-to-xml-in-python
???: https://www.geeksforgeeks.org/reading-and-writing-xml-files-in-python/
2023-06-17 20:07:50 +03:00
2023-07-22 23:59:49 +03:00
Минимальный рабочий XML: https://access.redhat.com/documentation/ru-ru/red_hat_enterprise_linux/6/html/virtualization_administration_guide/section-libvirt-dom-xml-example