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 03 #26

Open
wants to merge 80 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
34e22b2
Update .terraformrc
gaidarvu Oct 30, 2024
3b139e6
Create homework.md
gaidarvu Oct 30, 2024
faef239
change version
gaidarvu Oct 30, 2024
f7e1da1
uncomment 29-42
gaidarvu Oct 30, 2024
c319338
test name
gaidarvu Oct 30, 2024
9b44879
test name 2
gaidarvu Oct 30, 2024
29e7ef0
test name 3
gaidarvu Oct 30, 2024
0674627
test name 4
gaidarvu Oct 30, 2024
0e5154c
return name back
gaidarvu Oct 30, 2024
722edf8
name
gaidarvu Oct 31, 2024
cf71376
name
gaidarvu Oct 31, 2024
11a8a82
name
gaidarvu Oct 31, 2024
c1764b6
hw
gaidarvu Oct 31, 2024
87ae6c6
name
gaidarvu Oct 31, 2024
fcb1438
Merge branch 'main' of https://github.com/gaidarvu/ter-homeworks
gaidarvu Oct 31, 2024
aebfb0b
hw
gaidarvu Oct 31, 2024
42cff11
name
gaidarvu Oct 31, 2024
abd1895
Merge branch 'main' of https://github.com/gaidarvu/ter-homeworks
gaidarvu Oct 31, 2024
0b1d94b
name
gaidarvu Oct 31, 2024
addd9b8
hw
gaidarvu Oct 31, 2024
a6c1e01
name
gaidarvu Oct 31, 2024
5549c60
Merge branch 'main' of https://github.com/gaidarvu/ter-homeworks
gaidarvu Oct 31, 2024
5a2b83f
hw
gaidarvu Oct 31, 2024
38e7e9a
name
gaidarvu Oct 31, 2024
8b88379
Merge branch 'main' of https://github.com/gaidarvu/ter-homeworks
gaidarvu Oct 31, 2024
3bc0534
hw
gaidarvu Oct 31, 2024
a32b3e4
hw
gaidarvu Oct 31, 2024
4f1a81e
hw
gaidarvu Oct 31, 2024
e11686d
hw
gaidarvu Oct 31, 2024
a4b5475
hw
gaidarvu Oct 31, 2024
b6b2390
hw
gaidarvu Oct 31, 2024
3570804
hw
gaidarvu Oct 31, 2024
1815488
hw
gaidarvu Oct 31, 2024
760e2fd
hw
gaidarvu Oct 31, 2024
f0d6e55
hw
gaidarvu Oct 31, 2024
27f98f3
hw
gaidarvu Oct 31, 2024
83c31da
hw
gaidarvu Nov 1, 2024
268b087
ycloud
gaidarvu Nov 1, 2024
2eba163
Merge branch 'main' of https://github.com/gaidarvu/ter-homeworks
gaidarvu Nov 1, 2024
8256e2f
ycloud
gaidarvu Nov 1, 2024
a637788
ycloud
gaidarvu Nov 1, 2024
d068b2b
yc
gaidarvu Nov 1, 2024
1891a88
yc
gaidarvu Nov 1, 2024
0e1a77f
yc
gaidarvu Nov 1, 2024
f7cbaf8
yc
gaidarvu Nov 1, 2024
495e148
yc
gaidarvu Nov 1, 2024
ea98c59
yc
gaidarvu Nov 1, 2024
918315a
yc
gaidarvu Nov 1, 2024
66da7aa
yc
gaidarvu Nov 1, 2024
48fb953
yc
gaidarvu Nov 1, 2024
8fda810
yc
gaidarvu Nov 1, 2024
52b5d58
Delete 01/src_ycloud/.terraformrc
gaidarvu Nov 1, 2024
fb63387
hw
gaidarvu Nov 1, 2024
e120bac
hw
gaidarvu Nov 1, 2024
b1956c3
yc
gaidarvu Nov 1, 2024
476c9fd
yc
gaidarvu Nov 1, 2024
bf85734
Merge branch 'main' of https://github.com/gaidarvu/ter-homeworks
gaidarvu Nov 1, 2024
9fa2608
yc
gaidarvu Nov 2, 2024
903dfc7
yc2
gaidarvu Nov 2, 2024
84d0931
yc2
gaidarvu Nov 2, 2024
ce75b8d
yc2
gaidarvu Nov 2, 2024
c4845be
yc2
gaidarvu Nov 3, 2024
052b3de
yc2
gaidarvu Nov 3, 2024
4b53217
yc2
gaidarvu Nov 3, 2024
5bc4876
yc2
gaidarvu Nov 3, 2024
add681f
yc2
gaidarvu Nov 3, 2024
5ee860c
yc2
gaidarvu Nov 3, 2024
d1d2c6d
yc2
gaidarvu Nov 3, 2024
b719f84
yc2
gaidarvu Nov 3, 2024
4b7054d
yc3
gaidarvu Nov 6, 2024
52c152a
yc3
gaidarvu Nov 6, 2024
35a2435
yc2
gaidarvu Nov 6, 2024
de67bdf
yc3
gaidarvu Nov 6, 2024
efe3c30
yc3
gaidarvu Nov 7, 2024
6ab210d
yc3
gaidarvu Nov 7, 2024
eab14e6
yc3
gaidarvu Nov 7, 2024
4216db7
ys3
gaidarvu Nov 7, 2024
f41cfc0
yc3
gaidarvu Nov 8, 2024
e45793a
yc3
gaidarvu Nov 8, 2024
ef46e2e
yc4
gaidarvu Nov 10, 2024
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
66 changes: 66 additions & 0 deletions 01/homework.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
### Версия установленного terraform

