Files
learn-devops/opentofu/README.md
github-actions[bot] 346360f820 Upgrade bpg/proxmox (#3)
* Update readme

* Update gitignore

* Upgrade vm_id

* Upgrade bpg/proxmox

---------

Co-authored-by: Fedor Batonogov <f.batonogov@yandex.ru>
2024-04-25 17:45:59 +03:00

126 lines
7.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# **Infrastructure as Code** и системы управления конфигурацией
Для развёртывания инфраструктуры согласно подходу **Infrastructure as Code**, используя **OpenTofu/Terraform** и создания необходимых ресурсов необходимо выполнить следующие шаги.
---
## Что такое OpenTofu/Terraform
**Terraform** — это инструмент для создания и управления инфраструктурой.
С его помощью можно создавать, обновлять и удалять любые интересующие вас ресурсы в различных облачных и не только облачных сервисах.
**Terraform** позволяет описывать инфраструктуру в виде кода, что делает процесс её создания более эффективным и управляемым.
Код на языке **HCL** (HashiCorp Configuration Language) описывает требуемую инфраструктуру, а **Terraform** автоматически создаёт или обновляет её.
Информация об **OpenTofu** взята с [habr.com](https://habr.com/ru/companies/flant/news/762356/).
20 сентября, на сайте **Linux Foundation** появилась новость о том, что фонд принял **OpenTofu** в число своих проектов.
Теперь свободный форк **Terraform** будет развиваться под управлением **Linux Foundation**, что дает ряд преимуществ:
- Он будет всегда **Open Source** — то есть соответствовать **Open Source Definition**, а не размытому определению «открытые исходники».
- Он будет управляться открытым сообществом, а значит, прозрачно реализовывать и отражать видение разных разработчиков, а не единственного вендора.
- Он будет беспристрастным — то есть не зависящим от прихотей одной компании.
Кроме того, сами создатели открытого форка **Terraform** отмечают еще две особенности, которые повлечет за собой принятие проекта в **Linux Foundation**:
обратная совместимость и хорошо проработанная модульная архитектура.
Официальный сайт проекта [OpenTofu](https://opentofu.org/).
Репозиторий провайдера [bpg/terraform-provider-proxmox](https://github.com/bpg/terraform-provider-proxmox).
---
## Подготовка Proxmox
### Создание шаблона Ubuntu 22.04
На узле Proxmox создаем шаблон **Cloud Init** **Ubuntu 22.04**
```sh
export PROXMOX_STORAGE=proxmox-data-01
apt update && apt install libguestfs-tools -y && \
wget --backups=1 https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img && \
virt-customize -a jammy-server-cloudimg-amd64.img --install qemu-guest-agent && \
qm create 2204 --name "ubuntu-22.04-cloudinit-template" --cores 2 --memory 2048 --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci && \
qm set 2204 --virtio0 ${PROXMOX_STORAGE}:0,import-from=/root/jammy-server-cloudimg-amd64.img && \
qm set 2204 --ide2 ${PROXMOX_STORAGE}:cloudinit && \
qm set 2204 --boot order=virtio0 && \
qm set 2204 --serial0 socket --vga serial0 && \
qm template 2204
```
---
## Последовательность действий при работе с OpenTofu
### Инициализируем рабочий каталог, содержащий файлы конфигурации OpenTofu/Terraform
Команда **tofu init** инициализирует рабочий каталог, содержащий файлы конфигурации **OpenTofu**. Это первая команда, которую следует выполнить после записи новой конфигурации **OpenTofu** или клонирования существующей из системы управления версиями. Эту команду безопасно запускать несколько раз.
```bash
tofu init
```
### Проверяем файлы конфигурации в каталоге
Команда **tofu validate** проверяет файлы конфигурации в каталоге, ссылаясь только на конфигурацию и не обращаясь к каким-либо удаленным службам, таким как удаленное состояние, API-интерфейсы провайдеров и т.д.
```bash
tofu validate
```
### Создаем план
Команда **tofu plan** позволяет предварительно просмотреть действия, которые **OpenTofu** предпримет для изменения вашей инфраструктуры, или сохранить предполагаемый план, который вы сможете применить позже.
```bash
tofu plan
```
### Выполняем изменения, определенные конфигурацией **OpenTofu**
Команда **tofu apply** является более распространенным рабочим процессом вне автоматизации. Если вы не передадите сохраненный план команде применения, она выполнит все функции плана и предложит вам утвердить его перед внесением изменений.
```bash
tofu apply
```
### Удаляем ресурсы
Команда **tofu destroy** создает план выполнения для удаления всех ресурсов, управляемых в этом проекте.
```bash
tofu destroy
```
---
## Как задавать переменные
Значения переменных можно задать несколькими способами:
1. Через файл с расширением **.tfvars** (пачками)
```bash
instance_zone=ru-central-b
```
По умолчанию загружаем значения из **terraform.tfvars**, но можно явно обозначить файл для загрузки:
```bash
tofu apply -var-file="testing.tfvars"
```
2. Через переменные окружения. Переменная должна начинаться с **TF*VAR***, а дальше уже имя переменной
### Для простого типа
```bash
export TF_VAR_instance_zone=ru-central-d
```
### Для составного типа
```bash
export TF_VAR_instance_zone='["ru-central-a","ru-central-b"]'
```