From b599bd410b14be7f6c832c392761bc9d159cd88a Mon Sep 17 00:00:00 2001 From: Kirill Date: Tue, 16 Jun 2026 23:31:04 +0300 Subject: [PATCH] feat: added demonstration 5.3 --- 00_manifest.csv | 5 + ...M05_03_packer_REPORT_РемизовКЛ_20260616.md | 177 ++++++++++++++++++ ..._M05_03_packer_curl_РемизовКЛ_20260616.png | Bin 0 -> 14433 bytes ...M05_03_packer_image_РемизовКЛ_20260616.png | Bin 0 -> 17191 bytes ...R_M05_03_packer_log_РемизовКЛ_20260616.log | 143 ++++++++++++++ ...r_packer-config_РемизовКЛ_20260516.pkr.hcl | 69 +++++++ 6 files changed, 394 insertions(+) create mode 100644 01_reports/VKC_PR_M05_03_packer_REPORT_РемизовКЛ_20260616.md create mode 100644 02_evidence/VKC_PR_M05_03_packer_curl_РемизовКЛ_20260616.png create mode 100644 02_evidence/VKC_PR_M05_03_packer_image_РемизовКЛ_20260616.png create mode 100644 02_evidence/VKC_PR_M05_03_packer_log_РемизовКЛ_20260616.log create mode 100644 03_code/VKC_PR_M05_03_packer_packer-config_РемизовКЛ_20260516.pkr.hcl diff --git a/00_manifest.csv b/00_manifest.csv index 504252e..8c7f7b7 100644 --- a/00_manifest.csv +++ b/00_manifest.csv @@ -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, diff --git a/01_reports/VKC_PR_M05_03_packer_REPORT_РемизовКЛ_20260616.md b/01_reports/VKC_PR_M05_03_packer_REPORT_РемизовКЛ_20260616.md new file mode 100644 index 0000000..08137f4 --- /dev/null +++ b/01_reports/VKC_PR_M05_03_packer_REPORT_РемизовКЛ_20260616.md @@ -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` с содержимым `

Hello from Packer!

`. + - Очистка временных файлов и кэша пакетов. +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 + ``` + Вывод: `

Hello from Packer!

` – всё работает (скриншот приложен). + +## 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 или для ручного запуска, что ускоряет развёртывание новых инстансов и упрощает поддержку инфраструктуры. diff --git a/02_evidence/VKC_PR_M05_03_packer_curl_РемизовКЛ_20260616.png b/02_evidence/VKC_PR_M05_03_packer_curl_РемизовКЛ_20260616.png new file mode 100644 index 0000000000000000000000000000000000000000..eef7038beee986b26da5e4d1ba56738e1cbfc473 GIT binary patch literal 14433 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 literal 0 HcmV?d00001 diff --git a/02_evidence/VKC_PR_M05_03_packer_image_РемизовКЛ_20260616.png b/02_evidence/VKC_PR_M05_03_packer_image_РемизовКЛ_20260616.png new file mode 100644 index 0000000000000000000000000000000000000000..7a3fdb1437afe1b640f10c45b5b780e62acdb7d9 GIT binary patch literal 17191 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 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:

Hello from Packer!

+==> 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 | | ++-------------------------------------+---------------------------------------------------------------------------+ diff --git a/03_code/VKC_PR_M05_03_packer_packer-config_РемизовКЛ_20260516.pkr.hcl b/03_code/VKC_PR_M05_03_packer_packer-config_РемизовКЛ_20260516.pkr.hcl new file mode 100644 index 0000000..6c46d44 --- /dev/null +++ b/03_code/VKC_PR_M05_03_packer_packer-config_РемизовКЛ_20260516.pkr.hcl @@ -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 '

Hello from Packer!

' | 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/*" + ] + } +}