Skip to content

Commit 5b65ceb

Browse files
v1km4nAlexey Orlov
andauthored
Фиксы репозитория (#20)
* fixed manual_destroy job * updated selectel provider; updated main.tf to user preexisting service user and project; updated readmes; switched to a telegram gh action that supports telegram topics * hardcoding tfswitch action version because for some reason v1 doesnt mean latest possible v1.x.x for them >:| * added telegram test messages * added a cheesy hack that will make tfswitch install latest version instead of 0.1.0 * changed selectel provider version constraint so that it will work for v6.4.0 * commented out s3 key resource * removed temp workflow steps --------- Co-authored-by: Alexey Orlov <orlov.aa@selectel.com>
1 parent 6bacbb7 commit 5b65ceb

File tree

25 files changed

+178
-186
lines changed

25 files changed

+178
-186
lines changed

.github/workflows/manual_destroy.yml

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@ jobs:
88
name: 'Manual Destroy'
99
runs-on: self-hosted
1010
env:
11-
terraform_link: ${{ secrets.TERRAFORM_BINARY }}
12-
TF_VAR_selectel_domain_name: ${{ secrets.SELECTEL_ID }}
13-
TF_VAR_selectel_user_admin_user: ${{ secrets.SERVICE_USER }}
14-
TF_VAR_selectel_user_admin_password: ${{ secrets.SERVICE_PASSWORD }}
11+
TF_VAR_selectel_domain_name: ${{ secrets.SELECTEL_DOMAIN_NAME }}
12+
TF_VAR_selectel_user_name: ${{ secrets.SELECTEL_USER_NAME }}
13+
TF_VAR_selectel_user_id: ${{ secrets.SELECTEL_USER_ID }}
14+
TF_VAR_selectel_user_password: ${{ secrets.SELECTEL_USER_PASSWORD }}
15+
TF_VAR_selectel_project_name: ${{ secrets.SELECTEL_PROJECT_NAME }}
16+
TF_VAR_selectel_project_id: ${{ secrets.SELECTEL_PROJECT_ID }}
1517
TF_VAR_flavor_name: ${{ secrets.FLAVOR_NAME }}
1618

1719
steps:
@@ -23,14 +25,13 @@ jobs:
2325
with:
2426
node-version: 20
2527

26-
- name: Setup Terraform
28+
- name: Setup tfswitch
29+
uses: stv-io/action-tfswitch@v1.0.2
30+
31+
- name: Install Terraform latest
2732
shell: bash
2833
run: |
29-
curl -o terraform.zip $terraform_link
30-
unzip terraform.zip
31-
rm terraform.zip
32-
chmod 755 terraform
33-
mv terraform /usr/local/bin
34+
tfswitch -s 1.0 --mirror https://mirror.selectel.ru/3rd-party/hashicorp-releases/terraform
3435
3536
- name: Add .terraformrc
3637
shell: bash
@@ -47,11 +48,7 @@ jobs:
4748
run: >
4849
terraform init -reconfigure
4950
-backend-config="bucket=github-terraform-state"
50-
-backend-config="endpoint=s3.ru-1.storage.selcloud.ru"
5151
-backend-config="key=github-infra-examples.tfstate"
52-
-backend-config="region=ru-1"
53-
-backend-config="skip_region_validation=true"
54-
-backend-config="skip_credentials_validation=true"
5552
-backend-config="access_key=${{ secrets.S3_ACCESS_KEY }}"
5653
-backend-config="secret_key=${{ secrets.S3_SECRET_KEY }}"
5754

.github/workflows/modules.yml

Lines changed: 19 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: 'Modules Test Run - Terraform v1.10.3'
1+
name: 'Modules Test Run - Terraform Latest'
22

33
on:
44
schedule:
@@ -7,42 +7,29 @@ on:
77

88
jobs:
99
setup:
10-
name: 'Modules Test Run - Terraform v1.10.3'
10+
name: 'Modules Test Run - Terraform Latest'
1111
runs-on: self-hosted
1212
env:
13-
terraform_link: ${{ secrets.TERRAFORM_BINARY }}
14-
TF_VAR_selectel_domain_name: ${{ secrets.SELECTEL_ID }}
15-
TF_VAR_selectel_user_admin_user: ${{ secrets.SERVICE_USER }}
16-
TF_VAR_selectel_user_admin_password: ${{ secrets.SERVICE_PASSWORD }}
13+
TF_VAR_selectel_domain_name: ${{ secrets.SELECTEL_DOMAIN_NAME }}
14+
TF_VAR_selectel_user_name: ${{ secrets.SELECTEL_USER_NAME }}
15+
TF_VAR_selectel_user_id: ${{ secrets.SELECTEL_USER_ID }}
16+
TF_VAR_selectel_user_password: ${{ secrets.SELECTEL_USER_PASSWORD }}
17+
TF_VAR_selectel_project_name: ${{ secrets.SELECTEL_PROJECT_NAME }}
18+
TF_VAR_selectel_project_id: ${{ secrets.SELECTEL_PROJECT_ID }}
1719
TF_VAR_flavor_name: ${{ secrets.FLAVOR_NAME }}
1820
if: ${{ github.ref == 'refs/heads/main' || github.event_name == 'workflow_dispatch' }}
1921

2022
steps:
2123
- name: Checkout the repo
2224
uses: actions/checkout@v4
2325

24-
- name: Setup NodeJS v20
25-
uses: actions/setup-node@v4
26-
with:
27-
node-version: 20
26+
- name: Setup tfswitch
27+
uses: stv-io/action-tfswitch@v1.0.2
2828

29-
- name: Setup Terraform
29+
- name: Install Terraform latest
3030
shell: bash
3131
run: |
32-
curl -o terraform.zip $terraform_link
33-
unzip terraform.zip
34-
rm terraform.zip
35-
chmod 755 terraform
36-
mv terraform /usr/local/bin
37-
38-
# - name: Run Checkov action # suppressed for now because it fails to copy a file inside a self-hosted runner
39-
# uses: bridgecrewio/checkov-action@v12
40-
# with:
41-
# quiet: true
42-
# directory: .
43-
# output_format: cli
44-
# framework: terraform,github_actions
45-
# container_user: 1000
32+
tfswitch -s 1.0 --mirror https://mirror.selectel.ru/3rd-party/hashicorp-releases/terraform
4633
4734
- name: Add .terraformrc
4835
shell: bash
@@ -72,14 +59,15 @@ jobs:
7259
- name: Terraform destroy
7360
run: terraform destroy -auto-approve
7461

75-
- name: Telegram notify if failed on main branch
62+
- name: Send Telegram alert if failed on the main branch
7663
if: ${{ (failure()) && (github.ref == 'refs/heads/main') }}
77-
uses: appleboy/telegram-action@master
64+
uses: cbrgm/telegram-github-action@v1
7865
with:
7966
to: ${{ secrets.TELEGRAM_TO }}
8067
token: ${{ secrets.TELEGRAM_TOKEN }}
68+
thread-id: 168
8169
message: |
82-
⚙️ *GitHub repository selectel/selectel-infra-examples*
83-
84-
🔥 *Pipeline has failed*
85-
➡️ *Workflow:* https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
70+
⚙️ GitHub repository selectel/selectel-infra-examples
71+
72+
🔥 Terraform pipeline has failed!
73+
➡️ Workflow: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}

