Go to file
artemdolgiy a4ff970a9c small mod 2022-01-21 08:44:01 +03:00
ansible.cfg готово 2022-01-06 22:39:49 +03:00
create_template.sh готово 2022-01-07 09:17:51 +03:00
create_vm.yaml готово 2022-01-06 22:39:49 +03:00
hosts.ini готово 2022-01-06 22:39:49 +03:00
readme.md small mod 2022-01-21 08:44:01 +03:00
vars.yaml готово 2022-01-06 23:59:19 +03:00
vms.yaml готово 2022-01-07 09:17:51 +03:00

readme.md

Автоматизация процесса создания ВМ в Proxmox с использованием Ansible

Содержание

Требования

Для работы Ansible с гипервизором Proxmox, написан соответствующий модуль proxmox_kvm. В свою очередь, для работы модуля 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

Пример запуска скрипта

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

перед запуском плейбука необходимо убедиться, что установлены корректные значения переменных

⬆ Наверх

Задачи плейбука

Конструкция

loop: "{{ lookup('dict', vms) }}"

позволяет перебрать все необходимые ключи и значения из словаря vms

  • Настройка IP адресов В этой задаче назначается IP адрес для каждой созданной ВМ и IP адрес шлюза по-умолчанию

  • Настройка DNS Как видно из названия, в ВМ указывается IP адрес DNS сервера

  • Копирование SSH ключей в ВМ Для беспарольного доступа в ВМ будет скопирован указанный SSH ключ хоста, на котором выполняется плейбук

  • Обновление параметров ВМ При клонировании из шаблона, ВМ создаются с теми же параметрами, что и сам шаблон. Выполнение этой задачи позволяет изменить параметры ВМ, например размер оперативной памяти, количество доступных процессоров и т.д.

  • Запуск ВМ Финальным этапом будет запуск созданных ВМ

Подключение к ВМ

Для доступа к ВМ по SSH необходимо использовать имя пользователя, которое определено в переменной vm_user в скрипте create_template.sh. При подключении с хоста, на котором запускался плейбук пароль вводить не нужно, т.к. в ВМ скопирован SSH ключ. При подключении из других систем, необходимо указать пароль, который был задан в виде аргумента при запуске скрипта create_template.sh.

⬆ Наверх