![Screenshot 2024-10-30 155047](https://github.com/user-attachments/assets/ffd8717e-d155-40ce-831e-61ec8efb55aa)

## Задание 1

### Пункт 2

Логины,пароли,ключи,токены итд, судя по gitignore, будем хранить в personal.auto.tfvars. А так-же сгенерированные терраформом пароли могут проскальзывать в .tfstate файлах.

### Пункт 3

Cекретное содержимое созданного ресурса random_password

"result": "9I8fijfVDWdzfB3R",

### Пункт 4

"1nginx" name не может начинаться с цифр

Переменная random_password.random_string_FAKE.resulT написана с ошибками. мы не задавали имя random_string_FAKE в resource "random_password", а так-же в переменной resulT допущена синтаксическая ошибка. Правильное написание переменных наглядно можно увидеть в файле terraform.tfstate в виде ключей и значений

resource "docker_container" не сможет найти image, который мы указали ему в качесте переменных из resource "docker_image", ведь мы его не раскомментировали (он выше 29 строки). Плюсом ко всему в resource "docker_image" следует указать имя, которое мы указали в качестве переменной в resource "docker_container"

### Пункт 5

[Исправленный код (ссылка на github)](https://github.com/gaidarvu/ter-homeworks/blob/main/01/src/main.tf)

![alt text](image.png)

### Пункт 6

При выполнении команды terraform apply с флагом -auto-approve может привести к неожиданным последствиям. Этот флаг автоматически одобряет все изменения, которые terraform собирается внести. Выполняя команду с данным флагом, мы должны чётко понимать какие изменения последуют после выполнения кода. В противном случае есть большая вероятность случайных изменений или удалений ресурсов. В любом случае лучше применять конфигурацию с подтверждением ручного ввода без флага -auto-approve или перед выполнением кода сделать terraform plan

Данный флаг может быть полезен тем, что убирает необходимость ручного подтверждения, команда будет выполняться быстрее. Это полезно в разработческих средах или в тестовых пайплайнах, где скорость является важным фактором. В некоторых случаях развертывание может быть заранее запланировано и протестировано. Использование -auto-approve может быть частью четкого процесса, где все изменения уже были проверены, и нет необходимости в дополнительных подтверждениях.

![alt text](image-1.png)

### Пункт 7

Cодержимое файла terraform.tfstate

```js
{
"version": 4,
"terraform_version": "1.9.8",
"serial": 11,
"lineage": "8eb799a7-e4ab-2dad-4396-1f2911fa3e5f",
"outputs": {},
"resources": [],
"check_results": null
}
```

### Пункт 8

В resource "docker_image" мы явно указали значение keep_locally = true. Это значит что после завершения работы с ресурсом имадж Docker должен оставаться на локальной машине, а не удаляться автоматически.

Цитата от провайдера docker:
>keep_locally (Boolean) If true, then the Docker image won't be deleted on destroy operation. If this is false, it will delete the image from the docker local storage on destroy operation.

## Задание 2

[Финальный код main.tf (ссылка на github)](https://github.com/gaidarvu/ter-homeworks/blob/main/01/src_ycloud/main.tf)

![alt text](image-3.png)
Binary file added 01/image-1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added 01/image-3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added 01/image.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion 01/src/.terraformrc
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@ provider_installation {
direct {
exclude = ["registry.terraform.io/*/*"]
}
}
}
12 changes: 6 additions & 6 deletions 01/src/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ terraform {
version = "~> 3.0.1"
}
}
required_version = "~>1.8.4" /*Многострочный комментарий.
required_version = ">=1.8.4" /*Многострочный комментарий.
Требуемая версия terraform */
}
provider "docker" {}
Expand All @@ -20,19 +20,19 @@ resource "random_password" "random_string" {
min_numeric = 1
}

