# Автоматизация процесса создания ВМ в Proxmox с использованием Ansible ## Содержание - [Требования](#требования) - [Создание шаблона](#создание-шаблона) - [Создание ВМ с помощью Ansible](#создание-вм-с-помощью-ansible) - [Необходимые файлы](#необходимые-файлы) - [О версиях Ansible](#О-версиях-ansible) - [Структура данных](#Структура-данных) - [Списки](#Списки) - [Словари (Хеш таблицы)](#Словари-Хеш-таблицы) - [Списки словарей](#Списки-словарей) - [Словари словарей](#Словари-словарей) - [Циклы](#Циклы) - [with_items](#with_items) - [С простыми списками](#С-простыми-списками) - [with_dict](#with_dict) - [Полезные ссылки](#Полезные-ссылки) - [Благодарности](#Благодарности) ## Требования Для работы Ansible с гипервизором Proxmox, написан соответсвующий модуль [proxmox_kvm](https://docs.ansible.com/ansible/latest/collections/community/general/proxmox_kvm_module.html). В свою очередь, для работы модуля `proxmox_kvm` на хосте Proxmox, необходимо установить пакеты `requests` и `proxmoxer`. Т.к. Ansible написан на Python, необходимые ему пакеты можно установить с помощью PIP. Для установки PIP для Python 2 - `sudo apt install python-pip` Для установки PIP для Python 3 (предпочтительнее) - `sudo apt install python3-pip` Далее установим необходимые пакеты: *в зависимости от способа установки Python и PIP, команда для установки пакетов может отличаться. В общем случае, команда выглядит так:* ``` pip install requests pip install proxmoxer ``` ## Создание шаблона ВМ создаются из существующего шаблона. При этом, необходимо, чтобы шаблон был с поддержкой cloudinit. Здесь возможны 2 варианта, создать такой шаблон самостоятельно или скачать готовый образ. Я подготовил скрипт, который скачивает официальный образ Ubuntu с поддержкой cloudinit и на основании этого образа создаётся шаблон. Скрипт `create_template.sh` необходимо скопировать на хост Proxmox, добавить права на исполнение. Стоит обратить внимание на объявленные в скрипте переменные: *скачиваемый образ и его URL* ``` cloudimg=focal-server-cloudimg-amd64.img # имя скачиваемого образа img_url=https://cloud-images.ubuntu.com/focal/current # адрес, по которому доступен образ ``` *параметры создаваемого шаблона* ``` vm_id=200 # идентификатор создаваемого шаблона vm_name="ubuntu-2004-cloudinit-template" # имя создаваемого шаблона vm_memory=2048 # объем оперативной памяти выделяемый шаблону vm_cores=2 # количество ядер процессора доступных шаблону vm_user="da2001" # имя пользвателя, который будет создан в шаблоне ``` *переменные, относящиеся к гипервизору Proxmox* ``` px_storage=local-lvm # хранилище, в котором будет размещен диск шаблона px_bridge=vmbr1 # имя сетевого интерфейса к которому будет подключен шаблон ``` **необходимо изменить значения переменных на свои** Скрипт необходимо запустить от имени пользователя, который может создавать и редактировать ВМ (по-умолчанию это `root`). При запуске нужно придумать и указать в качестве аргумента пароль, который будет добавлен для авторизации пользователя, указанного в переменной `vm_user` Пример запуска скрипта ```bash root@pve:~# ./create_template.sh verySecPassword ``` **Результатом работы скрипта будет созданный шаблон, из которого с помощью ansible-playbook будут созданы ВМ** [⬆ Наверх](#содержание) ## Создание ВМ с помощью Ansible ### Необходимые файлы Для корректной работы плейбука необходимы следующие файлы: - ansible.cfg - файл общих настроек ansible - create_vm.yaml - файл плейбука - hosts.ini - файл инвентаря, в котором указан, единственный в данном примере хост Proxmox - vars.yaml - используемые переменные - vms.yaml - переменные с описанием создаваемых ВМ [⬆ Наверх](#содержание) ### Описание переменных Используемые в плейбуке переменные разделены на два файла: `vars.yaml`, `vms.yaml`. Это разделение сделано для удобства, чтобы отделить переменные виртуальных машин. `vars.yaml` ``` pve_storage: local-lvm # название хранилища на котором будут созданы ВМ api_host: 192.168.13.9 # IP адрес хоста Proxmox api_user: root@pam # данные для авторизации по API api_password: securePassword # пароль для авторизации node: pve # имя ноды Proxmox clone_vm: ubuntu-2004-cloudinit-template # имя шаблона из которого создаются ВМ key_name: id_rsa.pub # имя SSH ключа, который будет скопирован в ВМ для дальнейшего доступа к ним ``` `vms.yaml` ``` vms: us1: name: us10.da2001.ru # имя создаваемой ВМ ip: 192.168.10.21/24 # IP адрес ВМ gw: 192.168.10.9 # IP адрес шлюза по-умолчанию, который будет прописан в ВМ (адрес гипервизора) dns: 8.8.8.8 # IP адрес DNS сервера vmid: 201 # идентификатор создаваемой ВМ cores: 2 # количество доступных процессоров для ВМ, если отличается от указанных в шаблоне sockets: 1 # количество доступных сокетов для ВМ, если отличается от указанных в шаблоне memory: 2048 # количество доступной оперативной памяти для ВМ, если отличается от указанного значения в шаблоне us2: name: us11.da2001.ru ip: 192.168.10.22/24 gw: 192.168.10.9 dns: 8.8.8.8 vmid: 202 cores: 2 sockets: 1 memory: 2048 ``` **перед запуском плейбука необходимо убедиться, что установлены корректные значения** [⬆ Наверх](#содержание) ### Задачи плейбука [⬆ Наверх](#содержание)