Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Использование прокси для получения провайдеров в Terraform и OpenTofu #14

Merged
merged 5 commits into from
Sep 20, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 3 additions & 7 deletions .github/workflows/modules.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,11 @@ jobs:

- name: Add .terraformrc
shell: bash
run: |
run: |
cat <<EOS >> $HOME/.terraformrc
provider_installation {
filesystem_mirror {
path = "$GITHUB_WORKSPACE/providers"
include = ["registry.terraform.io/*/*"]
network_mirror {
url = "https://tf-proxy.selectel.ru/mirror/v1/"
}
}
EOS
Expand All @@ -65,9 +64,6 @@ jobs:
-backend-config="access_key=${{ secrets.S3_ACCESS_KEY }}"
-backend-config="secret_key=${{ secrets.S3_SECRET_KEY }}"

- name: Chmod providers
run: chmod -R 777 $GITHUB_WORKSPACE/providers

- name: Terraform apply
run: terraform apply -auto-approve

Expand Down
8 changes: 2 additions & 6 deletions .github/workflows/opentofu.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,8 @@ jobs:
run: |
cat <<EOS >> $HOME/.tofurc
provider_installation {
filesystem_mirror {
path = "$GITHUB_WORKSPACE/providers"
include = ["registry.terraform.io/*/*"]
network_mirror {
url = "https://tf-proxy.selectel.ru/mirror/v1/"
}
}
EOS
Expand All @@ -51,9 +50,6 @@ jobs:
-backend-config="access_key=${{ secrets.S3_ACCESS_KEY }}"
-backend-config="secret_key=${{ secrets.S3_SECRET_KEY }}"

- name: Chmod providers
run: chmod -R 777 $GITHUB_WORKSPACE/providers

- name: OpenTofu apply
run: tofu apply -auto-approve

Expand Down
63 changes: 27 additions & 36 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,57 +1,52 @@
# Selectel Terraform Modules Example

| Pipeline Status | Version |
|-------|---------|
| [![Terraform - Selectel Terraform modules](https://github.com/selectel/selectel-infra-examples/actions/workflows/modules.yml/badge.svg)](https://github.com/selectel/selectel-infra-examples/actions/workflows/modules.yml) | [![version](https://img.shields.io/badge/terraform-1.5.5-green.svg)](https://github.com/hashicorp/terraform/releases/tag/v1.5.5) - Версия до BSL лицензии |
| [![OpenTofu - Selectel Terraform modules](https://github.com/selectel/selectel-infra-examples/actions/workflows/opentofu.yml/badge.svg)](https://github.com/selectel/selectel-infra-examples/actions/workflows/opentofu.yml) | [![version](https://img.shields.io/badge/opentofu-1.6.2-yellow.svg)](https://github.com/opentofu/opentofu/releases/tag/v1.6.2) |
| Pipeline Status | Version |
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------|
| [![Terraform - Selectel Terraform modules](https://github.com/selectel/selectel-infra-examples/actions/workflows/modules.yml/badge.svg)](https://github.com/selectel/selectel-infra-examples/actions/workflows/modules.yml) | [![version](https://img.shields.io/badge/terraform-1.5.5-green.svg)](https://github.com/hashicorp/terraform/releases/tag/v1.5.5) |
| [![OpenTofu - Selectel Terraform modules](https://github.com/selectel/selectel-infra-examples/actions/workflows/opentofu.yml/badge.svg)](https://github.com/selectel/selectel-infra-examples/actions/workflows/opentofu.yml) | [![version](https://img.shields.io/badge/opentofu-1.6.2-green.svg)](https://github.com/opentofu/opentofu/releases/tag/v1.6.2) |

- [Selectel Terraform Modules Example](#selectel-terraform-modules-example)
- [Использование](#использование)
- [1. Terraformrc](#1-terraformrc)
- [1. .terraformrc/.tofurc](#1-terraformrctofurc)
- [2. State File](#2-state-file)
- [3. Init](#3-init)
- [Пример использования](#пример-использования)
- [Структура репозитория](#структура-репозитория)
- [Modules](#modules)

В [данном репозитории](https://github.com/selectel/selectel-infra-examples) находятся примеры Terraform модулей, используемых для создания инфраструктуры в облаке Selectel. С учетом нынешних реалий в репозитории Вы можете найти ежедневные пайплайны проверки создания ресурсов через **Terraform** и **OpenTofu**.
В [данном репозитории](https://github.com/selectel/selectel-infra-examples) находятся примеры Terraform модулей, используемых для создания инфраструктуры в облаке Selectel. Также в репозитории еженедельно запускаются пайплайны с тестовым созданием ресурсов с помощью **Terraform** и **OpenTofu**.

**P.S.** Если Вы не нашли пример для создания определенного ресурса - Вы можете оставить issue и мы примем во внимание необходимость его добавления.
**P.S.** Если вы не нашли пример для создания определенного ресурса - можете оставить issue и мы примем во внимание необходимость его добавления.

Перед началом работы с облачными ресурсами Selectel через Terraform/OpenTofu рекомендуем ознакомиться с [документацией по провайдеру Selectel/OpenStack](https://docs.selectel.ru/terraform/).

> **ВАЖНО!**
> С версии репозитория >= 2.0.1 было добавлено тестирование запуска terraform кода через [OpenTofu](https://opentofu.org/). В связи с блокировкой terraform registry из РФ. Необходимость в terraform-proxy или terraform-mirror усложняет использование terraform. OpenTofu позволяет без проксей, зеркал и изменений в коде использовать все теже провайдеры, что лежат в registry.terraform.io. Все провайдеры OpenTofu лежат в репозитории - [ссылка](https://github.com/opentofu/registry/tree/main/providers). Так же документация по провайдерам от OpenTofu - [ссылка](https://opentofu.org/docs/language/providers/).

## Использование

> Далее все команды terraform-cli могут быть заменены на tofu. Будут работать оба варианта.
>
> Перед использованием **проверьте версию Terraform/OpenTofu**, данный репозиторий гарантирует запуск Terraform кода только на определенной версии Terraform/OpenTofu - [смотри в шапке README](#selectel-terraform-modules-example).
> Перед использованием **проверьте версию Terraform/OpenTofu**, данный репозиторий гарантирует запуск Terraform кода только на определенной версии Terraform/OpenTofu - [см. в шапке README](#selectel-terraform-modules-example). Версия Terraform 1.5.5 обусловлена переходом начиная с версии 1.6 на лицензию BSL.
>
> Так же убедитесь, что в вашем env нет других переменных вида "OS_*" их наличие повлияет на провайдер Openstack!
> Также убедитесь, что в вашем env нет лишних переменных вида "OS_*", их наличие повлияет на провайдер Openstack.

### 1. Terraformrc
### 1. .terraformrc/.tofurc

Для того чтобы у Вас не было проблем при использовании репозитория - были перенесены все используемые провайдеры в папку [providers](https://github.com/selectel/selectel-infra-examples/tree/main/providers). Чтобы заставить terraform cмотреть в эту папку потребуется создать файл `terraformrc`:
Для доступа к Terraform Registry из РФ можно воспользоваться кеширующим прокси Selectel, для этого отредактируем файл .terraformrc (или .tofurc для OpenTofu):

```bash
cat <<EOS >> $HOME/.terraformrc
provider_installation {
filesystem_mirror {
path = "$GITHUB_WORKSPACE/providers"
include = ["registry.terraform.io/*/*"]
network_mirror {
url = "https://tf-proxy.selectel.ru/mirror/v1/"
}
}
EOS
```

### 2. State File

По-умолчанию в репозитории стейт хранится в `s3`.
**Для локального запуска** потребуется изменить на `local` в файле [versions.tf](https://github.com/selectel/selectel-infra-examples/blob/main/versions.tf#L12):
По умолчанию в репозитории стейт хранится в s3, для локального запуска потребуется изменить поле `backend` на `local` в файле [versions.tf](https://github.com/selectel/selectel-infra-examples/blob/main/versions.tf#L12):

```tf
```terraform
terraform {
backend "local" {}
}
Expand All @@ -60,23 +55,23 @@ terraform {
<details>
<summary>Пример передачи `backend` для хранения стейта в S3 через CLI:</summary>

```tf
terraform init
-backend-config="bucket=< имя бакета s3 >"
-backend-config="endpoint=s3.ru-1.storage.selcloud.ru"
-backend-config="key=< имя стейт-файла >.tfstate"
-backend-config="region=ru-1"
-backend-config="skip_region_validation=true"
-backend-config="skip_credentials_validation=true"
-backend-config="access_key=< S3_ACCESS_KEY >"
```bash
terraform init \
-backend-config="bucket=< имя бакета s3 >" \
-backend-config="endpoint=s3.ru-1.storage.selcloud.ru" \
-backend-config="key=< имя стейт-файла >.tfstate" \
-backend-config="region=ru-1" \
-backend-config="skip_region_validation=true" \
-backend-config="skip_credentials_validation=true" \
-backend-config="access_key=< S3_ACCESS_KEY >" \
-backend-config="secret_key=< secrets.S3_SECRET_KEY >"
```
</details>

<details>
<summary>Через tf файл:</summary>

```tf
```terraform
terraform {
backend "s3" {
bucket = "< имя бакета s3 >"
Expand All @@ -98,7 +93,7 @@ terraform {
Вы можете использовать все модули, которые есть в репозитории или закомментировать лишние, но учтите, что **в первую очередь создается проект с сервисным пользователем**, которые необходимы для провайдера `Openstack`.

>Все, что будет создано ресурсами из провайдера `Openstack` должно идти после создания проекта и пользователя! Для этого потребуется добавить `depends_on` к ресурсу:
> ```tf
> ```terraform
> depends_on = [ module.project-with-user ]
> ```

Expand All @@ -117,8 +112,6 @@ module "sfs" {

1. Инициализируем Terraform Backend командой:

> обрати внимание на настройку стейт-файла [выше](#1-state-file)

```bash
terraform init
```
Expand All @@ -135,8 +128,6 @@ terraform plan
terraform apply
```

> `terraform apply -auto-approve` - для применения без подтверждения

## Пример использования

В репозитории можно найти пример использования модулей. В корне репозитория созданы `*.tf` файлы, которые можно использовать как пример вызова модулей.
Expand Down Expand Up @@ -180,7 +171,7 @@ terraform plan/apply \

## Структура репозитория

Репозиторий включает в себя минимально необходимую структура для запуска terraform. Самое интересное это папка [moduels](https://github.com/selectel/selectel-infra-examples/tree/main/modules) в которой собраны примеры запуска компонентов в облаке Selectel.
Репозиторий включает в себя минимально необходимую структуру для запуска Terraform. В директории [modules](https://github.com/selectel/selectel-infra-examples/tree/main/modules) собраны модули для создания различных компонентов в облаке Selectel.

### Modules

Expand Down
Binary file not shown.
Loading
Loading