/*
resource "docker_image" {
resource "docker_image" "nginx" {
name = "nginx:latest"
keep_locally = true
}

resource "docker_container" "1nginx" {
resource "docker_container" "nginx" {
image = docker_image.nginx.image_id
name = "example_${random_password.random_string_FAKE.resulT}"
name = "hello_world"
# name = "example_${random_password.random_string.result}"

ports {
internal = 80
external = 9090
}
}
*/

12 changes: 12 additions & 0 deletions 01/src_ycloud/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Local .terraform directories and files
**/.terraform/*
.terraform*

!.terraformrc

# .tfstate files
*.tfstate
*.tfstate.*

# own secret vars store.
personal.auto.tfvars
54 changes: 54 additions & 0 deletions 01/src_ycloud/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
terraform {
required_providers {
docker = {
source = "kreuzwerker/docker"
version = "~> 3.0.1"
}
}
required_version = ">=1.8.4"
}
provider "docker" {
host = "ssh://[email protected]:22"
ssh_opts = ["-o", "StrictHostKeyChecking=no", "-o", "UserKnownHostsFile=/dev/null"]
/*
авторизация по ключу, ключ прибит в ~/.ssh/id_rsa
на облачной тачке пользователь добавлен в группу docker
*/
}

resource "random_password" "root_pwd" {
length = 16
special = false
min_upper = 1
min_lower = 1
min_numeric = 1
}

resource "random_password" "user_pwd" {
length = 16
special = false
min_upper = 1
min_lower = 1
min_numeric = 1
}

resource "docker_image" "mysql" {
name = "mysql:8"
}

resource "docker_container" "mysql" {
image = docker_image.mysql.image_id
name = "mysql"
env = [
"MYSQL_ROOT_PASSWORD=${random_password.root_pwd.result}",
"MYSQL_DATABASE=wordpress",
"MYSQL_USER=wordpress",
"MYSQL_PASSWORD=${random_password.user_pwd.result}",
"MYSQL_ROOT_HOST=%"
]

ports {
internal = 3306
external = 3306
}
}
33 changes: 33 additions & 0 deletions 02/homework.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
## Задание 1

cloud_id и folder_id обозначил в personal.auto.tfvars

В boot_disk всё-же указал размер и тип создаваемого диска, чтобы не создавал по умолчанию.

В platform_id = "standart-v4" явно допущена ошибка. Правильно standard. Опции v4 пока не существует.
На всех платформах в яндекс облаке можно выбрать минимум 2 ядра vCPU
А так-же производительность vCPU в 5% обеспечивается только на standard-v1 и standard-v2
С точки зрения экономии выбираем standard-v2
Конечная запись будет выглядеть platform_id = "standard-v2"
А параметры производительности будут такими:
```js
resources {
cores = 2
memory = 1
core_fraction = 5
}
```

Для авторизации закомментировал token и сгенерировал authorized_key.json

![alt text](image-2.png)

![alt text](image-3.png)

Параметры preemptible = true и core_fraction=5 в процессе обучения могут пригодиться для экономии средств, которых должно хватить на весь срок обучения. Урезая параметры процессора и выставляя прерывание виртуалке мы получаем идеальный вариант для обучения. Делать постоянные terraform apply и затем через какое-то время terraform destroy на производительных тачках расточительно

## Задание 4

![alt text](image.png)

