Это клиент-серверное приложение, реализованное с использованием Python (asyncio, asyncpg) и PostgreSQL. Приложение предназначено для учета виртуальных машин (ВМ), где каждая ВМ имеет уникальный идентификатор, объем выделенной RAM, количество выделенных CPU и один или несколько жестких дисков с уникальными идентификаторами и объемом.
Сервер обрабатывает команды от клиентов (ВМ) и внутренние команды администратора, а данные ВМ сохраняются в базе данных PostgreSQL (без использования ORM, с использованием asyncpg). Клиент-серверное взаимодействие происходит через сокеты (TCP), а авторизация позволяет клиенту управлять только своей виртуальной машиной.
-
Аутентификация ВМ:
- Команда:
AUTH <vm_id> <password> - Пример:
AUTH vm1 secret - Клиент (виртуальная машина) должен аутентифицироваться, чтобы получить доступ к своим данным. Если пароль неверен, доступ не предоставляется.
- Команда:
-
Добавление ВМ:
- Команда:
ADD_VM <vm_id> <ram> <cpu> disk1:capacity disk2:capacity ... - Пример:
ADD_VM vm1 2048 2 disk1:100 disk2:200 - Добавление данных новой виртуальной машины возможно только для авторизованного клиента, и клиент может управлять только своей ВМ (vm_id должен совпадать с тем, который использовался при авторизации).
- Команда:
-
Обновление данных ВМ:
- Команда:
UPDATE_VM <ram> <cpu> disk1:capacity disk2:capacity ... - Пример:
UPDATE_VM 4096 4 disk1:150 disk3:300 - Позволяет обновить параметры виртуальной машины, если клиент аутентифицирован.
- Команда:
-
Вывод списков:
- LIST_CONNECTED:
Выводит список ВМ, подключенных к серверу (на основе in-memory кеша). - LIST_AUTHORIZED:
Выводит список авторизованных ВМ, полученных из базы данных. - LIST_ALL:
Выводит список всех ВМ, когда-либо подключавшихся к серверу. - LIST_DISKS:
Выводит список всех жестких дисков с их параметрами, а также информацию о привязке к ВМ.
- LIST_CONNECTED:
-
Выход (Лог-аут):
- Команда:
LOGOUT - Завершает сессию для авторизованного клиента.
- Команда:
-
Внутренние команды сервера:
Администратор может вводить команды через консоль сервера (например,LIST_CONNECTED,LIST_AUTHORIZED,LIST_ALL,LIST_DISKS,EXIT).