готово
parent
559be1bafe
commit
4175738090
|
@ -0,0 +1,4 @@
|
|||
[defaults]
|
||||
host_key_checking = false
|
||||
inventory = ./hosts.ini
|
||||
private_key_file = /home/da2001/.ssh/id_rsa
|
|
@ -3,10 +3,15 @@
|
|||
# завершить выполнение, если некоторая команда, которая не является частью какого-либо теста (например, if [ ... ] или конструктора &&), возвращает ненулевой код
|
||||
set -e
|
||||
|
||||
# скачать образ ubuntu server 20.04 с поддержкой cloud-init
|
||||
echo Скачиваю образ Ubuntu Server 20.04 с поддержкой cloud-init
|
||||
wget https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64.img
|
||||
# проверка запуска скрипта с параметром
|
||||
if [ -n "$1" ]; then
|
||||
vm_passwd="$1"
|
||||
else
|
||||
echo "Необходимо указать желаемый пароль для шаблона первым аргументом"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# задаём необходимые переменные
|
||||
cloudimg=focal-server-cloudimg-amd64.img
|
||||
|
||||
# параметры вм
|
||||
|
@ -14,10 +19,18 @@ 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=vmbr0
|
||||
px_bridge=vmbr1
|
||||
|
||||
# проверить наличие образа, если его нет - скачать образ ubuntu server 20.04 с поддержкой cloud-init
|
||||
if [ ! -f "$cloudimg" ]; then
|
||||
echo "Файл $cloudimg не существует"
|
||||
echo Скачиваю образ Ubuntu Server 20.04 с поддержкой cloud-init
|
||||
wget https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64.img
|
||||
fi
|
||||
|
||||
echo Создаю ВМ
|
||||
qm create $vm_id --name $vm_name --memory $vm_memory --cores $vm_cores --net0 virtio,bridge=$px_bridge
|
||||
|
@ -26,6 +39,8 @@ qm set $vm_id --scsihw virtio-scsi-pci --scsi0 $px_storage:vm-$vm_id-disk-0
|
|||
qm set $vm_id --boot c --bootdisk scsi0
|
||||
qm set $vm_id --ide2 $px_storage:cloudinit
|
||||
qm set $vm_id --serial0 socket --vga serial0
|
||||
qm set $vm_id --cipassword=$vm_passwd --ciuser=$vm_user
|
||||
qm set $vm_id --agent 1
|
||||
|
||||
echo Конвертирую ВМ в шаблон
|
||||
qm template $vm_id
|
||||
|
|
|
@ -3,28 +3,56 @@
|
|||
hosts: proxmox
|
||||
vars_files:
|
||||
- vars.yaml
|
||||
- vms.yaml
|
||||
tasks:
|
||||
- name: Создание и настройка ВМ из шаблона
|
||||
- name: Клонирование ВМ из шаблона
|
||||
community.general.proxmox_kvm:
|
||||
node: "{{ node }}"
|
||||
name: "{{ item.value.name }}"
|
||||
newid: "{{ item.value.vmid }}"
|
||||
api_user: "{{ api_user }}"
|
||||
api_password: "{{ api_password }}"
|
||||
api_host: "{{ api_host }}"
|
||||
clone: "{{ clone_vm }}"
|
||||
storage: "{{ pve_storage }}"
|
||||
format: qcow2
|
||||
timeout: 500
|
||||
loop: "{{ lookup('dict', vms) }}"
|
||||
|
||||
block:
|
||||
- name: Создание ВМ
|
||||
community.general.proxmox_kvm:
|
||||
api_user: "{{ pve_user }}"
|
||||
api_password: "{{ pve_password }}"
|
||||
api_host: "{{ pve_node }}"
|
||||
clone: "{{ pve_template_name }}"
|
||||
vmid: "{{ pve_template_id }}"
|
||||
newid: "{{ vm_id }}"
|
||||
name: "{{ vm_name }}"
|
||||
node: "{{ pve_node }}"
|
||||
storage: "{{ pve_storage }}"
|
||||
format: qcow2
|
||||
timeout: 500
|
||||
ciuser: "{{ vm_user }}"
|
||||
cipassword: "{{ vm_passwd }}"
|
||||
nameservers: '"{{ vm_dns }}"'
|
||||
net:
|
||||
net0: 'virtio,bridge="{{ vm_net_intf }}"'
|
||||
ipconfig:
|
||||
ipconfig0: 'ip="{{ vm_ip }}"/"{{ vm_mask }}",gw="{{ vm_gw }}"'
|
||||
sshkeys: '"{{ ssh_key }}"'
|
||||
- name: Настройка IP адресов
|
||||
command: "qm set {{ item.value.vmid }} --ipconfig0 gw={{ item.value.gw }},ip={{ item.value.ip }}"
|
||||
loop: "{{ lookup('dict', vms) }}"
|
||||
|
||||
- name: Настройка DNS
|
||||
command: "qm set {{ item.value.vmid }} --nameserver {{ item.value.dns }}"
|
||||
loop: "{{ lookup('dict', vms) }}"
|
||||
|
||||
- name: Копирование SSH ключей в ВМ
|
||||
command: "qm set {{ item.value.vmid }} --sshkey {{ key_name }}"
|
||||
args:
|
||||
chdir: ~/.ssh
|
||||
loop: "{{ lookup('dict', vms) }}"
|
||||
|
||||
- name: Обновление параметров ВМ
|
||||
community.general.proxmox_kvm:
|
||||
api_host: "{{ api_host }}"
|
||||
api_user: "{{ api_user }}"
|
||||
api_password: "{{ api_password }}"
|
||||
cores: "{{ item.value.cores }}"
|
||||
sockets: "{{ item.value.sockets }}"
|
||||
memory: "{{ item.value.memory }}"
|
||||
update: true
|
||||
vmid: "{{ item.value.vmid }}"
|
||||
node: "{{ node }}"
|
||||
name: "{{ item.value.name }}"
|
||||
loop: "{{ lookup('dict', vms) }}"
|
||||
|
||||
- name: Запуск ВМ
|
||||
community.general.proxmox_kvm:
|
||||
api_host: "{{ api_host }}"
|
||||
api_password: "{{ api_password }}"
|
||||
api_user: "{{ api_user }}"
|
||||
vmid: "{{ item.value.vmid }}"
|
||||
node: "{{ node }}"
|
||||
state: started
|
||||
loop: "{{ lookup('dict', vms) }}"
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
[proxmox]
|
||||
pve ansible_host=192.168.13.9
|
||||
pve ansible_host=192.168.13.9 ansible_user=root
|
||||
|
|
58
readme.md
58
readme.md
|
@ -0,0 +1,58 @@
|
|||
# Автоматизация процесса создания ВМ в Proxmox с использованием Ansible
|
||||
## Этапы
|
||||
- [Создание шаблона](#Создание-шаблона)
|
||||
- [О файлах примерах](#О-файлах-примерах)
|
||||
- [О версиях Ansible](#О-версиях-ansible)
|
||||
- [Структура данных](#Структура-данных)
|
||||
- [Списки](#Списки)
|
||||
- [Словари (Хеш таблицы)](#Словари-Хеш-таблицы)
|
||||
- [Списки словарей](#Списки-словарей)
|
||||
- [Словари словарей](#Словари-словарей)
|
||||
- [Циклы](#Циклы)
|
||||
- [with_items](#with_items)
|
||||
- [С простыми списками](#С-простыми-списками)
|
||||
- [with_dict](#with_dict)
|
||||
- [Полезные ссылки](#Полезные-ссылки)
|
||||
- [Благодарности](#Благодарности)
|
||||
|
||||
## Создание шаблона
|
||||
|
||||
ВМ создаются из существующего шаблона. При этом, необходимо, чтобы шаблон был с поддержкой 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 будут созданы ВМ**
|
||||
|
||||
|
23
vars.yaml
23
vars.yaml
|
@ -1,18 +1,7 @@
|
|||
pve_node: 192.168.13.9
|
||||
pve_user: root@pam
|
||||
pve_password: KatIrina1
|
||||
pve_template_name: ubuntu-2004-cloudinit-template
|
||||
pve_template_id: 200
|
||||
pve_storage: local-lvm
|
||||
|
||||
vm_name: test_serv_1
|
||||
vm_id: 201
|
||||
vm_user: da2001
|
||||
vm_passwd: 131181
|
||||
vm_ip: 192.168.13.201
|
||||
vm_mask: 24
|
||||
vm_gw: 192.168.13.1
|
||||
vm_dns: 192.168.13.1
|
||||
vm_net_intf: vmbr0
|
||||
|
||||
ssh_key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCyeWFbxRchbB7Z3Z+iKyWHww+TuJqREzMIlreZmqFVYKAnNaWnkpsG9SHeAkJgDcT/BTeksaUTol+hx26iKX1ZduLgif+Rq0IX2Mog1E2FxAqzmqHaSxVLNB5ni83bC4v+kWwEDRaTTNcgbnMwGFxTMC/vQLWjkNvHF5y6pdyTqw+kX046bf3MjVmDbj6Ueeg/c/8pqfkt+pg0lCPz7ZyMf3Jqf6uiIYxp+lPyWilTjsY8SLrk2Huxn9Qb0H26i5lM0nQaC2oatgxPaPyqkISH+uROKbQZ7CF6RBfpjiYSyRA6JdNsBqB0ZAZG0oAuwKOqk4bWYMAGslZsIbG91TGqPUroWTwhtsiaaFKNjf6QpROZfUqdY2ahNF5QEIXX2JFE61kOQzUcs4eCzcDAAUTCYmgcPhjQNYOc5G5KKeedMdx4a1S3mxf2UfLDPpM7RM2+XpbSQi6o7RZtPbjC9hKqTAk42q3jl71HqLlUEnrLlJgcGrSAKtVU43LqYkGdae8= da2001@da-metrotek
|
||||
api_host: 192.168.13.9
|
||||
api_user: root@pam
|
||||
api_password: KatIrina1
|
||||
node: pve
|
||||
clone_vm: ubuntu-2004-cloudinit-template
|
||||
key_name: id_rsa.pub
|
||||
|
|
Loading…
Reference in New Issue