Compare commits
13 Commits
2d2e260d57
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 886c9c0edb | |||
| f5e9afbeb9 | |||
| 4dc8b8701c | |||
| a4ff970a9c | |||
| 3613b9181b | |||
| 94b47cd137 | |||
| 2af0945509 | |||
| 2474ed92e6 | |||
| 471fe09aaf | |||
| 6fdbb8ead1 | |||
| 622e070a8a | |||
| 27703d8c8d | |||
| 072c101f60 |
@@ -20,7 +20,7 @@ vm_id=200
|
|||||||
vm_name="ubuntu-2004-cloudinit-template"
|
vm_name="ubuntu-2004-cloudinit-template"
|
||||||
vm_memory=2048
|
vm_memory=2048
|
||||||
vm_cores=2
|
vm_cores=2
|
||||||
vm_user="da2001"
|
vm_user="cooluser"
|
||||||
|
|
||||||
# данные proxmox
|
# данные proxmox
|
||||||
px_storage=local-lvm
|
px_storage=local-lvm
|
||||||
|
|||||||
174
create_template_deb12.sh
Executable file
174
create_template_deb12.sh
Executable file
@@ -0,0 +1,174 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Скрипт для создания шаблона ВМ в Proxmox VE с cloud-init
|
||||||
|
# Автоматически скачивает образ Debian 12, создает и настраивает ВМ как шаблон
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Параметры по умолчанию
|
||||||
|
DEFAULT_VM_ID=508
|
||||||
|
DEFAULT_VM_NAME="deb12-cloudinit-template"
|
||||||
|
DEFAULT_VM_USER="sa"
|
||||||
|
DEFAULT_VM_CORES=4
|
||||||
|
DEFAULT_VM_SOCKETS=2
|
||||||
|
DEFAULT_VM_MEMORY=4096
|
||||||
|
DEFAULT_PX_STORAGE="local-lvm"
|
||||||
|
DEFAULT_PX_BRIDGE="vmbr0"
|
||||||
|
DEFAULT_CLOUDIMG="debian-12-generic-amd64.qcow2"
|
||||||
|
DEFAULT_IMG_URL="https://cloud.debian.org/images/cloud/bookworm/latest"
|
||||||
|
|
||||||
|
# Функция вывода справки
|
||||||
|
show_help() {
|
||||||
|
echo "Использование: $0 [ОПЦИИ] <пароль>"
|
||||||
|
echo
|
||||||
|
echo "Обязательные аргументы:"
|
||||||
|
echo " пароль Пароль пользователя для cloud-init"
|
||||||
|
echo
|
||||||
|
echo "Опции:"
|
||||||
|
echo " -h, --help Показать эту справку и выйти"
|
||||||
|
echo " -i ID, --id ID ID создаваемой ВМ (по умолчанию: $DEFAULT_VM_ID)"
|
||||||
|
echo " -n NAME, --name NAME Имя шаблона (по умолчанию: \"$DEFAULT_VM_NAME\")"
|
||||||
|
echo " -u USER, --user USER Имя пользователя cloud-init (по умолчанию: \"$DEFAULT_VM_USER\")"
|
||||||
|
echo " -s STORAGE, --storage STORAGE"
|
||||||
|
echo " Хранилище Proxmox (по умолчанию: \"$DEFAULT_PX_STORAGE\")"
|
||||||
|
echo " -b BRIDGE, --bridge BRIDGE"
|
||||||
|
echo " Сетевой мост (по умолчанию: \"$DEFAULT_PX_BRIDGE\")"
|
||||||
|
echo " -c CORES, --cores CORES"
|
||||||
|
echo " Количество ядер CPU (по умолчанию: $DEFAULT_VM_CORES)"
|
||||||
|
echo " -m MEMORY, --memory MEMORY"
|
||||||
|
echo " Объем памяти в MB (по умолчанию: $DEFAULT_VM_MEMORY)"
|
||||||
|
echo " -S SOCKETS, --sockets SOCKETS"
|
||||||
|
echo " Количество сокетов CPU (по умолчанию: $DEFAULT_VM_SOCKETS)"
|
||||||
|
echo
|
||||||
|
echo "Примеры:"
|
||||||
|
echo " $0 MySecurePassword123"
|
||||||
|
echo " $0 -u admin MySecurePassword123"
|
||||||
|
echo " $0 -i 510 -n my-template -u admin MySecurePassword123"
|
||||||
|
echo " $0 -c 2 -m 2048 -S 1 MyPassword"
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Парсинг аргументов командной строки
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case $1 in
|
||||||
|
-h|--help)
|
||||||
|
show_help
|
||||||
|
;;
|
||||||
|
-i|--id)
|
||||||
|
vm_id="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-n|--name)
|
||||||
|
vm_name="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-u|--user)
|
||||||
|
vm_user="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-s|--storage)
|
||||||
|
px_storage="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-b|--bridge)
|
||||||
|
px_bridge="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-c|--cores)
|
||||||
|
vm_cores="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-m|--memory)
|
||||||
|
vm_memory="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-S|--sockets)
|
||||||
|
vm_sockets="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
if [ -z "$vm_passwd" ]; then
|
||||||
|
vm_passwd="$1"
|
||||||
|
shift
|
||||||
|
else
|
||||||
|
echo "Ошибка: Неизвестный аргумент $1"
|
||||||
|
show_help
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Проверка обязательного аргумента (пароль)
|
||||||
|
if [ -z "$vm_passwd" ]; then
|
||||||
|
echo "Ошибка: Необходимо указать пароль для пользователя cloud-init"
|
||||||
|
echo
|
||||||
|
echo "Справка - \"$0 -h\""
|
||||||
|
#show_help
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Установка значений по умолчанию для неопределённых параметров
|
||||||
|
cloudimg="${cloudimg:-$DEFAULT_CLOUDIMG}"
|
||||||
|
img_url="${img_url:-$DEFAULT_IMG_URL}"
|
||||||
|
vm_id="${vm_id:-$DEFAULT_VM_ID}"
|
||||||
|
vm_name="${vm_name:-$DEFAULT_VM_NAME}"
|
||||||
|
vm_memory="${vm_memory:-$DEFAULT_VM_MEMORY}"
|
||||||
|
vm_cores="${vm_cores:-$DEFAULT_VM_CORES}"
|
||||||
|
vm_sockets="${vm_sockets:-$DEFAULT_VM_SOCKETS}"
|
||||||
|
vm_user="${vm_user:-$DEFAULT_VM_USER}"
|
||||||
|
px_storage="${px_storage:-$DEFAULT_PX_STORAGE}"
|
||||||
|
px_bridge="${px_bridge:-$DEFAULT_PX_BRIDGE}"
|
||||||
|
|
||||||
|
# Вывод информации о параметрах
|
||||||
|
echo "Параметры создания шаблона:"
|
||||||
|
echo "--------------------------"
|
||||||
|
echo "ID ВМ: $vm_id"
|
||||||
|
echo "Имя шаблона: $vm_name"
|
||||||
|
echo "Пользователь: $vm_user"
|
||||||
|
echo "Ядра CPU: $vm_cores"
|
||||||
|
echo "Сокеты CPU: $vm_sockets"
|
||||||
|
echo "Память (MB): $vm_memory"
|
||||||
|
echo "Хранилище: $px_storage"
|
||||||
|
echo "Сетевой мост: $px_bridge"
|
||||||
|
echo "--------------------------"
|
||||||
|
echo
|
||||||
|
|
||||||
|
# Загрузка образа если отсутствует
|
||||||
|
if [ ! -f "$cloudimg" ]; then
|
||||||
|
echo "Скачиваю образ $img_url/$cloudimg"
|
||||||
|
wget -q --show-progress "$img_url/$cloudimg"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Создание и настройка ВМ
|
||||||
|
echo "Создаю ВМ $vm_id: $vm_name"
|
||||||
|
qm create "$vm_id" \
|
||||||
|
--name "$vm_name" \
|
||||||
|
--memory "$vm_memory" \
|
||||||
|
--cores "$vm_cores" \
|
||||||
|
--sockets "$vm_sockets" \
|
||||||
|
--numa 1 \
|
||||||
|
--agent enabled=1 \
|
||||||
|
--net0 virtio,bridge=$px_bridge
|
||||||
|
|
||||||
|
echo "Импортирую диск"
|
||||||
|
qm importdisk "$vm_id" "$cloudimg" "$px_storage"
|
||||||
|
|
||||||
|
echo "Настраиваю оборудование ВМ"
|
||||||
|
qm set "$vm_id" \
|
||||||
|
--scsihw virtio-scsi-single \
|
||||||
|
--scsi0 "$px_storage:vm-$vm_id-disk-0" \
|
||||||
|
--scsi1 "$px_storage:cloudinit,media=cdrom" \
|
||||||
|
--ide2 "none,media=cdrom" \
|
||||||
|
--boot "order=scsi0;ide2;net0" \
|
||||||
|
--cipassword="$vm_passwd" --ciuser="$vm_user"
|
||||||
|
|
||||||
|
echo Конвертирую ВМ в шаблон
|
||||||
|
qm template $vm_id
|
||||||
|
|
||||||
|
echo Удаляю скачанный образ
|
||||||
|
rm -f $cloudimg
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Шаблон $vm_name (ID: $vm_id) успешно создан!"
|
||||||
|
exit 0
|
||||||
120
readme.md
120
readme.md
@@ -1,35 +1,28 @@
|
|||||||
# Автоматизация процесса создания ВМ в Proxmox с использованием Ansible
|
# Автоматизация процесса создания ВМ в Proxmox с использованием Ansible
|
||||||
|
|
||||||
## Содержание
|
## Содержание
|
||||||
|
|
||||||
- [Требования](#требования)
|
- [Требования](#требования)
|
||||||
- [Создание шаблона](#создание-шаблона)
|
- [Создание шаблона](#создание-шаблона)
|
||||||
- [Создание ВМ с помощью Ansible](#создание-вм-с-помощью-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).
|
|
||||||
|
Для работы Ansible с гипервизором Proxmox, написан соответствующий модуль [proxmox_kvm](https://docs.ansible.com/ansible/latest/collections/community/general/proxmox_kvm_module.html).
|
||||||
В свою очередь, для работы модуля `proxmox_kvm` на хосте Proxmox, необходимо установить пакеты `requests` и `proxmoxer`.
|
В свою очередь, для работы модуля `proxmox_kvm` на хосте Proxmox, необходимо установить пакеты `requests` и `proxmoxer`.
|
||||||
Т.к. Ansible написан на Python, необходимые ему пакеты можно установить с помощью PIP.
|
Т.к. Ansible написан на Python, необходимые ему пакеты можно установить с помощью PIP.
|
||||||
Для установки PIP для Python 2 - `sudo apt install python-pip`
|
Для установки PIP для Python 2 - `sudo apt install python-pip`
|
||||||
Для установки PIP для Python 3 (предпочтительнее) - `sudo apt install python3-pip`
|
Для установки PIP для Python 3 (предпочтительнее) - `sudo apt install python3-pip`
|
||||||
|
|
||||||
Далее установим необходимые пакеты:
|
Далее установим необходимые пакеты:
|
||||||
*в зависимости от способа установки Python и PIP, команда для установки пакетов может отличаться. В общем случае, команда выглядит так:*
|
_в зависимости от способа установки Python и PIP, команда для установки пакетов может отличаться. В общем случае, команда выглядит так:_
|
||||||
```
|
|
||||||
pip install requests
|
pip install requests
|
||||||
pip install proxmoxer
|
pip install proxmoxer
|
||||||
```
|
|
||||||
|
|
||||||
[⬆ Наверх](#содержание)
|
[⬆ Наверх](#содержание)
|
||||||
|
|
||||||
@@ -41,32 +34,30 @@ pip install proxmoxer
|
|||||||
Скрипт `create_template.sh` необходимо скопировать на хост Proxmox, добавить права на исполнение.
|
Скрипт `create_template.sh` необходимо скопировать на хост Proxmox, добавить права на исполнение.
|
||||||
|
|
||||||
Стоит обратить внимание на объявленные в скрипте переменные:
|
Стоит обратить внимание на объявленные в скрипте переменные:
|
||||||
*скачиваемый образ и его URL*
|
_скачиваемый образ и его URL_
|
||||||
```
|
|
||||||
cloudimg=focal-server-cloudimg-amd64.img # имя скачиваемого образа
|
|
||||||
img_url=https://cloud-images.ubuntu.com/focal/current # адрес, по которому доступен образ
|
|
||||||
```
|
|
||||||
|
|
||||||
*параметры создаваемого шаблона*
|
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 # хранилище, в котором будет размещен диск шаблона
|
vm_id=200 # идентификатор создаваемого шаблона
|
||||||
px_bridge=vmbr1 # имя сетевого интерфейса к которому будет подключен шаблон
|
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`). При запуске нужно придумать и указать в качестве аргумента пароль, который будет добавлен для авторизации пользователя, указанного в переменной `vm_user`
|
||||||
|
|
||||||
Пример запуска скрипта
|
Пример запуска скрипта
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
root@pve:~# ./create_template.sh verySecPassword
|
root@pve:~# ./create_template.sh verySecPassword
|
||||||
```
|
```
|
||||||
@@ -78,7 +69,9 @@ root@pve:~# ./create_template.sh verySecPassword
|
|||||||
## Создание ВМ с помощью Ansible
|
## Создание ВМ с помощью Ansible
|
||||||
|
|
||||||
### Необходимые файлы
|
### Необходимые файлы
|
||||||
|
|
||||||
Для корректной работы плейбука необходимы следующие файлы:
|
Для корректной работы плейбука необходимы следующие файлы:
|
||||||
|
|
||||||
- `ansible.cfg` - файл общих настроек ansible
|
- `ansible.cfg` - файл общих настроек ansible
|
||||||
- `create_vm.yaml` - файл плейбука
|
- `create_vm.yaml` - файл плейбука
|
||||||
- `hosts.ini` - файл инвентаря, в котором указан, единственный в данном примере хост Proxmox
|
- `hosts.ini` - файл инвентаря, в котором указан, единственный в данном примере хост Proxmox
|
||||||
@@ -88,21 +81,21 @@ root@pve:~# ./create_template.sh verySecPassword
|
|||||||
[⬆ Наверх](#содержание)
|
[⬆ Наверх](#содержание)
|
||||||
|
|
||||||
### Описание переменных
|
### Описание переменных
|
||||||
|
|
||||||
Используемые в плейбуке переменные разделены на два файла: `vars.yaml`, `vms.yaml`. Это разделение сделано для удобства, чтобы отделить переменные виртуальных машин.
|
Используемые в плейбуке переменные разделены на два файла: `vars.yaml`, `vms.yaml`. Это разделение сделано для удобства, чтобы отделить переменные виртуальных машин.
|
||||||
`vars.yaml`
|
`vars.yaml`
|
||||||
```
|
|
||||||
pve_storage: local-lvm # название хранилища на котором будут созданы ВМ
|
pve_storage: local-lvm # название хранилища на котором будут созданы ВМ
|
||||||
api_host: 192.168.13.9 # IP адрес хоста Proxmox
|
api_host: 192.168.13.9 # IP адрес хоста Proxmox
|
||||||
api_user: root@pam # данные для авторизации по API
|
api_user: root@pam # данные для авторизации по API
|
||||||
api_password: securePassword # пароль для авторизации
|
api_password: securePassword # пароль для авторизации
|
||||||
node: pve # имя ноды Proxmox
|
node: pve # имя ноды Proxmox
|
||||||
clone_vm: ubuntu-2004-cloudinit-template # имя шаблона из которого создаются ВМ
|
clone_vm: ubuntu-2004-cloudinit-template # имя шаблона из которого создаются ВМ
|
||||||
key_name: id_rsa.pub # имя SSH ключа, который будет скопирован в ВМ для дальнейшего доступа к ним
|
key_name: id_rsa.pub # имя SSH ключа, который будет скопирован в ВМ для дальнейшего доступа к ним
|
||||||
```
|
|
||||||
|
|
||||||
`vms.yaml`
|
`vms.yaml`
|
||||||
```
|
|
||||||
vms:
|
vms:
|
||||||
us1:
|
us1:
|
||||||
name: us10.da2001.ru # имя создаваемой ВМ
|
name: us10.da2001.ru # имя создаваемой ВМ
|
||||||
ip: 192.168.10.21/24 # IP адрес ВМ
|
ip: 192.168.10.21/24 # IP адрес ВМ
|
||||||
@@ -121,13 +114,42 @@ vms:
|
|||||||
cores: 2
|
cores: 2
|
||||||
sockets: 1
|
sockets: 1
|
||||||
memory: 2048
|
memory: 2048
|
||||||
```
|
|
||||||
|
|
||||||
**перед запуском плейбука необходимо убедиться, что установлены корректные значения**
|
**перед запуском плейбука необходимо убедиться, что установлены корректные значения переменных**
|
||||||
|
|
||||||
[⬆ Наверх](#содержание)
|
[⬆ Наверх](#содержание)
|
||||||
|
|
||||||
### Задачи плейбука
|
### Задачи плейбука
|
||||||
|
|
||||||
|
- Клонирование ВМ из шаблона
|
||||||
|
_за основу были взяты примеры из документации <https://docs.ansible.com/ansible/latest/collections/community/general/proxmox_kvm_module.html#examples>_</br>
|
||||||
|
В задаче создаются виртуальные машины на основе шаблона
|
||||||
|
|
||||||
|
Конструкция
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
loop: "{{ lookup('dict', vms) }}"
|
||||||
|
```
|
||||||
|
|
||||||
|
позволяет перебрать все необходимые ключи и значения из словаря `vms`
|
||||||
|
|
||||||
|
- Настройка IP адресов
|
||||||
|
В этой задаче назначается IP адрес для каждой созданной ВМ и IP адрес шлюза по-умолчанию
|
||||||
|
|
||||||
|
- Настройка DNS
|
||||||
|
Как видно из названия, в ВМ указывается IP адрес DNS сервера
|
||||||
|
|
||||||
|
- Копирование SSH ключей в ВМ
|
||||||
|
Для беспарольного доступа в ВМ будет скопирован указанный SSH ключ хоста, на котором выполняется плейбук
|
||||||
|
|
||||||
|
- Обновление параметров ВМ
|
||||||
|
При клонировании из шаблона, ВМ создаются с теми же параметрами, что и сам шаблон. Выполнение этой задачи позволяет изменить параметры ВМ, например размер оперативной памяти, количество доступных процессоров и т.д.
|
||||||
|
|
||||||
|
- Запуск ВМ
|
||||||
|
Финальным этапом будет запуск созданных ВМ
|
||||||
|
|
||||||
|
## Подключение к ВМ
|
||||||
|
|
||||||
|
Для доступа к ВМ по SSH необходимо использовать имя пользователя, которое определено в переменной `vm_user` в скрипте `create_template.sh`. При подключении с хоста, на котором запускался плейбук пароль вводить не нужно, т.к. в ВМ скопирован SSH ключ. При подключении из других систем, необходимо указать пароль, который был задан в виде аргумента при запуске скрипта `create_template.sh`.
|
||||||
|
|
||||||
[⬆ Наверх](#содержание)
|
[⬆ Наверх](#содержание)
|
||||||
|
|||||||
4
vms.yaml
4
vms.yaml
@@ -1,6 +1,6 @@
|
|||||||
vms:
|
vms:
|
||||||
us1:
|
us1:
|
||||||
name: us10.da2001.ru
|
name: us10.example.com
|
||||||
ip: 192.168.10.21/24
|
ip: 192.168.10.21/24
|
||||||
gw: 192.168.10.9
|
gw: 192.168.10.9
|
||||||
dns: 8.8.8.8
|
dns: 8.8.8.8
|
||||||
@@ -9,7 +9,7 @@ vms:
|
|||||||
sockets: 1
|
sockets: 1
|
||||||
memory: 2048
|
memory: 2048
|
||||||
us2:
|
us2:
|
||||||
name: us11.da2001.ru
|
name: us11.example.com
|
||||||
ip: 192.168.10.22/24
|
ip: 192.168.10.22/24
|
||||||
gw: 192.168.10.9
|
gw: 192.168.10.9
|
||||||
dns: 8.8.8.8
|
dns: 8.8.8.8
|
||||||
|
|||||||
Reference in New Issue
Block a user