[Финальный код (ссылка на github repo)](https://github.com/gaidarvu/ter-homeworks/tree/main/02/src)
Binary file added 02/image-2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added 02/image-3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added 02/image.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
11 changes: 11 additions & 0 deletions 02/src/locals.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
locals {

test = [
{
"vm-web" = "netology-${var.vpc_name}-${var.vm_web_yandex_compute_instance_platform_id}-${var.vm_web_zone}-web"
},
{
"vm-db" = "netology-${var.vpc_name}-${var.vm_db_yandex_compute_instance_platform_id}-${var.vm_db_zone}-db"
},
]
}
66 changes: 54 additions & 12 deletions 02/src/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -3,39 +3,81 @@ resource "yandex_vpc_network" "develop" {
}
resource "yandex_vpc_subnet" "develop" {
name = var.vpc_name
zone = var.default_zone
zone = var.vm_web_zone
network_id = yandex_vpc_network.develop.id
v4_cidr_blocks = var.default_cidr
}

resource "yandex_vpc_subnet" "develop-b" {
name = var.subnet_name_b
zone = var.vm_db_zone
network_id = yandex_vpc_network.develop.id
v4_cidr_blocks = var.default_cidr_for_b
}

data "yandex_compute_image" "ubuntu" {
family = "ubuntu-2004-lts"
family = var.vm_web_yandex_compute_image
}

resource "yandex_compute_instance" "platform" {
name = "netology-develop-platform-web"
platform_id = "standart-v4"
# name = var.vm_web_yandex_compute_instance_name
name = local.test[0].vm-web
hostname = local.test[0].vm-web
platform_id = var.vm_web_yandex_compute_instance_platform_id
zone = var.vm_web_zone
resources {
cores = 1
memory = 1
core_fraction = 5
cores = var.vm_resources.web.cores
memory = var.vm_resources.web.memory
core_fraction = var.vm_resources.web.core_fraction
}
boot_disk {
initialize_params {
image_id = data.yandex_compute_image.ubuntu.image_id
type = var.vm_resources.web.type
size = var.vm_resources.web.size
}
}
scheduling_policy {
preemptible = true
preemptible = var.vm_web_scheduling_policy
}
network_interface {
subnet_id = yandex_vpc_subnet.develop.id
nat = true
nat = var.vm_web_network_interface
}

metadata = {
serial-port-enable = 1
ssh-keys = "ubuntu:${var.vms_ssh_root_key}"
serial-port-enable = var.metadata.serial-port-enable
ssh-keys = var.metadata.ssh-keys
}
}

resource "yandex_compute_instance" "platform2" {
# name = var.vm_db_yandex_compute_instance_name
name = local.test[1].vm-db
hostname = local.test[1].vm-db
platform_id = var.vm_db_yandex_compute_instance_platform_id
zone = var.vm_db_zone
resources {
cores = var.vm_resources.db.cores
memory = var.vm_resources.db.memory
core_fraction = var.vm_resources.db.core_fraction
}
boot_disk {
initialize_params {
image_id = data.yandex_compute_image.ubuntu.image_id
type = var.vm_resources.db.type
size = var.vm_resources.db.size
}
}
scheduling_policy {
preemptible = var.vm_db_scheduling_policy
}
network_interface {
subnet_id = yandex_vpc_subnet.develop-b.id
nat = var.vm_db_network_interface
}

metadata = {
serial-port-enable = var.metadata.serial-port-enable
ssh-keys = var.metadata.ssh-keys
}
}
7 changes: 7 additions & 0 deletions 02/src/outputs.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
output "test" {

value = [
{ vm-web = ["instance name ${yandex_compute_instance.platform.name}", "external ip ${yandex_compute_instance.platform.network_interface[0].nat_ip_address}", "fqdn ${yandex_compute_instance.platform.fqdn}"] },
{ vm-db = ["instance name ${yandex_compute_instance.platform2.name}", "external ip ${yandex_compute_instance.platform2.network_interface[0].nat_ip_address}", "fqdn ${yandex_compute_instance.platform2.fqdn}"] }
]
}
4 changes: 2 additions & 2 deletions 02/src/providers.tf
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ terraform {
source = "yandex-cloud/yandex"
}
}
required_version = ">=1.5"
required_version = "<=1.9.8"
}

provider "yandex" {
Expand All @@ -13,4 +13,4 @@ provider "yandex" {
folder_id = var.folder_id
zone = var.default_zone
service_account_key_file = file("~/.authorized_key.json")
}
}
Loading