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 0000000..eef7038 Binary files /dev/null and b/02_evidence/VKC_PR_M05_03_packer_curl_РемизовКЛ_20260616.png differ 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 0000000..7a3fdb1 Binary files /dev/null and b/02_evidence/VKC_PR_M05_03_packer_image_РемизовКЛ_20260616.png differ diff --git a/02_evidence/VKC_PR_M05_03_packer_log_РемизовКЛ_20260616.log b/02_evidence/VKC_PR_M05_03_packer_log_РемизовКЛ_20260616.log new file mode 100644 index 0000000..b2277d4 --- /dev/null +++ b/02_evidence/VKC_PR_M05_03_packer_log_РемизовКЛ_20260616.log @@ -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:

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