first commit
This commit is contained in:
commit
31817537f1
68 files changed
+3442
No files matched your search
@@ -0,0 +1,4 @@
|
||||
resource "vkcs_compute_keypair" "my_key" {
|
||||
name = "terraform-key-local"
|
||||
public_key = file("~/.ssh/terraform_rsa.pub")
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
resource "vkcs_lb_loadbalancer" "main" {
|
||||
name = "lab1-lb"
|
||||
vip_subnet_id = vkcs_networking_subnet.public.id
|
||||
}
|
||||
|
||||
resource "vkcs_lb_listener" "http" {
|
||||
name = "http-listener"
|
||||
protocol = "HTTP"
|
||||
protocol_port = 80
|
||||
loadbalancer_id = vkcs_lb_loadbalancer.main.id
|
||||
}
|
||||
|
||||
resource "vkcs_lb_pool" "web" {
|
||||
name = "web-targets"
|
||||
protocol = "HTTP"
|
||||
lb_method = "ROUND_ROBIN"
|
||||
listener_id = vkcs_lb_listener.http.id
|
||||
}
|
||||
|
||||
resource "vkcs_lb_monitor" "web" {
|
||||
name = "web-monitor"
|
||||
type = "HTTP"
|
||||
delay = 10
|
||||
timeout = 5
|
||||
max_retries = 3
|
||||
url_path = "/"
|
||||
pool_id = vkcs_lb_pool.web.id
|
||||
}
|
||||
|
||||
# Блок vkcs_lb_member полностью удалён — добавишь ВМ руками через консоль или OpenStack CLI
|
||||
@@ -0,0 +1,36 @@
|
||||
data "vkcs_networking_network" "ext_net" {
|
||||
name = "internet"
|
||||
}
|
||||
|
||||
data "vkcs_networking_router" "existing" {
|
||||
id = "913bdd47-9155-45b2-b404-5c10d0086132"
|
||||
}
|
||||
|
||||
resource "vkcs_networking_network" "lab1_vpc" {
|
||||
name = "lab1-vpc"
|
||||
admin_state_up = true
|
||||
}
|
||||
|
||||
resource "vkcs_networking_subnet" "public" {
|
||||
name = "lab1-public"
|
||||
network_id = vkcs_networking_network.lab1_vpc.id
|
||||
cidr = "10.0.1.0/24"
|
||||
dns_nameservers = ["8.8.8.8", "8.8.4.4"]
|
||||
}
|
||||
|
||||
resource "vkcs_networking_subnet" "private" {
|
||||
name = "lab1-private"
|
||||
network_id = vkcs_networking_network.lab1_vpc.id
|
||||
cidr = "10.0.2.0/24"
|
||||
dns_nameservers = ["8.8.8.8", "8.8.4.4"]
|
||||
}
|
||||
|
||||
resource "vkcs_networking_router_interface" "public" {
|
||||
router_id = data.vkcs_networking_router.existing.id
|
||||
subnet_id = vkcs_networking_subnet.public.id
|
||||
}
|
||||
|
||||
resource "vkcs_networking_router_interface" "private" {
|
||||
router_id = data.vkcs_networking_router.existing.id
|
||||
subnet_id = vkcs_networking_subnet.private.id
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
output "lb_public_ip" {
|
||||
value = vkcs_lb_loadbalancer.main.vip_address
|
||||
}
|
||||
|
||||
# bastion_ip и web_ips_private удали, так как ВМ больше не в Terraform
|
||||
@@ -0,0 +1,12 @@
|
||||
# Указываем версию провайдера
|
||||
terraform {
|
||||
required_providers {
|
||||
vkcs = {
|
||||
source = "vk-cs/vkcs"
|
||||
version = "~> 0.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Настройка провайдера (использует переменные окружения из RC-файла)
|
||||
provider "vkcs" {}
|
||||
@@ -0,0 +1,46 @@
|
||||
resource "vkcs_networking_secgroup" "bastion_sg" {
|
||||
name = "bastion-sg"
|
||||
description = "SSH from my IP"
|
||||
}
|
||||
resource "vkcs_networking_secgroup_rule" "bastion_ssh" {
|
||||
direction = "ingress"
|
||||
protocol = "tcp"
|
||||
port_range_min = 22
|
||||
port_range_max = 22
|
||||
remote_ip_prefix = var.my_ip
|
||||
security_group_id = vkcs_networking_secgroup.bastion_sg.id
|
||||
}
|
||||
|
||||
resource "vkcs_networking_secgroup" "web_sg" {
|
||||
name = "web-sg"
|
||||
description = "SSH from bastion, HTTP from LB"
|
||||
}
|
||||
resource "vkcs_networking_secgroup_rule" "web_ssh" {
|
||||
direction = "ingress"
|
||||
protocol = "tcp"
|
||||
port_range_min = 22
|
||||
port_range_max = 22
|
||||
remote_group_id = vkcs_networking_secgroup.bastion_sg.id
|
||||
security_group_id = vkcs_networking_secgroup.web_sg.id
|
||||
}
|
||||
resource "vkcs_networking_secgroup_rule" "web_http" {
|
||||
direction = "ingress"
|
||||
protocol = "tcp"
|
||||
port_range_min = 80
|
||||
port_range_max = 80
|
||||
remote_group_id = vkcs_networking_secgroup.lb_sg.id
|
||||
security_group_id = vkcs_networking_secgroup.web_sg.id
|
||||
}
|
||||
|
||||
resource "vkcs_networking_secgroup" "lb_sg" {
|
||||
name = "lb-sg"
|
||||
description = "HTTP from internet"
|
||||
}
|
||||
resource "vkcs_networking_secgroup_rule" "lb_http" {
|
||||
direction = "ingress"
|
||||
protocol = "tcp"
|
||||
port_range_min = 80
|
||||
port_range_max = 80
|
||||
remote_ip_prefix = "0.0.0.0/0"
|
||||
security_group_id = vkcs_networking_secgroup.lb_sg.id
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
my_ip = "95.37.52.68/32"
|
||||
@@ -0,0 +1,19 @@
|
||||
variable "my_ip" {
|
||||
type = string
|
||||
default = "95.37.52.68/32"
|
||||
}
|
||||
|
||||
variable "flavor_web" {
|
||||
type = string
|
||||
default = "df3c499a-044f-41d2-8612-d303adc613cc"
|
||||
}
|
||||
|
||||
variable "image_name" {
|
||||
type = string
|
||||
default = "ubuntu-22-202602051629.gite7a38aaf"
|
||||
}
|
||||
|
||||
variable "ssh_public_key_path" {
|
||||
type = string
|
||||
default = "~/.ssh/id_rsa.pub"
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
# Указываем версию провайдера
|
||||
terraform {
|
||||
required_providers {
|
||||
vkcs = {
|
||||
source = "vk-cs/vkcs"
|
||||
}
|
||||
random = {
|
||||
source = "hashicorp/random"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Настройка провайдера (использует переменные окружения из RC-файла)
|
||||
provider "vkcs" {
|
||||
username = "remizov.kirill2005@yandex.ru"
|
||||
password = "*#Woron210105#*"
|
||||
project_id = "5aa354d05172439abcc5bfc3f682da49"
|
||||
region = "RegionOne" # Для Москвы
|
||||
auth_url = "https://infra.mail.ru:35357/v3/"
|
||||
}
|
||||
|
||||
# --- СУЩЕСТВУЮЩИЙ РОУТЕР ---
|
||||
data "vkcs_networking_router" "main" {
|
||||
name = "router_5390"
|
||||
}
|
||||
|
||||
# --- СОЗДАНИЕ СЕТИ И ПОДСЕТИ ---
|
||||
resource "vkcs_networking_network" "main" {
|
||||
name = "postgres-network"
|
||||
admin_state_up = true
|
||||
}
|
||||
|
||||
resource "vkcs_networking_subnet" "main" {
|
||||
name = "postgres-subnet"
|
||||
network_id = vkcs_networking_network.main.id
|
||||
cidr = "192.168.199.0/24"
|
||||
}
|
||||
|
||||
# --- ПОДКЛЮЧЕНИЕ ПОДСЕТИ К РОУТЕРУ ---
|
||||
resource "vkcs_networking_router_interface" "main" {
|
||||
router_id = data.vkcs_networking_router.main.id
|
||||
subnet_id = vkcs_networking_subnet.main.id
|
||||
}
|
||||
|
||||
# --- ИНСТАНС POSTGRESQL ---
|
||||
# ИСПРАВЛЕНО: используем имя флавора для БД (Standard-2-6)
|
||||
resource "vkcs_db_instance" "postgres" {
|
||||
name = "terraform-postgres"
|
||||
flavor_id = "2df6e3ec-5939-4d28-a818-89558ff1b7ab" # <-- заменено на подходящий для БД
|
||||
volume_type = "ceph-ssd"
|
||||
size = 10
|
||||
availability_zone = "MS1"
|
||||
floating_ip_enabled = true
|
||||
|
||||
datastore {
|
||||
type = "postgresql"
|
||||
version = "15"
|
||||
}
|
||||
|
||||
network {
|
||||
uuid = vkcs_networking_network.main.id
|
||||
}
|
||||
}
|
||||
|
||||
# --- ГЕНЕРАЦИЯ ПАРОЛЯ ---
|
||||
resource "random_password" "db_password" {
|
||||
length = 16
|
||||
special = true
|
||||
min_lower = 1
|
||||
min_upper = 1
|
||||
min_numeric = 1
|
||||
min_special = 1
|
||||
}
|
||||
|
||||
# --- БАЗА ДАННЫХ ---
|
||||
resource "vkcs_db_database" "app_db" {
|
||||
name = "app_db"
|
||||
dbms_id = vkcs_db_instance.postgres.id
|
||||
}
|
||||
|
||||
# --- ПОЛЬЗОВАТЕЛЬ ---
|
||||
resource "vkcs_db_user" "app_user" {
|
||||
name = "app_user"
|
||||
password = random_password.db_password.result
|
||||
dbms_id = vkcs_db_instance.postgres.id
|
||||
databases = [vkcs_db_database.app_db.name]
|
||||
}
|
||||
|
||||
# --- ДАННЫЕ ДЛЯ ПОЛУЧЕНИЯ HOSTNAME ---
|
||||
data "vkcs_db_instance" "postgres_info" {
|
||||
id = vkcs_db_instance.postgres.id
|
||||
depends_on = [vkcs_db_instance.postgres]
|
||||
}
|
||||
|
||||
# --- ЛОКАЛЬНЫЙ ФАЙЛ С ПАРОЛЕМ ---
|
||||
resource "local_file" "db_password" {
|
||||
content = "Database password: ${random_password.db_password.result}"
|
||||
filename = "${path.module}/db_password.txt"
|
||||
}
|
||||
|
||||
# --- ВЫХОДНЫЕ ДАННЫЕ ---
|
||||
output "db_host" {
|
||||
value = data.vkcs_db_instance.postgres_info.hostname
|
||||
}
|
||||
|
||||
output "db_port" {
|
||||
value = 5432
|
||||
}
|
||||
|
||||
output "db_name" {
|
||||
value = vkcs_db_database.app_db.name
|
||||
}
|
||||
|
||||
output "db_user" {
|
||||
value = vkcs_db_user.app_user.name
|
||||
}
|
||||
|
||||
output "db_instance_full" {
|
||||
value = data.vkcs_db_instance.postgres_info
|
||||
sensitive = true
|
||||
}
|
||||
Reference in new issue
Block a user