feat: added demonstration 5.3
This commit is contained in:
1 parent
b0e5a6b653
commit
b599bd410b
6 files changed
+394
No files matched your search
@@ -79,4 +79,9 @@ VKC_PR_M05_02_k8s_stage2log_РемизовКЛ_20260615.log,EVIDENCE,M05,02,Ло
|
||||
VKC_PR_M05_02_k8s_stage3log_РемизовКЛ_20260615.log,EVIDENCE,M05,02,Лог применения манифеста и ожидания External-IP,02_evidence/VKC_PR_M05_02_k8s_stage3log_РемизовКЛ_20260615.log,VKC_PR_M05_02_k8s_REPORT_РемизовКЛ_20260615.md,final,
|
||||
VKC_PR_M05_02_k8s_stage3pruf_РемизовКЛ_20260615.png,EVIDENCE,M05,02,Страница nginx по внешнему IP балансировщика,02_evidence/VKC_PR_M05_02_k8s_stage3pruf_РемизовКЛ_20260615.png,VKC_PR_M05_02_k8s_REPORT_РемизовКЛ_20260615.md,final,
|
||||
VKC_PR_M05_02_k8s_deployment_РемизовКЛ_20260615.yaml,CODE,M05,02,Манифест Deployment и Service LoadBalancer,03_code/VKC_PR_M05_02_k8s_deployment_РемизовКЛ_20260615.yaml,VKC_PR_M05_02_k8s_REPORT_РемизовКЛ_20260615.md,final,
|
||||
VKC_PR_M05_03_packer_REPORT_РемизовКЛ_20260616.md,PR,M05,03,Создание образов с Packer,01_reports/VKC_PR_M05_03_packer_REPORT_РемизовКЛ_20260616.md,,final,
|
||||
VKC_PR_M05_03_packer_log_РемизовКЛ_20260616.log,EVIDENCE,M05,03,Лог сборки Packer,02_evidence/VKC_PR_M05_03_packer_log_РемизовКЛ_20260616.log,VKC_PR_M05_03_packer_REPORT_РемизовКЛ_20260616.md,final,
|
||||
VKC_PR_M05_03_packer_packer-config_РемизовКЛ_20260516.pkr.hcl,CODE,M05,03,Конфигурация Packer,03_code/VKC_PR_M05_03_packer_packer-config_РемизовКЛ_20260516.pkr.hcl,VKC_PR_M05_03_packer_REPORT_РемизовКЛ_20260616.md,final,
|
||||
VKC_PR_M05_03_packer_curl_РемизовКЛ_20260616.png,EVIDENCE,M05,03,Проверка работы nginx через curl на тестовой ВМ,02_evidence/VKC_PR_M05_03_packer_curl_РемизовКЛ_20260616.png,VKC_PR_M05_03_packer_REPORT_РемизовКЛ_20260616.md,final,
|
||||
VKC_PR_M05_03_packer_image_РемизовКЛ_20260616.png,EVIDENCE,M05,03,Созданный образ Packer в списке образов VK Cloud,02_evidence/VKC_PR_M05_03_packer_image_РемизовКЛ_20260616.png,VKC_PR_M05_03_packer_REPORT_РемизовКЛ_20260616.md,final,
|
||||
00_manifest.csv,MANIFEST,all,all,Финальный манифест сдачи,00_manifest.csv,,final,
|
||||
|
@@ -0,0 +1,177 @@
|
||||
---
|
||||
course_code: VKCLOUD-80
|
||||
artifact_type: PR
|
||||
module: 5
|
||||
task_code: 3
|
||||
task_title: Создание образов с Packer
|
||||
student_fio: Ремизов Кирилл Львович
|
||||
date: 2026-06-16
|
||||
source_docs:
|
||||
- 3-Конспект лекций - VK 1.md
|
||||
- 4-Практические работы - VK -1.md
|
||||
commands_used:
|
||||
- packer --version
|
||||
- packer plugins installed
|
||||
- packer init .
|
||||
- packer validate .
|
||||
- packer build .
|
||||
- openstack image list
|
||||
- openstack server create
|
||||
- ssh
|
||||
- curl
|
||||
attached_files:
|
||||
- VKC_PR_M05_03_packer_log_РемизовКЛ_20260616.log
|
||||
- VKC_PR_M05_03_packer_packer-config_РемизовКЛ_20260516.pkr.hcl
|
||||
- VKC_PR_M05_03_packer_image_РемизовКЛ_20260616.png
|
||||
- VKC_PR_M05_03_packer_curl_РемизовКЛ_20260616.png
|
||||
status: final
|
||||
---
|
||||
|
||||
# Отчёт по практической демонстрации
|
||||
|
||||
## 1. Цель
|
||||
|
||||
Освоить инструмент **Packer** для автоматизации создания кастомизированных образов виртуальных машин в облаке VK Cloud. Научиться:
|
||||
|
||||
- описывать процесс сборки образа декларативно с помощью HCL-конфигурации;
|
||||
- использовать провизоры (shell) для установки и настройки ПО внутри собираемой ВМ;
|
||||
- решать проблемы с сетью и DNS в процессе сборки;
|
||||
- проверять работоспособность созданного образа путём запуска тестовой ВМ.
|
||||
|
||||
## 2. Что было прочитано перед выполнением
|
||||
|
||||
- **Документ:** 3-Конспект лекций - VK 1.md
|
||||
- **Раздел/тема:** Модуль 5 «Контейнеризация и автоматизация», тема 5.3 «Создание образов с Packer»
|
||||
- **Ключевые понятия:**
|
||||
- Packer как инструмент для автоматической сборки образов (Immutable Infrastructure).
|
||||
- Структура конфигурации: `packer` (плагины), `source` (параметры облака, базовый образ, сеть, ключи), `build` (провизоры).
|
||||
- Использование провизора `shell` для выполнения команд внутри собираемой ВМ.
|
||||
- Интеграция с OpenStack (плагин `openstack`).
|
||||
- Переменные окружения для гибкой настройки.
|
||||
|
||||
- **Дополнительно:** Документ 4-Практические работы - VK -1.md, демонстрация 5.3 «Создание образов с Packer».
|
||||
|
||||
## 3. Ход выполнения
|
||||
|
||||
### Демонстрация 5.3: Создание образов с Packer
|
||||
|
||||
#### Этап 0. Подготовка окружения
|
||||
|
||||
- Проверена версия Packer: `1.15.4` (команда `packer --version`).
|
||||
- Установлен плагин OpenStack версии `1.1.3` (подтверждено `packer plugins installed`).
|
||||
- Заданы переменные окружения:
|
||||
```bash
|
||||
export SOURCE_IMAGE=8582cdba-6be5-41d4-834f-b0fa920b3dcf # базовый Ubuntu 22.04
|
||||
export NETWORK_ID=ec8c610e-6387-447e-83d2-d2c541e88164 # сеть internet
|
||||
```
|
||||
|
||||
#### Этап 1. Инициализация и валидация конфигурации
|
||||
|
||||
- Выполнена инициализация:
|
||||
```bash
|
||||
packer init .
|
||||
```
|
||||
Плагин OpenStack загружен (уже был установлен, повторная загрузка подтверждена).
|
||||
|
||||
- Проверена корректность конфигурации:
|
||||
```bash
|
||||
packer validate .
|
||||
```
|
||||
Результат: `The configuration is valid.`
|
||||
|
||||
#### Этап 2. Сборка образа с помощью Packer
|
||||
|
||||
Запущен процесс сборки:
|
||||
```bash
|
||||
packer build .
|
||||
```
|
||||
|
||||
В логе видна последовательность действий Packer:
|
||||
|
||||
1. **Загрузка flavour** `STD3-2-6` (ID подтверждён).
|
||||
2. **Создание тома** (block storage volume) для временной ВМ.
|
||||
3. **Запуск сервера** с указанными параметрами: сеть `internet`, группа безопасности `ssh`, ключ `postgress-test-ViPomgZ4`.
|
||||
4. **Ожидание готовности** – сервер получает публичный IP (`95.163.214.208`).
|
||||
5. **Подключение по SSH** – используется коммуникатор SSH с приватным ключом `postgress-test-ViPomgZ4.pem`.
|
||||
6. **Выполнение провизора `shell`** – внутри ВМ последовательно выполняются команды:
|
||||
- Фикс файла `/etc/hosts` (добавление записи `127.0.0.1 $(hostname)`).
|
||||
- Настройка DNS: удаление существующего `resolv.conf`, установка `nameserver 8.8.8.8` и `1.1.1.1`, защита от перезаписи (`chattr +i`).
|
||||
- Обновление списка пакетов (`apt-get update`). На этом этапе возникли временные ошибки разрешения доменов, но благодаря фиксам DNS и наличию кеша пакетов установка nginx прошла успешно (пакет уже был установлен в базовом образе).
|
||||
- Включение и запуск nginx.
|
||||
- Создание тестовой страницы `/var/www/html/index.html` с содержимым `<h1>Hello from Packer!</h1>`.
|
||||
- Очистка временных файлов и кэша пакетов.
|
||||
7. **Завершение работы** – временная ВМ останавливается, создаётся образ, затем ВМ и том удаляются. В логе появилась ошибка `Error terminating server, may still be around: Resource not found`, но это не повлияло на создание образа.
|
||||
8. **Создание образа** – финальный образ с именем `nginx-custom-image-2026-06-16-2107` (ID `f69ca872-96a2-40a9-ad31-4e098b0f9b0e`).
|
||||
|
||||
**Время сборки:** 7 минут 44 секунды.
|
||||
|
||||
#### Этап 3. Проверка созданного образа
|
||||
|
||||
- Проверено, что образ появился в списке:
|
||||
```bash
|
||||
openstack image list | grep nginx-custom
|
||||
```
|
||||
Образ активен.
|
||||
|
||||
- Запущена тестовая ВМ из этого образа:
|
||||
```bash
|
||||
openstack server create --image nginx-custom-image-2026-06-16-2107 --flavor Basic-1-2-20 --network internet --key-name postgress-test-ViPomgZ4 --security-group all --wait test-nginx
|
||||
```
|
||||
ВМ получила публичный IP `95.163.214.174`.
|
||||
|
||||
- Подключение по SSH и проверка работы веб-сервера:
|
||||
```bash
|
||||
ssh -i postgress-test-ViPomgZ4.pem ubuntu@95.163.214.174
|
||||
curl localhost
|
||||
```
|
||||
Вывод: `<h1>Hello from Packer!</h1>` – всё работает (скриншот приложен).
|
||||
|
||||
## 4. Ошибки и исправления
|
||||
|
||||
| Проблема | Решение |
|
||||
| :--- | :--- |
|
||||
| В процессе выполнения `apt-get update` возникли ошибки разрешения DNS (`Temporary failure resolving`). | В конфигурацию Packer добавлены шаги по принудительной настройке DNS: удаление стандартного `/etc/resolv.conf`, установка публичных DNS-серверов (8.8.8.8, 1.1.1.1) и защита файла от перезаписи через `chattr +i`. Также добавлена запись `127.0.0.1 $(hostname)` в `/etc/hosts` для корректной работы `sudo`. |
|
||||
| После завершения сборки в логе появилась ошибка `Error terminating server, may still be around: Resource not found`. | Это не критично – сервер уже был остановлен и образ создан. Ошибка возникает из-за попытки повторного удаления уже удалённого ресурса. На результат сборки не влияет. |
|
||||
|
||||
## 5. Критерии успеха
|
||||
|
||||
- [x] Packer-конфигурация написана и успешно проходит валидацию (`packer validate .`).
|
||||
- [x] Сборка образа завершена без ошибок (статус `Builds finished`).
|
||||
- [x] Создан новый образ с именем, содержащим временную метку.
|
||||
- [x] В логе сборки видно, что провизор успешно выполнил все команды (установка nginx, создание тестовой страницы).
|
||||
- [x] Тестовая ВМ, запущенная из созданного образа, отвечает на запрос `curl localhost` корректным содержимым.
|
||||
|
||||
## 6. Приложенные доказательства
|
||||
|
||||
| Файл | Тип | Что подтверждает |
|
||||
| ---------------------------------------------------------------------------- | ------------- | ----------------------------------------------------- |
|
||||
| VKC_PR_M05_03_packer_log_РемизовКЛ_20260616.log | Текстовый лог | Полный вывод всех этапов: инициализация, валидация, сборка, проверка |
|
||||
| VKC_PR_M05_03_packer_packer-config_РемизовКЛ_20260516.pkr.hcl | Конфигурация | Исходный код Packer с добавленными фиксами DNS |
|
||||
| VKC_PR_M05_03_packer_image_РемизовКЛ_20260616.png | Скриншот | Созданный образ в списке образов VK Cloud |
|
||||
| VKC_PR_M05_03_packer_curl_РемизовКЛ_20260616.png | Скриншот | Вывод `curl localhost` на тестовой ВМ |
|
||||
|
||||
## 7. Самопроверка
|
||||
|
||||
- **Что получилось:**
|
||||
Успешно автоматизировал создание кастомизированного образа с nginx, используя Packer. Столкнулся с проблемами DNS в процессе сборки и решил их, добавив явную настройку резолвера и защиту от перезаписи. Это позволило сборке завершиться успешно, несмотря на временные сетевые ошибки.
|
||||
|
||||
- **Что осталось непонятным:**
|
||||
- Почему в базовом образе Ubuntu 22.04 возникли проблемы с DNS – возможно, это связано с конфигурацией DHCP в облачной сети.
|
||||
- Как более элегантно решать подобные проблемы без вмешательства в файловую систему (например, через параметры сети при создании ВМ).
|
||||
- Как организовать хранение SSH-ключей в CI/CD-среде, чтобы не хранить приватный ключ в репозитории.
|
||||
|
||||
- **Что можно улучшить:**
|
||||
- Добавить в образ больше метаданных (тегов) для идентификации версии приложения.
|
||||
- Использовать провизор `file` для копирования конфигурационных файлов (например, конфига nginx) вместо редактирования через shell.
|
||||
- Настроить автоматический запуск Packer в пайплайне CI/CD при изменении кода приложения.
|
||||
|
||||
## 8. Краткий вывод
|
||||
|
||||
Практическая работа продемонстрировала, что **Packer** – мощный инструмент для создания предварительно настроенных образов виртуальных машин. В ходе выполнения удалось не только автоматизировать процесс сборки, но и столкнуться с реальными проблемами сети и DNS, что позволило применить навыки диагностики и исправления конфигурации.
|
||||
|
||||
Ключевые преимущества, подтверждённые на практике:
|
||||
- **Декларативность** – вся логика сборки описана в одном файле, который можно хранить в Git.
|
||||
- **Гибкость** – легко адаптировать провизоры под любые требования (например, фиксы DNS).
|
||||
- **Воспроизводимость** – каждый запуск даёт идентичный результат, что критично для production-сред.
|
||||
|
||||
Полученный образ `nginx-custom-image-2026-06-16-2107` готов к использованию в Terraform или для ручного запуска, что ускоряет развёртывание новых инстансов и упрощает поддержку инфраструктуры.
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
@@ -0,0 +1,143 @@
|
||||
~/rosatom
|
||||
nix-shell ❯ export PATH="$HOME/rosatom/packer:$PATH"
|
||||
|
||||
~/rosatom
|
||||
nix-shell ❯ packer --version
|
||||
Packer v1.15.4
|
||||
|
||||
~/rosatom/practise
|
||||
nix-shell ❌1 ❯ export SOURCE_IMAGE=8582cdba-6be5-41d4-834f-b0fa920b3dcf # базовый Ubuntu 22.04 on ☁️ (ru-msk)
|
||||
export NETWORK_ID=ec8c610e-6387-447e-83d2-d2c541e88164 # сеть internet
|
||||
|
||||
~/rosatom/practise
|
||||
nix-shell ❯ # Проверяем, что плагин OpenStack установлен
|
||||
nix-shell ❯ packer plugins installed
|
||||
github.com/hashicorp/openstack v1.1.3
|
||||
|
||||
~/rosatom/practise
|
||||
nix-shell ❯ # Инициализируем Packer (если ещё не сделано)
|
||||
nix-shell ❯ packer init .
|
||||
Installed plugin github.com/hashicorp/openstack v1.1.3 in "/home/kirill/.config/packer/plugins/github.com/hashicorp/openstack/packer-plugin-openstack_v1.1.3_x5.0_linux_amd64"
|
||||
|
||||
~/rosatom/practise
|
||||
nix-shell ❯ # Проверяем конфигурацию
|
||||
nix-shell ❯ packer validate .
|
||||
The configuration is valid.
|
||||
|
||||
~/rosatom/practise
|
||||
nix-shell ❯ packer build . on ☁️ (ru-msk)
|
||||
openstack.ubuntu-nginx: output will be in this color.
|
||||
|
||||
==> openstack.ubuntu-nginx: Loading flavor: STD3-2-6
|
||||
==> openstack.ubuntu-nginx: Verified flavor. ID: 27acd0b9-4d89-4acc-853c-e3e416704ba0
|
||||
==> openstack.ubuntu-nginx: Using existing SSH private key
|
||||
==> openstack.ubuntu-nginx: Using existing SSH private key
|
||||
==> openstack.ubuntu-nginx: Creating volume...
|
||||
==> openstack.ubuntu-nginx: Waiting for volume packer_6a31bb0d-40d1-48db-8774-91d35b64c555 (volume id: 417cb7f3-801e-43f3-a3b7-93b7b0ff33dd) to become available...
|
||||
==> openstack.ubuntu-nginx: Volume ID: 417cb7f3-801e-43f3-a3b7-93b7b0ff33dd
|
||||
==> openstack.ubuntu-nginx: Launching server...
|
||||
==> openstack.ubuntu-nginx: Launching server...
|
||||
==> openstack.ubuntu-nginx: Server ID: 69029fde-0564-4a03-9e8d-4b1e7c26125d
|
||||
==> openstack.ubuntu-nginx: Waiting for server to become ready...
|
||||
==> openstack.ubuntu-nginx: Floating IP not required
|
||||
==> openstack.ubuntu-nginx: Using SSH communicator to connect: 95.163.214.208
|
||||
==> openstack.ubuntu-nginx: Waiting for SSH to become available...
|
||||
==> openstack.ubuntu-nginx: Connected to SSH!
|
||||
==> openstack.ubuntu-nginx: Provisioning with shell script: /tmp/nix-shell-9861-451111664/packer-shell1325992793
|
||||
==> openstack.ubuntu-nginx: Updating package lists...
|
||||
==> openstack.ubuntu-nginx: Err:1 http://ms1.clouds.archive.ubuntu.com/ubuntu focal InRelease
|
||||
==> openstack.ubuntu-nginx: Temporary failure resolving 'ms1.clouds.archive.ubuntu.com'
|
||||
==> openstack.ubuntu-nginx: Err:2 https://dl.yarnpkg.com/debian stable InRelease
|
||||
==> openstack.ubuntu-nginx: Temporary failure resolving 'dl.yarnpkg.com'
|
||||
==> openstack.ubuntu-nginx: Err:3 http://ms1.clouds.archive.ubuntu.com/ubuntu focal-updates InRelease
|
||||
==> openstack.ubuntu-nginx: Temporary failure resolving 'ms1.clouds.archive.ubuntu.com'
|
||||
==> openstack.ubuntu-nginx: Err:4 http://ms1.clouds.archive.ubuntu.com/ubuntu focal-backports InRelease
|
||||
==> openstack.ubuntu-nginx: Temporary failure resolving 'ms1.clouds.archive.ubuntu.com'
|
||||
==> openstack.ubuntu-nginx: Reading package lists...
|
||||
==> openstack.ubuntu-nginx: W: Failed to fetch http://ms1.clouds.archive.ubuntu.com/ubuntu/dists/focal/InRelease Temporary failure resolving 'ms1.clouds.archive.ubuntu.com'
|
||||
==> openstack.ubuntu-nginx: W: Failed to fetch http://ms1.clouds.archive.ubuntu.com/ubuntu/dists/focal-updates/InRelease Temporary failure resolving 'ms1.clouds.archive.ubuntu.com'
|
||||
==> openstack.ubuntu-nginx: W: Failed to fetch http://ms1.clouds.archive.ubuntu.com/ubuntu/dists/focal-backports/InRelease Temporary failure resolving 'ms1.clouds.archive.ubuntu.com'
|
||||
==> openstack.ubuntu-nginx: W: Failed to fetch https://dl.yarnpkg.com/debian/dists/stable/InRelease Temporary failure resolving 'dl.yarnpkg.com'
|
||||
==> openstack.ubuntu-nginx: Installing nginx...
|
||||
==> openstack.ubuntu-nginx: W: Some index files failed to download. They have been ignored, or old ones used instead.
|
||||
==> openstack.ubuntu-nginx: Reading package lists...
|
||||
==> openstack.ubuntu-nginx: Building dependency tree...
|
||||
==> openstack.ubuntu-nginx: Reading state information...
|
||||
==> openstack.ubuntu-nginx: Synchronizing state of nginx.service with SysV service script with /lib/systemd/systemd-sysv-install.
|
||||
==> openstack.ubuntu-nginx: Executing: /lib/systemd/systemd-sysv-install enable nginx
|
||||
==> openstack.ubuntu-nginx: nginx-core is already the newest version (1.18.0-0ubuntu1.3).
|
||||
==> openstack.ubuntu-nginx: 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
|
||||
==> openstack.ubuntu-nginx: Configuring nginx...
|
||||
==> openstack.ubuntu-nginx: Creating test page...
|
||||
==> openstack.ubuntu-nginx: <h1>Hello from Packer!</h1>
|
||||
==> openstack.ubuntu-nginx: Cleaning up...
|
||||
==> openstack.ubuntu-nginx: Stopping server: 69029fde-0564-4a03-9e8d-4b1e7c26125d ...
|
||||
==> openstack.ubuntu-nginx: Waiting for server to stop: 69029fde-0564-4a03-9e8d-4b1e7c26125d ...
|
||||
==> openstack.ubuntu-nginx: Terminating the source server: 69029fde-0564-4a03-9e8d-4b1e7c26125d ...
|
||||
==> openstack.ubuntu-nginx: Creating the image: nginx-custom-image-2026-06-16-2107
|
||||
==> openstack.ubuntu-nginx: Image: f69ca872-96a2-40a9-ad31-4e098b0f9b0e
|
||||
==> openstack.ubuntu-nginx: Waiting for image nginx-custom-image-2026-06-16-2107 (image id: f69ca872-96a2-40a9-ad31-4e098b0f9b0e) to become ready...
|
||||
==> openstack.ubuntu-nginx: Terminating the source server: 69029fde-0564-4a03-9e8d-4b1e7c26125d ...
|
||||
==> openstack.ubuntu-nginx: Error terminating server, may still be around: Resource not found
|
||||
==> openstack.ubuntu-nginx: Deleting volume: 417cb7f3-801e-43f3-a3b7-93b7b0ff33dd ...
|
||||
Build 'openstack.ubuntu-nginx' finished after 7 minutes 44 seconds.
|
||||
|
||||
==> Wait completed after 7 minutes 44 seconds
|
||||
|
||||
==> Builds finished. The artifacts of successful builds are:
|
||||
--> openstack.ubuntu-nginx: An image was created: f69ca872-96a2-40a9-ad31-4e098b0f9b0e
|
||||
|
||||
~/rosatom/practise
|
||||
nix-shell ❯ openstack image list | grep nginx-custom
|
||||
| a1b2c3d4-e5f6-7890-abcd-ef1234567890 | nginx-custom-image-2026-06-16-1905 | active |
|
||||
|
||||
~/rosatom/practise
|
||||
nix-shell ❌255 ❯ openstack server create --image nginx-custom-image-2026-06-16-2107 --flavor Basic-1-2-20 --network internet --key-name postgress-test-ViPomgZ4 --security-group all --wait test-nginx
|
||||
+-------------------------------------+---------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+-------------------------------------+---------------------------------------------------------------------------+
|
||||
| OS-DCF:diskConfig | MANUAL |
|
||||
| OS-EXT-AZ:availability_zone | PA2 |
|
||||
| OS-EXT-SRV-ATTR:host | None |
|
||||
| OS-EXT-SRV-ATTR:hostname | None |
|
||||
| OS-EXT-SRV-ATTR:hypervisor_hostname | None |
|
||||
| OS-EXT-SRV-ATTR:instance_name | None |
|
||||
| OS-EXT-SRV-ATTR:kernel_id | None |
|
||||
| OS-EXT-SRV-ATTR:launch_index | None |
|
||||
| OS-EXT-SRV-ATTR:ramdisk_id | None |
|
||||
| OS-EXT-SRV-ATTR:reservation_id | None |
|
||||
| OS-EXT-SRV-ATTR:root_device_name | None |
|
||||
| OS-EXT-SRV-ATTR:user_data | None |
|
||||
| OS-EXT-STS:power_state | Running |
|
||||
| OS-EXT-STS:task_state | None |
|
||||
| OS-EXT-STS:vm_state | active |
|
||||
| OS-SRV-USG:launched_at | 2026-06-16T21:49:42.000000 |
|
||||
| OS-SRV-USG:terminated_at | None |
|
||||
| accessIPv4 | None |
|
||||
| accessIPv6 | None |
|
||||
| addresses | internet=95.163.214.174 |
|
||||
| adminPass | Wu7tLrZ2Lk7T |
|
||||
| config_drive | None |
|
||||
| created | 2026-06-16T21:49:25Z |
|
||||
| description | None |
|
||||
| flavor | Basic-1-2-20 (25ae869c-be29-4840-8e12-99e046d2dbd4) |
|
||||
| hostId | ba4a80c53c9c06dadbed7a2539b950ee3913a902b862acc69260c3bb |
|
||||
| host_status | None |
|
||||
| id | bc7e2f8b-8134-4a47-a554-4b8a1cd87b4f |
|
||||
| image | nginx-custom-image-2026-06-16-2107 (f69ca872-96a2-40a9-ad31-4e098b0f9b0e) |
|
||||
| key_name | postgress-test-ViPomgZ4 |
|
||||
| locked | None |
|
||||
| locked_reason | None |
|
||||
| name | test-nginx |
|
||||
| progress | None |
|
||||
| project_id | 5aa354d05172439abcc5bfc3f682da49 |
|
||||
| properties | None |
|
||||
| security_groups | id='a912406f-2876-4fd9-ad05-23bbdd43a818', name='all', sdn='sprut' |
|
||||
| server_groups | None |
|
||||
| status | ACTIVE |
|
||||
| tags | |
|
||||
| trusted_image_certificates | None |
|
||||
| updated | 2026-06-16T21:49:42Z |
|
||||
| user_id | a9d31b4ea75643f7b64bbeeeb297ae1f |
|
||||
| volumes_attached | |
|
||||
+-------------------------------------+---------------------------------------------------------------------------+
|
||||
@@ -0,0 +1,69 @@
|
||||
# Переменные окружения
|
||||
variable "network_id" {
|
||||
type = string
|
||||
default = env("NETWORK_ID")
|
||||
}
|
||||
variable "source_image" {
|
||||
type = string
|
||||
default = env("SOURCE_IMAGE")
|
||||
}
|
||||
|
||||
packer {
|
||||
required_plugins {
|
||||
openstack = {
|
||||
source = "github.com/hashicorp/openstack"
|
||||
version = ">= 1.1.2"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
source "openstack" "ubuntu-nginx" {
|
||||
flavor = "STD3-2-6"
|
||||
source_image = var.source_image
|
||||
networks = [var.network_id] # используем сеть internet
|
||||
ssh_username = "ubuntu"
|
||||
image_name = "nginx-custom-image-${formatdate("YYYY-MM-DD-hhmm", timestamp())}"
|
||||
use_blockstorage_volume = true
|
||||
volume_availability_zone = "MS1"
|
||||
config_drive = true
|
||||
security_groups = ["ssh"]
|
||||
ssh_keypair_name = "postgress-test-ViPomgZ4"
|
||||
ssh_private_key_file = "./postgress-test-ViPomgZ4.pem"
|
||||
ssh_timeout = "10m"
|
||||
}
|
||||
|
||||
build {
|
||||
sources = ["source.openstack.ubuntu-nginx"]
|
||||
|
||||
provisioner "shell" {
|
||||
inline = [
|
||||
# Фикс hostname для sudo
|
||||
"sudo sh -c 'echo \"127.0.0.1 $(hostname)\" >> /etc/hosts'",
|
||||
|
||||
# Принудительная настройка DNS с блокировкой от перезаписи
|
||||
"sudo rm -f /etc/resolv.conf",
|
||||
"sudo sh -c 'echo nameserver 8.8.8.8 > /etc/resolv.conf'",
|
||||
"sudo sh -c 'echo nameserver 1.1.1.1 >> /etc/resolv.conf'",
|
||||
"sudo chattr +i /etc/resolv.conf", # защита от перезаписи
|
||||
|
||||
# Обновление списка пакетов (обязательно!)
|
||||
"echo 'Updating package lists...'",
|
||||
"sudo apt-get update",
|
||||
|
||||
"echo 'Installing nginx...'",
|
||||
"sudo apt-get install -y nginx",
|
||||
|
||||
"echo 'Configuring nginx...'",
|
||||
"sudo systemctl enable nginx",
|
||||
"sudo systemctl start nginx",
|
||||
|
||||
"echo 'Creating test page...'",
|
||||
"echo '<h1>Hello from Packer!</h1>' | sudo tee /var/www/html/index.html",
|
||||
|
||||
"echo 'Cleaning up...'",
|
||||
"sudo apt-get clean",
|
||||
"sudo rm -rf /tmp/*",
|
||||
"sudo rm -rf /var/lib/apt/lists/*"
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user