JakUi Infra repository YCloud VMs bastion_IP = 51.250.28.88 someinternalhost_IP = 10.129.0.30
- Создал service account key file
- Создал файл-шаблон Packer
- Создал скрипты для provisioners
- Установил приложение (для запуска перейдите по адресу http://51.250.31.159:9292/)
- Параметризовал шаблон и другие опции билдера
--name reddit \
--hostname reddit \
--memory=4 \
--create-boot-disk image-folder-id=standard-images,image-family=ubuntu-1604-lts,size=10GB \
--network-interface subnet-name=default-ru-central1-b,nat-ip-version=ipv4 \
--metadata-from-file user-data=cloud-init.yml \
--metadata 'serial-port-enable=1'
- Увеличивается размер файла (больше кода)
- Для каждого инстанса нужно менять имя и некоторые параметры вручную (а если инстансов много?..)
- В случае, если нужно внести правки придётся править resource для каждого инстанса
-
Создайте файл
variables.tf
, в нём укажите значения переменныхcloud_id, folder_id, zone, image_id, public_key_path,
private_key_path, network_id, subnet_id, external_ipv4, token, instance_count
-
Выполните комманду terraform apply
-
Для проверки работоспособности приложения в браузере перейдите по адресу loadbalancer'a (значение output-переменной
external_load_balancer_address_app
).
access_key, secret_access_key необходимые для доступа к bucket хранятся отдельно (прописал их в bashrc по шаблону
export AWS_ACCESS_KEY="access_key"
, export AWS_SECRET_ACCESS_KEY="secret_access_key"
)
Конфиг-файл для терраформ хранится в облаке в bucket'е reddit-app-bucket
. Для каждого типа приложения (stage/prod) создан отдельный backend. Для переключения на конфиг-файл конкретного окружения нужно перейти в папку stage для переключения на config stage-окружения или prod для переключения на config prod-окружения и выполнить команду terraform init
При выполнени плейбука Сlone
в первый раз, ansible выполнит модуль setup
для сбора gathers facts
, затем -
скопирует репозиториий https://github.com/express42/reddit.git
в папку ~/reddit
, команда
ansible app -m command -a 'rm -rf ~/reddit'
удаляет файлы репозитория. При повторном выполнении плейбука clone
ansible не выполняет модуль setup
(не собирает gathers facts
), поэтому изменение только одно.
Disclaimer: скрипт работает только c одним хостом в группе, с любым количеством групп. Править на любое кол-во хостов в группе я его не планирую (слишком сложно))
В этой конфигурации ansible по умолчанию будет использовать только файл inventory.json
(он уже создан). Для создания
или обновления файла inventory.json
нужно:
- Перейти в папку
ansible
- Внести необходимые изменения в файл
inventory
(данные беру оттуда) - Выполнить скрипт json_inventory.py
В процессе выполнения домашнего задания я настроил gitlab на отдельном инстансе, создал раннер (также на отдельном инстансе), настроил pipeline. Настроил создание динамических окружений.
В процессе выполнения домашнего задания был создан vagrant файл, установил molecule, написал тест, протестировал плейбуки ansible.