# Срипт для создания нескольких виртуальных машин одновременно с помощью Cloud-Init. **Имеется 2 версии скрипта: универсальный** `vmcreate.sh` **и специальный для gfx-машин Юры** `gfxcheate.sh` # GFX-скрипт Скрипт парсит файл `gfx_hosts` создаёт и запускает на **pve3** виртуальные машины с заданным `IP` и `hostname` в 35 сети. Синтаксис: ip-адрес, точка с запятой, hostname. * 10.10.35.XX1;hostname1 * 10.10.35.XX2;hostname2 VMID формируется на основе последних двух октетов IP адреса, пример для _ip=10.10.35.21_ > `VMID=3521` ### Создание и запуск ```shell git -C /root/ clone https://git.tvstart.ru/dbadovsky/vmcreate.git ``` ```shell cd /root/vmcreate/ ``` ```shell bash gfxcreate.sh ``` **ВНИМАНИЕ! Нельзя закрывать консоль Proxmox до заершения работы скрипта!** Либо отправлять его работу в фоновый режим: ```shell bash vmcreate.sh & ``` Но в этом случае скрипт не будет выводить в консоль свои действия и результат. ### Ключ Публичный ключ вшит в файл `gfx.yaml`. ### Пакеты, устанавливаемые автоматически - qemu-guest-agent - git - net-tools - python3 - python3-pip - python3-venv Также в `gfx.yaml` вшита команда, которая подтягивает и разворачивает python-скрипт Юры. # Универсальный скрипт В качестве списка используются аргументы либо файл. В случае использования аргументов необходимо передать список IPv4-адресов в диапазоне 10.10.0.0/16. ``` bash vmcreate 10.10.MMM.XXX 10.10.NNN.YYY ``` В этом случае имена хостов сгенерируются автоматически. Например, для 10.10.35.99, hostname="vm35099". Либо передать с флагом `-h` файл со списком в следующем формате: ``` 10.10.MMM.XXX;hostnameX 10.10.NNN.YYY;hostnameY ... ``` В этом случае имена хостов будут браться из второго столбца. VMID созданных ВМ также будет сгенегирован автоматически. Например для 10.10.35.99, **VMID=35099**; для 10.10.0.9 - **VMID=100009**. _VMID состоит из двух частей - VLAN и последнего октета IP адреса (дополненного нулями до длины 3)_ При этом VMID и числа в автоматически сгенерированном _hostname_ совпадают. ### Файл **user.yaml** (шаблон сниппета) Содержит ssh-ключ, имя пользователя, хэш пароля и другие настройки. Можно поменять или добавить пакеты, устанавливаемые автоматически (секция **packages:**), а также прописать команды, запускаемые после разворачивания ВМ (секция **runcmd:**). ВНИМАНИЕ. Других правок вносить не нужно, т.к. для остальных правок используются опции скрипта. ### Опции скрипта * **-h** - Вывести подсказку. * **-a** - Используется для добавления виртуальных машин в High Avialibility на нодах 1-3. Обязательно нужно указать имя правила (может быть любым, состоящим из букв, цифр и дефисов). * **-k** - Указать свой публичный ключ для доступа к виртуальным машинам. Если ключ не существует, скрипт автоматически сгенерирует пару ключей и зашьёт публичный ключ в yaml-конфиг виртуальных машин, а приватный ключ выведет на экран. * **-u** - Указать пользователя (по-умолчанию **root**). При этом заданному пользователю будут даны права sudo. * **-p** - Указать свой пароль вместо дефолтного "полишинеля" * **-d** - Указать свободное место (в ГБ) на системном диске, добавляемое к образу во время создания. По-умолчанию 50. * **-n** - Указать номер ноды (1 или 2), на которую переедет ВМ после запуска. _Увеличивает время разворачивания ВМ._ Также является тэгом в proxmox. По-умолчанию 3. * **-t** - Указать дополнительный тег proxmox создаваемых ВМ. * **-s** - Указать имя файла шаблона сниппета. По-умолчанию 'user.yaml'. * **-f** - Указать файл со списком хостов * **-R** - Запустить скрипт в режиме УДАЛЕНИЯ виртуальных машин, указанных с помощью файла или аргументов.