.github/workflows/opentofu.yml

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,12 @@ jobs:
1010
name: 'Modules Test Run - OpenTofu Latest'
1111
runs-on: self-hosted
1212
env:
13-
TF_VAR_selectel_domain_name: ${{ secrets.SELECTEL_ID }}
14-
TF_VAR_selectel_user_admin_user: ${{ secrets.SERVICE_USER }}
15-
TF_VAR_selectel_user_admin_password: ${{ secrets.SERVICE_PASSWORD }}
13+
TF_VAR_selectel_domain_name: ${{ secrets.SELECTEL_DOMAIN_NAME }}
14+
TF_VAR_selectel_user_name: ${{ secrets.SELECTEL_USER_NAME }}
15+
TF_VAR_selectel_user_id: ${{ secrets.SELECTEL_USER_ID }}
16+
TF_VAR_selectel_user_password: ${{ secrets.SELECTEL_USER_PASSWORD }}
17+
TF_VAR_selectel_project_name: ${{ secrets.SELECTEL_PROJECT_NAME }}
18+
TF_VAR_selectel_project_id: ${{ secrets.SELECTEL_PROJECT_ID }}
1619
TF_VAR_flavor_name: ${{ secrets.FLAVOR_NAME }}
1720
if: ${{ github.event_name == 'workflow_dispatch' || github.event_name == 'schedule' }}
1821

@@ -50,3 +53,16 @@ jobs:
5053

5154
- name: OpenTofu destroy
5255
run: tofu destroy -auto-approve
56+
57+
- name: Send Telegram alert if failed on the main branch
58+
if: ${{ (failure()) && (github.ref == 'refs/heads/main') }}
59+
uses: cbrgm/telegram-github-action@v1
60+
with:
61+
to: ${{ secrets.TELEGRAM_TO }}
62+
token: ${{ secrets.TELEGRAM_TOKEN }}
63+
thread-id: 168
64+
message: |
65+
⚙️ GitHub repository selectel/selectel-infra-examples
66+
67+
🔥 OpenTofu pipeline has failed!
68+
➡️ Workflow: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}

README.md

Lines changed: 43 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
# Selectel Terraform Modules Example
22

3-
| | Pipeline Status | Version |
4-
|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------|
5-
| Terraform v1.10.3 | [![](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.10.3-green.svg)](https://github.com/hashicorp/terraform/releases/tag/v1.10.3) |
6-
| OpenTofu Latest | [![](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-Latest-green.svg)](https://github.com/opentofu/opentofu/releases/latest) |
3+
| | Pipeline Status | Version |
4+
|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------|
5+
| Terraform Latest | [![](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-Latest-green.svg)](https://github.com/hashicorp/terraform/releases/latest) |
6+
| OpenTofu Latest | [![](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-Latest-green.svg)](https://github.com/opentofu/opentofu/releases/latest) |
77

88
- [Selectel Terraform Modules Example](#selectel-terraform-modules-example)
99
- [Использование](#использование)
@@ -14,11 +14,15 @@
1414
- [Структура репозитория](#структура-репозитория)
1515
- [Modules](#modules)
1616

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

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

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

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

@@ -28,7 +32,8 @@
2832
2933
### 1. .terraformrc/.tofurc
3034

31-
Для доступа к Terraform Registry из РФ можно воспользоваться кеширующим прокси Selectel, для этого отредактируем файл .terraformrc (или .tofurc для OpenTofu):
35+
Для доступа к Terraform Registry из РФ можно воспользоваться кеширующим прокси Selectel, для этого отредактируем
36+
файл .terraformrc (или .tofurc для OpenTofu):
3237

3338
```bash
3439
cat <<EOS >> $HOME/.terraformrc
@@ -42,7 +47,8 @@ EOS
4247

4348
### 2. State File
4449

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

4753
```terraform
4854
terraform {
@@ -73,25 +79,10 @@ terraform {
7379

7480
### 3. Init
7581

76-
Вы можете использовать все модули, которые есть в репозитории или закомментировать лишние, но учтите, что **в первую очередь создается проект с сервисным пользователем**, которые необходимы для провайдера `Openstack`.
82+
Для начала работы необходимо создать в Панели Управления проект, в котором будут впоследствии создаваться ресурсы,
83+
а также сервисного пользователя с ролью Администратор проекта для вышеупомянутого проекта. Далее необходимо
84+
отредактировать `main.tf`, оставив в нём необходимые ресурсы, после чего:
7785

78-
>Все, что будет создано ресурсами из провайдера `Openstack` должно идти после создания проекта и пользователя! Для этого потребуется добавить `depends_on` к ресурсу:
79-
> ```terraform
80-
> depends_on = [ module.project-with-user ]
81-
> ```
82-
83-
**Опционально:** Создаем файл `main.tf`, где описана необходимая инфраструктура (пример ниже - создание `Simple File Storage`, остальные примеры смотри в папке [modules](https://github.com/selectel/selectel-infra-examples/tree/main/modules)):
84-
85-
```yaml
86-
module "sfs" {
87-
source = "modules/sfs"
88-
os_network_id = var.nat_network_id
89-
os_subnet_id = var.nat_subnet_id
90-
sfs_size = var.sfs_size
91-
sfs_volume_type = var.sfs_volume_type
92-
os_availability_zone = var.os_availability_zone
93-
}
94-
```
9586

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

@@ -113,48 +104,61 @@ terraform apply
113104

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

116-
В репозитории можно найти пример использования модулей. В корне репозитория созданы `*.tf` файлы, которые можно использовать как пример вызова модулей.
107+
В репозитории можно найти пример использования модулей. В корне репозитория созданы `*.tf` файлы, которые можно
108+
использовать как пример вызова модулей.
117109

118110
Для их использования достаточно перейти в корень репозитория и инициализировать Terraform:
119111

120112
```bash
121113
terraform init
122114
```
123115

124-
Далее можно скорректировать некоторые параметры в файле `main.tf`, которые передаются в модули, например, объём SFS, имя кластера и другие.
116+
Далее можно скорректировать некоторые параметры в файле `main.tf`, которые передаются в модули, например, объём
117+
SFS, имя кластера и другие.
125118

126-
Затем необходимо задать переменные, в которых будут содержаться данные от аккаунта Selectel, в котором будет развёрнута инфраструктура:
119+
Затем необходимо задать переменные, в которых будут содержаться данные от аккаунта Selectel, в котором будет
120+
развёрнута инфраструктура:
127121

128-
- `selectel_domain_name`, ID аккаунта, например, 123123
129-
- `selectel_user_admin_user`, сервисный пользователь с нужными правами
130-
- `selectel_user_admin_password`, пароль от сервисного пользователя
122+
- `selectel_domain_name` - ID Selectel-аккаунта;
123+
- `selectel_project_name` - название проекта;
124+
- `selectel_project_id` - ID проекта;
125+
- `selectel_user_name` - имя сервисного пользователя;
126+
- `selectel_user_id` - UID сервисного пользователя;
127+
- `selectel_user_password` - пароль сервисного пользователя.
131128

132129
Переменные можно задать несколькими способами:
133130

134131
- В качестве переменных окружения (для этого нужно добавить перед названием переменной `TF_VAR_`):
135132

136133
```bash
137134
export TF_VAR_selectel_domain_name=123123
138-
export TF_VAR_selectel_user_admin_user=foo
139-
export TF_VAR_selectel_user_admin_password=bar
135+
export TF_VAR_selectel_project_name=Project
136+
export TF_VAR_selectel_project_id=abcd1234abcd1234abcd1234abcd1234
137+
export TF_VAR_selectel_user_name=foo
138+
export TF_VAR_selectel_user_id=1234abcd1234abcd1234abcd1234abcd
139+
export TF_VAR_selectel_user_password=bar
140140
terraform plan/apply
141141
```
142142
- Ввести вместе с командой `terraform plan/apply` с помощью параметра `-var`:
143143

144144
```bash
145145
terraform plan/apply \
146146
-var="selectel_domain_name=123123" \
147-
-var="selectel_user_admin_user=foo" \
148-
-var="selectel_user_admin_password=bar"
147+
-var="selectel_project_name=Project" \
148+
-var="selectel_project_id=abcd1234abcd1234abcd1234abcd1234" \
149+
-var="selectel_user_name=foo" \
150+
-var="selectel_user_id=1234abcd1234abcd1234abcd1234abcd" \
151+
-var="selectel_user_password=bar"
149152
```
150153

151154
- Ввести с клавиатуры, если переменные не были заданы любым другим способом
152155

153-
После успешного выполнения команды `terraform apply` вы должны увидеть в своём аккаунте новый проект, в котором будут запущены все модули (MKS, SFS, vm, CRaaS и др.)
156+
После успешного выполнения команды `terraform apply` в заданном проекте появятся указанные в `main.tf` ресурсы.
154157

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

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

159163
### Modules
160164

0 commit comments

Comments
 (0)