├── examples ├── dbaas │ ├── get_params │ │ ├── .gitignore │ │ ├── vars.tfvars.example │ │ ├── vars.tf │ │ ├── output.tf │ │ ├── README.md │ │ └── main.tf │ ├── mysql_cluster │ │ ├── .gitignore │ │ ├── vars.tfvars.example │ │ ├── vars.tf │ │ ├── output.tf │ │ └── README.md │ ├── postgres_cluster │ │ ├── .gitignore │ │ ├── vars.tfvars.example │ │ ├── vars.tf │ │ ├── output.tf │ │ └── README.md │ └── redis_cluster │ │ ├── .gitignore │ │ ├── vars.tfvars.example │ │ ├── output.tf │ │ ├── vars.tf │ │ ├── README.md │ │ └── main.tf ├── cloud │ ├── several_servers_routing │ │ ├── scheme │ │ │ └── terraform_routes.png │ │ ├── outputs.tf │ │ ├── versions.tf │ │ ├── vars.tf │ │ ├── README.md │ │ └── main.tf │ ├── server_windows │ │ ├── output.tf │ │ ├── versions.tf │ │ ├── README.md │ │ ├── vars.tf │ │ └── main.tf │ ├── server_local_root_disk │ │ ├── output.tf │ │ ├── versions.tf │ │ ├── README.md │ │ ├── vars.tf │ │ └── main.tf │ ├── server_remote_root_disk │ │ ├── output.tf │ │ ├── versions.tf │ │ ├── vars.tf │ │ ├── README.md │ │ └── main.tf │ ├── server_remote_root_disk_with_custom_iops │ │ ├── output.tf │ │ ├── versions.tf │ │ ├── README.md │ │ ├── vars.tf │ │ └── main.tf │ ├── server_local_and_remote_disks │ │ ├── output.tf │ │ ├── versions.tf │ │ ├── README.md │ │ ├── vars.tf │ │ └── main.tf │ ├── server_local_root_disk_with_security_group │ │ ├── output.tf │ │ ├── versions.tf │ │ ├── README.md │ │ ├── vars.tf │ │ └── main.tf │ ├── server_remote_root_disk_two_ports │ │ ├── output.tf │ │ ├── versions.tf │ │ ├── README.md │ │ ├── vars.tf │ │ └── main.tf │ ├── preemptible_server_with_gpu │ │ ├── versions.tf │ │ ├── README.RU.md │ │ ├── vars.tf │ │ └── main.tf │ ├── preemptible_server │ │ ├── versions.tf │ │ ├── README.RU.md │ │ ├── vars.tf │ │ └── main.tf │ ├── several_servers_one_network │ │ ├── versions.tf │ │ ├── README.md │ │ ├── vars.tf │ │ └── main.tf │ ├── several_servers_and_loadbalancers │ │ ├── versions.tf │ │ ├── outputs.tf │ │ └── ssl_certificate │ │ │ └── cert_generator.sh │ ├── server_remote_root_disk_and_attached_share │ │ ├── versions.tf │ │ ├── output.tf │ │ ├── README.md │ │ ├── vars.tf │ │ └── main.tf │ ├── server_remote_root_disk_with_server_group │ │ ├── versions.tf │ │ ├── output.tf │ │ ├── README.EN.md │ │ ├── README.RU.md │ │ ├── vars.tf │ │ └── main.tf │ └── several_servers_with_networking_and_fwaas │ │ ├── versions.tf │ │ ├── README.md │ │ ├── vars.tf │ │ └── main.tf └── mks │ ├── cluster_one_nodegroup │ ├── versions.tf │ ├── README.md │ ├── vars.tf │ └── main.tf │ └── cluster_one_nodegroup_with_net_infra │ ├── versions.tf │ ├── README.md │ └── vars.tf ├── modules ├── cloud │ ├── project │ │ ├── vars.tf │ │ ├── outputs.tf │ │ ├── main.tf │ │ ├── versions.tf │ │ └── README.md │ ├── flavor │ │ ├── outputs.tf │ │ ├── versions.tf │ │ ├── main.tf │ │ ├── vars.tf │ │ └── README.md │ ├── image_datasource │ │ ├── vars.tf │ │ ├── outputs.tf │ │ ├── main.tf │ │ ├── versions.tf │ │ └── README.md │ ├── license │ │ ├── outputs.tf │ │ ├── vars.tf │ │ ├── versions.tf │ │ ├── main.tf │ │ └── README.md │ ├── networking_security_group_with_rules │ │ ├── vars.tf │ │ ├── outputs.tf │ │ ├── versions.tf │ │ └── README.md │ ├── lb_sngl │ │ ├── outputs.tf │ │ ├── versions.tf │ │ ├── vars.tf │ │ ├── README.md │ │ └── main.tf │ ├── vrrp_subnet │ │ ├── outputs.tf │ │ ├── versions.tf │ │ ├── vars.tf │ │ ├── main.tf │ │ └── README.md │ ├── floatingip │ │ ├── main.tf │ │ ├── versions.tf │ │ ├── outputs.tf │ │ └── README.md │ ├── secrets_manager_secret │ │ ├── vars.tf │ │ ├── main.tf │ │ ├── versions.tf │ │ └── README.md │ ├── lb_active_standby │ │ ├── outputs.tf │ │ ├── versions.tf │ │ ├── vars.tf │ │ ├── README.md │ │ └── main.tf │ ├── lb_active_standby_with_certificate │ │ ├── outputs.tf │ │ ├── versions.tf │ │ ├── vars.tf │ │ ├── README.md │ │ └── main.tf │ ├── secrets_manager_certificate │ │ ├── outputs.tf │ │ ├── vars.tf │ │ ├── versions.tf │ │ ├── main.tf │ │ └── README.md │ ├── keypair │ │ ├── vars.tf │ │ ├── versions.tf │ │ ├── outputs.tf │ │ ├── main.tf │ │ └── README.md │ ├── lb_components │ │ ├── vars.tf │ │ ├── versions.tf │ │ ├── README.md │ │ └── main.tf │ ├── server_group │ │ ├── main.tf │ │ ├── vars.tf │ │ ├── versions.tf │ │ ├── outputs.tf │ │ ├── README.RU.md │ │ └── README.EN.md │ ├── lb_components_http │ │ ├── vars.tf │ │ ├── versions.tf │ │ ├── README.md │ │ └── main.tf │ ├── subnet │ │ ├── versions.tf │ │ ├── vars.tf │ │ ├── main.tf │ │ ├── outputs.tf │ │ └── README.md │ ├── routing_selvpc │ │ ├── versions.tf │ │ ├── vars.tf │ │ ├── outputs.tf │ │ ├── main.tf │ │ └── README.md │ ├── project_with_user │ │ ├── outputs.tf │ │ ├── versions.tf │ │ ├── vars.tf │ │ ├── README.md │ │ └── main.tf │ ├── nat │ │ ├── versions.tf │ │ ├── outputs.tf │ │ ├── vars.tf │ │ ├── README.md │ │ └── main.tf │ ├── share │ │ ├── versions.tf │ │ ├── outputs.tf │ │ ├── vars.tf │ │ ├── README.md │ │ └── main.tf │ ├── os_lb_env │ │ ├── versions.tf │ │ ├── vars.tf │ │ ├── outputs.tf │ │ ├── README.md │ │ └── main.tf │ ├── routing_os │ │ ├── versions.tf │ │ ├── outputs.tf │ │ ├── vars.tf │ │ ├── README.md │ │ └── main.tf │ ├── multiple_servers │ │ ├── versions.tf │ │ ├── output.tf │ │ ├── vars.tf │ │ ├── README.md │ │ └── main.tf │ ├── routing_network │ │ ├── versions.tf │ │ ├── vars.tf │ │ ├── outputs.tf │ │ └── README.md │ ├── routing_servers │ │ ├── versions.tf │ │ ├── vars.tf │ │ └── README.md │ ├── single_instance │ │ ├── versions.tf │ │ ├── output.tf │ │ ├── vars.tf │ │ ├── README.md │ │ └── main.tf │ ├── lb_components_https │ │ ├── versions.tf │ │ ├── vars.tf │ │ ├── README.md │ │ └── main.tf │ ├── server_local_root_disk │ │ ├── versions.tf │ │ ├── outputs.tf │ │ ├── vars.tf │ │ ├── README.md │ │ └── main.tf │ ├── server_remote_root_disk │ │ ├── versions.tf │ │ ├── outputs.tf │ │ ├── vars.tf │ │ ├── README.md │ │ └── main.tf │ ├── server_local_and_remote_disks │ │ ├── versions.tf │ │ ├── outputs.tf │ │ ├── vars.tf │ │ ├── README.md │ │ └── main.tf │ ├── server_remote_root_disk_two_ports │ │ ├── versions.tf │ │ ├── outputs.tf │ │ ├── vars.tf │ │ └── README.md │ ├── server_remote_root_disk_with_gpu │ │ ├── versions.tf │ │ ├── outputs.tf │ │ ├── vars.tf │ │ ├── README.md │ │ └── main.tf │ ├── server_remote_root_disk_and_attached_share │ │ ├── versions.tf │ │ ├── outputs.tf │ │ ├── README.md │ │ └── vars.tf │ ├── multiple_servers_with_fwaas │ │ ├── versions.tf │ │ ├── vars.tf │ │ └── README.md │ └── server_local_root_disk_with_security_group │ │ ├── versions.tf │ │ ├── outputs.tf │ │ ├── vars.tf │ │ ├── README.md │ │ └── main.tf └── mks │ ├── nodegroup │ ├── outputs.tf │ ├── versions.tf │ ├── vars.tf │ ├── main.tf │ └── README.md │ ├── nodegroup_local_disk │ ├── outputs.tf │ ├── versions.tf │ ├── vars.tf │ ├── main.tf │ └── README.md │ └── cluster │ ├── versions.tf │ ├── outputs.tf │ ├── vars.tf │ ├── main.tf │ └── README.md ├── .gitignore └── LICENSE /examples/dbaas/get_params/.gitignore: -------------------------------------------------------------------------------- 1 | vars.tfvars 2 | -------------------------------------------------------------------------------- /examples/dbaas/mysql_cluster/.gitignore: -------------------------------------------------------------------------------- 1 | vars.tfvars 2 | -------------------------------------------------------------------------------- /examples/dbaas/postgres_cluster/.gitignore: -------------------------------------------------------------------------------- 1 | vars.tfvars 2 | -------------------------------------------------------------------------------- /examples/dbaas/redis_cluster/.gitignore: -------------------------------------------------------------------------------- 1 | vars.tfvars 2 | -------------------------------------------------------------------------------- /modules/cloud/project/vars.tf: -------------------------------------------------------------------------------- 1 | variable "project_name" { 2 | default = "project_1" 3 | } 4 | -------------------------------------------------------------------------------- /modules/cloud/flavor/outputs.tf: -------------------------------------------------------------------------------- 1 | output "flavor_id" { 2 | value = openstack_compute_flavor_v2.flavor_1.id 3 | } 4 | -------------------------------------------------------------------------------- /modules/cloud/image_datasource/vars.tf: -------------------------------------------------------------------------------- 1 | variable "image_name" { 2 | default = "Ubuntu 22.04 LTS 64-bit" 3 | } 4 | -------------------------------------------------------------------------------- /modules/cloud/license/outputs.tf: -------------------------------------------------------------------------------- 1 | output "license_id" { 2 | value = selectel_vpc_license_v2.license_1.id 3 | } 4 | -------------------------------------------------------------------------------- /modules/cloud/project/outputs.tf: -------------------------------------------------------------------------------- 1 | output "project_id" { 2 | value = selectel_vpc_project_v2.project_1.id 3 | } 4 | -------------------------------------------------------------------------------- /modules/mks/nodegroup/outputs.tf: -------------------------------------------------------------------------------- 1 | output "nodegroup_id" { 2 | value = selectel_mks_nodegroup_v1.nodegroup_1.id 3 | } 4 | -------------------------------------------------------------------------------- /modules/cloud/image_datasource/outputs.tf: -------------------------------------------------------------------------------- 1 | output "image_id" { 2 | value = data.openstack_images_image_v2.image_1.id 3 | } 4 | -------------------------------------------------------------------------------- /modules/cloud/networking_security_group_with_rules/vars.tf: -------------------------------------------------------------------------------- 1 | variable "name" { 2 | default = "test_security_group" 3 | } 4 | -------------------------------------------------------------------------------- /modules/cloud/project/main.tf: -------------------------------------------------------------------------------- 1 | resource "selectel_vpc_project_v2" "project_1" { 2 | name = var.project_name 3 | } 4 | -------------------------------------------------------------------------------- /modules/cloud/lb_sngl/outputs.tf: -------------------------------------------------------------------------------- 1 | output "lb_floating" { 2 | value = openstack_networking_floatingip_v2.floatingip.address 3 | } 4 | -------------------------------------------------------------------------------- /modules/cloud/vrrp_subnet/outputs.tf: -------------------------------------------------------------------------------- 1 | output "vrrp_subnet_id" { 2 | value = selectel_vpc_vrrp_subnet_v2.vrrp_subnet_1.id 3 | } 4 | -------------------------------------------------------------------------------- /modules/mks/nodegroup_local_disk/outputs.tf: -------------------------------------------------------------------------------- 1 | output "nodegroup_id" { 2 | value = selectel_mks_nodegroup_v1.nodegroup_1.id 3 | } 4 | -------------------------------------------------------------------------------- /modules/cloud/floatingip/main.tf: -------------------------------------------------------------------------------- 1 | resource "openstack_networking_floatingip_v2" "floatingip_1" { 2 | pool = "external-network" 3 | } 4 | -------------------------------------------------------------------------------- /modules/cloud/secrets_manager_secret/vars.tf: -------------------------------------------------------------------------------- 1 | variable "project_id" {} 2 | 3 | variable "secret_value" { 4 | sensitive = true 5 | } 6 | -------------------------------------------------------------------------------- /modules/cloud/lb_active_standby/outputs.tf: -------------------------------------------------------------------------------- 1 | output "lb_floating" { 2 | value = openstack_networking_floatingip_v2.floatingip.address 3 | } 4 | -------------------------------------------------------------------------------- /modules/cloud/license/vars.tf: -------------------------------------------------------------------------------- 1 | variable "license_project_id" {} 2 | 3 | variable "license_region" {} 4 | 5 | variable "license_type" {} 6 | -------------------------------------------------------------------------------- /modules/cloud/lb_active_standby_with_certificate/outputs.tf: -------------------------------------------------------------------------------- 1 | output "lb_floating" { 2 | value = openstack_networking_floatingip_v2.floatingip.address 3 | } 4 | -------------------------------------------------------------------------------- /modules/cloud/secrets_manager_certificate/outputs.tf: -------------------------------------------------------------------------------- 1 | output "tls_container_ref" { 2 | value = selectel_secretsmanager_certificate_v1.certificate_1.id 3 | } 4 | -------------------------------------------------------------------------------- /modules/cloud/secrets_manager_certificate/vars.tf: -------------------------------------------------------------------------------- 1 | variable "project_id" {} 2 | 3 | variable "certificates_file" {} 4 | 5 | variable "private_key_file" {} 6 | -------------------------------------------------------------------------------- /examples/dbaas/get_params/vars.tfvars.example: -------------------------------------------------------------------------------- 1 | username="USER" 2 | password="PASSWORD" 3 | domain_name="ACCOUNT_ID" 4 | project_id="PROJECT_ID" 5 | region="REGION" 6 | -------------------------------------------------------------------------------- /modules/cloud/networking_security_group_with_rules/outputs.tf: -------------------------------------------------------------------------------- 1 | output "networking_secgroup_id" { 2 | value = openstack_networking_secgroup_v2.secgroup_1.id 3 | } 4 | -------------------------------------------------------------------------------- /examples/dbaas/mysql_cluster/vars.tfvars.example: -------------------------------------------------------------------------------- 1 | username="USER" 2 | password="PASSWORD" 3 | domain_name="ACCOUNT_ID" 4 | project_id="PROJECT_ID" 5 | region="REGION" 6 | -------------------------------------------------------------------------------- /examples/dbaas/postgres_cluster/vars.tfvars.example: -------------------------------------------------------------------------------- 1 | username="USER" 2 | password="PASSWORD" 3 | domain_name="ACCOUNT_ID" 4 | project_id="PROJECT_ID" 5 | region="REGION" 6 | -------------------------------------------------------------------------------- /modules/cloud/keypair/vars.tf: -------------------------------------------------------------------------------- 1 | variable "keypair_name" { 2 | default = "keypair_1" 3 | } 4 | 5 | variable "keypair_public_key" {} 6 | 7 | variable "keypair_user_id" {} 8 | -------------------------------------------------------------------------------- /modules/cloud/image_datasource/main.tf: -------------------------------------------------------------------------------- 1 | data "openstack_images_image_v2" "image_1" { 2 | name = var.image_name 3 | visibility = "public" 4 | most_recent = true 5 | } 6 | -------------------------------------------------------------------------------- /modules/cloud/lb_components/vars.tf: -------------------------------------------------------------------------------- 1 | variable "loadbalancer_id" {} 2 | 3 | variable "server_access_ips" {} 4 | 5 | variable "lb_components" {} 6 | 7 | variable "vip_subnet_id" {} 8 | -------------------------------------------------------------------------------- /modules/cloud/server_group/main.tf: -------------------------------------------------------------------------------- 1 | resource "openstack_compute_servergroup_v2" "server_group_1" { 2 | name = var.server_group_name 3 | policies = var.server_group_policy 4 | } 5 | -------------------------------------------------------------------------------- /modules/cloud/server_group/vars.tf: -------------------------------------------------------------------------------- 1 | variable "server_group_name" { 2 | default = "server_group_1" 3 | } 4 | variable "server_group_policy" { 5 | default = ["anti-affinity"] 6 | } 7 | -------------------------------------------------------------------------------- /modules/cloud/lb_components_http/vars.tf: -------------------------------------------------------------------------------- 1 | variable "loadbalancer_id" {} 2 | 3 | variable "server_access_ips" {} 4 | 5 | variable "lb_components" {} 6 | 7 | variable "vip_subnet_id" {} 8 | -------------------------------------------------------------------------------- /modules/mks/cluster/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | selectel = { 4 | source = "selectel/selectel" 5 | } 6 | } 7 | required_version = ">= 0.13" 8 | } 9 | -------------------------------------------------------------------------------- /examples/cloud/several_servers_routing/scheme/terraform_routes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/selectel/terraform-examples/HEAD/examples/cloud/several_servers_routing/scheme/terraform_routes.png -------------------------------------------------------------------------------- /modules/cloud/keypair/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | selectel = { 4 | source = "selectel/selectel" 5 | } 6 | } 7 | required_version = ">= 0.13" 8 | } 9 | -------------------------------------------------------------------------------- /modules/cloud/license/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | selectel = { 4 | source = "selectel/selectel" 5 | } 6 | } 7 | required_version = ">= 0.13" 8 | } 9 | -------------------------------------------------------------------------------- /modules/cloud/project/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | selectel = { 4 | source = "selectel/selectel" 5 | } 6 | } 7 | required_version = ">= 0.13" 8 | } 9 | -------------------------------------------------------------------------------- /modules/cloud/subnet/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | selectel = { 4 | source = "selectel/selectel" 5 | } 6 | } 7 | required_version = ">= 0.13" 8 | } 9 | -------------------------------------------------------------------------------- /modules/mks/nodegroup/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | selectel = { 4 | source = "selectel/selectel" 5 | } 6 | } 7 | required_version = ">= 0.13" 8 | } 9 | -------------------------------------------------------------------------------- /examples/dbaas/get_params/vars.tf: -------------------------------------------------------------------------------- 1 | variable "username" {} 2 | 3 | variable "password" {} 4 | 5 | variable "domain_name" {} 6 | 7 | variable "project_id" {} 8 | 9 | variable "region" {} 10 | -------------------------------------------------------------------------------- /modules/cloud/routing_selvpc/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | selectel = { 4 | source = "selectel/selectel" 5 | } 6 | } 7 | required_version = ">= 0.13" 8 | } 9 | -------------------------------------------------------------------------------- /modules/cloud/vrrp_subnet/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | selectel = { 4 | source = "selectel/selectel" 5 | } 6 | } 7 | required_version = ">= 0.13" 8 | } 9 | -------------------------------------------------------------------------------- /examples/dbaas/redis_cluster/vars.tfvars.example: -------------------------------------------------------------------------------- 1 | username="USER" 2 | password="PASSWORD" 3 | domain_name="ACCOUNT_ID" 4 | project_id="PROJECT_ID" 5 | region="REGION" 6 | redis_password="REDIS_PASSWORD" 7 | -------------------------------------------------------------------------------- /modules/cloud/keypair/outputs.tf: -------------------------------------------------------------------------------- 1 | output "keypair_id" { 2 | value = selectel_vpc_keypair_v2.keypair_1.id 3 | } 4 | 5 | output "keypair_name" { 6 | value = selectel_vpc_keypair_v2.keypair_1.name 7 | } 8 | -------------------------------------------------------------------------------- /modules/cloud/license/main.tf: -------------------------------------------------------------------------------- 1 | resource "selectel_vpc_license_v2" "license_1" { 2 | project_id = var.license_project_id 3 | region = var.license_region 4 | type = var.license_type 5 | } 6 | -------------------------------------------------------------------------------- /modules/cloud/project_with_user/outputs.tf: -------------------------------------------------------------------------------- 1 | output "project_id" { 2 | value = module.project.project_id 3 | } 4 | 5 | output "user_id" { 6 | value = selectel_iam_serviceuser_v1.serviceuser_1.id 7 | } 8 | -------------------------------------------------------------------------------- /modules/cloud/project_with_user/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | selectel = { 4 | source = "selectel/selectel" 5 | } 6 | } 7 | required_version = ">= 0.13" 8 | } 9 | -------------------------------------------------------------------------------- /modules/mks/nodegroup_local_disk/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | selectel = { 4 | source = "selectel/selectel" 5 | } 6 | } 7 | required_version = ">= 0.13" 8 | } 9 | -------------------------------------------------------------------------------- /modules/cloud/nat/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | openstack = { 4 | source = "terraform-provider-openstack/openstack" 5 | } 6 | } 7 | required_version = ">= 0.13" 8 | } 9 | -------------------------------------------------------------------------------- /examples/cloud/server_windows/output.tf: -------------------------------------------------------------------------------- 1 | output "server_id" { 2 | value = module.server_remote_root_disk.server_id 3 | } 4 | 5 | output "floating_ip" { 6 | value = module.server_remote_root_disk.floating_ip 7 | } -------------------------------------------------------------------------------- /modules/cloud/flavor/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | openstack = { 4 | source = "terraform-provider-openstack/openstack" 5 | } 6 | } 7 | required_version = ">= 0.13" 8 | } 9 | -------------------------------------------------------------------------------- /modules/cloud/lb_sngl/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | openstack = { 4 | source = "terraform-provider-openstack/openstack" 5 | } 6 | } 7 | required_version = ">= 1.0.9" 8 | } 9 | -------------------------------------------------------------------------------- /modules/cloud/share/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | openstack = { 4 | source = "terraform-provider-openstack/openstack" 5 | } 6 | } 7 | required_version = ">= 0.14" 8 | } 9 | -------------------------------------------------------------------------------- /modules/cloud/floatingip/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | openstack = { 4 | source = "terraform-provider-openstack/openstack" 5 | } 6 | } 7 | required_version = ">= 0.13" 8 | } 9 | -------------------------------------------------------------------------------- /modules/cloud/lb_components/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | openstack = { 4 | source = "terraform-provider-openstack/openstack" 5 | } 6 | } 7 | required_version = ">= 0.13" 8 | } 9 | -------------------------------------------------------------------------------- /modules/cloud/os_lb_env/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | openstack = { 4 | source = "terraform-provider-openstack/openstack" 5 | } 6 | } 7 | required_version = ">= 1.0.9" 8 | } 9 | -------------------------------------------------------------------------------- /modules/cloud/routing_os/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | openstack = { 4 | source = "terraform-provider-openstack/openstack" 5 | } 6 | } 7 | required_version = ">= 0.13" 8 | } 9 | -------------------------------------------------------------------------------- /modules/cloud/server_group/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | openstack = { 4 | source = "terraform-provider-openstack/openstack" 5 | } 6 | } 7 | required_version = ">= 0.13" 8 | } 9 | -------------------------------------------------------------------------------- /examples/cloud/server_local_root_disk/output.tf: -------------------------------------------------------------------------------- 1 | output "server_id" { 2 | value = module.server_local_root_disk.server_id 3 | } 4 | 5 | output "floating_ip" { 6 | value = module.server_local_root_disk.floating_ip 7 | } 8 | -------------------------------------------------------------------------------- /examples/cloud/server_remote_root_disk/output.tf: -------------------------------------------------------------------------------- 1 | output "server_id" { 2 | value = module.server_remote_root_disk.server_id 3 | } 4 | 5 | output "floating_ip" { 6 | value = module.server_remote_root_disk.floating_ip 7 | } -------------------------------------------------------------------------------- /modules/cloud/image_datasource/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | openstack = { 4 | source = "terraform-provider-openstack/openstack" 5 | } 6 | } 7 | required_version = ">= 0.13" 8 | } 9 | -------------------------------------------------------------------------------- /modules/cloud/lb_active_standby/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | openstack = { 4 | source = "terraform-provider-openstack/openstack" 5 | } 6 | } 7 | required_version = ">= 1.0.9" 8 | } 9 | -------------------------------------------------------------------------------- /modules/cloud/lb_components_http/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | openstack = { 4 | source = "terraform-provider-openstack/openstack" 5 | } 6 | } 7 | required_version = ">= 0.13" 8 | } 9 | -------------------------------------------------------------------------------- /modules/cloud/multiple_servers/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | openstack = { 4 | source = "terraform-provider-openstack/openstack" 5 | } 6 | } 7 | required_version = ">= 0.13" 8 | } 9 | -------------------------------------------------------------------------------- /modules/cloud/routing_network/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | openstack = { 4 | source = "terraform-provider-openstack/openstack" 5 | } 6 | } 7 | required_version = ">= 0.13" 8 | } 9 | -------------------------------------------------------------------------------- /modules/cloud/routing_selvpc/vars.tf: -------------------------------------------------------------------------------- 1 | variable "project_user_name" {} 2 | 3 | variable "user_password" {} 4 | 5 | variable "keypair_name" {} 6 | 7 | variable "project_name" {} 8 | 9 | variable "target_zone" {} 10 | -------------------------------------------------------------------------------- /modules/cloud/routing_servers/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | openstack = { 4 | source = "terraform-provider-openstack/openstack" 5 | } 6 | } 7 | required_version = ">= 0.13" 8 | } 9 | -------------------------------------------------------------------------------- /modules/cloud/single_instance/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | openstack = { 4 | source = "terraform-provider-openstack/openstack" 5 | } 6 | } 7 | required_version = ">= 1.0.9" 8 | } 9 | -------------------------------------------------------------------------------- /modules/cloud/lb_components_https/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | openstack = { 4 | source = "terraform-provider-openstack/openstack" 5 | } 6 | } 7 | required_version = ">= 0.13" 8 | } 9 | -------------------------------------------------------------------------------- /modules/cloud/server_local_root_disk/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | openstack = { 4 | source = "terraform-provider-openstack/openstack" 5 | } 6 | } 7 | required_version = ">= 0.13" 8 | } 9 | -------------------------------------------------------------------------------- /modules/cloud/server_remote_root_disk/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | openstack = { 4 | source = "terraform-provider-openstack/openstack" 5 | } 6 | } 7 | required_version = ">= 0.13" 8 | } 9 | -------------------------------------------------------------------------------- /examples/cloud/several_servers_routing/outputs.tf: -------------------------------------------------------------------------------- 1 | output "main_server_ip" { 2 | value = module.openstack_section.main_server_ip 3 | } 4 | 5 | output "proxy_server_ip" { 6 | value = module.openstack_section.proxy_server_ip 7 | } 8 | -------------------------------------------------------------------------------- /examples/cloud/server_remote_root_disk_with_custom_iops/output.tf: -------------------------------------------------------------------------------- 1 | output "server_id" { 2 | value = module.server_remote_root_disk.server_id 3 | } 4 | 5 | output "floating_ip" { 6 | value = module.server_remote_root_disk.floating_ip 7 | } -------------------------------------------------------------------------------- /modules/cloud/lb_components_https/vars.tf: -------------------------------------------------------------------------------- 1 | variable "loadbalancer_id" {} 2 | 3 | variable "server_access_ips" {} 4 | 5 | variable "lb_components" {} 6 | 7 | variable "vip_subnet_id" {} 8 | 9 | variable "tls_container_ref" {} 10 | -------------------------------------------------------------------------------- /modules/cloud/lb_sngl/vars.tf: -------------------------------------------------------------------------------- 1 | variable "lb_sngl_name" {} 2 | 3 | variable "lb_sngl_components" {} 4 | 5 | variable "lb_sngl_flavor_name" {} 6 | 7 | variable "lb_public_subnet_id" {} 8 | 9 | variable "lb_servers_access_ips" {} 10 | -------------------------------------------------------------------------------- /modules/cloud/server_local_and_remote_disks/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | openstack = { 4 | source = "terraform-provider-openstack/openstack" 5 | } 6 | } 7 | required_version = ">= 0.13" 8 | } 9 | -------------------------------------------------------------------------------- /modules/cloud/server_remote_root_disk_two_ports/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | openstack = { 4 | source = "terraform-provider-openstack/openstack" 5 | } 6 | } 7 | required_version = ">= 0.13" 8 | } 9 | -------------------------------------------------------------------------------- /modules/cloud/server_remote_root_disk_with_gpu/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | openstack = { 4 | source = "terraform-provider-openstack/openstack" 5 | } 6 | } 7 | required_version = ">= 0.13" 8 | } 9 | -------------------------------------------------------------------------------- /examples/cloud/server_local_and_remote_disks/output.tf: -------------------------------------------------------------------------------- 1 | output "server_id" { 2 | value = module.server_local_and_remote_disks.server_id 3 | } 4 | 5 | output "floating_ip" { 6 | value = module.server_local_and_remote_disks.floating_ip 7 | } 8 | -------------------------------------------------------------------------------- /examples/cloud/server_local_root_disk_with_security_group/output.tf: -------------------------------------------------------------------------------- 1 | output "server_id" { 2 | value = module.server_local_root_disk.server_id 3 | } 4 | 5 | output "floating_ip" { 6 | value = module.server_local_root_disk.floating_ip 7 | } 8 | -------------------------------------------------------------------------------- /modules/cloud/lb_active_standby_with_certificate/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | openstack = { 4 | source = "terraform-provider-openstack/openstack" 5 | } 6 | } 7 | required_version = ">= 1.0.9" 8 | } 9 | -------------------------------------------------------------------------------- /examples/mks/cluster_one_nodegroup/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | selectel = { 4 | source = "selectel/selectel" 5 | version = ">= 5.1.1" 6 | } 7 | } 8 | required_version = ">= 1.9.2" 9 | } 10 | -------------------------------------------------------------------------------- /modules/cloud/floatingip/outputs.tf: -------------------------------------------------------------------------------- 1 | output "floatingip_id" { 2 | value = openstack_networking_floatingip_v2.floatingip_1.id 3 | } 4 | 5 | output "floatingip_address" { 6 | value = openstack_networking_floatingip_v2.floatingip_1.address 7 | } 8 | -------------------------------------------------------------------------------- /modules/cloud/routing_network/vars.tf: -------------------------------------------------------------------------------- 1 | variable "selvpc_network_id" {} 2 | 3 | variable "selvpc_subnet_cidr" {} 4 | 5 | variable "selvpc_subnet_id" {} 6 | 7 | variable "router_external_net_name" { 8 | default = "external-network" 9 | } 10 | -------------------------------------------------------------------------------- /modules/cloud/routing_os/outputs.tf: -------------------------------------------------------------------------------- 1 | output "proxy_server_ip" { 2 | value = module.routing_network.proxy_server_public_subnet_port_ip 3 | } 4 | 5 | output "main_server_ip" { 6 | value = module.routing_network.main_server_subnet_three_port 7 | } 8 | -------------------------------------------------------------------------------- /modules/cloud/secrets_manager_secret/main.tf: -------------------------------------------------------------------------------- 1 | resource "selectel_secretsmanager_secret_v1" "secret_1" { 2 | key = "secret" 3 | value = var.secret_value 4 | project_id = var.project_id 5 | description = "secret from .tf" 6 | } 7 | -------------------------------------------------------------------------------- /modules/cloud/secrets_manager_secret/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | selectel = { 4 | source = "selectel/selectel" 5 | version = ">= 5.1.1" 6 | } 7 | } 8 | required_version = ">= 1.9.2" 9 | } 10 | -------------------------------------------------------------------------------- /modules/cloud/server_group/outputs.tf: -------------------------------------------------------------------------------- 1 | output "server_group_id" { 2 | value = openstack_compute_servergroup_v2.server_group_1.id 3 | } 4 | 5 | output "server_group_name" { 6 | value = openstack_compute_servergroup_v2.server_group_1.name 7 | } 8 | -------------------------------------------------------------------------------- /modules/cloud/server_remote_root_disk_and_attached_share/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | openstack = { 4 | source = "terraform-provider-openstack/openstack" 5 | } 6 | } 7 | required_version = ">= 0.14" 8 | } 9 | -------------------------------------------------------------------------------- /modules/cloud/subnet/vars.tf: -------------------------------------------------------------------------------- 1 | variable "subnet_project_id" {} 2 | 3 | variable "subnet_region" {} 4 | 5 | variable "subnet_prefix_length" { 6 | default = 29 7 | } 8 | 9 | variable "subnet_ip_version" { 10 | default = "ipv4" 11 | } 12 | -------------------------------------------------------------------------------- /examples/cloud/server_remote_root_disk_two_ports/output.tf: -------------------------------------------------------------------------------- 1 | output "server_id" { 2 | value = module.server_remote_root_disk_two_ports.server_id 3 | } 4 | 5 | output "floating_ip" { 6 | value = module.server_remote_root_disk_two_ports.floating_ip 7 | } -------------------------------------------------------------------------------- /modules/cloud/secrets_manager_certificate/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | selectel = { 4 | source = "selectel/selectel" 5 | version = ">= 5.1.1" 6 | } 7 | } 8 | required_version = ">= 1.9.2" 9 | } 10 | -------------------------------------------------------------------------------- /modules/cloud/lb_active_standby/vars.tf: -------------------------------------------------------------------------------- 1 | variable "lb_active_name" {} 2 | 3 | variable "lb_active_components" {} 4 | 5 | variable "lb_active_flavor_name" {} 6 | 7 | variable "lb_private_subnet_id" {} 8 | 9 | variable "lb_servers_access_ips" {} 10 | -------------------------------------------------------------------------------- /modules/cloud/subnet/main.tf: -------------------------------------------------------------------------------- 1 | resource "selectel_vpc_subnet_v2" "subnet_1" { 2 | project_id = var.subnet_project_id 3 | region = var.subnet_region 4 | prefix_length = var.subnet_prefix_length 5 | ip_version = var.subnet_ip_version 6 | } 7 | -------------------------------------------------------------------------------- /modules/cloud/floatingip/README.md: -------------------------------------------------------------------------------- 1 | # Floating IP 2 | 3 | Terraform module for creating a single OpenStack Floating IP. 4 | 5 | ## Outputs 6 | 7 | * `floatingip_id` - ID of the OpenStack Floating IP. 8 | 9 | * `floatingip_address` - Address of the OpenStack Floating IP. -------------------------------------------------------------------------------- /modules/cloud/routing_os/vars.tf: -------------------------------------------------------------------------------- 1 | variable "selvpc_network_id" {} 2 | 3 | variable "selvpc_subnet_id" {} 4 | 5 | variable "selvpc_subnet_cidr" {} 6 | 7 | variable "keypair_name" {} 8 | 9 | variable "target_zone" {} 10 | 11 | variable "server_image_name" {} 12 | -------------------------------------------------------------------------------- /modules/cloud/single_instance/output.tf: -------------------------------------------------------------------------------- 1 | output "public_network_ips" { 2 | value = openstack_compute_instance_v2.instance.network[1].fixed_ip_v4 3 | } 4 | 5 | output "private_network_ips" { 6 | value = openstack_compute_instance_v2.instance.network[0].fixed_ip_v4 7 | } 8 | -------------------------------------------------------------------------------- /modules/cloud/keypair/main.tf: -------------------------------------------------------------------------------- 1 | resource "selectel_vpc_keypair_v2" "keypair_1" { 2 | name = var.keypair_name 3 | public_key = var.keypair_public_key 4 | user_id = var.keypair_user_id 5 | 6 | lifecycle { 7 | ignore_changes = [regions] 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /modules/cloud/multiple_servers_with_fwaas/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | openstack = { 4 | source = "terraform-provider-openstack/openstack" 5 | version = ">= 2.0.0" 6 | } 7 | } 8 | required_version = ">= 1.9.2" 9 | } 10 | -------------------------------------------------------------------------------- /modules/cloud/project_with_user/vars.tf: -------------------------------------------------------------------------------- 1 | variable "keypair_name" { 2 | default = "" 3 | } 4 | 5 | variable "project_name" { 6 | default = "tf_project" 7 | } 8 | 9 | variable "project_user_name" { 10 | default = "tf_user" 11 | } 12 | 13 | variable "user_password" {} 14 | -------------------------------------------------------------------------------- /modules/cloud/networking_security_group_with_rules/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | openstack = { 4 | source = "terraform-provider-openstack/openstack" 5 | version = ">= 3.1.0" 6 | } 7 | } 8 | required_version = ">= 1.12.1" 9 | } 10 | -------------------------------------------------------------------------------- /modules/cloud/server_local_root_disk_with_security_group/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | openstack = { 4 | source = "terraform-provider-openstack/openstack" 5 | version = ">= 3.1.0" 6 | } 7 | } 8 | required_version = ">= 1.12.1" 9 | } 10 | -------------------------------------------------------------------------------- /modules/cloud/secrets_manager_certificate/main.tf: -------------------------------------------------------------------------------- 1 | resource "selectel_secretsmanager_certificate_v1" "certificate_1" { 2 | name = "certificate_from_terraform" 3 | certificates = var.certificates_file 4 | private_key = var.private_key_file 5 | project_id = var.project_id 6 | } 7 | -------------------------------------------------------------------------------- /modules/cloud/project/README.md: -------------------------------------------------------------------------------- 1 | # Project 2 | 3 | Terraform module for creating a single Selectel project. 4 | 5 | ## Variables 6 | 7 | * `project_name` - Name of the Selectel project (Default: "project_1") 8 | 9 | ## Outputs 10 | 11 | * `project_id` - ID of the created Selectel project. -------------------------------------------------------------------------------- /modules/cloud/subnet/outputs.tf: -------------------------------------------------------------------------------- 1 | output "network_id" { 2 | value = selectel_vpc_subnet_v2.subnet_1.network_id 3 | } 4 | 5 | output "subnet_id" { 6 | value = selectel_vpc_subnet_v2.subnet_1.subnet_id 7 | } 8 | 9 | output "subnet_cidr" { 10 | value = selectel_vpc_subnet_v2.subnet_1.cidr 11 | } 12 | -------------------------------------------------------------------------------- /modules/mks/cluster/outputs.tf: -------------------------------------------------------------------------------- 1 | output "cluster_id" { 2 | value = selectel_mks_cluster_v1.cluster_1.id 3 | } 4 | 5 | output "project_id" { 6 | value = selectel_mks_cluster_v1.cluster_1.project_id 7 | } 8 | 9 | output "region" { 10 | value = selectel_mks_cluster_v1.cluster_1.region 11 | } 12 | -------------------------------------------------------------------------------- /modules/cloud/nat/outputs.tf: -------------------------------------------------------------------------------- 1 | output "router_id" { 2 | value = openstack_networking_router_v2.router_1.id 3 | } 4 | 5 | output "network_id" { 6 | value = openstack_networking_network_v2.network_1.id 7 | } 8 | 9 | output "subnet_id" { 10 | value = openstack_networking_subnet_v2.subnet_1.id 11 | } 12 | -------------------------------------------------------------------------------- /modules/cloud/lb_active_standby_with_certificate/vars.tf: -------------------------------------------------------------------------------- 1 | variable "lb_active_name" {} 2 | 3 | variable "lb_active_components" {} 4 | 5 | variable "lb_active_flavor_name" {} 6 | 7 | variable "lb_private_subnet_id" {} 8 | 9 | variable "lb_servers_access_ips" {} 10 | 11 | variable "tls_container_ref" {} 12 | -------------------------------------------------------------------------------- /modules/cloud/routing_selvpc/outputs.tf: -------------------------------------------------------------------------------- 1 | output "selvpc_network_id" { 2 | value = module.public_subnet_29.network_id 3 | } 4 | 5 | output "selvpc_subnet_id" { 6 | value = module.public_subnet_29.subnet_id 7 | } 8 | 9 | output "selvpc_subnet_cidr" { 10 | value = module.public_subnet_29.subnet_cidr 11 | } 12 | -------------------------------------------------------------------------------- /modules/cloud/server_local_root_disk/outputs.tf: -------------------------------------------------------------------------------- 1 | output "server_id" { 2 | value = openstack_compute_instance_v2.instance_1.id 3 | } 4 | 5 | output "server_port_id" { 6 | value = openstack_networking_port_v2.port_1.id 7 | } 8 | 9 | output "floating_ip" { 10 | value = module.floatingip.floatingip_address 11 | } 12 | -------------------------------------------------------------------------------- /modules/cloud/vrrp_subnet/vars.tf: -------------------------------------------------------------------------------- 1 | variable "vrrp_subnet_project_id" {} 2 | 3 | variable "vrrp_subnet_master_region" {} 4 | 5 | variable "vrrp_subnet_slave_region" {} 6 | 7 | variable "vrrp_subnet_prefix_length" { 8 | default = 29 9 | } 10 | 11 | variable "vrrp_subnet_ip_version" { 12 | default = "ipv4" 13 | } 14 | -------------------------------------------------------------------------------- /examples/cloud/preemptible_server_with_gpu/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | selectel = { 4 | source = "selectel/selectel" 5 | } 6 | openstack = { 7 | source = "terraform-provider-openstack/openstack" 8 | version = ">= 1.45.0" 9 | } 10 | } 11 | required_version = ">= 0.13" 12 | } 13 | -------------------------------------------------------------------------------- /modules/cloud/server_local_root_disk_with_security_group/outputs.tf: -------------------------------------------------------------------------------- 1 | output "server_id" { 2 | value = openstack_compute_instance_v2.instance_1.id 3 | } 4 | 5 | output "server_port_id" { 6 | value = openstack_networking_port_v2.port_1.id 7 | } 8 | 9 | output "floating_ip" { 10 | value = module.floatingip.floatingip_address 11 | } 12 | -------------------------------------------------------------------------------- /modules/cloud/server_remote_root_disk_and_attached_share/outputs.tf: -------------------------------------------------------------------------------- 1 | output "share_id" { 2 | value = module.share.share_id 3 | } 4 | 5 | output "share_export_location_path" { 6 | value = module.share.share_export_location_path 7 | } 8 | 9 | output "server_ip" { 10 | value = openstack_networking_floatingip_v2.fip_tf.address 11 | } 12 | -------------------------------------------------------------------------------- /modules/cloud/vrrp_subnet/main.tf: -------------------------------------------------------------------------------- 1 | resource "selectel_vpc_vrrp_subnet_v2" "vrrp_subnet_1" { 2 | project_id = var.vrrp_subnet_project_id 3 | master_region = var.vrrp_subnet_master_region 4 | slave_region = var.vrrp_subnet_slave_region 5 | prefix_length = var.vrrp_subnet_prefix_length 6 | ip_version = var.vrrp_subnet_ip_version 7 | } 8 | -------------------------------------------------------------------------------- /examples/dbaas/redis_cluster/output.tf: -------------------------------------------------------------------------------- 1 | output "cluster_id" { 2 | value = selectel_dbaas_datastore_v1.datastore_1.id 3 | } 4 | 5 | output "cluster_status" { 6 | value = selectel_dbaas_datastore_v1.datastore_1.status 7 | } 8 | 9 | output "master_host" { 10 | value = selectel_dbaas_datastore_v1.datastore_1.connections["master"] 11 | } 12 | -------------------------------------------------------------------------------- /modules/cloud/flavor/main.tf: -------------------------------------------------------------------------------- 1 | resource "openstack_compute_flavor_v2" "flavor_1" { 2 | name = var.flavor_name 3 | ram = var.flavor_ram_mb 4 | vcpus = var.flavor_vcpus 5 | disk = var.flavor_local_disk_gb 6 | is_public = var.flavor_is_public 7 | 8 | lifecycle { 9 | create_before_destroy = true 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /modules/cloud/flavor/vars.tf: -------------------------------------------------------------------------------- 1 | variable "flavor_name" { 2 | default = "flavor_1" 3 | } 4 | 5 | variable "flavor_vcpus" { 6 | default = 2 7 | } 8 | 9 | variable "flavor_ram_mb" { 10 | default = 2048 11 | } 12 | 13 | variable "flavor_local_disk_gb" { 14 | default = 0 15 | } 16 | 17 | variable "flavor_is_public" { 18 | default = false 19 | } 20 | -------------------------------------------------------------------------------- /examples/cloud/server_windows/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | selectel = { 4 | source = "selectel/selectel" 5 | version = ">= 5.1.1" 6 | } 7 | openstack = { 8 | source = "terraform-provider-openstack/openstack" 9 | version = ">= 2.0.0" 10 | } 11 | } 12 | required_version = ">= 1.9.2" 13 | } 14 | -------------------------------------------------------------------------------- /examples/dbaas/mysql_cluster/vars.tf: -------------------------------------------------------------------------------- 1 | variable "username" {} 2 | 3 | variable "password" {} 4 | 5 | variable "domain_name" {} 6 | 7 | variable "project_id" {} 8 | 9 | variable "region" {} 10 | 11 | variable "auth_url" { 12 | default = "https://cloud.api.selcloud.ru/identity/v3" 13 | } 14 | 15 | variable "network_name" { 16 | default = "nat" 17 | } 18 | -------------------------------------------------------------------------------- /modules/cloud/os_lb_env/vars.tf: -------------------------------------------------------------------------------- 1 | variable "target_zone" {} 2 | 3 | variable "server_image_name" {} 4 | 5 | variable "keypair_name" { 6 | default = "" 7 | } 8 | 9 | variable "server_vcpus" { 10 | default = 1 11 | } 12 | 13 | variable "server_ram_mb" { 14 | default = 1024 15 | } 16 | 17 | variable "server_root_disk_gb" { 18 | default = 8 19 | } 20 | -------------------------------------------------------------------------------- /examples/cloud/preemptible_server/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | selectel = { 4 | source = "selectel/selectel" 5 | version = ">= 5.1.1" 6 | } 7 | openstack = { 8 | source = "terraform-provider-openstack/openstack" 9 | version = ">= 2.0.0" 10 | } 11 | } 12 | required_version = ">= 1.9.2" 13 | } 14 | -------------------------------------------------------------------------------- /examples/dbaas/postgres_cluster/vars.tf: -------------------------------------------------------------------------------- 1 | variable "username" {} 2 | 3 | variable "password" {} 4 | 5 | variable "domain_name" {} 6 | 7 | variable "project_id" {} 8 | 9 | variable "region" {} 10 | 11 | variable "auth_url" { 12 | default = "https://cloud.api.selcloud.ru/identity/v3" 13 | } 14 | 15 | variable "network_name" { 16 | default = "nat" 17 | } 18 | -------------------------------------------------------------------------------- /examples/cloud/server_local_root_disk/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | selectel = { 4 | source = "selectel/selectel" 5 | version = ">= 5.1.1" 6 | } 7 | openstack = { 8 | source = "terraform-provider-openstack/openstack" 9 | version = ">= 2.0.0" 10 | } 11 | } 12 | required_version = ">= 1.9.2" 13 | } 14 | -------------------------------------------------------------------------------- /examples/cloud/server_remote_root_disk/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | selectel = { 4 | source = "selectel/selectel" 5 | version = ">= 5.1.1" 6 | } 7 | openstack = { 8 | source = "terraform-provider-openstack/openstack" 9 | version = ">= 2.0.0" 10 | } 11 | } 12 | required_version = ">= 1.9.2" 13 | } 14 | -------------------------------------------------------------------------------- /examples/cloud/several_servers_routing/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | selectel = { 4 | source = "selectel/selectel" 5 | version = ">= 5.1.1" 6 | } 7 | openstack = { 8 | source = "terraform-provider-openstack/openstack" 9 | version = ">= 2.0.0" 10 | } 11 | } 12 | required_version = ">= 1.9.2" 13 | } 14 | -------------------------------------------------------------------------------- /modules/cloud/share/outputs.tf: -------------------------------------------------------------------------------- 1 | output "share_id" { 2 | value = openstack_sharedfilesystem_share_v2.share_1.id 3 | } 4 | 5 | output "share_export_location_path" { 6 | value = openstack_sharedfilesystem_share_v2.share_1.export_locations[0]["path"] 7 | } 8 | 9 | output "share_proto" { 10 | value = openstack_sharedfilesystem_share_v2.share_1.share_proto 11 | } 12 | -------------------------------------------------------------------------------- /examples/cloud/server_local_and_remote_disks/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | selectel = { 4 | source = "selectel/selectel" 5 | version = ">= 5.1.1" 6 | } 7 | openstack = { 8 | source = "terraform-provider-openstack/openstack" 9 | version = ">= 2.0.0" 10 | } 11 | } 12 | required_version = ">= 1.9.2" 13 | } 14 | -------------------------------------------------------------------------------- /examples/cloud/several_servers_one_network/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | selectel = { 4 | source = "selectel/selectel" 5 | version = ">= 5.1.1" 6 | } 7 | openstack = { 8 | source = "terraform-provider-openstack/openstack" 9 | version = ">= 2.0.0" 10 | } 11 | } 12 | required_version = ">= 1.9.2" 13 | } 14 | -------------------------------------------------------------------------------- /modules/cloud/image_datasource/README.md: -------------------------------------------------------------------------------- 1 | # Image 2 | 3 | Terraform module for getting ID for a single Selectel OpenStack Image. 4 | 5 | ## Variables 6 | 7 | * `image_name` - Name of the OpenStack Image that needs to be found 8 | (Default: "Ubuntu 22.04 LTS 64-bit"). 9 | 10 | ## Outputs 11 | 12 | * `image_id` - ID of the existing public Selectel OpenStack Image. 13 | -------------------------------------------------------------------------------- /examples/cloud/server_remote_root_disk_two_ports/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | selectel = { 4 | source = "selectel/selectel" 5 | version = ">= 5.1.1" 6 | } 7 | openstack = { 8 | source = "terraform-provider-openstack/openstack" 9 | version = ">= 2.0.0" 10 | } 11 | } 12 | required_version = ">= 1.9.2" 13 | } 14 | -------------------------------------------------------------------------------- /examples/cloud/several_servers_and_loadbalancers/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | selectel = { 4 | source = "selectel/selectel" 5 | version = ">= 5.1.1" 6 | } 7 | openstack = { 8 | source = "terraform-provider-openstack/openstack" 9 | version = ">= 2.0.0" 10 | } 11 | } 12 | required_version = ">= 1.9.2" 13 | } 14 | -------------------------------------------------------------------------------- /examples/cloud/server_remote_root_disk_with_custom_iops/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | selectel = { 4 | source = "selectel/selectel" 5 | version = ">= 5.1.1" 6 | } 7 | openstack = { 8 | source = "terraform-provider-openstack/openstack" 9 | version = ">= 2.0.0" 10 | } 11 | } 12 | required_version = ">= 1.9.2" 13 | } 14 | -------------------------------------------------------------------------------- /examples/dbaas/get_params/output.tf: -------------------------------------------------------------------------------- 1 | output "datastore_types" { 2 | value = data.selectel_dbaas_datastore_type_v1.dt.datastore_types 3 | } 4 | 5 | output "datastore_flavors" { 6 | value = data.selectel_dbaas_flavor_v1.flavors.flavors 7 | } 8 | 9 | output "postgres_extentions" { 10 | value = data.selectel_dbaas_available_extension_v1.pg_extensions.available_extensions 11 | } 12 | -------------------------------------------------------------------------------- /examples/mks/cluster_one_nodegroup_with_net_infra/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | selectel = { 4 | source = "selectel/selectel" 5 | version = ">= 5.1.1" 6 | } 7 | openstack = { 8 | source = "terraform-provider-openstack/openstack" 9 | version = ">= 2.0.0" 10 | } 11 | } 12 | required_version = ">= 1.9.2" 13 | } 14 | -------------------------------------------------------------------------------- /examples/cloud/server_local_root_disk_with_security_group/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | selectel = { 4 | source = "selectel/selectel" 5 | version = ">= 6.5.0" 6 | } 7 | openstack = { 8 | source = "terraform-provider-openstack/openstack" 9 | version = ">= 3.1.0" 10 | } 11 | } 12 | required_version = ">= 1.12.1" 13 | } 14 | -------------------------------------------------------------------------------- /examples/cloud/server_remote_root_disk_and_attached_share/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | selectel = { 4 | source = "selectel/selectel" 5 | version = ">= 5.1.1" 6 | } 7 | openstack = { 8 | source = "terraform-provider-openstack/openstack" 9 | version = ">= 2.0.0" 10 | } 11 | } 12 | required_version = ">= 1.9.2" 13 | } 14 | -------------------------------------------------------------------------------- /examples/cloud/server_remote_root_disk_with_server_group/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | selectel = { 4 | source = "selectel/selectel" 5 | version = ">= 5.1.1" 6 | } 7 | openstack = { 8 | source = "terraform-provider-openstack/openstack" 9 | version = ">= 2.0.0" 10 | } 11 | } 12 | required_version = ">= 1.9.2" 13 | } 14 | -------------------------------------------------------------------------------- /examples/cloud/several_servers_and_loadbalancers/outputs.tf: -------------------------------------------------------------------------------- 1 | output "single_lb_floating" { 2 | value = module.openstack_lb_sngl.lb_floating 3 | } 4 | 5 | output "active_lb_floating" { 6 | value = module.openstack_lb_active_standby.lb_floating 7 | } 8 | 9 | output "active_lb_with_https_floating" { 10 | value = module.openstack_lb_active_standby_with_certificate.lb_floating 11 | } 12 | -------------------------------------------------------------------------------- /examples/cloud/several_servers_with_networking_and_fwaas/versions.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | selectel = { 4 | source = "selectel/selectel" 5 | version = ">= 5.1.1" 6 | } 7 | openstack = { 8 | source = "terraform-provider-openstack/openstack" 9 | version = ">= 2.0.0" 10 | } 11 | } 12 | required_version = ">= 1.9.2" 13 | } 14 | -------------------------------------------------------------------------------- /examples/mks/cluster_one_nodegroup/README.md: -------------------------------------------------------------------------------- 1 | # Cluster with one nodegroup 2 | 3 | This environment will create a Selectel Cloud Project with a single MKS Cluster with one nodegroup. 4 | 5 | # Example usage 6 | 7 | ```sh 8 | terraform init 9 | 10 | env \ 11 | TF_VAR_username="USER" \ 12 | TF_VAR_password="PASSWORD" \ 13 | TF_VAR_domain_name="ACCOUNT_ID" \ 14 | terraform apply 15 | ``` 16 | -------------------------------------------------------------------------------- /modules/cloud/os_lb_env/outputs.tf: -------------------------------------------------------------------------------- 1 | output "public_subnet_id" { 2 | value = module.public_nat.subnet_id 3 | } 4 | 5 | output "private_subnet_id" { 6 | value = module.private_nat.subnet_id 7 | } 8 | 9 | output "public_network_ips" { 10 | value = module.instances[*].public_network_ips 11 | } 12 | 13 | output "private_network_ips" { 14 | value = module.instances[*].private_network_ips 15 | } 16 | -------------------------------------------------------------------------------- /modules/cloud/secrets_manager_secret/README.md: -------------------------------------------------------------------------------- 1 | # Selectel secrets manager secret 2 | 3 | Terraform module for creates and manages a secret in Selectel Secrets Manager. 4 | 5 | ## Variables 6 | 7 | * `project_id` - Unique identifier of the associated Cloud Platform project. 8 | 9 | * `secret_value` - Secret value, for example password, API key, certificate key. The limit is 65 536 characters. 10 | -------------------------------------------------------------------------------- /examples/dbaas/redis_cluster/vars.tf: -------------------------------------------------------------------------------- 1 | variable "username" {} 2 | 3 | variable "password" {} 4 | 5 | variable "domain_name" {} 6 | 7 | variable "project_id" {} 8 | 9 | variable "region" {} 10 | 11 | variable "redis_password" {} 12 | 13 | variable "auth_url" { 14 | default = "https://cloud.api.selcloud.ru/identity/v3" 15 | } 16 | 17 | variable "network_name" { 18 | default = "router-nat" 19 | } 20 | -------------------------------------------------------------------------------- /examples/cloud/server_remote_root_disk_and_attached_share/output.tf: -------------------------------------------------------------------------------- 1 | output "share_id" { 2 | value = module.server_remote_root_disk_connected_share.share_id 3 | } 4 | 5 | output "share_export_location_path" { 6 | value = module.server_remote_root_disk_connected_share.share_export_location_path 7 | } 8 | 9 | output "server_ip" { 10 | value = module.server_remote_root_disk_connected_share.server_ip 11 | } 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ### Terraform ### 2 | **/.terraform/* 3 | *.tfstate 4 | *.tfstate.* 5 | crash.log 6 | *.tfvars 7 | override.tf 8 | override.tf.json 9 | *_override.tf 10 | *_override.tf.json 11 | .terraformrc 12 | terraform.rc 13 | *.lock.hcl 14 | 15 | ### Certificates ### 16 | *.pem 17 | *.key 18 | *.crt 19 | *.cer 20 | *.der 21 | *.srl 22 | *.csr 23 | *.p12 24 | *.priv 25 | 26 | ### Miscellanious ### 27 | .idea 28 | .DS_Store 29 | -------------------------------------------------------------------------------- /modules/cloud/server_remote_root_disk/outputs.tf: -------------------------------------------------------------------------------- 1 | output "server_id" { 2 | value = openstack_compute_instance_v2.instance_1.id 3 | } 4 | 5 | output "server_port_id" { 6 | value = openstack_networking_port_v2.port_1.id 7 | } 8 | 9 | output "server_root_volume_id" { 10 | value = openstack_blockstorage_volume_v3.volume_1.id 11 | } 12 | 13 | output "floating_ip" { 14 | value = module.floatingip.floatingip_address 15 | } 16 | -------------------------------------------------------------------------------- /modules/cloud/server_local_and_remote_disks/outputs.tf: -------------------------------------------------------------------------------- 1 | output "server_id" { 2 | value = openstack_compute_instance_v2.instance_1.id 3 | } 4 | 5 | output "server_port_id" { 6 | value = openstack_networking_port_v2.port_1.id 7 | } 8 | 9 | output "server_root_volume_id" { 10 | value = openstack_blockstorage_volume_v3.volume_1.id 11 | } 12 | 13 | output "floating_ip" { 14 | value = module.floatingip.floatingip_address 15 | } 16 | -------------------------------------------------------------------------------- /modules/cloud/server_remote_root_disk_with_gpu/outputs.tf: -------------------------------------------------------------------------------- 1 | output "server_id" { 2 | value = openstack_compute_instance_v2.instance_1.id 3 | } 4 | 5 | output "server_port_id" { 6 | value = openstack_networking_port_v2.port_1.id 7 | } 8 | 9 | output "server_root_volume_id" { 10 | value = openstack_blockstorage_volume_v3.volume_1.id 11 | } 12 | 13 | output "floating_ip" { 14 | value = module.floatingip.floatingip_address 15 | } 16 | -------------------------------------------------------------------------------- /modules/cloud/license/README.md: -------------------------------------------------------------------------------- 1 | # License 2 | 3 | Terraform module for creating a single Selectel Cloud License. 4 | 5 | ## Variables 6 | 7 | * `license_project_id` - Project of the Selectel Cloud License. 8 | 9 | * `license_region` - Region of the Selectel Cloud License. 10 | 11 | * `license_type` - Type of the Selectel Cloud License. 12 | 13 | ## Outputs 14 | 15 | * `license_id` - ID of the created Selectel Cloud License. 16 | -------------------------------------------------------------------------------- /modules/cloud/nat/vars.tf: -------------------------------------------------------------------------------- 1 | variable "router_external_net_name" { 2 | default = "external-network" 3 | } 4 | 5 | variable "router_name" { 6 | default = "router_1" 7 | } 8 | 9 | variable "network_name" { 10 | default = "network_1" 11 | } 12 | 13 | variable "subnet_cidr" { 14 | default = "192.168.0.0/24" 15 | } 16 | 17 | variable "dns_nameservers" { 18 | default = [ 19 | "188.93.16.19", 20 | "188.93.17.19", 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /modules/cloud/multiple_servers/output.tf: -------------------------------------------------------------------------------- 1 | output "server_ids" { 2 | value = openstack_compute_instance_v2.instance[*].id 3 | } 4 | 5 | output "server_access_ips" { 6 | value = openstack_compute_instance_v2.instance[*].access_ip_v4 7 | } 8 | 9 | output "server_access_names" { 10 | value = openstack_compute_instance_v2.instance[*].name 11 | } 12 | 13 | output "server_port_ids" { 14 | value = openstack_networking_port_v2.port[*].id 15 | } 16 | -------------------------------------------------------------------------------- /examples/cloud/server_remote_root_disk_with_server_group/output.tf: -------------------------------------------------------------------------------- 1 | output "server_id" { 2 | value = module.server_remote_root_disk.server_id 3 | } 4 | 5 | output "floating_ip" { 6 | value = module.server_remote_root_disk.floating_ip 7 | } 8 | 9 | output "server_group_name" { 10 | value = module.custom_server_group.server_group_name 11 | } 12 | 13 | output "server_group_id" { 14 | value = module.custom_server_group.server_group_id 15 | } 16 | -------------------------------------------------------------------------------- /modules/cloud/keypair/README.md: -------------------------------------------------------------------------------- 1 | # Keypair 2 | 3 | Terraform module for creating a single Selectel V2 Keypair. 4 | 5 | ## Variables 6 | 7 | * `keypair_name` - Name of the Selectel V2 Keypair (Default: "keypair_1"). 8 | 9 | * `keypair_public_key` - Public key for the Selectel V2 Keypair. 10 | 11 | * `keypair_user_id` - Owner of the Selectel V2 Keypair. 12 | 13 | ## Outputs 14 | 15 | * `keypair_id` - ID of the created Selectel V2 Keypair. 16 | -------------------------------------------------------------------------------- /modules/cloud/multiple_servers_with_fwaas/vars.tf: -------------------------------------------------------------------------------- 1 | variable "server_image_name" {} 2 | 3 | variable "server_ssh_key" {} 4 | 5 | variable "server_ssh_key_user" {} 6 | 7 | variable "server_root_disk_gb" {} 8 | 9 | variable "server_volume_type" {} 10 | 11 | variable "server_name" { 12 | default = "server" 13 | } 14 | 15 | variable "server_zone" { 16 | default = "ru-9a" 17 | } 18 | 19 | variable "server_flavor_id" { 20 | default = "1011" 21 | } 22 | -------------------------------------------------------------------------------- /modules/cloud/project_with_user/README.md: -------------------------------------------------------------------------------- 1 | # Project with user 2 | 3 | Terraform module for creating a Selectel project and assigning a service user to it. 4 | 5 | ## Variables 6 | 7 | * `project_name` - Name of the project. 8 | 9 | * `project_user_name` - Name of the user. 10 | 11 | * `user_password` - Password of the user. 12 | 13 | ## Outputs 14 | 15 | * `project_id` - ID of the created project. 16 | 17 | * `user_id` - ID of the created user. 18 | -------------------------------------------------------------------------------- /modules/cloud/routing_selvpc/main.tf: -------------------------------------------------------------------------------- 1 | module "project_with_user" { 2 | source = "../project_with_user" 3 | 4 | project_name = var.project_name 5 | project_user_name = var.project_user_name 6 | user_password = var.user_password 7 | keypair_name = var.keypair_name 8 | } 9 | 10 | module "public_subnet_29" { 11 | source = "../subnet" 12 | 13 | subnet_region = substr(var.target_zone, 0, 4) 14 | subnet_project_id = module.project_with_user.project_id 15 | } 16 | -------------------------------------------------------------------------------- /modules/cloud/server_local_root_disk/vars.tf: -------------------------------------------------------------------------------- 1 | variable "server_vcpus" { 2 | default = 4 3 | } 4 | 5 | variable "server_ram_mb" { 6 | default = 8192 7 | } 8 | 9 | variable "server_root_disk_gb" { 10 | default = 8 11 | } 12 | 13 | variable "server_name" { 14 | default = "server_1" 15 | } 16 | 17 | variable "server_image_name" {} 18 | 19 | variable "server_zone" { 20 | default = "ru-9a" 21 | } 22 | 23 | variable "server_ssh_key" {} 24 | 25 | variable "server_ssh_key_user" {} 26 | -------------------------------------------------------------------------------- /examples/cloud/server_remote_root_disk_with_server_group/README.EN.md: -------------------------------------------------------------------------------- 1 | # Server with remote root disk and server group 2 | 3 | This environment will create a Selectel Cloud project with a single server booted 4 | from a remote disk with a server group. 5 | 6 | ## Example usage 7 | 8 | ```sh 9 | terraform init 10 | 11 | env \ 12 | TF_VAR_username=USER \ 13 | TF_VAR_password=PASSWORD \ 14 | TF_VAR_domain_name=ACCOUNT_ID \ 15 | TF_VAR_user_password=xxx \ 16 | terraform apply 17 | ``` 18 | -------------------------------------------------------------------------------- /modules/cloud/networking_security_group_with_rules/README.md: -------------------------------------------------------------------------------- 1 | # Модуль создания Openstack группы безопаности и правил 2 | 3 | Модуль создания Openstack группы безопсности и правил для послежующей ассоциации с портом: 4 | - группа безопасности 5 | - десять примеров распространенных правил 6 | 7 | ## Принимаемые переменные 8 | 9 | * `name` - Имя создаваемой группы безопасности. 10 | 11 | 12 | ## Выходные переменные 13 | 14 | * `networking_secgroup_id` - UUID cозданной группы безопасности 15 | -------------------------------------------------------------------------------- /modules/cloud/server_local_root_disk_with_security_group/vars.tf: -------------------------------------------------------------------------------- 1 | variable "server_vcpus" { 2 | default = 4 3 | } 4 | 5 | variable "server_ram_mb" { 6 | default = 8192 7 | } 8 | 9 | variable "server_root_disk_gb" { 10 | default = 8 11 | } 12 | 13 | variable "server_name" { 14 | default = "server_1" 15 | } 16 | 17 | variable "server_image_name" {} 18 | 19 | variable "server_zone" { 20 | default = "ru-9a" 21 | } 22 | 23 | variable "server_ssh_key" {} 24 | 25 | variable "server_ssh_key_user" {} 26 | -------------------------------------------------------------------------------- /modules/cloud/secrets_manager_certificate/README.md: -------------------------------------------------------------------------------- 1 | # Selectel secrets manager certificate 2 | 3 | Terraform module for creates and manages a certificate in Selectel Secrets Manager. 4 | 5 | ## Variables 6 | 7 | * `project_id` - Terraform module for creates and manages a certificate in Selectel Secrets Manager. 8 | 9 | * `certificates_file` - Certificate chain in PEM format. 10 | 11 | * `private_key_file` - Private key file. 12 | 13 | ## Outputs 14 | 15 | * `tls_container_ref` - Unique identifier of the certificate. 16 | -------------------------------------------------------------------------------- /modules/cloud/multiple_servers/vars.tf: -------------------------------------------------------------------------------- 1 | variable "server_image_name" {} 2 | 3 | variable "server_ssh_key" {} 4 | 5 | variable "server_ssh_key_user" {} 6 | 7 | variable "server_name" { 8 | default = "server" 9 | } 10 | 11 | variable "server_zone" { 12 | default = "ru-9a" 13 | } 14 | 15 | variable "replicas_count" { 16 | default = 1 17 | } 18 | 19 | variable "server_vcpus" { 20 | default = 1 21 | } 22 | 23 | variable "server_ram_mb" { 24 | default = 1024 25 | } 26 | 27 | variable "server_root_disk_gb" { 28 | default = 5 29 | } 30 | -------------------------------------------------------------------------------- /modules/cloud/server_remote_root_disk_two_ports/outputs.tf: -------------------------------------------------------------------------------- 1 | output "server_id" { 2 | value = openstack_compute_instance_v2.instance_1.id 3 | } 4 | 5 | output "server_first_port_id" { 6 | value = openstack_networking_port_v2.port_1.id 7 | } 8 | 9 | output "server_second_port_id" { 10 | value = openstack_networking_port_v2.port_2.id 11 | } 12 | 13 | output "server_root_volume_id" { 14 | value = openstack_blockstorage_volume_v3.volume_1.id 15 | } 16 | 17 | output "floating_ip" { 18 | value = module.floatingip.floatingip_address 19 | } 20 | -------------------------------------------------------------------------------- /examples/mks/cluster_one_nodegroup_with_net_infra/README.md: -------------------------------------------------------------------------------- 1 | # Cluster with nodegroup based on local disks and all required network infrastructure 2 | 3 | This environment will create a Selectel Cloud Project with a single MKS Cluster with a nodegroup based on local disks and all required network infrastructure. 4 | 5 | # Example usage 6 | 7 | ```sh 8 | terraform init 9 | 10 | env \ 11 | TF_VAR_username=USER \ 12 | TF_VAR_password=PASSWORD \ 13 | TF_VAR_domain_name=ACCOUNT_ID \ 14 | TF_VAR_user_password=xxx \ 15 | terraform apply 16 | ``` 17 | -------------------------------------------------------------------------------- /modules/cloud/lb_components/README.md: -------------------------------------------------------------------------------- 1 | # TCP/UDP компоненты для создания балансировщиков 2 | 3 | Модуль создания TCP/UDP компонентов балансировщика: 4 | - listener 5 | - pool 6 | - monitor 7 | - member 8 | 9 | ## Принимаемые переменные 10 | 11 | * `loadbalancer_id` - UUID балансировщика, для которого будут созданы компоненты. 12 | 13 | * `server_access_ips` - IP адреса серверов, на которые будет направляться трафик. 14 | 15 | * `lb_components` - Переменные компонентов балансировщика. 16 | 17 | * `vip_subnet_id` - UUID подсети, в которой находятся серверы. 18 | -------------------------------------------------------------------------------- /modules/cloud/lb_components_http/README.md: -------------------------------------------------------------------------------- 1 | # HTTP/HTTPS компоненты для создания балансировщиков 2 | 3 | Модуль создания HTTP компонентов балансировщика: 4 | - listener 5 | - pool 6 | - monitor 7 | - member 8 | 9 | ## Принимаемые переменные 10 | 11 | * `loadbalancer_id` - UUID балансировщика, для которого будут созданы компоненты. 12 | 13 | * `server_access_ips` - IP адреса серверов, на которые будет направляться трафик. 14 | 15 | * `lb_components` - Переменные компонентов балансировщика. 16 | 17 | * `vip_subnet_id` - UUID подсети, в которой находятся серверы. 18 | -------------------------------------------------------------------------------- /modules/cloud/server_group/README.RU.md: -------------------------------------------------------------------------------- 1 | # Сервер-группы 2 | 3 | Terraform модуль для создания сервер-группы. 4 | 5 | ## Переменные 6 | 7 | * `name` - Уникальное имя сервер-группы. 8 | * `policies` - Политика сервер-группы. 9 | 10 | ## Политика 11 | 12 | * `anti-affinity` - Обязательно на разных хостах. Серверы будут размещены на разных хостах, но если это невозможно, то они не будут созданы. 13 | * `soft-anti-affinity` - Желательно на разных хостах. Серверы будут размещены на разных хостах, если это возможно, в противном случае - будет выбран хост без привязки к группе. -------------------------------------------------------------------------------- /examples/cloud/server_remote_root_disk_with_server_group/README.RU.md: -------------------------------------------------------------------------------- 1 | # Пример создания сервера с сетевым загрузочным диском 2 | 3 | Используется два terraform провайдера: 4 | - Selectel - для создания проекта, пользователя и роли. 5 | - Openstack - для создания сервера с сетевым загрузочным диском. 6 | 7 | ## Пример запуска используя переменные окружения 8 | 9 | ```sh 10 | terraform init 11 | 12 | env \ 13 | TF_VAR_username=USER \ 14 | TF_VAR_password=PASSWORD \ 15 | TF_VAR_domain_name=ACCOUNT_ID \ 16 | TF_VAR_user_password=xxx \ 17 | terraform apply 18 | ``` 19 | -------------------------------------------------------------------------------- /modules/cloud/server_remote_root_disk_two_ports/vars.tf: -------------------------------------------------------------------------------- 1 | variable "server_vcpus" { 2 | default = 4 3 | } 4 | 5 | variable "server_ram_mb" { 6 | default = 8192 7 | } 8 | 9 | variable "server_volume_type" { 10 | default = "fast.ru-9a" 11 | } 12 | 13 | variable "server_root_disk_gb" { 14 | default = 8 15 | } 16 | 17 | variable "server_name" { 18 | default = "server_1" 19 | } 20 | 21 | variable "server_image_name" {} 22 | 23 | variable "server_zone" { 24 | default = "ru-9a" 25 | } 26 | 27 | variable "server_ssh_key" {} 28 | 29 | variable "server_ssh_key_user" {} 30 | -------------------------------------------------------------------------------- /modules/cloud/vrrp_subnet/README.md: -------------------------------------------------------------------------------- 1 | # VRRP Subnet 2 | 3 | Terraform module for creating a single Selectel Cloud VRRP Subnet. 4 | 5 | ## Variables 6 | 7 | * `vrrp_subnet_project_id` - Project of the Selectel Cloud VRRP Subnet. 8 | 9 | * `vrrp_subnet_region` - Region of the Selectel Cloud VRRP Subnet. 10 | 11 | * `vrrp_subnet_prefix_length` - Prefix length of the Selectel Cloud VRRP Subnet. 12 | 13 | * `vrrp_subnet_ip_version` - IP version of the Selectel Cloud VRRP Subnet. 14 | 15 | ## Outputs 16 | 17 | * `vrrp_subnet_id` - ID of the created Selectel Cloud VRRP Subnet. 18 | -------------------------------------------------------------------------------- /modules/cloud/routing_servers/vars.tf: -------------------------------------------------------------------------------- 1 | variable "keypair_name" {} 2 | 3 | variable "target_zone" {} 4 | 5 | variable "main_server_subnet_one_port_id" {} 6 | 7 | variable "main_server_subnet_three_port_id" {} 8 | 9 | variable "server_with_docker_subnet_two_port_id" {} 10 | 11 | variable "proxy_server_subnet_three_port_id" {} 12 | 13 | variable "proxy_server_public_subnet_port_id" {} 14 | 15 | variable "main_server_subnet_one_port_ip" {} 16 | 17 | variable "server_with_docker_subnet_two_port_ip" {} 18 | 19 | variable "proxy_server_public_subnet_port_ip" {} 20 | 21 | variable "server_image_name" {} 22 | -------------------------------------------------------------------------------- /modules/mks/cluster/vars.tf: -------------------------------------------------------------------------------- 1 | variable "cluster_name" { 2 | default = "cluster-1" 3 | } 4 | 5 | variable "project_id" {} 6 | 7 | variable "region" {} 8 | 9 | variable "kube_version" {} 10 | 11 | variable "enable_autorepair" { 12 | default = true 13 | } 14 | 15 | variable "enable_patch_version_auto_upgrade" { 16 | default = true 17 | } 18 | 19 | variable "network_id" { 20 | default = "" 21 | } 22 | 23 | variable "subnet_id" { 24 | default = "" 25 | } 26 | 27 | variable "maintenance_window_start" { 28 | default = "" 29 | } 30 | 31 | variable "enable_audit_logs" { 32 | default = false 33 | } 34 | -------------------------------------------------------------------------------- /examples/dbaas/mysql_cluster/output.tf: -------------------------------------------------------------------------------- 1 | 2 | output "cluster_id" { 3 | value = selectel_dbaas_datastore_v1.datastore_1.id 4 | } 5 | 6 | output "cluster_status" { 7 | value = selectel_dbaas_datastore_v1.datastore_1.status 8 | } 9 | 10 | output "db_user" { 11 | value = selectel_dbaas_user_v1.user_1.name 12 | } 13 | 14 | output "db_user_password" { 15 | value = selectel_dbaas_user_v1.user_1.password 16 | } 17 | 18 | output "db_name" { 19 | value = selectel_dbaas_database_v1.database_1.name 20 | } 21 | 22 | output "master_host" { 23 | value = selectel_dbaas_datastore_v1.datastore_1.connections["master"] 24 | } 25 | -------------------------------------------------------------------------------- /modules/cloud/server_group/README.EN.md: -------------------------------------------------------------------------------- 1 | # Server group 2 | 3 | Terraform module for creating a server group. 4 | 5 | ## Variables 6 | 7 | * `name` - A unique name for the server group. 8 | * `policies` - The set of policies for the server group. 9 | 10 | ## Policies 11 | 12 | * `anti-affinity` - Hard anti-affinity. All instances/servers launched in this group will be hosted on different compute nodes 13 | * `soft-anti-affinity` - Soft anti-affinity. All instances/servers launched in this group will be hosted on different compute nodes if possible, but if not possible they still will be scheduled instead of failure. 14 | -------------------------------------------------------------------------------- /examples/dbaas/postgres_cluster/output.tf: -------------------------------------------------------------------------------- 1 | 2 | output "cluster_id" { 3 | value = selectel_dbaas_datastore_v1.datastore_1.id 4 | } 5 | 6 | output "cluster_status" { 7 | value = selectel_dbaas_datastore_v1.datastore_1.status 8 | } 9 | 10 | output "db_user" { 11 | value = selectel_dbaas_user_v1.user_1.name 12 | } 13 | 14 | output "db_user_password" { 15 | value = selectel_dbaas_user_v1.user_1.password 16 | } 17 | 18 | output "db_name" { 19 | value = selectel_dbaas_database_v1.database_1.name 20 | } 21 | 22 | output "master_host" { 23 | value = selectel_dbaas_datastore_v1.datastore_1.connections["master"] 24 | } 25 | -------------------------------------------------------------------------------- /modules/cloud/flavor/README.md: -------------------------------------------------------------------------------- 1 | # Flavor 2 | 3 | Terraform module for creating a single OpenStack Compute V2 Flavor. 4 | 5 | ## Variables 6 | 7 | * `flavor_name` - Name of the OpenStack Compute Flavor (Default: "flavor_1"). 8 | 9 | * `flavor_vcpus` - Amount of VCPUs for the OpenStack Compute Flavor 10 | (Default: 2). 11 | 12 | * `flavor_ram_mb` - Amount of RAM for the OpenStack Compute Flavor 13 | (Default: 2048). 14 | 15 | * `flavor_local_disk_gb` - Amount of GB for local storage of the OpenStack 16 | Compute Flavor (Default: 0). 17 | 18 | ## Outputs 19 | 20 | * `flavor_id` - ID of the created OpenStack Flavor. -------------------------------------------------------------------------------- /examples/cloud/server_local_root_disk/README.md: -------------------------------------------------------------------------------- 1 | # Server with local root disk 2 | 3 | This environment will create a Selectel Cloud project with a single server booted 4 | from a local disk. 5 | 6 | ## Example usage 7 | 8 | ```sh 9 | terraform init 10 | 11 | env \ 12 | TF_VAR_username=USER \ 13 | TF_VAR_password=PASSWORD \ 14 | TF_VAR_domain_name=ACCOUNT_ID \ 15 | TF_VAR_user_password=xxx \ 16 | terraform apply -target=module.project_with_user 17 | 18 | env \ 19 | TF_VAR_username=USER \ 20 | TF_VAR_password=PASSWORD \ 21 | TF_VAR_domain_name=ACCOUNT_ID \ 22 | TF_VAR_user_password=xxx \ 23 | terraform apply 24 | ``` 25 | -------------------------------------------------------------------------------- /examples/cloud/several_servers_one_network/README.md: -------------------------------------------------------------------------------- 1 | # Multiple servers in the same network 2 | 3 | This environment will create a Selectel Cloud project with multiple servers in the same network. 4 | 5 | ## Example usage 6 | 7 | ```sh 8 | terraform init 9 | 10 | env \ 11 | TF_VAR_username=USER \ 12 | TF_VAR_password=PASSWORD \ 13 | TF_VAR_domain_name=ACCOUNT_ID \ 14 | TF_VAR_user_password=xxx \ 15 | terraform apply -target=module.project_with_user 16 | 17 | env \ 18 | TF_VAR_username=USER \ 19 | TF_VAR_password=PASSWORD \ 20 | TF_VAR_domain_name=ACCOUNT_ID \ 21 | TF_VAR_user_password=xxx \ 22 | terraform apply 23 | ``` 24 | -------------------------------------------------------------------------------- /modules/cloud/server_local_and_remote_disks/vars.tf: -------------------------------------------------------------------------------- 1 | variable "server_vcpus" { 2 | default = 4 3 | } 4 | 5 | variable "server_ram_mb" { 6 | default = 8192 7 | } 8 | 9 | variable "server_root_disk_gb" { 10 | default = 8 11 | } 12 | 13 | variable "server_second_disk_gb" { 14 | default = 5 15 | } 16 | 17 | variable "server_second_volume_type" { 18 | default = "fast.ru-9a" 19 | } 20 | 21 | variable "server_name" { 22 | default = "server_1" 23 | } 24 | 25 | variable "server_image_name" {} 26 | 27 | variable "server_zone" { 28 | default = "ru-9a" 29 | } 30 | 31 | variable "server_ssh_key" {} 32 | 33 | variable "server_ssh_key_user" {} 34 | -------------------------------------------------------------------------------- /modules/cloud/single_instance/vars.tf: -------------------------------------------------------------------------------- 1 | variable "private_network_id" {} 2 | 3 | variable "private_subnet_id" {} 4 | 5 | variable "public_network_id" {} 6 | 7 | variable "public_subnet_id" {} 8 | 9 | variable "server_image_name" {} 10 | 11 | variable "keypair_name" {} 12 | 13 | variable "server_name" { 14 | default = "server" 15 | } 16 | 17 | variable "server_zone" { 18 | default = "ru-9a" 19 | } 20 | 21 | variable "server_vcpus" { 22 | default = 1 23 | } 24 | 25 | variable "server_ram_mb" { 26 | default = 1024 27 | } 28 | 29 | variable "server_root_disk_gb" { 30 | default = 8 31 | } 32 | 33 | variable "user_data" { 34 | default = "" 35 | } 36 | -------------------------------------------------------------------------------- /modules/cloud/share/vars.tf: -------------------------------------------------------------------------------- 1 | variable "base_name" { 2 | default = "share_example" 3 | } 4 | 5 | variable "neutron_net_id" {} 6 | 7 | variable "neutron_subnet_id" {} 8 | 9 | variable "share_size" { 10 | default = 50 11 | type = number 12 | } 13 | 14 | variable "share_proto" { 15 | default = "NFS" 16 | type = string 17 | validation { 18 | condition = contains(["NFS", "CIFS"], var.share_proto) 19 | error_message = "Valid values for var: share_proto are (NFS, CIFS)." 20 | } 21 | } 22 | 23 | variable "share_type" { 24 | default = "basic.ru-9a" 25 | type = string 26 | } 27 | 28 | variable "share_allowed_ip" { 29 | default = "0.0.0.0/0" 30 | } 31 | -------------------------------------------------------------------------------- /examples/cloud/server_local_root_disk_with_security_group/README.md: -------------------------------------------------------------------------------- 1 | # Server with local root disk 2 | 3 | This environment will create a Selectel Cloud project with a single server booted 4 | from a local disk with security group. 5 | 6 | ## Example usage 7 | 8 | ```sh 9 | terraform init 10 | 11 | env \ 12 | TF_VAR_username=USER \ 13 | TF_VAR_password=PASSWORD \ 14 | TF_VAR_domain_name=ACCOUNT_ID \ 15 | TF_VAR_user_password=xxx \ 16 | terraform apply -target=module.project_with_user 17 | 18 | env \ 19 | TF_VAR_username=USER \ 20 | TF_VAR_password=PASSWORD \ 21 | TF_VAR_domain_name=ACCOUNT_ID \ 22 | TF_VAR_user_password=xxx \ 23 | terraform apply 24 | ``` 25 | -------------------------------------------------------------------------------- /modules/cloud/lb_components_https/README.md: -------------------------------------------------------------------------------- 1 | # HTTPS компоненты для создания балансировщиков 2 | 3 | Модуль создания HTTPS компонентов балансировщика: 4 | - listener 5 | - pool 6 | - monitor 7 | - member 8 | 9 | ## Принимаемые переменные 10 | 11 | * `loadbalancer_id` - UUID балансировщика, для которого будут созданы компоненты. 12 | 13 | * `server_access_ips` - IP адреса серверов, на которые будет направляться трафик. 14 | 15 | * `lb_components` - Переменные компонентов балансировщика. 16 | 17 | * `vip_subnet_id` - UUID подсети, в которой находятся серверы. 18 | 19 | * `tls_container_ref` - UUID контейнера с сертификатом, хранящегося в менеджере секретов Селектел. 20 | -------------------------------------------------------------------------------- /modules/cloud/subnet/README.md: -------------------------------------------------------------------------------- 1 | # Subnet 2 | 3 | Terraform module for creating a single Selectel Cloud Subnet. 4 | 5 | ## Variables 6 | 7 | * `subnet_project_id` - Project of the Selectel Cloud Subnet. 8 | 9 | * `subnet_region` - Region of the Selectel Cloud Subnet. 10 | 11 | * `subnet_prefix_length` - Prefix length of the Selectel Cloud Subnet. 12 | 13 | * `subnet_ip_version` - IP version of the Selectel Cloud Subnet. 14 | 15 | ## Outputs 16 | 17 | * `network_id` - ID of the created Selectel Cloud public subnet's Network. 18 | 19 | * `subnet_id` - ID of the created Selectel Cloud Subnet. 20 | 21 | * `subnet_cidr` - CIDR of the created Selectel Cloud Subnet. 22 | -------------------------------------------------------------------------------- /examples/cloud/server_local_and_remote_disks/README.md: -------------------------------------------------------------------------------- 1 | # Server with local root disk 2 | 3 | This environment will create a Selectel Cloud project with a single server booted 4 | from a local disk with additional remote disk attached. 5 | 6 | ## Example usage 7 | 8 | ```sh 9 | terraform init 10 | 11 | env \ 12 | TF_VAR_username=USER \ 13 | TF_VAR_password=PASSWORD \ 14 | TF_VAR_domain_name=ACCOUNT_ID \ 15 | TF_VAR_user_password=xxx \ 16 | terraform apply -target=module.project_with_user 17 | 18 | env \ 19 | TF_VAR_username=USER \ 20 | TF_VAR_password=PASSWORD \ 21 | TF_VAR_domain_name=ACCOUNT_ID \ 22 | TF_VAR_user_password=xxx \ 23 | terraform apply 24 | ``` 25 | -------------------------------------------------------------------------------- /modules/cloud/nat/README.md: -------------------------------------------------------------------------------- 1 | # NAT 2 | 3 | Terraform module to create a NAT objects in project 4 | 5 | ## Variables 6 | 7 | * `router_external_net_name` - OpenStack Networking external Network reference (Default: "external-network"). 8 | 9 | * `router_name` - OpenStack Networking Router name (Default: "router_1"). 10 | 11 | * `network_name` - OpenStack Networking Network name (Default: "network_1"). 12 | 13 | * `subnet_cidr` - OpenStack Networking Subnet CIDR (Default: "192.168.0.0/24"). 14 | 15 | ## Outputs 16 | 17 | * `router_id` - UUID of the created router. 18 | 19 | * `network_id` - UUID of the created network. 20 | 21 | * `subnet_id` - UUID of the created subnet. -------------------------------------------------------------------------------- /examples/cloud/several_servers_routing/vars.tf: -------------------------------------------------------------------------------- 1 | variable "username" {} 2 | 3 | variable "password" {} 4 | 5 | variable "domain_name" {} 6 | 7 | variable "user_password" {} 8 | 9 | variable "project_name" { 10 | default = "routing_example_project" 11 | } 12 | 13 | variable "project_user_name" { 14 | default = "routing_example_user" 15 | } 16 | 17 | variable "keypair_name" { 18 | default = "routing_example_keypair" 19 | } 20 | 21 | variable "auth_url" { 22 | default = "https://cloud.api.selcloud.ru/identity/v3" 23 | } 24 | 25 | variable "target_zone" { 26 | default = "ru-9a" 27 | } 28 | 29 | variable "server_image_name" { 30 | default = "Ubuntu 22.04 LTS 64-bit" 31 | } 32 | -------------------------------------------------------------------------------- /modules/cloud/project_with_user/main.tf: -------------------------------------------------------------------------------- 1 | module "project" { 2 | source = "../project" 3 | project_name = var.project_name 4 | } 5 | resource "selectel_iam_serviceuser_v1" "serviceuser_1" { 6 | name = var.project_user_name 7 | password = var.user_password 8 | role { 9 | role_name = "member" 10 | scope = "project" 11 | project_id = module.project.project_id 12 | } 13 | } 14 | 15 | module "keypair" { 16 | count = var.keypair_name != "" ? 1 : 0 17 | source = "../keypair" 18 | 19 | keypair_name = var.keypair_name 20 | keypair_public_key = file("~/.ssh/id_rsa.pub") 21 | keypair_user_id = selectel_iam_serviceuser_v1.serviceuser_1.id 22 | } 23 | -------------------------------------------------------------------------------- /examples/cloud/server_remote_root_disk_two_ports/README.md: -------------------------------------------------------------------------------- 1 | # Server with remote root disk 2 | 3 | This environment will create a Selectel Cloud project with a single server booted 4 | from a remote disk that has two network ports in different subnets. 5 | 6 | ## Example usage 7 | 8 | ```sh 9 | terraform init 10 | 11 | env \ 12 | TF_VAR_username=USER \ 13 | TF_VAR_password=PASSWORD \ 14 | TF_VAR_domain_name=ACCOUNT_ID \ 15 | TF_VAR_user_password=xxx \ 16 | terraform apply -target=module.project_with_user 17 | 18 | env \ 19 | TF_VAR_username=USER \ 20 | TF_VAR_password=PASSWORD \ 21 | TF_VAR_domain_name=ACCOUNT_ID \ 22 | TF_VAR_user_password=xxx \ 23 | terraform apply 24 | ``` 25 | -------------------------------------------------------------------------------- /modules/mks/cluster/main.tf: -------------------------------------------------------------------------------- 1 | resource "selectel_mks_cluster_v1" "cluster_1" { 2 | name = var.cluster_name 3 | project_id = var.project_id 4 | region = var.region 5 | kube_version = var.kube_version 6 | enable_autorepair = var.enable_autorepair 7 | enable_patch_version_auto_upgrade = var.enable_patch_version_auto_upgrade 8 | network_id = var.network_id 9 | subnet_id = var.subnet_id 10 | maintenance_window_start = var.maintenance_window_start 11 | enable_audit_logs = var.enable_audit_logs 12 | } 13 | -------------------------------------------------------------------------------- /modules/cloud/share/README.md: -------------------------------------------------------------------------------- 1 | # Share 2 | 3 | Terraform module for creating a share. 4 | 5 | ## Variables 6 | 7 | **Required:** 8 | 9 | * `neutron_net_id` - UUID of the created network. 10 | 11 | * `neutron_subnet_id` - UUID of the created subnet. 12 | 13 | **Optional:** 14 | 15 | * `base_name` - Base name for resources. 16 | 17 | * `share_size` - Share size in gigabytes. 18 | 19 | * `share_proto` - Share protocol (NFS or CIFS). 20 | 21 | * `share_type` - Share type (basic, universal or fast). 22 | 23 | * `share_allowed_ip` - IP access rule. 24 | 25 | ## Outputs 26 | 27 | * `share_id` - ID of the created share. 28 | 29 | * `share_export_location_path` - share mount path. 30 | -------------------------------------------------------------------------------- /modules/cloud/server_remote_root_disk_with_gpu/vars.tf: -------------------------------------------------------------------------------- 1 | variable "flavor_id" { 2 | default = "3031" 3 | } 4 | 5 | variable "server_root_disk_gb" { 6 | default = 8 7 | } 8 | 9 | variable "server_volume_type" { 10 | default = "fast.ru-9a" 11 | } 12 | 13 | variable "server_name" { 14 | default = "server_1" 15 | } 16 | 17 | variable "server_image_name" {} 18 | 19 | variable "server_zone" { 20 | default = "ru-9a" 21 | } 22 | 23 | variable "server_ssh_key" {} 24 | 25 | variable "server_ssh_key_user" {} 26 | 27 | variable "server_license_type" { 28 | default = "" 29 | } 30 | variable "server_group_id" { 31 | default = "" 32 | } 33 | 34 | variable "server_preemptible_tag" { 35 | default = [] 36 | } 37 | -------------------------------------------------------------------------------- /modules/cloud/routing_selvpc/README.md: -------------------------------------------------------------------------------- 1 | # Routing example Selectel section 2 | 3 | Terraform module for creating Selectel resources 4 | Project, user, keypair, /29 public subnet 5 | 6 | ## Variables 7 | 8 | * `user_name` - Name of the user. 9 | 10 | * `user_password` - Password of the user. 11 | 12 | * `project_name` - Name of the project. 13 | 14 | * `keypair_name` - Name of the ssh key. 15 | 16 | * `target_zone` - Target zone for public subnet. 17 | 18 | ## Outputs 19 | 20 | * `selvpc_network_id` - ID of the created Selectel Cloud Network. 21 | 22 | * `selvpc_subnet_id` - ID of the created Selectel Cloud Subnet. 23 | 24 | * `selvpc_subnet_cidr` - CIDR of the created Selectel Cloud Subnet. 25 | -------------------------------------------------------------------------------- /modules/mks/nodegroup_local_disk/vars.tf: -------------------------------------------------------------------------------- 1 | variable "cluster_id" {} 2 | 3 | variable "project_id" {} 4 | 5 | variable "region" {} 6 | 7 | variable "availability_zone" {} 8 | 9 | variable "nodes_count" { 10 | default = 1 11 | } 12 | 13 | variable "keypair_name" { 14 | default = "" 15 | } 16 | 17 | variable "affinity_policy" { 18 | default = "" 19 | } 20 | 21 | variable "cpus" { 22 | default = 1 23 | } 24 | 25 | variable "ram_mb" { 26 | default = 4096 27 | } 28 | 29 | variable "volume_gb" { 30 | default = 20 31 | } 32 | 33 | variable "user_data" { 34 | default = "" 35 | } 36 | 37 | variable "install_nvidia_device_plugin" { 38 | default = false 39 | } 40 | 41 | variable "labels" {} 42 | 43 | variable "taints" {} 44 | -------------------------------------------------------------------------------- /modules/cloud/lb_sngl/README.md: -------------------------------------------------------------------------------- 1 | # Модуль создания балансировщика базового типа без резервирования и с правилами TCP и UDP 2 | 3 | Модуль создания балансировщика, его TCP/UDP компонентов и подключения к нему плавающего IP адреса. 4 | 5 | ## Принимаемые переменные 6 | 7 | * `lb_sngl_name` - Имя балансировщика. 8 | 9 | * `lb_sngl_components` - Переменные компонентов балансировщика. 10 | 11 | * `lb_sngl_flavor_name` - Имя конфигурации балансировщика. 12 | 13 | * `lb_public_subnet_id` - UUID сети, в которой будет создан балансировщик. 14 | 15 | * `lb_servers_access_ips` - IP адреса серверов, на которые будет направляться трафик. 16 | 17 | ## Выходные переменные 18 | 19 | * `lb_floating` - Публичный IP адрес созданного балансировщика. 20 | -------------------------------------------------------------------------------- /modules/cloud/lb_active_standby/README.md: -------------------------------------------------------------------------------- 1 | # Модуль создания балансировщика базового типа с резервированием и правилом HTTP 2 | 3 | Модуль создания балансировщика и его HTTP компонентов с подключениемм к нему плавающего IP адреса. 4 | 5 | ## Принимаемые переменные 6 | 7 | * `lb_active_name` - Имя балансировщика. 8 | 9 | * `lb_active_components` - Переменные компонентов балансировщика. 10 | 11 | * `lb_active_flavor_name` - Имя конфигурации балансировщика. 12 | 13 | * `lb_private_subnet_id` - UUID сети, в которй будет создан балансировщик. 14 | 15 | * `lb_servers_access_ips` - IP адреса серверов, на которые будет направляться трафик. 16 | 17 | ## Выходные переменные 18 | 19 | * `lb_floating` - Публичный IP адрес созданного балансировщика. 20 | -------------------------------------------------------------------------------- /modules/mks/nodegroup/vars.tf: -------------------------------------------------------------------------------- 1 | variable "cluster_id" {} 2 | 3 | variable "project_id" {} 4 | 5 | variable "region" {} 6 | 7 | variable "availability_zone" {} 8 | 9 | variable "nodes_count" { 10 | default = 1 11 | } 12 | 13 | variable "keypair_name" { 14 | default = "" 15 | } 16 | 17 | variable "affinity_policy" { 18 | default = "" 19 | } 20 | 21 | variable "cpus" { 22 | default = 1 23 | } 24 | 25 | variable "ram_mb" { 26 | default = 4096 27 | } 28 | 29 | variable "volume_gb" { 30 | default = 20 31 | } 32 | 33 | variable "volume_type" {} 34 | 35 | variable "user_data" { 36 | default = "" 37 | } 38 | 39 | variable "install_nvidia_device_plugin" { 40 | default = false 41 | } 42 | 43 | variable "labels" {} 44 | 45 | variable "taints" {} 46 | -------------------------------------------------------------------------------- /modules/cloud/multiple_servers_with_fwaas/README.md: -------------------------------------------------------------------------------- 1 | # Несколько серверов с сетевой инфраструктурой и файерволом 2 | 3 | Терраформ модуль для создания нескольких OpenStack Compute V2 серверов с сетевой инфраструктурой и файерволом 4 | 5 | ## Переменные 6 | 7 | * `server_image_name` - Имя образа используемого для создания диска. 8 | 9 | * `server_ssh_key` - Имя ключа SSH. 10 | 11 | * `server_ssh_key_user` - Имя владельца ключа SSH. 12 | 13 | * `server_root_disk_gb` - Объем создаваемого диска в гигабайтах. 14 | 15 | * `server_volume_type` - Тип создаваемого диска. 16 | 17 | * `server_name` - Имя создаваемого сервера. 18 | 19 | * `server_zone` - Зона доступности, в которой будет создан сервер. 20 | 21 | * `server_flavor_id` - Идентификатор конфигурации создаваемого сервера. 22 | -------------------------------------------------------------------------------- /modules/cloud/share/main.tf: -------------------------------------------------------------------------------- 1 | resource "openstack_sharedfilesystem_sharenetwork_v2" "sharenetwork_1" { 2 | name = "${var.base_name}_sharenetwork" 3 | neutron_net_id = var.neutron_net_id 4 | neutron_subnet_id = var.neutron_subnet_id 5 | } 6 | 7 | resource "openstack_sharedfilesystem_share_v2" "share_1" { 8 | name = "${var.base_name}_share" 9 | size = var.share_size 10 | share_type = var.share_type 11 | share_proto = var.share_proto 12 | share_network_id = openstack_sharedfilesystem_sharenetwork_v2.sharenetwork_1.id 13 | } 14 | 15 | resource "openstack_sharedfilesystem_share_access_v2" "shareaccess_1" { 16 | access_level = "rw" 17 | access_to = var.share_allowed_ip 18 | access_type = "ip" 19 | share_id = openstack_sharedfilesystem_share_v2.share_1.id 20 | } 21 | -------------------------------------------------------------------------------- /modules/cloud/lb_active_standby_with_certificate/README.md: -------------------------------------------------------------------------------- 1 | # Модуль создания балансировщика базового типа с резервированием и правилом HTTPS 2 | 3 | Модуль создания балансировщика, его HTTPS компонентов и подключения к нему плавающего IP адреса. 4 | 5 | ## Принимаемые переменные 6 | 7 | * `lb_active_name` - Имя балансировщика. 8 | 9 | * `lb_active_components` - Переменные компонентов балансировщика. 10 | 11 | * `lb_active_flavor_name` - Имя конфигурации балансировщика. 12 | 13 | * `lb_private_subnet_id` - UUID сети, в которй будет создан балансировщик. 14 | 15 | * `lb_servers_access_ips` - IP адреса серверов, на которые будет направляться трафик. 16 | 17 | * `tls_container_ref` - UUID контейнера сертификата. 18 | 19 | ## Выходные переменные 20 | 21 | * `lb_floating` - Публичный IP адрес созданного балансировщика. 22 | -------------------------------------------------------------------------------- /modules/cloud/server_remote_root_disk/vars.tf: -------------------------------------------------------------------------------- 1 | variable "server_vcpus" { 2 | default = 4 3 | } 4 | 5 | variable "server_ram_mb" { 6 | default = 8192 7 | } 8 | 9 | variable "server_root_disk_gb" { 10 | default = 8 11 | } 12 | 13 | variable "server_volume_type" { 14 | default = "fast.ru-9a" 15 | } 16 | 17 | variable "server_volume_metadata" { 18 | default = {} 19 | } 20 | 21 | variable "server_name" { 22 | default = "server_1" 23 | } 24 | 25 | variable "server_image_name" {} 26 | 27 | variable "server_zone" { 28 | default = "ru-9a" 29 | } 30 | 31 | variable "server_ssh_key" {} 32 | 33 | variable "server_ssh_key_user" {} 34 | 35 | variable "server_license_type" { 36 | default = "" 37 | } 38 | variable "server_group_id" { 39 | default = "" 40 | } 41 | 42 | variable "server_preemptible_tag" { 43 | default = [] 44 | } 45 | -------------------------------------------------------------------------------- /modules/cloud/routing_os/README.md: -------------------------------------------------------------------------------- 1 | # Routing example Openstack section 2 | 3 | Terraform module for creating Openstack resources 4 | Networking - routers, networks, subnets, ports, routes 5 | Compute - instances, volumes 6 | 7 | ## Variables 8 | 9 | * `selvpc_network_id` - ID of the Selectel Cloud subnet's Network created at Selectel section. 10 | 11 | * `selvpc_subnet_id` - ID of the Selectel Cloud Subnet created at Selectel section. 12 | 13 | * `selvpc_subnet_cidr` - CIDR of the Selectel Cloud Subnet created at Selectel section. 14 | 15 | * `keypair_name` - Name of the ssh key. 16 | 17 | * `target_zone` - Target zone for resources creation. 18 | 19 | * `server_image_name` - Name of the OS image. 20 | 21 | ## Outputs 22 | 23 | * `proxy_server_ip` - IP address of the PROXY SERVER. 24 | 25 | * `main_server_ip` - IP address of the MAIN SERVER. 26 | -------------------------------------------------------------------------------- /modules/cloud/server_local_root_disk/README.md: -------------------------------------------------------------------------------- 1 | # Server local root disk 2 | 3 | Terraform module for creating a single OpenStack Compute V2 Instance with a 4 | local root volume. 5 | 6 | ## Variables 7 | 8 | * `server_vcpus` - Server virtual CPUs (Default: 4). 9 | 10 | * `server_ram_mb` - Server RAM (MB) (Default: 8192). 11 | 12 | * `server_root_disk_gb` - Size of the root disk (GB) (Default: 8). 13 | 14 | * `server_name` - Name of the server (Default: "server_1") 15 | 16 | * `server_image_name` - Name of the image to find to create a server. 17 | 18 | * `server_zone` - Server availability zone. 19 | 20 | * `server_ssh_key` - SSH keypair name. 21 | 22 | * `server_ssh_key_user` - Owner of the SSH keypair. 23 | 24 | ## Outputs 25 | 26 | * `server_id` - ID of the created OpenStack Server. 27 | 28 | * `server_port_id` - ID of the Server's port. 29 | -------------------------------------------------------------------------------- /examples/cloud/several_servers_with_networking_and_fwaas/README.md: -------------------------------------------------------------------------------- 1 | # Пример создания нескольких серверов с сетевым загрузочным диском, сетевой инфраструктурой и файерволом. 2 | 3 | Используется два terraform провайдера: 4 | - Selectel - для создания проекта, пользователя и роли. 5 | - Openstack - для создания инфраструктуры. 6 | 7 | ## Внимание! 8 | Применение этого примера в Облаке Selectel возможно только после выхода FWaaS из альфа тестирования. 9 | 10 | ## Пример запуска используя переменные окружения 11 | 12 | ```sh 13 | terraform init 14 | 15 | env \ 16 | TF_VAR_username=USER \ 17 | TF_VAR_password=PASSWORD \ 18 | TF_VAR_domain_name=ACCOUNT_ID \ 19 | TF_VAR_user_password=xxx \ 20 | terraform apply 21 | ``` 22 | 23 | ## Пример запуска используя файл с чувствительными данными 24 | 25 | ```sh 26 | terraform init 27 | 28 | terraform apply -var-file=secrets.tfvars 29 | ``` 30 | -------------------------------------------------------------------------------- /modules/cloud/server_local_root_disk_with_security_group/README.md: -------------------------------------------------------------------------------- 1 | # Server local root disk 2 | 3 | Terraform module for creating a single OpenStack Compute V2 Instance with a 4 | local root volume. 5 | 6 | ## Variables 7 | 8 | * `server_vcpus` - Server virtual CPUs (Default: 4). 9 | 10 | * `server_ram_mb` - Server RAM (MB) (Default: 8192). 11 | 12 | * `server_root_disk_gb` - Size of the root disk (GB) (Default: 8). 13 | 14 | * `server_name` - Name of the server (Default: "server_1") 15 | 16 | * `server_image_name` - Name of the image to find to create a server. 17 | 18 | * `server_zone` - Server availability zone. 19 | 20 | * `server_ssh_key` - SSH keypair name. 21 | 22 | * `server_ssh_key_user` - Owner of the SSH keypair. 23 | 24 | ## Outputs 25 | 26 | * `server_id` - ID of the created OpenStack Server. 27 | 28 | * `server_port_id` - ID of the Server's port. 29 | -------------------------------------------------------------------------------- /examples/dbaas/get_params/README.md: -------------------------------------------------------------------------------- 1 | # Получение списка переменных сервера 2 | 3 | Просмотр значений с апи в регионе - список поддерживаемых баз данных и версия,список flavor, список расширений postgres. 4 | 5 | # Запуск 6 | 7 | ## Подготовка 8 | ```bash 9 | cp vars.tfvars.example vars.tfvars 10 | 11 | # Далее нужно отредактировать vars.tfvars 12 | vim vars.tfvars 13 | ``` 14 | 15 | ```ini 16 | # Сервисный пользователь, https://my.selectel.ru/profile/users_management/users 17 | username="USER" 18 | password="PASSWORD" 19 | # ID аккаунта 20 | domain_name="ACCOUNT_ID" 21 | # ID проекта Облачной Платформы 22 | project_id="PROJECT_ID" 23 | # Регион проекта Облачной Платформы 24 | region="REGION" 25 | 26 | ``` 27 | 28 | ## Получение серверных значений 29 | ```bash 30 | # Инициализация терраформ-окружения 31 | terraform init 32 | # Применение манифеста 33 | terraform apply --var-file="vars.tfvars" 34 | ``` 35 | -------------------------------------------------------------------------------- /modules/cloud/nat/main.tf: -------------------------------------------------------------------------------- 1 | data "openstack_networking_network_v2" "external_net" { 2 | name = var.router_external_net_name 3 | external = true 4 | } 5 | 6 | resource "openstack_networking_router_v2" "router_1" { 7 | name = var.router_name 8 | external_network_id = data.openstack_networking_network_v2.external_net.id 9 | } 10 | 11 | resource "openstack_networking_network_v2" "network_1" { 12 | name = var.network_name 13 | } 14 | 15 | resource "openstack_networking_subnet_v2" "subnet_1" { 16 | network_id = openstack_networking_network_v2.network_1.id 17 | dns_nameservers = var.dns_nameservers 18 | name = var.subnet_cidr 19 | cidr = var.subnet_cidr 20 | } 21 | 22 | resource "openstack_networking_router_interface_v2" "router_interface_1" { 23 | router_id = openstack_networking_router_v2.router_1.id 24 | subnet_id = openstack_networking_subnet_v2.subnet_1.id 25 | } 26 | -------------------------------------------------------------------------------- /examples/cloud/several_servers_with_networking_and_fwaas/vars.tf: -------------------------------------------------------------------------------- 1 | variable "username" {} 2 | 3 | variable "password" {} 4 | 5 | variable "domain_name" {} 6 | 7 | variable "user_password" {} 8 | 9 | variable "project_name" { 10 | default = "fwaas_project" 11 | } 12 | 13 | variable "project_user_name" { 14 | default = "fwaas_user" 15 | } 16 | 17 | variable "auth_url" { 18 | default = "https://cloud.api.selcloud.ru/identity/v3" 19 | } 20 | 21 | variable "region" { 22 | default = "ru-9" 23 | } 24 | 25 | variable "server_name" { 26 | default = "tf_server" 27 | } 28 | 29 | variable "server_zone" { 30 | default = "ru-9a" 31 | } 32 | 33 | variable "server_volume_type" { 34 | default = "fast.ru-9a" 35 | } 36 | 37 | variable "server_flavor_id" { 38 | default = "1011" 39 | } 40 | 41 | variable "server_image_name" { 42 | default = "Ubuntu 22.04 LTS 64-bit" 43 | } 44 | 45 | variable "server_root_disk_gb" { 46 | default = 8 47 | } 48 | -------------------------------------------------------------------------------- /examples/cloud/several_servers_routing/README.md: -------------------------------------------------------------------------------- 1 | # Routing test environment 2 | 3 | This environment will create a Selectel Cloud user and project with multiple servers, routers, networks, subnets, routes at routers and subnets. 4 | 5 | ## Example usage 6 | 7 | ```sh 8 | terraform init 9 | 10 | env \ 11 | TF_VAR_username=USER \ 12 | TF_VAR_password=PASSWORD \ 13 | TF_VAR_domain_name=ACCOUNT_ID \ 14 | TF_VAR_user_password=xxx \ 15 | terraform apply 16 | ``` 17 | 18 | ## OR use secrets.tfvars 19 | 20 | ```sh 21 | terraform apply -var-file secrets.tfvars 22 | ``` 23 | 24 | ## Check routes 25 | ```sh 26 | ssh -J root@$(terraform output -raw proxy_server_ip) root@$(terraform output -raw main_server_ip) route -n 27 | ``` 28 | 29 | ## Scheme 30 | 31 | ![plot](./scheme/terraform_routes.png) 32 | 33 | ## Outputs 34 | 35 | * `main_server_ip` - IP address of the main server. 36 | 37 | * `proxy_server_ip` - IP address of the proxy server. 38 | -------------------------------------------------------------------------------- /examples/cloud/server_windows/README.md: -------------------------------------------------------------------------------- 1 | # Пример создания проекта, сервера с лицензией Windows. 2 | 3 | Используется два terraform провайдера: 4 | - Selectel - для создания проекта, пользователя и роли. 5 | - Openstack - для создания инстансов, сетевой инфраструктуры, двух балансировщиков 6 | 7 | ## Содержание secrets.tfvars 8 | 9 | * `username` - Имя сервисного пользователя. 10 | * `password` - Пароль сервисного пользователя. 11 | * `domain_name` - ID аккаунта. 12 | * `user_password` - Пароль пользователя, который будет создан. 13 | 14 | ## Пример запуска используя переменные окружения 15 | 16 | ```sh 17 | terraform init 18 | 19 | env \ 20 | TF_VAR_username=USER \ 21 | TF_VAR_password=PASSWORD \ 22 | TF_VAR_domain_name=ACCOUNT_ID \ 23 | TF_VAR_user_password=xxx \ 24 | terraform apply 25 | ``` 26 | 27 | 28 | ## Выходные переменные 29 | 30 | * `server_id` - UUID созданного сервера. 31 | 32 | * `floating_ip` - Публичный IP адрес сервера. 33 | -------------------------------------------------------------------------------- /examples/cloud/server_local_root_disk/vars.tf: -------------------------------------------------------------------------------- 1 | variable "username" {} 2 | 3 | variable "password" {} 4 | 5 | variable "domain_name" {} 6 | 7 | variable "project_name" { 8 | default = "tf_project" 9 | } 10 | 11 | variable "project_user_name" { 12 | default = "tf_user" 13 | } 14 | 15 | variable "user_password" {} 16 | 17 | variable "keypair_name" { 18 | default = "tf_keypair" 19 | } 20 | 21 | variable "auth_url" { 22 | default = "https://cloud.api.selcloud.ru/identity/v3" 23 | } 24 | 25 | variable "region" { 26 | default = "ru-9" 27 | } 28 | 29 | variable "server_name" { 30 | default = "tf_server" 31 | } 32 | 33 | variable "server_zone" { 34 | default = "ru-9a" 35 | } 36 | 37 | variable "server_vcpus" { 38 | default = 4 39 | } 40 | 41 | variable "server_ram_mb" { 42 | default = 8192 43 | } 44 | 45 | variable "server_root_disk_gb" { 46 | default = 8 47 | } 48 | 49 | variable "server_image_name" { 50 | default = "Ubuntu 22.04 LTS 64-bit" 51 | } 52 | -------------------------------------------------------------------------------- /examples/cloud/server_local_root_disk_with_security_group/vars.tf: -------------------------------------------------------------------------------- 1 | variable "username" {} 2 | 3 | variable "password" {} 4 | 5 | variable "domain_name" {} 6 | 7 | variable "project_name" { 8 | default = "tf_project" 9 | } 10 | 11 | variable "project_user_name" { 12 | default = "tf_user" 13 | } 14 | 15 | variable "user_password" {} 16 | 17 | variable "keypair_name" { 18 | default = "tf_keypair" 19 | } 20 | 21 | variable "auth_url" { 22 | default = "https://cloud.api.selcloud.ru/identity/v3" 23 | } 24 | 25 | variable "region" { 26 | default = "ru-9" 27 | } 28 | 29 | variable "server_name" { 30 | default = "tf_server" 31 | } 32 | 33 | variable "server_zone" { 34 | default = "ru-9a" 35 | } 36 | 37 | variable "server_vcpus" { 38 | default = 4 39 | } 40 | 41 | variable "server_ram_mb" { 42 | default = 8192 43 | } 44 | 45 | variable "server_root_disk_gb" { 46 | default = 8 47 | } 48 | 49 | variable "server_image_name" { 50 | default = "Ubuntu 22.04 LTS 64-bit" 51 | } 52 | -------------------------------------------------------------------------------- /examples/cloud/server_remote_root_disk/vars.tf: -------------------------------------------------------------------------------- 1 | variable "username" {} 2 | 3 | variable "password" {} 4 | 5 | variable "domain_name" {} 6 | 7 | variable "project_name" { 8 | default = "tf_project" 9 | } 10 | 11 | variable "project_user_name" { 12 | default = "tf_user" 13 | } 14 | 15 | variable "user_password" {} 16 | 17 | variable "keypair_name" { 18 | default = "tf_keypair" 19 | } 20 | 21 | variable "auth_url" { 22 | default = "https://cloud.api.selcloud.ru/identity/v3" 23 | } 24 | 25 | variable "server_name" { 26 | default = "tf_server" 27 | } 28 | 29 | variable "server_zone" { 30 | default = "ru-9a" 31 | } 32 | 33 | variable "server_vcpus" { 34 | default = 4 35 | } 36 | 37 | variable "server_ram_mb" { 38 | default = 8192 39 | } 40 | 41 | variable "server_root_disk_gb" { 42 | default = 8 43 | } 44 | 45 | variable "server_volume_type" { 46 | default = "fast.ru-9a" 47 | } 48 | 49 | variable "server_image_name" { 50 | default = "Ubuntu 22.04 LTS 64-bit" 51 | } 52 | -------------------------------------------------------------------------------- /examples/cloud/preemptible_server/README.RU.md: -------------------------------------------------------------------------------- 1 | # Пример создания прерываемого сервера с сетевым загрузочным диском 2 | 3 | Используется два terraform провайдера: 4 | - Selectel - для создания проекта, пользователя и роли. 5 | - Openstack - для создания сервера с сетевым загрузочным диском. 6 | 7 | ## Внимание! 8 | Создание прерываемого сервера доступно только в ru-7a 9 | При использовании этого примера в других регионах будут созданы обычные сервера. 10 | 11 | ## Для создания прерываемого сервера используйте переменную server_preemptible_tag 12 | server_preemptible_tag = var.server_preemptible_tag 13 | 14 | ## Для смены прерываемого сервера на обычный используйте переменную server_no_preemptible_tag 15 | server_preemptible_tag = var.server_no_preemptible_tag 16 | 17 | ## Пример запуска используя переменные окружения 18 | 19 | ```sh 20 | terraform init 21 | 22 | env \ 23 | TF_VAR_username=USER \ 24 | TF_VAR_password=PASSWORD \ 25 | TF_VAR_domain_name=ACCOUNT_ID \ 26 | TF_VAR_user_password=xxx \ 27 | terraform apply 28 | ``` 29 | -------------------------------------------------------------------------------- /modules/cloud/server_remote_root_disk_two_ports/README.md: -------------------------------------------------------------------------------- 1 | # Server local root disk 2 | 3 | Terraform module for creating a single OpenStack Compute V2 Instance with two 4 | remote volumes. 5 | 6 | ## Variables 7 | 8 | * `server_vcpus` - Server virtual CPUs (Default: 4). 9 | 10 | * `server_ram_mb` - Server RAM (MB) (Default: 8192). 11 | 12 | * `server_volume_type` - Server remote root disk type (Default: "fast.ru-9a") 13 | 14 | * `server_root_disk_gb` - Size of the root disk (GB) (Default: 8). 15 | 16 | * `server_name` - Name of the server (Default: "server_1") 17 | 18 | * `server_image_name` - Name of the image to find to create a server. 19 | 20 | * `server_zone` - Server availability zone. 21 | 22 | * `server_ssh_key` - SSH keypair name. 23 | 24 | * `server_ssh_key_user` - Owner of the SSH keypair. 25 | 26 | ## Outputs 27 | 28 | * `server_id` - ID of the created OpenStack Server. 29 | 30 | * `server_port_id` - ID of the Server's port. 31 | 32 | * `server_root_volume_id` - ID of the Server's root volume. 33 | -------------------------------------------------------------------------------- /modules/mks/nodegroup/main.tf: -------------------------------------------------------------------------------- 1 | resource "selectel_mks_nodegroup_v1" "nodegroup_1" { 2 | cluster_id = var.cluster_id 3 | project_id = var.project_id 4 | region = var.region 5 | availability_zone = var.availability_zone 6 | nodes_count = var.nodes_count 7 | keypair_name = var.keypair_name 8 | affinity_policy = var.affinity_policy 9 | cpus = var.cpus 10 | ram_mb = var.ram_mb 11 | volume_gb = var.volume_gb 12 | volume_type = var.volume_type 13 | user_data = var.user_data 14 | install_nvidia_device_plugin = var.install_nvidia_device_plugin 15 | labels = var.labels 16 | dynamic "taints" { 17 | for_each = var.taints[*] 18 | content { 19 | key = taints.value["key"] 20 | value = taints.value["value"] 21 | effect = taints.value["effect"] 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /examples/cloud/server_remote_root_disk_two_ports/vars.tf: -------------------------------------------------------------------------------- 1 | variable "username" {} 2 | 3 | variable "password" {} 4 | 5 | variable "domain_name" {} 6 | 7 | variable "project_name" { 8 | default = "tf_project" 9 | } 10 | 11 | variable "project_user_name" { 12 | default = "tf_user" 13 | } 14 | 15 | variable "user_password" {} 16 | 17 | variable "keypair_name" { 18 | default = "tf_keypair" 19 | } 20 | 21 | variable "auth_url" { 22 | default = "https://cloud.api.selcloud.ru/identity/v3" 23 | } 24 | 25 | variable "region" { 26 | default = "ru-9" 27 | } 28 | 29 | variable "server_name" { 30 | default = "tf_server" 31 | } 32 | 33 | variable "server_zone" { 34 | default = "ru-9a" 35 | } 36 | 37 | variable "server_vcpus" { 38 | default = 4 39 | } 40 | 41 | variable "server_ram_mb" { 42 | default = 8192 43 | } 44 | 45 | variable "server_root_disk_gb" { 46 | default = 8 47 | } 48 | 49 | variable "server_volume_type" { 50 | default = "fast.ru-9a" 51 | } 52 | 53 | variable "server_image_name" { 54 | default = "Ubuntu 22.04 LTS 64-bit" 55 | } 56 | -------------------------------------------------------------------------------- /examples/cloud/server_remote_root_disk/README.md: -------------------------------------------------------------------------------- 1 | # Пример создания проекта, сервера с сетевым диском. 2 | 3 | Используется два terraform провайдера: 4 | - Selectel - для создания проекта, пользователя и роли. 5 | - Openstack - для создания инстансов, сетевой инфраструктуры, двух балансировщиков 6 | 7 | ## Содержание secrets.tfvars 8 | 9 | * `username` - Имя сервисного пользователя. 10 | * `password` - Пароль сервисного пользователя. 11 | * `domain_name` - ID аккаунта. 12 | * `user_password` - Пароль пользователя, который будет создан. 13 | 14 | ## Пример запуска используя переменные окружения 15 | 16 | ```sh 17 | terraform init 18 | 19 | env \ 20 | TF_VAR_username=USER \ 21 | TF_VAR_password=PASSWORD \ 22 | TF_VAR_domain_name=ACCOUNT_ID \ 23 | TF_VAR_user_password=xxx \ 24 | terraform apply 25 | ``` 26 | 27 | ## или файла secrets.tfvars 28 | 29 | ```sh 30 | terraform apply -var-file secrets.tfvars 31 | ``` 32 | 33 | ## Выходные переменные 34 | 35 | * `server_id` - UUID созданного сервера. 36 | 37 | * `floating_ip` - Публичный IP адрес сервера. 38 | -------------------------------------------------------------------------------- /examples/cloud/server_windows/vars.tf: -------------------------------------------------------------------------------- 1 | variable "username" {} 2 | 3 | variable "password" {} 4 | 5 | variable "domain_name" {} 6 | 7 | variable "project_name" { 8 | default = "tf_project" 9 | } 10 | 11 | variable "project_user_name" { 12 | default = "tf_user" 13 | } 14 | 15 | variable "user_password" {} 16 | 17 | variable "keypair_name" { 18 | default = "tf_keypair" 19 | } 20 | 21 | variable "auth_url" { 22 | default = "https://cloud.api.selcloud.ru/identity/v3" 23 | } 24 | 25 | variable "server_name" { 26 | default = "tf_server" 27 | } 28 | 29 | variable "server_zone" { 30 | default = "ru-9a" 31 | } 32 | 33 | variable "server_vcpus" { 34 | default = 4 35 | } 36 | 37 | variable "server_ram_mb" { 38 | default = 8192 39 | } 40 | 41 | variable "server_root_disk_gb" { 42 | default = 32 43 | } 44 | 45 | variable "server_volume_type" { 46 | default = "fast.ru-9a" 47 | } 48 | 49 | variable "server_image_name" { 50 | default = "Windows Server 2016 Standard" 51 | } 52 | 53 | variable "license_type" { 54 | default = "license_windows_2016_standard" 55 | } 56 | -------------------------------------------------------------------------------- /modules/cloud/lb_sngl/main.tf: -------------------------------------------------------------------------------- 1 | # Получение UUID конфигурации балансировщика 2 | data "openstack_loadbalancer_flavor_v2" "flavor_1" { 3 | name = var.lb_sngl_flavor_name 4 | } 5 | 6 | # Создание балансировщика 7 | resource "openstack_lb_loadbalancer_v2" "lb" { 8 | name = var.lb_sngl_name 9 | vip_subnet_id = var.lb_public_subnet_id 10 | flavor_id = data.openstack_loadbalancer_flavor_v2.flavor_1.id 11 | } 12 | 13 | # Создание компонентов балансировщика 14 | module "lb_components" { 15 | count = length(var.lb_sngl_components) 16 | source = "../lb_components" 17 | 18 | lb_components = var.lb_sngl_components["component_${count.index + 1}"] 19 | loadbalancer_id = openstack_lb_loadbalancer_v2.lb.id 20 | vip_subnet_id = var.lb_public_subnet_id 21 | server_access_ips = var.lb_servers_access_ips 22 | } 23 | 24 | # Создание плавающего адреса и ассоциирование его с портом балансировщика 25 | resource "openstack_networking_floatingip_v2" "floatingip" { 26 | pool = "external-network" 27 | port_id = openstack_lb_loadbalancer_v2.lb.vip_port_id 28 | } 29 | -------------------------------------------------------------------------------- /modules/mks/nodegroup_local_disk/main.tf: -------------------------------------------------------------------------------- 1 | resource "selectel_mks_nodegroup_v1" "nodegroup_1" { 2 | cluster_id = var.cluster_id 3 | project_id = var.project_id 4 | region = var.region 5 | availability_zone = var.availability_zone 6 | nodes_count = var.nodes_count 7 | keypair_name = var.keypair_name 8 | affinity_policy = var.affinity_policy 9 | cpus = var.cpus 10 | ram_mb = var.ram_mb 11 | volume_gb = var.volume_gb 12 | local_volume = true 13 | volume_type = null 14 | user_data = var.user_data 15 | install_nvidia_device_plugin = var.install_nvidia_device_plugin 16 | labels = var.labels 17 | dynamic "taints" { 18 | for_each = var.taints[*] 19 | content { 20 | key = taints.value["key"] 21 | value = taints.value["value"] 22 | effect = taints.value["effect"] 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /modules/cloud/server_local_and_remote_disks/README.md: -------------------------------------------------------------------------------- 1 | # Server local and remote disks 2 | 3 | Terraform module for creating a single OpenStack Compute V2 Instance with a 4 | local root volume with additional remote disk attached. 5 | 6 | ## Variables 7 | 8 | * `server_vcpus` - Server virtual CPUs (Default: 4). 9 | 10 | * `server_ram_mb` - Server RAM (MB) (Default: 8192). 11 | 12 | * `server_second_volume_type` - Server remote root disk type (Default: "fast.ru-9a") 13 | 14 | * `server_root_disk_gb` - Size of the root disk (GB) (Default: 8). 15 | 16 | * `server_name` - Name of the server (Default: "server_1") 17 | 18 | * `server_image_name` - Name of the image to find to create a server. 19 | 20 | * `server_zone` - Server availability zone. 21 | 22 | * `server_ssh_key` - SSH keypair name. 23 | 24 | * `server_ssh_key_user` - Owner of the SSH keypair. 25 | 26 | ## Outputs 27 | 28 | * `server_id` - ID of the created OpenStack Server. 29 | 30 | * `server_port_id` - ID of the Server's port. 31 | 32 | * `server_root_volume_id` - ID of the Server's root volume. 33 | -------------------------------------------------------------------------------- /examples/cloud/server_remote_root_disk_with_custom_iops/README.md: -------------------------------------------------------------------------------- 1 | # Пример создания проекта, сервера с сетевым диском. 2 | 3 | Используется два terraform провайдера: 4 | - Selectel - для создания проекта, пользователя и роли. 5 | - Openstack - для создания инстансов, сетевой инфраструктуры, двух балансировщиков 6 | 7 | ## Содержание secrets.tfvars 8 | 9 | * `username` - Имя сервисного пользователя. 10 | * `password` - Пароль сервисного пользователя. 11 | * `domain_name` - ID аккаунта. 12 | * `user_password` - Пароль пользователя, который будет создан. 13 | 14 | ## Пример запуска используя переменные окружения 15 | 16 | ```sh 17 | terraform init 18 | 19 | env \ 20 | TF_VAR_username=USER \ 21 | TF_VAR_password=PASSWORD \ 22 | TF_VAR_domain_name=ACCOUNT_ID \ 23 | TF_VAR_user_password=xxx \ 24 | terraform apply 25 | ``` 26 | 27 | ## или файла secrets.tfvars 28 | 29 | ```sh 30 | terraform apply -var-file secrets.tfvars 31 | ``` 32 | 33 | ## Выходные переменные 34 | 35 | * `server_id` - UUID созданного сервера. 36 | 37 | * `floating_ip` - Публичный IP адрес сервера. 38 | -------------------------------------------------------------------------------- /examples/cloud/server_remote_root_disk_with_custom_iops/vars.tf: -------------------------------------------------------------------------------- 1 | variable "username" {} 2 | 3 | variable "password" {} 4 | 5 | variable "domain_name" {} 6 | 7 | variable "project_name" { 8 | default = "tf_project" 9 | } 10 | 11 | variable "project_user_name" { 12 | default = "tf_user" 13 | } 14 | 15 | variable "user_password" {} 16 | 17 | variable "keypair_name" { 18 | default = "tf_keypair" 19 | } 20 | 21 | variable "auth_url" { 22 | default = "https://cloud.api.selcloud.ru/identity/v3" 23 | } 24 | 25 | variable "server_name" { 26 | default = "tf_server" 27 | } 28 | 29 | variable "server_zone" { 30 | default = "ru-9a" 31 | } 32 | 33 | variable "server_vcpus" { 34 | default = 4 35 | } 36 | 37 | variable "server_ram_mb" { 38 | default = 8192 39 | } 40 | 41 | variable "server_root_disk_gb" { 42 | default = 8 43 | } 44 | 45 | variable "server_volume_type" { 46 | default = "universal2.ru-9a" 47 | } 48 | 49 | variable "server_volume_metadata" { 50 | default = {"total_iops_sec": "4500"} 51 | } 52 | 53 | variable "server_image_name" { 54 | default = "Ubuntu 22.04 LTS 64-bit" 55 | } 56 | -------------------------------------------------------------------------------- /modules/cloud/lb_active_standby/main.tf: -------------------------------------------------------------------------------- 1 | # Получение UUID конфигурации балансировщика 2 | data "openstack_loadbalancer_flavor_v2" "flavor_1" { 3 | name = var.lb_active_flavor_name 4 | } 5 | 6 | # Создание балансировщика 7 | resource "openstack_lb_loadbalancer_v2" "lb" { 8 | name = var.lb_active_name 9 | vip_subnet_id = var.lb_private_subnet_id 10 | flavor_id = data.openstack_loadbalancer_flavor_v2.flavor_1.id 11 | } 12 | 13 | # Создание компонентов балансировщика 14 | module "lb_components" { 15 | count = length(var.lb_active_components) 16 | source = "../lb_components_http" 17 | 18 | lb_components = var.lb_active_components["component_${count.index + 1}"] 19 | loadbalancer_id = openstack_lb_loadbalancer_v2.lb.id 20 | vip_subnet_id = var.lb_private_subnet_id 21 | server_access_ips = var.lb_servers_access_ips 22 | } 23 | 24 | # Создание плавающего адреса и ассоциирование его с портом балансировщика 25 | resource "openstack_networking_floatingip_v2" "floatingip" { 26 | pool = "external-network" 27 | port_id = openstack_lb_loadbalancer_v2.lb.vip_port_id 28 | } 29 | -------------------------------------------------------------------------------- /examples/cloud/several_servers_one_network/vars.tf: -------------------------------------------------------------------------------- 1 | variable "username" {} 2 | 3 | variable "password" {} 4 | 5 | variable "domain_name" {} 6 | 7 | variable "project_name" { 8 | default = "tf_project" 9 | } 10 | 11 | variable "project_user_name" { 12 | default = "tf_user" 13 | } 14 | 15 | variable "user_password" {} 16 | 17 | variable "keypair_name" { 18 | default = "tf_keypair" 19 | } 20 | 21 | variable "auth_url" { 22 | default = "https://cloud.api.selcloud.ru/identity/v3" 23 | } 24 | 25 | variable "region" { 26 | default = "ru-9" 27 | } 28 | 29 | variable "count_of_servers" { 30 | default = 2 31 | } 32 | 33 | 34 | variable "server_name" { 35 | default = "tf_server" 36 | } 37 | 38 | variable "server_zone" { 39 | default = "ru-9a" 40 | } 41 | 42 | variable "server_vcpus" { 43 | default = 1 44 | } 45 | 46 | variable "server_ram_mb" { 47 | default = 4096 48 | } 49 | 50 | variable "server_root_disk_gb" { 51 | default = 8 52 | } 53 | 54 | variable "server_volume_type" { 55 | default = "fast.ru-9a" 56 | } 57 | 58 | variable "server_image_name" { 59 | default = "Ubuntu 22.04 LTS 64-bit" 60 | } 61 | -------------------------------------------------------------------------------- /examples/cloud/server_local_and_remote_disks/vars.tf: -------------------------------------------------------------------------------- 1 | variable "username" {} 2 | 3 | variable "password" {} 4 | 5 | variable "domain_name" {} 6 | 7 | variable "project_name" { 8 | default = "tf_project" 9 | } 10 | 11 | variable "project_user_name" { 12 | default = "tf_user" 13 | } 14 | 15 | variable "user_password" {} 16 | 17 | variable "keypair_name" { 18 | default = "tf_keypair" 19 | } 20 | 21 | variable "auth_url" { 22 | default = "https://cloud.api.selcloud.ru/identity/v3" 23 | } 24 | 25 | variable "region" { 26 | default = "ru-9" 27 | } 28 | 29 | variable "server_name" { 30 | default = "tf_server" 31 | } 32 | 33 | variable "server_zone" { 34 | default = "ru-9a" 35 | } 36 | 37 | variable "server_vcpus" { 38 | default = 4 39 | } 40 | 41 | variable "server_ram_mb" { 42 | default = 8192 43 | } 44 | 45 | variable "server_root_disk_gb" { 46 | default = 8 47 | } 48 | 49 | variable "server_second_disk_gb" { 50 | default = 5 51 | } 52 | 53 | variable "server_second_volume_type" { 54 | default = "fast.ru-9a" 55 | } 56 | 57 | variable "server_image_name" { 58 | default = "Ubuntu 22.04 LTS 64-bit" 59 | } 60 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Selectel 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /examples/cloud/preemptible_server_with_gpu/README.RU.md: -------------------------------------------------------------------------------- 1 | # Пример создания прерываемого сервера с сетевым загрузочным диском 2 | 3 | Используется два terraform провайдера: 4 | - Selectel - для создания проекта, пользователя и роли. 5 | - Openstack - для создания сервера с сетевым загрузочным диском. 6 | 7 | ## Внимание! 8 | Создание прерываемого сервера доступно только в ru-7a 9 | При использовании этого примера в других регионах будут созданы обычные сервера. 10 | 11 | ## Для создания прерываемого сервера используйте переменную server_preemptible_tag 12 | server_preemptible_tag = var.server_preemptible_tag 13 | 14 | ## Для смены прерываемого сервера на обычный используйте переменную server_no_preemptible_tag 15 | server_preemptible_tag = var.server_no_preemptible_tag 16 | 17 | ## Для смены конфигурации сервера измените параметр flavor_id 18 | flavor_id = "3032" 19 | 20 | ## Пример запуска используя переменные окружения 21 | 22 | ```sh 23 | terraform init 24 | 25 | env \ 26 | TF_VAR_username=USER \ 27 | TF_VAR_password=PASSWORD \ 28 | TF_VAR_domain_name=ACCOUNT_ID \ 29 | TF_VAR_user_password=xxx \ 30 | terraform apply 31 | ``` 32 | -------------------------------------------------------------------------------- /examples/cloud/server_remote_root_disk_and_attached_share/README.md: -------------------------------------------------------------------------------- 1 | # Пример создания проекта, сервера подключенного к файловому хранилищу. 2 | 3 | Используется два terraform провайдера: 4 | - Selectel - для создания проекта, пользователя и роли. 5 | - Openstack - для создания инстансов, сетевой инфраструктуры. 6 | 7 | ## Содержание secrets.tfvars 8 | 9 | * `username` - Имя сервисного пользователя. 10 | * `password` - Пароль сервисного пользователя. 11 | * `domain_name` - ID аккаунта. 12 | * `user_password` - Пароль пользователя, который будет создан. 13 | 14 | ## Пример запуска используя переменные окружения 15 | 16 | ```sh 17 | terraform init 18 | 19 | env \ 20 | TF_VAR_username=USER \ 21 | TF_VAR_password=PASSWORD \ 22 | TF_VAR_domain_name=ACCOUNT_ID \ 23 | TF_VAR_user_password=xxx \ 24 | terraform apply 25 | ``` 26 | 27 | ## или файла secrets.tfvars 28 | 29 | ```sh 30 | terraform apply -var-file secrets.tfvars 31 | ``` 32 | 33 | ## Outputs 34 | 35 | * `server_ip` - external server IP address. 36 | 37 | * `share_id` - ID of the created share. 38 | 39 | * `share_export_location_path` - share mount path. 40 | -------------------------------------------------------------------------------- /modules/cloud/routing_servers/README.md: -------------------------------------------------------------------------------- 1 | # Routing example Openstack compute section 2 | 3 | Terraform module for creating Openstack compute resources - instances, volumes. 4 | 5 | ## Variables 6 | 7 | * `keypair_name` - Name of the ssh key. 8 | 9 | * `target_zone` - Target zone for resources creation. 10 | 11 | * `main_server_subnet_one_port_id` - Port ID of the subnet one, main server. 12 | 13 | * `main_server_subnet_three_port_id` - Port ID of the subnet three, main server. 14 | 15 | * `server_with_docker_subnet_two_port_id` - Port ID of the subnet two, server with docker. 16 | 17 | * `proxy_server_subnet_three_port_id` - Port ID of the subnet three, proxy server. 18 | 19 | * `proxy_server_public_subnet_port_id` - Port ID of the public subnet, proxy server. 20 | 21 | * `main_server_subnet_one_port_ip` - IP address of the main server, subnet one. 22 | 23 | * `main_server_subnet_three_port` - IP address of the main server, subnet three. 24 | 25 | * `server_with_docker_subnet_two_port_ip` - IP address of the server with docker, subnet two. 26 | 27 | * `proxy_server_public_subnet_port_ip` - IP address of the proxy server, public subnet. 28 | -------------------------------------------------------------------------------- /modules/cloud/lb_active_standby_with_certificate/main.tf: -------------------------------------------------------------------------------- 1 | # Получение UUID конфигурации балансировщика 2 | data "openstack_loadbalancer_flavor_v2" "flavor_1" { 3 | name = var.lb_active_flavor_name 4 | } 5 | 6 | # Создание балансировщика 7 | resource "openstack_lb_loadbalancer_v2" "lb" { 8 | name = var.lb_active_name 9 | vip_subnet_id = var.lb_private_subnet_id 10 | flavor_id = data.openstack_loadbalancer_flavor_v2.flavor_1.id 11 | } 12 | 13 | # Создание компонентов балансировщика 14 | module "lb_components" { 15 | count = length(var.lb_active_components) 16 | source = "../lb_components_https" 17 | 18 | lb_components = var.lb_active_components["component_${count.index + 1}"] 19 | loadbalancer_id = openstack_lb_loadbalancer_v2.lb.id 20 | vip_subnet_id = var.lb_private_subnet_id 21 | server_access_ips = var.lb_servers_access_ips 22 | tls_container_ref = var.tls_container_ref 23 | } 24 | 25 | # Создание плавающего адреса и ассоциирование его с портом балансировщика 26 | resource "openstack_networking_floatingip_v2" "floatingip" { 27 | pool = "external-network" 28 | port_id = openstack_lb_loadbalancer_v2.lb.vip_port_id 29 | } 30 | -------------------------------------------------------------------------------- /examples/cloud/server_remote_root_disk_with_server_group/vars.tf: -------------------------------------------------------------------------------- 1 | variable "username" {} 2 | 3 | variable "password" {} 4 | 5 | variable "domain_name" {} 6 | 7 | variable "project_name" { 8 | default = "tf_project" 9 | } 10 | 11 | variable "project_user_name" { 12 | default = "tf_user" 13 | } 14 | 15 | variable "user_password" {} 16 | 17 | variable "keypair_name" { 18 | default = "tf_keypair" 19 | } 20 | 21 | variable "auth_url" { 22 | default = "https://cloud.api.selcloud.ru/identity/v3" 23 | } 24 | 25 | variable "server_name" { 26 | default = "tf_server" 27 | } 28 | 29 | variable "server_zone" { 30 | default = "ru-9a" 31 | } 32 | 33 | variable "server_vcpus" { 34 | default = 4 35 | } 36 | 37 | variable "server_ram_mb" { 38 | default = 8192 39 | } 40 | 41 | variable "server_root_disk_gb" { 42 | default = 8 43 | } 44 | 45 | variable "server_volume_type" { 46 | default = "fast.ru-9a" 47 | } 48 | 49 | variable "server_image_name" { 50 | default = "Ubuntu 22.04 LTS 64-bit" 51 | } 52 | 53 | variable "server_group_policy" { 54 | default = ["anti-affinity"] 55 | } 56 | 57 | variable "server_group_name" { 58 | default = "anti_affinity_group" 59 | } 60 | -------------------------------------------------------------------------------- /modules/cloud/server_remote_root_disk_and_attached_share/README.md: -------------------------------------------------------------------------------- 1 | # Server with remote root disk and attached share 2 | 3 | Terraform module for creating a single OpenStack Compute V2 Instance with a 4 | remote root volume and attached share. 5 | 6 | ## Variables 7 | 8 | * `base_name` - Base name for resources. 9 | 10 | * `flavor_id` - Server specs. 11 | 12 | * `subnet_cidr` - Subnet address with mask. 13 | 14 | * `ssh_user` - SSH user. 15 | 16 | * `ssh_key_path` - Path to ssh private key. 17 | 18 | * `server_volume_type` - Server root disk volume type. 19 | 20 | * `server_volume_size` - Server root disk volume size. 21 | 22 | * `server_image_name` - OS image name. 23 | 24 | * `server_zone` - Server availability zone. 25 | 26 | * `server_region` - Server region. 27 | 28 | * `share_size` - Share size in gigabytes. 29 | 30 | * `share_proto` - Share protocol (NFS or CIFS). 31 | 32 | * `share_type` - Share type (basic, universal or fast). 33 | 34 | * `share_allowed_ip` - IP access rule. 35 | 36 | ## Outputs 37 | 38 | * `server_ip` - external server IP address. 39 | 40 | * `share_id` - ID of the created share. 41 | 42 | * `share_export_location_path` - share mount path. 43 | -------------------------------------------------------------------------------- /modules/cloud/os_lb_env/README.md: -------------------------------------------------------------------------------- 1 | # Модуль создания Openstack окружения при создании балансировщика 2 | 3 | Модуль создания Openstack ресурсов необходимых для примера создания нескольких балансировщиков: 4 | - сетевая инфраструктура 5 | - SSH ключа, при необходимости 6 | - двух инстансов 7 | 8 | ## Принимаемые переменные 9 | 10 | * `target_zone` - Зона доступности, в которой будут созданы все ресурсы. 11 | 12 | * `server_image_name` - Имя образа, из которого будут созданы инстансы. 13 | 14 | * `keypair_name` - Имя SSH ключа (создается при необходимости, по умолчанию не создается). 15 | 16 | * `server_vcpus` - Количество vCPU создаваемых инстансов. 17 | 18 | * `server_ram_mb` - Количество оперативной памяти создаваемых инстансов. 19 | 20 | * `server_root_disk_gb` - Объем диска создаваемых инстансов. 21 | 22 | ## Выходные переменные 23 | 24 | * `public_subnet_id` - UUID подсети, в которой будет создан балансировщик без резервирования. 25 | 26 | * `private_subnet_id` - UUID подсети, в которой будет создан балансировщик с резервированием. 27 | 28 | * `public_network_ips` - Адреса инстансов созданные в подсети балансировщика без резервирования. 29 | 30 | * `private_network_ips` - Адреса инстансов созданные в подсети балансировщика с резервированием. 31 | -------------------------------------------------------------------------------- /modules/cloud/server_remote_root_disk_and_attached_share/vars.tf: -------------------------------------------------------------------------------- 1 | variable "flavor_id" { 2 | default = "1011" # SL1.1-1024 3 | } 4 | 5 | variable "server_volume_type" { 6 | default = "basic.ru-9a" 7 | } 8 | 9 | variable "server_volume_size" { 10 | default = 5 11 | } 12 | 13 | variable "subnet_cidr" { 14 | default = "192.168.0.0/24" 15 | } 16 | 17 | variable "base_name" { 18 | default = "share_example" 19 | } 20 | 21 | variable "server_image_name" { 22 | default = "Ubuntu 22.04 LTS 64-bit" 23 | } 24 | 25 | variable "server_zone" { 26 | default = "ru-9a" 27 | } 28 | 29 | variable "server_region" { 30 | default = "ru-9" 31 | } 32 | 33 | variable "ssh_key_path" { 34 | default = "~/.ssh/id_rsa" 35 | } 36 | 37 | variable "ssh_user" { 38 | default = "root" 39 | } 40 | 41 | variable "share_size" { 42 | default = 50 43 | type = number 44 | } 45 | 46 | variable "share_proto" { 47 | default = "NFS" 48 | type = string 49 | validation { 50 | condition = contains(["NFS", "CIFS"], var.share_proto) 51 | error_message = "Valid values for var: share_proto are (NFS, CIFS)." 52 | } 53 | } 54 | 55 | variable "share_type" { 56 | default = "basic.ru-9a" 57 | type = string 58 | } 59 | 60 | variable "share_allowed_ip" { 61 | default = "0.0.0.0/0" 62 | } 63 | -------------------------------------------------------------------------------- /modules/cloud/multiple_servers/README.md: -------------------------------------------------------------------------------- 1 | # Multiple servers 2 | 3 | Terraform module for creating multiple OpenStack Compute V2 Instances with a 4 | local root volume and connected to a specified network. 5 | 6 | ## Variables 7 | 8 | * `replicas_count` - count of instances to create (Default: 1). 9 | 10 | * `server_vcpus` - Server virtual CPUs (Default: 4). 11 | 12 | * `server_ram_mb` - Server RAM (MB) (Default: 8192). 13 | 14 | * `server_root_disk_gb` - Size of the root disk (GB) (Default: 8). 15 | 16 | * `server_network_id` - ID of a network to connect to. 17 | 18 | * `server_subnet_id` - ID of a subnet to connect to. 19 | 20 | * `server_name` - Prefix name of the server, random string will be added to prevent collisions (Default: "server") 21 | 22 | * `server_image_name` - Name of the image to find to create a server. 23 | 24 | * `server_zone` - Server availability zone. 25 | 26 | * `server_ssh_key` - SSH keypair name. 27 | 28 | * `server_ssh_key_user` - Owner of the SSH keypair. 29 | 30 | ## Outputs 31 | 32 | * `server_ids` - List with IDs of the created OpenStack Servers. 33 | 34 | * `server_port_ids` - List of IDs of Servers ports. 35 | 36 | * `server_access_ips` - List of server IPs. 37 | 38 | * `server_access_names` - List of server names. 39 | -------------------------------------------------------------------------------- /modules/cloud/routing_network/outputs.tf: -------------------------------------------------------------------------------- 1 | output "main_server_subnet_one_port_id" { 2 | value = openstack_networking_port_v2.main_server_subnet_one_port.id 3 | } 4 | 5 | output "main_server_subnet_three_port_id" { 6 | value = openstack_networking_port_v2.main_server_subnet_three_port.id 7 | } 8 | 9 | output "server_with_docker_subnet_two_port_id" { 10 | value = openstack_networking_port_v2.server_with_docker_subnet_two_port.id 11 | } 12 | 13 | output "proxy_server_subnet_three_port_id" { 14 | value = openstack_networking_port_v2.proxy_server_subnet_three_port.id 15 | } 16 | 17 | output "proxy_server_public_subnet_port_id" { 18 | value = openstack_networking_port_v2.proxy_server_public_subnet_port.id 19 | } 20 | 21 | output "main_server_subnet_one_port_ip" { 22 | value = openstack_networking_port_v2.main_server_subnet_one_port.all_fixed_ips.0 23 | } 24 | 25 | output "main_server_subnet_three_port" { 26 | value = openstack_networking_port_v2.main_server_subnet_three_port.all_fixed_ips.0 27 | } 28 | 29 | output "server_with_docker_subnet_two_port_ip" { 30 | value = openstack_networking_port_v2.server_with_docker_subnet_two_port.all_fixed_ips.0 31 | } 32 | 33 | output "proxy_server_public_subnet_port_ip" { 34 | value = openstack_networking_port_v2.proxy_server_public_subnet_port.all_fixed_ips.0 35 | } 36 | -------------------------------------------------------------------------------- /modules/cloud/server_remote_root_disk_with_gpu/README.md: -------------------------------------------------------------------------------- 1 | # Server local root disk 2 | 3 | Terraform module for creating a single OpenStack Compute V2 Instance with a 4 | remote root volume, preemtible tag and GPU. 5 | 6 | ## Variables 7 | 8 | * `user_name` - OpenStack username. 9 | 10 | * `project_name` - OpenStack username. 11 | 12 | * `user_password` - OpenStack username. 13 | 14 | * `domain_name` - OpenStack username. 15 | 16 | * `auth_url` - OpenStack username. 17 | 18 | * `region` - OpenStack username. 19 | 20 | * `flavor_id` - Server configuration ID. 21 | 22 | * `server_volume_type` - Server remote root disk type (Default: "fast.ru-9a") 23 | 24 | * `server_root_disk_gb` - Size of the root disk (GB) (Default: 8). 25 | 26 | * `server_name` - Name of the server (Default: "server_1") 27 | 28 | * `server_image_name` - Name of the image to find to create a server. 29 | 30 | * `server_zone` - Server availability zone. 31 | 32 | * `server_ssh_key` - SSH keypair name. 33 | 34 | * `server_ssh_key_user` - Owner of the SSH keypair. 35 | 36 | * `server_license_type` - Windows license type. 37 | 38 | ## Outputs 39 | 40 | * `server_id` - ID of the created OpenStack Server. 41 | 42 | * `server_port_id` - ID of the Server's port. 43 | 44 | * `server_root_volume_id` - ID of the Server's root volume. 45 | -------------------------------------------------------------------------------- /examples/dbaas/get_params/main.tf: -------------------------------------------------------------------------------- 1 | ################### 2 | # Init Terraform 3 | ################### 4 | 5 | terraform { 6 | required_providers { 7 | selectel = { 8 | source = "selectel/selectel" 9 | version = "~> 4.0.0-aplha" 10 | } 11 | } 12 | } 13 | 14 | ############################### 15 | # Конфигурация Selectel Провайдера 16 | ############################### 17 | 18 | provider "selectel" { 19 | username = var.username 20 | password = var.password 21 | domain_name = var.domain_name 22 | } 23 | 24 | ################################################ 25 | # Получение списка доступных баз данных и версия 26 | ################################################ 27 | 28 | data "selectel_dbaas_datastore_type_v1" "dt" { 29 | project_id = var.project_id 30 | region = var.region 31 | 32 | } 33 | 34 | ########################################## 35 | # Получение списка готовых флаворов 36 | ########################################## 37 | data "selectel_dbaas_flavor_v1" "flavors" { 38 | project_id = var.project_id 39 | region = var.region 40 | } 41 | 42 | ########################################## 43 | # Получение доступных расширений Postgres 44 | ########################################## 45 | 46 | data "selectel_dbaas_available_extension_v1" "pg_extensions" { 47 | project_id = var.project_id 48 | region = var.region 49 | } 50 | -------------------------------------------------------------------------------- /examples/cloud/several_servers_and_loadbalancers/ssl_certificate/cert_generator.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # create root key 4 | openssl genrsa -out rootCA.key 4096 5 | # create root certificate 6 | openssl req -x509 -new -key rootCA.key -sha256 -days 1024 -out rootCA.crt -nodes -subj "/C=RU/ST=Leningradskaya Oblast/L=Saint-Petersburg/O=Selectel/OU=Org/CN=selectel.ru" 7 | # create certificate key 8 | openssl genrsa -out www.test-ssl-octavia.com.key 4096 9 | # create certificate signing request 10 | openssl req -new -sha256 -key www.test-ssl-octavia.com.key -subj "/C=RU/ST=Leningradskaya Oblast/L=Saint-Petersburg/O=Selectel/CN=www.test-ssl-octavia.com" -out www.test-ssl-octavia.com.csr 11 | # verify csr 12 | openssl req -in www.test-ssl-octavia.com.csr -noout -text 13 | # generate certificate 14 | openssl x509 -req -in www.test-ssl-octavia.com.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out www.test-ssl-octavia.com.crt -days 500 -sha256 15 | # verify crt 16 | openssl x509 -in www.test-ssl-octavia.com.crt -text -noout 17 | # convert to pkcs12 18 | openssl pkcs12 -export -inkey www.test-ssl-octavia.com.key -in www.test-ssl-octavia.com.crt -certfile rootCA.crt -passout pass: -out www.test-ssl-octavia.com.p12 19 | # generate only key and certificate 20 | openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout ssl_certificate/_private_key.pem -out ssl_certificate/_cert.pem 21 | -------------------------------------------------------------------------------- /examples/cloud/preemptible_server_with_gpu/vars.tf: -------------------------------------------------------------------------------- 1 | variable "username" {} 2 | 3 | variable "password" {} 4 | 5 | variable "domain_name" {} 6 | 7 | variable "project_name" { 8 | default = "tf_project" 9 | } 10 | 11 | variable "project_user_name" { 12 | default = "tf_user" 13 | } 14 | 15 | variable "user_password" {} 16 | 17 | variable "keypair_name" { 18 | default = "tf_keypair" 19 | } 20 | 21 | variable "auth_url" { 22 | default = "https://cloud.api.selcloud.ru/identity/v3" 23 | } 24 | 25 | variable "server_name" { 26 | default = "tf_server" 27 | } 28 | 29 | variable "flavor_id" { 30 | default = "3021" 31 | } 32 | 33 | variable "server_root_disk_gb" { 34 | default = 8 35 | } 36 | 37 | variable "server_volume_type" { 38 | default = "fast.ru-7a" 39 | } 40 | 41 | variable "server_image_name" { 42 | default = "Ubuntu 22.04 LTS 64-bit" 43 | } 44 | 45 | variable "server_preemptible_tag" { 46 | default = ["preemptible"] 47 | } 48 | 49 | variable "server_no_preemptible_tag" { 50 | default = [] 51 | } 52 | 53 | ### ATTENTION!!! Do not edit this block, please. 54 | variable "server_zone" { 55 | type = string 56 | description = "The name of the Selectel's pool." 57 | 58 | default = "ru-7a" 59 | 60 | validation { 61 | condition = can(regex("7a", var.server_zone)) 62 | error_message = "Preemtible servers are available in ru-7a pool only." 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /modules/cloud/routing_os/main.tf: -------------------------------------------------------------------------------- 1 | module "routing_network" { 2 | source = "../routing_network" 3 | 4 | selvpc_subnet_cidr = var.selvpc_subnet_cidr 5 | selvpc_subnet_id = var.selvpc_subnet_id 6 | selvpc_network_id = var.selvpc_network_id 7 | } 8 | 9 | module "routing_servers" { 10 | source = "../routing_servers" 11 | 12 | keypair_name = var.keypair_name 13 | target_zone = var.target_zone 14 | server_image_name = var.server_image_name 15 | main_server_subnet_one_port_id = module.routing_network.main_server_subnet_one_port_id 16 | main_server_subnet_three_port_id = module.routing_network.main_server_subnet_three_port_id 17 | server_with_docker_subnet_two_port_id = module.routing_network.server_with_docker_subnet_two_port_id 18 | proxy_server_subnet_three_port_id = module.routing_network.proxy_server_subnet_three_port_id 19 | proxy_server_public_subnet_port_id = module.routing_network.proxy_server_public_subnet_port_id 20 | main_server_subnet_one_port_ip = module.routing_network.main_server_subnet_one_port_ip 21 | server_with_docker_subnet_two_port_ip = module.routing_network.server_with_docker_subnet_two_port_ip 22 | proxy_server_public_subnet_port_ip = module.routing_network.proxy_server_public_subnet_port_ip 23 | 24 | depends_on = [ 25 | module.routing_network, 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /modules/cloud/lb_components/main.tf: -------------------------------------------------------------------------------- 1 | resource "openstack_lb_listener_v2" "listener" { 2 | name = "Listener" 3 | protocol = var.lb_components["listener_protocol"] 4 | protocol_port = var.lb_components["listener_protocol_port"] 5 | loadbalancer_id = var.loadbalancer_id 6 | } 7 | 8 | resource "openstack_lb_pool_v2" "pool" { 9 | name = "Pool" 10 | protocol = var.lb_components["pool_protocol"] 11 | lb_method = var.lb_components["pool_lb_method"] 12 | listener_id = openstack_lb_listener_v2.listener.id 13 | } 14 | 15 | resource "openstack_lb_monitor_v2" "monitor" { 16 | name = "Monitor" 17 | pool_id = openstack_lb_pool_v2.pool.id 18 | type = var.lb_components["monitor_type"] 19 | delay = var.lb_components["monitor_delay"] 20 | timeout = var.lb_components["monitor_timeout"] 21 | max_retries = var.lb_components["monitor_retries"] 22 | } 23 | 24 | resource "openstack_lb_members_v2" "member" { 25 | pool_id = openstack_lb_pool_v2.pool.id 26 | 27 | dynamic "member" { 28 | for_each = var.server_access_ips 29 | content { 30 | name = "Member" 31 | subnet_id = var.vip_subnet_id 32 | address = member.value 33 | protocol_port = var.lb_components["member_protocol_port"] 34 | weight = 1 35 | backup = false 36 | admin_state_up = true 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /modules/cloud/routing_network/README.md: -------------------------------------------------------------------------------- 1 | # Routing example Openstack network section 2 | 3 | Terraform module for creating net resources - routers, networks, subnets, ports, routes 4 | 5 | ## Variables 6 | 7 | * `selvpc_network_id` - ID of the Selectel Cloud subnet's Network created at Selectel section. 8 | 9 | * `selvpc_subnet_id` - ID of the Selectel Cloud Subnet created at Selectel section. 10 | 11 | * `selvpc_subnet_cidr` - CIDR of the Selectel Cloud Subnet created at Selectel section. 12 | 13 | * `router_external_net_name` - Name of the external network. 14 | 15 | ## Outputs 16 | 17 | * `main_server_subnet_one_port_id` - Port ID of the subnet one, main server. 18 | 19 | * `main_server_subnet_three_port_id` - Port ID of the subnet three, main server. 20 | 21 | * `server_with_docker_subnet_two_port_id` - Port ID of the subnet two, server with docker. 22 | 23 | * `proxy_server_subnet_three_port_id` - Port ID of the subnet three, proxy server. 24 | 25 | * `proxy_server_public_subnet_port_id` - Port ID of the public subnet, proxy server. 26 | 27 | * `main_server_subnet_one_port_ip` - IP address of the main server, subnet one. 28 | 29 | * `main_server_subnet_three_port` - IP address of the main server, subnet three. 30 | 31 | * `server_with_docker_subnet_two_port_ip` - IP address of the server with docker, subnet two. 32 | 33 | * `proxy_server_public_subnet_port_ip` - IP address of the proxy server, public subnet. 34 | -------------------------------------------------------------------------------- /examples/cloud/preemptible_server/vars.tf: -------------------------------------------------------------------------------- 1 | variable "username" {} 2 | 3 | variable "password" {} 4 | 5 | variable "domain_name" {} 6 | 7 | variable "project_name" { 8 | default = "tf_project" 9 | } 10 | 11 | variable "project_user_name" { 12 | default = "tf_user" 13 | } 14 | 15 | variable "user_password" {} 16 | 17 | variable "keypair_name" { 18 | default = "tf_keypair" 19 | } 20 | 21 | variable "auth_url" { 22 | default = "https://cloud.api.selcloud.ru/identity/v3" 23 | } 24 | 25 | variable "server_name" { 26 | default = "tf_server" 27 | } 28 | 29 | variable "server_vcpus" { 30 | default = 4 31 | } 32 | 33 | variable "server_ram_mb" { 34 | default = 8192 35 | } 36 | 37 | variable "server_root_disk_gb" { 38 | default = 8 39 | } 40 | 41 | variable "server_volume_type" { 42 | default = "fast.ru-7a" 43 | } 44 | 45 | variable "server_image_name" { 46 | default = "Ubuntu 22.04 LTS 64-bit" 47 | } 48 | 49 | variable "server_preemptible_tag" { 50 | default = ["preemptible"] 51 | } 52 | 53 | variable "server_no_preemptible_tag" { 54 | default = [] 55 | } 56 | 57 | ### ATTENTION!!! Do not edit this block, please. 58 | variable "server_zone" { 59 | type = string 60 | description = "The name of the Selectel's pool." 61 | 62 | default = "ru-7a" 63 | 64 | validation { 65 | condition = can(regex("ru-7a", var.server_zone)) 66 | error_message = "Preemtible servers are available in ru-7a pool only." 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /modules/cloud/server_remote_root_disk/README.md: -------------------------------------------------------------------------------- 1 | # Server local root disk 2 | 3 | Terraform module for creating a single OpenStack Compute V2 Instance with a 4 | remote root volume. 5 | 6 | ## Variables 7 | 8 | * `user_name` - OpenStack username. 9 | 10 | * `project_name` - OpenStack username. 11 | 12 | * `user_password` - OpenStack username. 13 | 14 | * `domain_name` - OpenStack username. 15 | 16 | * `auth_url` - OpenStack username. 17 | 18 | * `region` - OpenStack username. 19 | 20 | * `server_vcpus` - Server virtual CPUs (Default: 4). 21 | 22 | * `server_ram_mb` - Server RAM (MB) (Default: 8192). 23 | 24 | * `server_volume_type` - Server remote root disk type (Default: "fast.ru-9a") 25 | 26 | * `server_volume_metadata` - Metadata key/value pairs to associate with the volume. 27 | 28 | * `server_root_disk_gb` - Size of the root disk (GB) (Default: 8). 29 | 30 | * `server_name` - Name of the server (Default: "server_1") 31 | 32 | * `server_image_name` - Name of the image to find to create a server. 33 | 34 | * `server_zone` - Server availability zone. 35 | 36 | * `server_ssh_key` - SSH keypair name. 37 | 38 | * `server_ssh_key_user` - Owner of the SSH keypair. 39 | 40 | * `server_license_type` - Windows license type. 41 | 42 | ## Outputs 43 | 44 | * `server_id` - ID of the created OpenStack Server. 45 | 46 | * `server_port_id` - ID of the Server's port. 47 | 48 | * `server_root_volume_id` - ID of the Server's root volume. 49 | -------------------------------------------------------------------------------- /examples/dbaas/redis_cluster/README.md: -------------------------------------------------------------------------------- 1 | # Пример создания кластера Redis 2 | 3 | Создание Кластера Redis 6 в уже существующей сети с двумя нодами и с фиксированной конфигурацией нод. 4 | Для работы с существующими сетями будет использоваться провайдер `openstack`. Кластер будет создан в сети с именем *nat* - задаётся в vars.tf. 5 | 6 | # Запуск 7 | 8 | ## Подготовка 9 | 10 | ```bash 11 | cp vars.tfvars.example vars.tfvars 12 | 13 | # Далее нужно отредактировать vars.tfvars 14 | vim vars.tfvars 15 | ``` 16 | 17 | ```ini 18 | # Сервисный пользователь, https://my.selectel.ru/profile/users_management/users 19 | username="USER" 20 | password="PASSWORD" 21 | # ID аккаунта 22 | domain_name="ACCOUNT_ID" 23 | # ID проекта Облачной Платформы 24 | project_id="PROJECT_ID" 25 | # Регион проекта Облачной Платформы 26 | region="REGION" 27 | 28 | # Пароль для Редиса 29 | redis_password="REDIS_PASSWORD" 30 | ``` 31 | 32 | ## Создание кластера 33 | ```bash 34 | # Инициализация терраформ-окружения 35 | terraform init 36 | # Просмотр предложенных операций 37 | terraform plan --var-file="vars.tfvars" 38 | # Применение манифеста 39 | terraform apply --var-file="vars.tfvars" 40 | ``` 41 | 42 | ## Output-переменные 43 | ```bash 44 | $ terraform output 45 | cluster_id = "5579a1f3-12ab-4b6a-b926-49eb861feaa1" 46 | cluster_status = "ACTIVE" 47 | master_host = "master.5579a1f3-12ab-4b6a-b926-49eb861feaa1.c.dbaas.selcloud.ru" 48 | ``` 49 | 50 | ## Удаление стенда 51 | ```bash 52 | terraform destroy --var-file="vars.tfvars" 53 | ``` 54 | -------------------------------------------------------------------------------- /examples/dbaas/mysql_cluster/README.md: -------------------------------------------------------------------------------- 1 | # Пример создания кластера MySQL из одной ноды 2 | 3 | Создание Кластера Mysql 8 в уже существующей сети с одной нодой фиксированной конфигурации. 4 | Для работы с существующими сетями будет использоваться провайдер `openstack`. Кластер будет создан в сети с именем *nat* - задаётся в vars.tf. 5 | 6 | # Запуск 7 | 8 | ## Подготовка 9 | ```bash 10 | cp vars.tfvars.example vars.tfvars 11 | 12 | # Далее нужно отредактировать vars.tfvars 13 | vim vars.tfvars 14 | ``` 15 | 16 | ```ini 17 | # Сервисный пользователь, https://my.selectel.ru/profile/users_management/users 18 | username="USER" 19 | password="PASSWORD" 20 | # ID аккаунта 21 | domain_name="ACCOUNT_ID" 22 | # ID проекта Облачной Платформы 23 | project_id="PROJECT_ID" 24 | # Регион проекта Облачной Платформы 25 | region="REGION" 26 | ``` 27 | 28 | ## Создание кластера 29 | ```bash 30 | # Инициализация терраформ-окружения 31 | terraform init 32 | # Просмотр предложенных операций 33 | terraform plan --var-file="vars.tfvars" 34 | # Применение манифеста 35 | terraform apply --var-file="vars.tfvars" 36 | ``` 37 | 38 | ## Output-переменные 39 | ```bash 40 | $ terraform output 41 | cluster_id = "5579a1f3-12ab-4b6a-b926-49eb861feaa1" 42 | cluster_status = "ACTIVE" 43 | db_name = "db" 44 | db_user = "user" 45 | db_user_password = "secret" 46 | master_host = "master.5579a1f3-12ab-4b6a-b926-49eb861feaa1.c.dbaas.selcloud.ru" 47 | ``` 48 | 49 | ## Удаление стенда 50 | ```bash 51 | terraform destroy --var-file="vars.tfvars" 52 | ``` 53 | -------------------------------------------------------------------------------- /examples/dbaas/postgres_cluster/README.md: -------------------------------------------------------------------------------- 1 | # Пример создания кластера Postgres 2 | 3 | Создание Кластера Postgres 12 в уже существующей сети с тремя нодами и с произвольной конфигурацией нод. 4 | Для работы с существующими сетями будет использоваться провайдер `openstack`. Кластер будет создан в сети с именем *nat* - задаётся в vars.tf. 5 | 6 | # Запуск 7 | 8 | ## Подготовка 9 | 10 | ```bash 11 | cp vars.tfvars.example vars.tfvars 12 | 13 | # Далее нужно отредактировать vars.tfvars 14 | vim vars.tfvars 15 | ``` 16 | 17 | ```ini 18 | # Сервисный пользователь, https://my.selectel.ru/profile/users_management/users 19 | username="USER" 20 | password="PASSWORD" 21 | # ID аккаунта 22 | domain_name="ACCOUNT_ID" 23 | # ID проекта Облачной Платформы 24 | project_id="PROJECT_ID" 25 | # Регион проекта Облачной Платформы 26 | region="REGION" 27 | ``` 28 | 29 | ## Создание кластера 30 | ```bash 31 | # Инициализация терраформ-окружения 32 | terraform init 33 | # Просмотр предложенных операций 34 | terraform plan --var-file="vars.tfvars" 35 | # Применение манифеста 36 | terraform apply --var-file="vars.tfvars" 37 | ``` 38 | 39 | ## Output-переменные 40 | ```bash 41 | $ terraform output 42 | cluster_id = "5579a1f3-12ab-4b6a-b926-49eb861feaa1" 43 | cluster_status = "ACTIVE" 44 | db_name = "db" 45 | db_user = "user" 46 | db_user_password = "secret" 47 | master_host = "master.5579a1f3-12ab-4b6a-b926-49eb861feaa1.c.dbaas.selcloud.ru" 48 | ``` 49 | 50 | ## Удаление стенда 51 | ```bash 52 | terraform destroy --var-file="vars.tfvars" 53 | ``` 54 | -------------------------------------------------------------------------------- /examples/cloud/several_servers_with_networking_and_fwaas/main.tf: -------------------------------------------------------------------------------- 1 | # Инициализация провайдера Selectel 2 | provider "selectel" { 3 | username = var.username 4 | password = var.password 5 | domain_name = var.domain_name 6 | } 7 | 8 | # Инициализация провайдера Openstack 9 | provider "openstack" { 10 | user_name = var.project_user_name 11 | tenant_name = var.project_name 12 | password = var.user_password 13 | project_domain_name = var.domain_name 14 | user_domain_name = var.domain_name 15 | auth_url = var.auth_url 16 | region = var.region 17 | } 18 | 19 | # Создание ресурсов Selectel 20 | module "selectel_section" { 21 | source = "../../../modules/cloud/project_with_user" 22 | 23 | project_name = var.project_name 24 | project_user_name = var.project_user_name 25 | user_password = var.user_password 26 | } 27 | 28 | # Создание ресурсов Openstack 29 | module "multiple_servers_with_fwaas" { 30 | source = "../../../modules/cloud/multiple_servers_with_fwaas" 31 | 32 | server_name = var.server_name 33 | server_zone = var.server_zone 34 | server_image_name = var.server_image_name 35 | server_root_disk_gb = var.server_root_disk_gb 36 | server_flavor_id = var.server_flavor_id 37 | server_volume_type = var.server_volume_type 38 | server_ssh_key = file("~/.ssh/id_rsa.pub") 39 | server_ssh_key_user = module.selectel_section.user_id 40 | 41 | depends_on = [ 42 | module.selectel_section, 43 | ] 44 | } 45 | -------------------------------------------------------------------------------- /modules/cloud/single_instance/README.md: -------------------------------------------------------------------------------- 1 | # Модуль создания одного инстанса 2 | 3 | Модуль создания инстанса, его компонентов, а также получения для этого необходимых данных: 4 | - порты 5 | - инстанс 6 | - UUID конфигурации инстанса 7 | - UUID образа ОС 8 | 9 | ## Принимаемые переменные 10 | 11 | * `private_network_id` - UUID сети, в которой будет создан балансировщик с резервированием. 12 | 13 | * `private_subnet_id` - UUID подсети, в которой будет создан балансировщик с резервированием. 14 | 15 | * `public_network_id` - UUID сети, в которой будет создан балансировщик без резервирования. 16 | 17 | * `public_subnet_id` - UUID подсети, в которой будет создан балансировщик без резервирования. 18 | 19 | * `server_image_name` - Имя образа ОС, из которой будет создан загрузочный диск. 20 | 21 | * `keypair_name` - Имя SSH ключа, который будет добавлен в создаваемый инстанс. 22 | 23 | * `server_name` - Имя инстанса. 24 | 25 | * `server_zone` - Зона доступности, в которой будет созданы ресурсы. 26 | 27 | * `server_vcpus` - Количество vCPU создаваемого инстанса. 28 | 29 | * `server_ram_mb` - Количество оперативной памяти создаваемого инстанса. 30 | 31 | * `server_root_disk_gb` - Объем диска создаваемого инстанса. 32 | 33 | * `user_data` - Пользовательский сценарий, запускающийся при запуске инстанса. 34 | 35 | ## Выходные переменные 36 | 37 | * `public_network_ips` - IP адреса инстанса из подсети балансировщика без резервирования. 38 | 39 | * `private_network_ips` - IP адреса инстанса из подсети балансировщика с резервированием. 40 | -------------------------------------------------------------------------------- /examples/cloud/several_servers_routing/main.tf: -------------------------------------------------------------------------------- 1 | # Initialize Selectel provider with service user credentials. 2 | provider "selectel" { 3 | username = var.username 4 | password = var.password 5 | domain_name = var.domain_name 6 | } 7 | 8 | provider "openstack" { 9 | user_name = var.project_user_name 10 | tenant_name = var.project_name 11 | password = var.user_password 12 | project_domain_name = var.domain_name 13 | user_domain_name = var.domain_name 14 | auth_url = var.auth_url 15 | region = substr(var.target_zone, 0, 4) 16 | } 17 | 18 | module "selectel_section" { 19 | providers = { 20 | selectel = selectel, 21 | } 22 | source = "../../../modules/cloud/routing_selvpc" 23 | 24 | user_password = var.user_password 25 | project_name = var.project_name 26 | project_user_name = var.project_user_name 27 | target_zone = var.target_zone 28 | keypair_name = var.keypair_name 29 | } 30 | 31 | module "openstack_section" { 32 | providers = { 33 | openstack = openstack, 34 | } 35 | source = "../../../modules/cloud/routing_os" 36 | 37 | selvpc_network_id = module.selectel_section.selvpc_network_id 38 | selvpc_subnet_id = module.selectel_section.selvpc_subnet_id 39 | selvpc_subnet_cidr = module.selectel_section.selvpc_subnet_cidr 40 | keypair_name = var.keypair_name 41 | target_zone = var.target_zone 42 | server_image_name = var.server_image_name 43 | 44 | depends_on = [ 45 | module.selectel_section, 46 | ] 47 | } 48 | -------------------------------------------------------------------------------- /examples/cloud/server_remote_root_disk/main.tf: -------------------------------------------------------------------------------- 1 | # Инициализация провайдера Selectel 2 | provider "selectel" { 3 | username = var.username 4 | password = var.password 5 | domain_name = var.domain_name 6 | } 7 | 8 | # Создание проекта, пользователя и роли 9 | module "selectel_section" { 10 | source = "../../../modules/cloud/project_with_user" 11 | 12 | project_name = var.project_name 13 | project_user_name = var.project_user_name 14 | user_password = var.user_password 15 | } 16 | 17 | # Инициализация провайдера Openstack 18 | provider "openstack" { 19 | user_name = var.project_user_name 20 | tenant_name = var.project_name 21 | password = var.user_password 22 | project_domain_name = var.domain_name 23 | user_domain_name = var.domain_name 24 | auth_url = var.auth_url 25 | region = substr(var.server_zone, 0, 4) 26 | } 27 | 28 | # Создание ресурсов Openstack 29 | module "server_remote_root_disk" { 30 | source = "../../../modules/cloud/server_remote_root_disk" 31 | 32 | server_name = var.server_name 33 | server_zone = var.server_zone 34 | server_vcpus = var.server_vcpus 35 | server_ram_mb = var.server_ram_mb 36 | server_root_disk_gb = var.server_root_disk_gb 37 | server_volume_type = var.server_volume_type 38 | server_image_name = var.server_image_name 39 | server_ssh_key = file("~/.ssh/id_rsa.pub") 40 | server_ssh_key_user = module.selectel_section.user_id 41 | depends_on = [ 42 | module.selectel_section, 43 | ] 44 | } 45 | -------------------------------------------------------------------------------- /modules/cloud/os_lb_env/main.tf: -------------------------------------------------------------------------------- 1 | # Создание сети балансировщика базового типа с резервированием 2 | module "private_nat" { 3 | source = "../nat" 4 | 5 | router_name = "terraform-private" 6 | network_name = "terraform-private-lb-net" 7 | subnet_cidr = "192.168.199.0/24" 8 | } 9 | 10 | # Создание сети балансировщика базового типа без резервирования 11 | module "public_nat" { 12 | source = "../nat" 13 | 14 | router_name = "terraform-public" 15 | network_name = "terraform-public-lb-net" 16 | subnet_cidr = "10.10.0.0/24" 17 | } 18 | 19 | # Создание SSH ключа 20 | resource "openstack_compute_keypair_v2" "keypair1" { 21 | count = var.keypair_name != "" ? 1 : 0 22 | name = var.keypair_name 23 | public_key = file("~/.ssh/id_rsa.pub") 24 | } 25 | 26 | # Создание инстансов 27 | module "instances" { 28 | count = 2 29 | source = "../single_instance" 30 | 31 | server_name = "terraform-vm-${count.index + 1}" 32 | server_zone = var.target_zone 33 | server_vcpus = var.server_vcpus 34 | server_ram_mb = var.server_ram_mb 35 | server_root_disk_gb = var.server_root_disk_gb 36 | server_image_name = var.server_image_name 37 | keypair_name = var.keypair_name 38 | user_data = "#!/bin/bash\n\n# Install packages\nDEBIAN_FRONTEND=noninteractive apt update && apt install -y nginx bind9" 39 | 40 | private_network_id = module.private_nat.network_id 41 | private_subnet_id = module.private_nat.subnet_id 42 | 43 | public_network_id = module.public_nat.network_id 44 | public_subnet_id = module.public_nat.subnet_id 45 | } 46 | -------------------------------------------------------------------------------- /modules/mks/cluster/README.md: -------------------------------------------------------------------------------- 1 | # Cluster 2 | 3 | Terraform module for creating a single Selectel MKS cluster. 4 | 5 | ## Variables 6 | 7 | * `cluster_name` - The name of the cluster (Default: "cluster-1"). 8 | 9 | * `project_id` - An associated Selectel Cloud project. 10 | 11 | * `region` - A Selectel Cloud region of where the cluster is located. 12 | 13 | * `kube_version` - The current Kubernetes version of the cluster. 14 | 15 | * `enable_autorepair` - Reflects if worker nodes are allowed to be reinstalled automatically (Default: true). 16 | 17 | * `enable_patch_version_auto_upgrade` - Specifies if Kubernetes patch version of the cluster is allowed 18 | to be upgraded automatically (Default: true). 19 | 20 | * `network_id` - An OpenStack Networking service network ID. 21 | 22 | * `subnet_id` - An OpenStack Networking service subnet ID. 23 | 24 | * `maintenance_window_start` - UTC time in "hh:mm:ss" format of when the cluster will start its maintenance tasks. 25 | 26 | * `enable_audit_logs` - (Optional) Enables or disables collection of audit logs. Learn how to [configure export of audit logs to a logging system](https://docs.selectel.ru/en/cloud/managed-kubernetes/clusters/logs/#configure-export-of-audit-logs). 27 | 28 | * `false` (default) - Audit logs are not collected and are not available for export; 29 | 30 | * `true` - Audit logs are collected and available for export. 31 | 32 | ## Outputs 33 | 34 | * `cluster_id` - ID of the created MKS cluster. 35 | 36 | * `project_id` - ID of the Cloud project of where the cluster is located. 37 | 38 | * `region` - Cloud region of where the cluster is located. 39 | -------------------------------------------------------------------------------- /examples/cloud/several_servers_one_network/main.tf: -------------------------------------------------------------------------------- 1 | # Initialize Selectel provider with service user credentials. 2 | provider "selectel" { 3 | username = var.username 4 | password = var.password 5 | domain_name = var.domain_name 6 | } 7 | 8 | # Initialize Openstack provider 9 | provider "openstack" { 10 | user_name = var.project_user_name 11 | tenant_name = var.project_name 12 | password = var.user_password 13 | project_domain_name = var.domain_name 14 | user_domain_name = var.domain_name 15 | auth_url = var.auth_url 16 | region = var.region 17 | } 18 | 19 | # Create the main project with user. 20 | # This module should be applied first. 21 | module "project_with_user" { 22 | source = "../../../modules/cloud/project_with_user" 23 | 24 | project_name = var.project_name 25 | project_user_name = var.project_user_name 26 | user_password = var.user_password 27 | } 28 | 29 | # Create OpenStack Compute instances. 30 | module "multiple_servers" { 31 | source = "../../../modules/cloud/multiple_servers" 32 | 33 | replicas_count = var.count_of_servers 34 | 35 | # OpenStack Instance parameters. 36 | server_name = var.server_name 37 | server_zone = var.server_zone 38 | server_vcpus = var.server_vcpus 39 | server_ram_mb = var.server_ram_mb 40 | server_root_disk_gb = var.server_root_disk_gb 41 | server_image_name = var.server_image_name 42 | server_ssh_key = file("~/.ssh/id_rsa.pub") 43 | server_ssh_key_user = module.project_with_user.user_id 44 | 45 | depends_on = [ 46 | module.project_with_user, 47 | ] 48 | } 49 | -------------------------------------------------------------------------------- /examples/cloud/server_remote_root_disk_and_attached_share/vars.tf: -------------------------------------------------------------------------------- 1 | variable "username" {} 2 | 3 | variable "password" {} 4 | 5 | variable "domain_name" {} 6 | 7 | variable "project_name" { 8 | default = "tf_project" 9 | } 10 | 11 | variable "project_user_name" { 12 | default = "tf_user" 13 | } 14 | 15 | variable "user_password" {} 16 | 17 | variable "auth_url" { 18 | default = "https://cloud.api.selcloud.ru/identity/v3" 19 | } 20 | 21 | variable "flavor_id" { 22 | default = "1011" # SL1.1-1024 23 | } 24 | 25 | variable "server_volume_type" { 26 | default = "basic.ru-9a" 27 | } 28 | 29 | variable "server_volume_size" { 30 | default = 5 31 | } 32 | 33 | variable "subnet_cidr" { 34 | default = "192.168.0.0/24" 35 | } 36 | 37 | variable "base_name" { 38 | default = "share_example" 39 | } 40 | 41 | variable "server_image_name" { 42 | default = "Ubuntu 22.04 LTS 64-bit" 43 | } 44 | 45 | variable "server_zone" { 46 | default = "ru-9a" 47 | } 48 | 49 | variable "server_region" { 50 | default = "ru-9" 51 | } 52 | 53 | variable "ssh_key_path" { 54 | default = "~/.ssh/id_rsa" 55 | } 56 | 57 | variable "ssh_user" { 58 | default = "root" 59 | } 60 | 61 | variable "share_size" { 62 | default = 50 63 | type = number 64 | } 65 | 66 | variable "share_proto" { 67 | default = "NFS" 68 | type = string 69 | validation { 70 | condition = contains(["NFS", "CIFS"], var.share_proto) 71 | error_message = "Valid values for var: share_proto are (NFS, CIFS)." 72 | } 73 | } 74 | 75 | variable "share_type" { 76 | default = "basic.ru-9a" 77 | type = string 78 | } 79 | 80 | variable "share_allowed_ip" { 81 | default = "0.0.0.0/0" 82 | } 83 | -------------------------------------------------------------------------------- /modules/cloud/single_instance/main.tf: -------------------------------------------------------------------------------- 1 | # Получение сведений о конфигурации создаваемого инстанса 2 | data "openstack_compute_flavor_v2" "flavor" { 3 | vcpus = var.server_vcpus 4 | ram = var.server_ram_mb 5 | disk = var.server_root_disk_gb 6 | is_public = "true" 7 | } 8 | 9 | # Получение информации об образе ОС 10 | module "image_datasource" { 11 | source = "../image_datasource" 12 | image_name = var.server_image_name 13 | } 14 | 15 | # Создание сетевых портов 16 | resource "openstack_networking_port_v2" "private_port" { 17 | name = "${var.server_name}-eth0" 18 | network_id = var.private_network_id 19 | 20 | fixed_ip { 21 | subnet_id = var.private_subnet_id 22 | } 23 | } 24 | 25 | resource "openstack_networking_port_v2" "public_port" { 26 | name = "${var.server_name}-eth1" 27 | network_id = var.public_network_id 28 | 29 | fixed_ip { 30 | subnet_id = var.public_subnet_id 31 | } 32 | } 33 | 34 | # Создание инстанса 35 | resource "openstack_compute_instance_v2" "instance" { 36 | name = var.server_name 37 | image_id = module.image_datasource.image_id 38 | flavor_id = data.openstack_compute_flavor_v2.flavor.id 39 | key_pair = var.keypair_name 40 | availability_zone = var.server_zone 41 | user_data = var.user_data 42 | 43 | network { 44 | port = openstack_networking_port_v2.private_port.id 45 | } 46 | 47 | network { 48 | port = openstack_networking_port_v2.public_port.id 49 | } 50 | 51 | lifecycle { 52 | ignore_changes = [image_id] 53 | } 54 | 55 | vendor_options { 56 | ignore_resize_confirmation = true 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /examples/cloud/server_remote_root_disk_with_custom_iops/main.tf: -------------------------------------------------------------------------------- 1 | # Инициализация провайдера Selectel 2 | provider "selectel" { 3 | username = var.username 4 | password = var.password 5 | domain_name = var.domain_name 6 | } 7 | 8 | # Создание проекта, пользователя и роли 9 | module "selectel_section" { 10 | source = "../../../modules/cloud/project_with_user" 11 | 12 | project_name = var.project_name 13 | project_user_name = var.project_user_name 14 | user_password = var.user_password 15 | } 16 | 17 | # Инициализация провайдера Openstack 18 | provider "openstack" { 19 | user_name = var.project_user_name 20 | tenant_name = var.project_name 21 | password = var.user_password 22 | project_domain_name = var.domain_name 23 | user_domain_name = var.domain_name 24 | auth_url = var.auth_url 25 | region = substr(var.server_zone, 0, 4) 26 | } 27 | 28 | # Создание ресурсов Openstack 29 | module "server_remote_root_disk" { 30 | source = "../../../modules/cloud/server_remote_root_disk" 31 | 32 | server_name = var.server_name 33 | server_zone = var.server_zone 34 | server_vcpus = var.server_vcpus 35 | server_ram_mb = var.server_ram_mb 36 | server_root_disk_gb = var.server_root_disk_gb 37 | server_volume_type = var.server_volume_type 38 | server_volume_metadata = var.server_volume_metadata 39 | server_image_name = var.server_image_name 40 | server_ssh_key = file("~/.ssh/id_rsa.pub") 41 | server_ssh_key_user = module.selectel_section.user_id 42 | depends_on = [ 43 | module.selectel_section, 44 | ] 45 | } 46 | -------------------------------------------------------------------------------- /examples/cloud/server_remote_root_disk_two_ports/main.tf: -------------------------------------------------------------------------------- 1 | # Initialize Selectel provider with service user credentials. 2 | provider "selectel" { 3 | username = var.username 4 | password = var.password 5 | domain_name = var.domain_name 6 | } 7 | 8 | # Create the main project with user. 9 | # This module should be applied first. 10 | module "project_with_user" { 11 | source = "../../../modules/cloud/project_with_user" 12 | 13 | project_name = var.project_name 14 | project_user_name = var.project_user_name 15 | user_password = var.user_password 16 | } 17 | 18 | # Initialize Openstack provider. 19 | provider "openstack" { 20 | user_name = var.project_user_name 21 | tenant_name = var.project_name 22 | password = var.user_password 23 | project_domain_name = var.domain_name 24 | user_domain_name = var.domain_name 25 | auth_url = var.auth_url 26 | region = var.region 27 | } 28 | 29 | # Create an OpenStack Compute instance. 30 | module "server_remote_root_disk_two_ports" { 31 | source = "../../../modules/cloud/server_remote_root_disk_two_ports" 32 | 33 | # OpenStack Instance parameters. 34 | server_name = var.server_name 35 | server_zone = var.server_zone 36 | server_vcpus = var.server_vcpus 37 | server_ram_mb = var.server_ram_mb 38 | server_root_disk_gb = var.server_root_disk_gb 39 | server_volume_type = var.server_volume_type 40 | server_image_name = var.server_image_name 41 | server_ssh_key = file("~/.ssh/id_rsa.pub") 42 | server_ssh_key_user = module.project_with_user.user_id 43 | 44 | depends_on = [ 45 | module.project_with_user, 46 | ] 47 | } 48 | -------------------------------------------------------------------------------- /examples/cloud/preemptible_server_with_gpu/main.tf: -------------------------------------------------------------------------------- 1 | # Инициализация провайдера Selectel 2 | provider "selectel" { 3 | username = var.username 4 | password = var.password 5 | domain_name = var.domain_name 6 | } 7 | 8 | # Создание проекта, пользователя и роли 9 | module "selectel_section" { 10 | source = "../../../modules/cloud/project_with_user" 11 | 12 | project_name = var.project_name 13 | project_user_name = var.project_user_name 14 | user_password = var.user_password 15 | } 16 | 17 | # Инициализация провайдера Openstack 18 | provider "openstack" { 19 | user_name = var.project_user_name 20 | tenant_name = var.project_name 21 | password = var.user_password 22 | project_domain_name = var.domain_name 23 | user_domain_name = var.domain_name 24 | auth_url = var.auth_url 25 | region = substr(var.server_zone, 0, 4) 26 | } 27 | 28 | # Создание прерываемого сервера. 29 | module "preemptible_server" { 30 | source = "../../../modules/cloud/server_remote_root_disk_with_gpu" 31 | 32 | server_name = var.server_name 33 | server_zone = var.server_zone 34 | flavor_id = var.flavor_id 35 | server_root_disk_gb = var.server_root_disk_gb 36 | server_volume_type = var.server_volume_type 37 | server_image_name = var.server_image_name 38 | server_ssh_key = file("~/.ssh/id_rsa.pub") 39 | server_ssh_key_user = module.selectel_section.user_id 40 | depends_on = [ 41 | module.selectel_section, 42 | ] 43 | 44 | # Для смены прерываемого сервера на обычный используйте 45 | # переменную server_no_preemptible_tag: 46 | # server_preemptible_tag = var.server_no_preemptible_tag 47 | server_preemptible_tag = var.server_preemptible_tag 48 | } 49 | -------------------------------------------------------------------------------- /examples/cloud/server_local_root_disk/main.tf: -------------------------------------------------------------------------------- 1 | # Initialize Selectel provider with service user credentials. 2 | provider "selectel" { 3 | username = var.username 4 | password = var.password 5 | domain_name = var.domain_name 6 | } 7 | 8 | # Create the main project with user. 9 | # This module should be applied first: 10 | # terraform apply -target=module.project_with_user 11 | module "project_with_user" { 12 | providers = { 13 | selectel = selectel, 14 | } 15 | source = "../../../modules/cloud/project_with_user" 16 | 17 | project_name = var.project_name 18 | project_user_name = var.project_user_name 19 | user_password = var.user_password 20 | } 21 | 22 | # Initialize Openstack provider. 23 | provider "openstack" { 24 | user_name = var.project_user_name 25 | tenant_name = var.project_name 26 | password = var.user_password 27 | project_domain_name = var.domain_name 28 | user_domain_name = var.domain_name 29 | auth_url = var.auth_url 30 | region = var.region 31 | } 32 | 33 | # Create an OpenStack Compute instance. 34 | module "server_local_root_disk" { 35 | providers = { 36 | openstack = openstack, 37 | } 38 | source = "../../../modules/cloud/server_local_root_disk" 39 | 40 | # OpenStack Instance parameters. 41 | server_name = var.server_name 42 | server_zone = var.server_zone 43 | server_vcpus = var.server_vcpus 44 | server_ram_mb = var.server_ram_mb 45 | server_root_disk_gb = var.server_root_disk_gb 46 | server_image_name = var.server_image_name 47 | server_ssh_key = file("~/.ssh/id_rsa.pub") 48 | server_ssh_key_user = module.project_with_user.user_id 49 | 50 | depends_on = [ 51 | module.project_with_user, 52 | ] 53 | } 54 | -------------------------------------------------------------------------------- /examples/cloud/preemptible_server/main.tf: -------------------------------------------------------------------------------- 1 | # Инициализация провайдера Selectel 2 | provider "selectel" { 3 | username = var.username 4 | password = var.password 5 | domain_name = var.domain_name 6 | } 7 | 8 | # Создание проекта, пользователя и роли 9 | module "selectel_section" { 10 | source = "../../../modules/cloud/project_with_user" 11 | 12 | project_name = var.project_name 13 | project_user_name = var.project_user_name 14 | user_password = var.user_password 15 | } 16 | 17 | # Инициализация провайдера Openstack 18 | provider "openstack" { 19 | user_name = var.project_user_name 20 | tenant_name = var.project_name 21 | password = var.user_password 22 | project_domain_name = var.domain_name 23 | user_domain_name = var.domain_name 24 | auth_url = var.auth_url 25 | region = substr(var.server_zone, 0, 4) 26 | } 27 | 28 | # Создание прерываемого сервера. 29 | module "preemptible_server" { 30 | source = "../../../modules/vpc/server_remote_root_disk" 31 | 32 | server_name = var.server_name 33 | server_zone = var.server_zone 34 | server_vcpus = var.server_vcpus 35 | server_ram_mb = var.server_ram_mb 36 | server_root_disk_gb = var.server_root_disk_gb 37 | server_volume_type = var.server_volume_type 38 | server_image_name = var.server_image_name 39 | server_ssh_key = file("~/.ssh/id_rsa.pub") 40 | server_ssh_key_user = module.selectel_section.user_id 41 | depends_on = [ 42 | module.selectel_section, 43 | ] 44 | 45 | # Для смены прерываемого сервера на обычный используйте 46 | # переменную server_no_preemptible_tag: 47 | # server_preemptible_tag = var.server_no_preemptible_tag 48 | server_preemptible_tag = var.server_preemptible_tag 49 | } 50 | -------------------------------------------------------------------------------- /examples/cloud/server_local_and_remote_disks/main.tf: -------------------------------------------------------------------------------- 1 | # Initialize Selectel provider with service user. 2 | provider "selectel" { 3 | username = var.username 4 | password = var.password 5 | domain_name = var.domain_name 6 | } 7 | 8 | # Create the main project with user. 9 | # This module should be applied first: 10 | # terraform apply -target=module.project_with_user 11 | module "project_with_user" { 12 | source = "../../../modules/cloud/project_with_user" 13 | 14 | project_name = var.project_name 15 | project_user_name = var.project_user_name 16 | user_password = var.user_password 17 | } 18 | 19 | # Initialize Openstack provider. 20 | provider "openstack" { 21 | user_name = var.project_user_name 22 | tenant_name = var.project_name 23 | password = var.user_password 24 | project_domain_name = var.domain_name 25 | user_domain_name = var.domain_name 26 | auth_url = var.auth_url 27 | region = var.region 28 | } 29 | 30 | # Create an OpenStack Compute instance. 31 | module "server_local_and_remote_disks" { 32 | source = "../../../modules/cloud/server_local_and_remote_disks" 33 | 34 | # OpenStack Instance parameters. 35 | server_name = var.server_name 36 | server_zone = var.server_zone 37 | server_vcpus = var.server_vcpus 38 | server_ram_mb = var.server_ram_mb 39 | server_root_disk_gb = var.server_root_disk_gb 40 | server_second_disk_gb = var.server_second_disk_gb 41 | server_second_volume_type = var.server_second_volume_type 42 | server_image_name = var.server_image_name 43 | server_ssh_key = file("~/.ssh/id_rsa.pub") 44 | server_ssh_key_user = module.project_with_user.user_id 45 | 46 | depends_on = [ 47 | module.project_with_user, 48 | ] 49 | } 50 | -------------------------------------------------------------------------------- /examples/cloud/server_local_root_disk_with_security_group/main.tf: -------------------------------------------------------------------------------- 1 | # Initialize Selectel provider with service user credentials. 2 | provider "selectel" { 3 | username = var.username 4 | password = var.password 5 | domain_name = var.domain_name 6 | auth_region = var.region 7 | auth_url = var.auth_url 8 | } 9 | 10 | # Create the main project with user. 11 | # This module should be applied first: 12 | # terraform apply -target=module.project_with_user 13 | module "project_with_user" { 14 | providers = { 15 | selectel = selectel, 16 | } 17 | source = "../../../modules/cloud/project_with_user" 18 | 19 | project_name = var.project_name 20 | project_user_name = var.project_user_name 21 | user_password = var.user_password 22 | } 23 | 24 | # Initialize Openstack provider. 25 | provider "openstack" { 26 | user_name = var.project_user_name 27 | tenant_name = var.project_name 28 | password = var.user_password 29 | project_domain_name = var.domain_name 30 | user_domain_name = var.domain_name 31 | auth_url = var.auth_url 32 | region = var.region 33 | } 34 | 35 | # Create an OpenStack Compute instance. 36 | module "server_local_root_disk" { 37 | providers = { 38 | openstack = openstack, 39 | } 40 | source = "../../../modules/cloud/server_local_root_disk_with_security_group" 41 | 42 | # OpenStack Instance parameters. 43 | server_name = var.server_name 44 | server_zone = var.server_zone 45 | server_vcpus = var.server_vcpus 46 | server_ram_mb = var.server_ram_mb 47 | server_root_disk_gb = var.server_root_disk_gb 48 | server_image_name = var.server_image_name 49 | server_ssh_key = file("~/.ssh/id_rsa.pub") 50 | server_ssh_key_user = module.project_with_user.user_id 51 | 52 | depends_on = [ 53 | module.project_with_user, 54 | ] 55 | } 56 | -------------------------------------------------------------------------------- /modules/cloud/server_local_root_disk/main.tf: -------------------------------------------------------------------------------- 1 | resource "random_string" "random_name" { 2 | length = 5 3 | special = false 4 | } 5 | 6 | module "flavor" { 7 | source = "../flavor" 8 | flavor_name = "flavor-${random_string.random_name.result}" 9 | flavor_vcpus = var.server_vcpus 10 | flavor_ram_mb = var.server_ram_mb 11 | flavor_local_disk_gb = var.server_root_disk_gb 12 | } 13 | 14 | module "nat" { 15 | source = "../nat" 16 | } 17 | 18 | resource "openstack_networking_port_v2" "port_1" { 19 | name = "${var.server_name}-eth0" 20 | network_id = module.nat.network_id 21 | 22 | fixed_ip { 23 | subnet_id = module.nat.subnet_id 24 | } 25 | } 26 | 27 | module "image_datasource" { 28 | source = "../image_datasource" 29 | image_name = var.server_image_name 30 | } 31 | 32 | module "keypair" { 33 | source = "../keypair" 34 | keypair_name = "keypair-${random_string.random_name.result}" 35 | keypair_public_key = var.server_ssh_key 36 | keypair_user_id = var.server_ssh_key_user 37 | } 38 | 39 | resource "openstack_compute_instance_v2" "instance_1" { 40 | name = var.server_name 41 | image_id = module.image_datasource.image_id 42 | flavor_id = module.flavor.flavor_id 43 | key_pair = module.keypair.keypair_name 44 | availability_zone = var.server_zone 45 | 46 | network { 47 | port = openstack_networking_port_v2.port_1.id 48 | } 49 | 50 | lifecycle { 51 | ignore_changes = [image_id] 52 | } 53 | 54 | vendor_options { 55 | ignore_resize_confirmation = true 56 | } 57 | } 58 | 59 | module "floatingip" { 60 | source = "../floatingip" 61 | } 62 | 63 | resource "openstack_networking_floatingip_associate_v2" "association_1" { 64 | port_id = openstack_networking_port_v2.port_1.id 65 | floating_ip = module.floatingip.floatingip_address 66 | } 67 | -------------------------------------------------------------------------------- /examples/cloud/server_windows/main.tf: -------------------------------------------------------------------------------- 1 | # Инициализация провайдера Selectel 2 | provider "selectel" { 3 | username = var.username 4 | password = var.password 5 | domain_name = var.domain_name 6 | } 7 | 8 | # Создание проекта, пользователя и роли 9 | module "selectel_section" { 10 | source = "../../../modules/cloud/project_with_user" 11 | 12 | project_name = var.project_name 13 | project_user_name = var.project_user_name 14 | user_password = var.user_password 15 | } 16 | 17 | # Создание лицензии Windows 18 | module "win_license" { 19 | source = "../../../modules/cloud/license" 20 | 21 | license_project_id = module.selectel_section.project_id 22 | license_region = substr(var.server_zone, 0, 4) 23 | license_type = var.license_type 24 | } 25 | 26 | # Инициализация провайдера Openstack 27 | provider "openstack" { 28 | user_name = var.project_user_name 29 | tenant_name = var.project_name 30 | password = var.user_password 31 | project_domain_name = var.domain_name 32 | user_domain_name = var.domain_name 33 | auth_url = var.auth_url 34 | region = substr(var.server_zone, 0, 4) 35 | } 36 | 37 | # Создание ресурсов Openstack 38 | module "server_remote_root_disk" { 39 | source = "../../../modules/cloud/server_remote_root_disk" 40 | 41 | server_name = var.server_name 42 | server_zone = var.server_zone 43 | server_vcpus = var.server_vcpus 44 | server_ram_mb = var.server_ram_mb 45 | server_root_disk_gb = var.server_root_disk_gb 46 | server_volume_type = var.server_volume_type 47 | server_image_name = var.server_image_name 48 | server_ssh_key = file("~/.ssh/id_rsa.pub") 49 | server_ssh_key_user = module.selectel_section.user_id 50 | server_license_type = var.license_type 51 | depends_on = [ 52 | module.selectel_section, 53 | module.win_license, 54 | ] 55 | } 56 | -------------------------------------------------------------------------------- /examples/cloud/server_remote_root_disk_and_attached_share/main.tf: -------------------------------------------------------------------------------- 1 | # Инициализация провайдера Selectel 2 | provider "selectel" { 3 | username = var.username 4 | password = var.password 5 | domain_name = var.domain_name 6 | } 7 | # Создание проекта, пользователя и роли 8 | module "selectel_section" { 9 | providers = { 10 | selectel = selectel, 11 | } 12 | source = "../../../modules/cloud/project_with_user" 13 | 14 | project_name = var.project_name 15 | project_user_name = var.project_user_name 16 | user_password = var.user_password 17 | } 18 | 19 | # Инициализация провайдера Openstack 20 | provider "openstack" { 21 | user_name = var.project_user_name 22 | tenant_name = var.project_name 23 | password = var.user_password 24 | project_domain_name = var.domain_name 25 | user_domain_name = var.domain_name 26 | auth_url = var.auth_url 27 | region = substr(var.server_zone, 0, 4) 28 | } 29 | 30 | # Create a server_remote_root_disk_and_attached_share and server, then mount server_remote_root_disk_and_attached_share to server 31 | module "server_remote_root_disk_connected_share" { 32 | providers = { 33 | openstack = openstack, 34 | } 35 | source = "../../../modules/cloud/server_remote_root_disk_and_attached_share" 36 | 37 | base_name = var.base_name 38 | 39 | flavor_id = var.flavor_id 40 | server_image_name = var.server_image_name 41 | server_volume_type = var.server_volume_type 42 | server_volume_size = var.server_volume_size 43 | server_region = var.server_region 44 | server_zone = var.server_zone 45 | 46 | subnet_cidr = var.subnet_cidr 47 | 48 | ssh_key_path = var.ssh_key_path 49 | ssh_user = var.ssh_user 50 | 51 | share_type = var.share_type 52 | share_size = var.share_size 53 | share_proto = var.share_proto 54 | share_allowed_ip = var.share_allowed_ip 55 | 56 | depends_on = [ 57 | module.selectel_section, 58 | ] 59 | } 60 | -------------------------------------------------------------------------------- /modules/cloud/multiple_servers/main.tf: -------------------------------------------------------------------------------- 1 | resource "random_string" "random_name" { 2 | length = 5 3 | special = false 4 | } 5 | 6 | resource "random_string" "random_server_name" { 7 | count = var.replicas_count 8 | length = 5 9 | special = false 10 | } 11 | 12 | module "nat" { 13 | source = "../nat" 14 | } 15 | 16 | module "flavor" { 17 | source = "../flavor" 18 | flavor_name = "flavor-${random_string.random_name.result}" 19 | flavor_vcpus = var.server_vcpus 20 | flavor_ram_mb = var.server_ram_mb 21 | flavor_local_disk_gb = var.server_root_disk_gb 22 | } 23 | 24 | module "image_datasource" { 25 | source = "../image_datasource" 26 | image_name = var.server_image_name 27 | } 28 | 29 | resource "openstack_networking_port_v2" "port" { 30 | count = var.replicas_count 31 | name = "${var.server_name}-${random_string.random_server_name[count.index].result}-eth0" 32 | network_id = module.nat.network_id 33 | 34 | fixed_ip { 35 | subnet_id = module.nat.subnet_id 36 | } 37 | } 38 | 39 | module "keypair" { 40 | source = "../keypair" 41 | keypair_name = "keypair-${random_string.random_name.result}" 42 | keypair_public_key = var.server_ssh_key 43 | keypair_user_id = var.server_ssh_key_user 44 | } 45 | 46 | resource "openstack_compute_instance_v2" "instance" { 47 | count = var.replicas_count 48 | name = "${var.server_name}-${random_string.random_server_name[count.index].result}" 49 | image_id = module.image_datasource.image_id 50 | flavor_id = module.flavor.flavor_id 51 | key_pair = module.keypair.keypair_name 52 | availability_zone = var.server_zone 53 | 54 | network { 55 | port = openstack_networking_port_v2.port[count.index].id 56 | } 57 | 58 | lifecycle { 59 | ignore_changes = [image_id] 60 | } 61 | 62 | vendor_options { 63 | ignore_resize_confirmation = true 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /modules/mks/nodegroup_local_disk/README.md: -------------------------------------------------------------------------------- 1 | # Nodegroup with Local Disk 2 | 3 | Terraform module for creating a single Selectel MKS nodegroup with local disk. 4 | 5 | ## Variables 6 | 7 | * `cluster_id` - ID of the associated MKS cluster. 8 | 9 | * `project_id` - ID of the associated Selectel Cloud project. 10 | 11 | * `region` - A Selectel Cloud region of where the nodegroup is located. 12 | 13 | * `availability_zone` - An OpenStack availability zone for all nodes in the nodegroup. 14 | 15 | * `nodes_count` - Count of worker nodes in the nodegroup (Default: 1). 16 | 17 | * `keypair_name` - Name of the SSH key that will be added to all nodes. 18 | 19 | * `affinity_policy` - Parameter to tune nodes affinity policy. 20 | 21 | * `cpus` - CPU count for each node (Default: 1). 22 | 23 | * `ram_mb` - RAM count for each node (MB) (Default: 4096). 24 | 25 | * `volume_gb` - Volume size for each node (GB) (Default: 20). 26 | 27 | * `user_data` - (Optional) Base64-encoded script that worker nodes run on the first boot. Changing this creates a new node group. Learn more about [User data](https://docs.selectel.ru/en/cloud/managed-kubernetes/node-groups/user-data/). 28 | 29 | * `install_nvidia_device_plugin` - (Required) Enables or disables installation of the NVIDIA Device Plugin and GPU drivers. 30 | Boolean flag: 31 | * `true` — for flavors with GPU enables installation of the NVIDIA Device Plugin and GPU drivers. 32 | * `false` — for flavors without GPU and flavors with GPU disables installation of the NVIDIA Device Plugin and GPU drivers. Learn more about [manual installation of GPU drivers](https://docs.selectel.ru/en/cloud/managed-kubernetes/node-groups/install-gpu-drivers/). 33 | 34 | * `labels` - List of user-defined Kubernetes labels, that will be applied for each node in the group. 35 | 36 | * `taints` - List of user-defined Kubernetes taints, that will be applied for each node in the group. 37 | 38 | ## Outputs 39 | 40 | * `nodegroup_id` - ID of the created MKS nodegroup. 41 | -------------------------------------------------------------------------------- /examples/mks/cluster_one_nodegroup/vars.tf: -------------------------------------------------------------------------------- 1 | variable "username" {} 2 | 3 | variable "password" {} 4 | 5 | variable "domain_name" {} 6 | 7 | variable "project_name" { 8 | default = "tf-project" 9 | } 10 | 11 | variable "cluster_name" { 12 | default = "tf-cluster" 13 | } 14 | 15 | variable "region" { 16 | default = "ru-9" 17 | } 18 | 19 | variable "enable_autorepair" { 20 | default = true 21 | } 22 | 23 | variable "enable_patch_version_auto_upgrade" { 24 | default = true 25 | } 26 | 27 | variable "network_id" { 28 | default = "" 29 | } 30 | 31 | variable "subnet_id" { 32 | default = "" 33 | } 34 | 35 | variable "maintenance_window_start" { 36 | default = "" 37 | } 38 | 39 | variable "availability_zone" { 40 | default = "ru-9a" 41 | } 42 | 43 | variable "nodes_count" { 44 | default = 3 45 | } 46 | 47 | variable "keypair_name" { 48 | default = "" 49 | } 50 | 51 | variable "affinity_policy" { 52 | default = "" 53 | } 54 | 55 | variable "cpus" { 56 | default = 2 57 | } 58 | 59 | variable "ram_mb" { 60 | default = 4096 61 | } 62 | 63 | variable "volume_gb" { 64 | default = 30 65 | } 66 | 67 | variable "volume_type" { 68 | default = "fast.ru-9a" 69 | } 70 | 71 | variable "user_data" { 72 | default = "IyEvYmluL2Jhc2ggLXYKYXB0IC15IHVwZGF0ZQphcHQgLXkgaW5zdGFsbCBtdHI=" 73 | } 74 | 75 | variable "install_nvidia_device_plugin" { 76 | default = false 77 | } 78 | 79 | variable "labels" { 80 | default = { 81 | "label1" : "value1", 82 | "label2" : "value2" 83 | } 84 | } 85 | 86 | variable "taints" { 87 | type = list(object({ 88 | key = string 89 | value = string 90 | effect = string 91 | })) 92 | default = [{ 93 | effect = "NoSchedule" 94 | key = "key3" 95 | value = "value3" 96 | }, 97 | { 98 | effect = "NoSchedule" 99 | key = "key2" 100 | value = "value2" 101 | }] 102 | } 103 | 104 | variable "enable_audit_logs" { 105 | default = false 106 | } 107 | -------------------------------------------------------------------------------- /modules/mks/nodegroup/README.md: -------------------------------------------------------------------------------- 1 | # Nodegroup 2 | 3 | Terraform module for creating a single Selectel MKS nodegroup. 4 | 5 | ## Variables 6 | 7 | * `cluster_id` - ID of the associated MKS cluster. 8 | 9 | * `project_id` - ID of the associated Selectel Cloud project. 10 | 11 | * `region` - A Selectel Cloud region of where the nodegroup is located. 12 | 13 | * `availability_zone` - An OpenStack availability zone for all nodes in the nodegroup. 14 | 15 | * `nodes_count` - Count of worker nodes in the nodegroup (Default: 1). 16 | 17 | * `keypair_name` - Name of the SSH key that will be added to all nodes. 18 | 19 | * `affinity_policy` - Parameter to tune nodes affinity policy. 20 | 21 | * `cpus` - CPU count for each node (Default: 1). 22 | 23 | * `ram_mb` - RAM count for each node (MB) (Default: 4096). 24 | 25 | * `volume_gb` - Volume size for each node (GB) (Default: 20). 26 | 27 | * `volume_type` - An OpenStack blockstorage volume type for each node. 28 | 29 | * `user_data` - (Optional) Base64-encoded script that worker nodes run on the first boot. Changing this creates a new node group. Learn more about [User data](https://docs.selectel.ru/en/cloud/managed-kubernetes/node-groups/user-data/). 30 | 31 | * `install_nvidia_device_plugin` - (Required) Enables or disables installation of the NVIDIA Device Plugin and GPU drivers. 32 | Boolean flag: 33 | * `true` — for flavors with GPU enables installation of the NVIDIA Device Plugin and GPU drivers. 34 | * `false` — for flavors without GPU and flavors with GPU disables installation of the NVIDIA Device Plugin and GPU drivers. Learn more about [manual installation of GPU drivers](https://docs.selectel.ru/en/cloud/managed-kubernetes/node-groups/install-gpu-drivers/). 35 | 36 | * `labels` - List of user-defined Kubernetes labels, that will be applied for each node in the group. 37 | 38 | * `taints` - List of user-defined Kubernetes taints, that will be applied for each node in the group. 39 | 40 | ## Outputs 41 | 42 | * `nodegroup_id` - ID of the created MKS nodegroup. 43 | -------------------------------------------------------------------------------- /examples/cloud/server_remote_root_disk_with_server_group/main.tf: -------------------------------------------------------------------------------- 1 | # Инициализация terraform провайдера Selectel 2 | provider "selectel" { 3 | username = var.username 4 | password = var.password 5 | domain_name = var.domain_name 6 | } 7 | 8 | # Создание проекта, пользователя и роли 9 | module "selectel_section" { 10 | providers = { 11 | selectel = selectel, 12 | } 13 | source = "../../../modules/cloud/project_with_user" 14 | 15 | project_name = var.project_name 16 | project_user_name = var.project_user_name 17 | user_password = var.user_password 18 | } 19 | 20 | # Инициализация провайдера Openstack 21 | provider "openstack" { 22 | user_name = var.project_user_name 23 | tenant_name = var.project_name 24 | password = var.user_password 25 | project_domain_name = var.domain_name 26 | user_domain_name = var.domain_name 27 | auth_url = var.auth_url 28 | region = substr(var.server_zone, 0, 4) 29 | } 30 | 31 | # Создание сервер группы 32 | 33 | module "custom_server_group" { 34 | source = "../../../modules/cloud/server_group" 35 | 36 | server_group_name = var.server_group_name 37 | server_group_policy = var.server_group_policy 38 | 39 | depends_on = [ 40 | module.selectel_section, 41 | ] 42 | } 43 | 44 | # Создание инстанса с сервер группой 45 | module "server_remote_root_disk" { 46 | source = "../../../modules/cloud/server_remote_root_disk" 47 | 48 | server_name = var.server_name 49 | server_zone = var.server_zone 50 | server_vcpus = var.server_vcpus 51 | server_ram_mb = var.server_ram_mb 52 | server_root_disk_gb = var.server_root_disk_gb 53 | server_volume_type = var.server_volume_type 54 | server_image_name = var.server_image_name 55 | server_ssh_key = file("~/.ssh/id_rsa.pub") 56 | server_ssh_key_user = module.selectel_section.user_id 57 | server_group_id = module.custom_server_group.server_group_id 58 | 59 | depends_on = [ 60 | module.selectel_section, 61 | module.custom_server_group, 62 | ] 63 | } 64 | -------------------------------------------------------------------------------- /modules/cloud/lb_components_https/main.tf: -------------------------------------------------------------------------------- 1 | resource "openstack_lb_listener_v2" "listener" { 2 | name = "Listener" 3 | protocol = var.lb_components["listener_protocol"] 4 | protocol_port = var.lb_components["listener_protocol_port"] 5 | loadbalancer_id = var.loadbalancer_id 6 | default_tls_container_ref = var.tls_container_ref 7 | } 8 | 9 | resource "openstack_lb_pool_v2" "pool" { 10 | name = "Pool" 11 | protocol = var.lb_components["pool_protocol"] 12 | lb_method = var.lb_components["pool_lb_method"] 13 | listener_id = openstack_lb_listener_v2.listener.id 14 | 15 | persistence { 16 | type = var.lb_components["pool_cookie_type"] 17 | cookie_name = var.lb_components["pool_cookie_name"] 18 | } 19 | } 20 | 21 | resource "openstack_lb_monitor_v2" "monitor" { 22 | name = "Monitor" 23 | pool_id = openstack_lb_pool_v2.pool.id 24 | type = var.lb_components["monitor_type"] 25 | url_path = var.lb_components["monitor_url_path"] 26 | delay = var.lb_components["monitor_delay"] 27 | timeout = var.lb_components["monitor_timeout"] 28 | max_retries = var.lb_components["monitor_retries"] 29 | } 30 | 31 | resource "openstack_lb_member_v2" "member" { 32 | count = length(var.server_access_ips) 33 | name = "Member" 34 | subnet_id = var.vip_subnet_id 35 | pool_id = openstack_lb_pool_v2.pool.id 36 | address = var.server_access_ips[count.index] 37 | protocol_port = var.lb_components["member_protocol_port"] 38 | } 39 | 40 | resource "openstack_lb_l7policy_v2" "l7policy" { 41 | name = "test" 42 | action = "REDIRECT_TO_URL" 43 | description = "test description" 44 | position = 1 45 | listener_id = openstack_lb_listener_v2.listener.id 46 | redirect_url = "http://www.example.com" 47 | } 48 | 49 | resource "openstack_lb_l7rule_v2" "l7rule_1" { 50 | l7policy_id = openstack_lb_l7policy_v2.l7policy.id 51 | type = "PATH" 52 | compare_type = "EQUAL_TO" 53 | value = "/api" 54 | } 55 | -------------------------------------------------------------------------------- /examples/mks/cluster_one_nodegroup/main.tf: -------------------------------------------------------------------------------- 1 | # Initialize Selectel provider with service user credentials. 2 | provider "selectel" { 3 | username = var.username 4 | password = var.password 5 | domain_name = var.domain_name 6 | } 7 | 8 | module "project" { 9 | source = "../../../modules/cloud/project" 10 | 11 | project_name = var.project_name 12 | } 13 | 14 | data "selectel_mks_kube_versions_v1" "versions" { 15 | project_id = module.project.project_id 16 | region = var.region 17 | } 18 | 19 | module "kubernetes_cluster" { 20 | source = "../../../modules/mks/cluster" 21 | 22 | cluster_name = var.cluster_name 23 | project_id = module.project.project_id 24 | region = var.region 25 | kube_version = data.selectel_mks_kube_versions_v1.versions.default_version 26 | enable_autorepair = var.enable_autorepair 27 | enable_patch_version_auto_upgrade = var.enable_patch_version_auto_upgrade 28 | network_id = var.network_id 29 | subnet_id = var.subnet_id 30 | maintenance_window_start = var.maintenance_window_start 31 | enable_audit_logs = var.enable_audit_logs 32 | } 33 | 34 | module "kubernetes_nodegroup" { 35 | source = "../../../modules/mks/nodegroup" 36 | 37 | cluster_id = module.kubernetes_cluster.cluster_id 38 | project_id = module.kubernetes_cluster.project_id 39 | region = module.kubernetes_cluster.region 40 | availability_zone = var.availability_zone 41 | nodes_count = var.nodes_count 42 | keypair_name = var.keypair_name 43 | affinity_policy = var.affinity_policy 44 | cpus = var.cpus 45 | ram_mb = var.ram_mb 46 | volume_gb = var.volume_gb 47 | volume_type = var.volume_type 48 | user_data = var.user_data 49 | install_nvidia_device_plugin = var.install_nvidia_device_plugin 50 | labels = var.labels 51 | taints = var.taints 52 | } 53 | -------------------------------------------------------------------------------- /modules/cloud/lb_components_http/main.tf: -------------------------------------------------------------------------------- 1 | resource "openstack_lb_listener_v2" "listener" { 2 | name = "Listener" 3 | protocol = var.lb_components["listener_protocol"] 4 | protocol_port = var.lb_components["listener_protocol_port"] 5 | loadbalancer_id = var.loadbalancer_id 6 | insert_headers = { 7 | X-Forwarded-For = var.lb_components["listener_x_forwarded_for"] 8 | X-Forwarded-Port = var.lb_components["listener_x_forwarded_port"] 9 | X-Forwarded-Proto = var.lb_components["listener_x_forwarded_proto"] 10 | } 11 | } 12 | 13 | resource "openstack_lb_pool_v2" "pool" { 14 | name = "Pool" 15 | protocol = var.lb_components["pool_protocol"] 16 | lb_method = var.lb_components["pool_lb_method"] 17 | listener_id = openstack_lb_listener_v2.listener.id 18 | 19 | persistence { 20 | type = var.lb_components["pool_cookie_type"] 21 | cookie_name = var.lb_components["pool_cookie_name"] 22 | } 23 | } 24 | 25 | resource "openstack_lb_monitor_v2" "monitor" { 26 | name = "Monitor" 27 | pool_id = openstack_lb_pool_v2.pool.id 28 | type = var.lb_components["monitor_type"] 29 | url_path = var.lb_components["monitor_url_path"] 30 | delay = var.lb_components["monitor_delay"] 31 | timeout = var.lb_components["monitor_timeout"] 32 | max_retries = var.lb_components["monitor_retries"] 33 | } 34 | 35 | resource "openstack_lb_member_v2" "member" { 36 | count = length(var.server_access_ips) 37 | name = "Member" 38 | subnet_id = var.vip_subnet_id 39 | pool_id = openstack_lb_pool_v2.pool.id 40 | address = var.server_access_ips[count.index] 41 | protocol_port = var.lb_components["member_protocol_port"] 42 | } 43 | 44 | resource "openstack_lb_l7policy_v2" "l7policy" { 45 | name = "test" 46 | action = "REDIRECT_TO_URL" 47 | description = "test description" 48 | position = 1 49 | listener_id = openstack_lb_listener_v2.listener.id 50 | redirect_url = "http://www.example.com" 51 | } 52 | 53 | resource "openstack_lb_l7rule_v2" "l7rule_1" { 54 | l7policy_id = openstack_lb_l7policy_v2.l7policy.id 55 | type = "PATH" 56 | compare_type = "EQUAL_TO" 57 | value = "/api" 58 | } 59 | -------------------------------------------------------------------------------- /examples/mks/cluster_one_nodegroup_with_net_infra/vars.tf: -------------------------------------------------------------------------------- 1 | variable "username" {} 2 | 3 | variable "password" {} 4 | 5 | variable "domain_name" {} 6 | 7 | variable "auth_url" { 8 | default = "https://cloud.api.selcloud.ru/identity/v3" 9 | } 10 | 11 | variable "project_user_name" { 12 | default = "tf-user" 13 | } 14 | 15 | variable "user_password" {} 16 | 17 | variable "project_name" { 18 | default = "tf-project" 19 | } 20 | 21 | variable "cluster_name" { 22 | default = "tf-cluster" 23 | } 24 | 25 | variable "region" { 26 | default = "ru-9" 27 | } 28 | 29 | variable "subnet_cidr" { 30 | default = "10.222.0.0/16" 31 | } 32 | 33 | variable "enable_autorepair" { 34 | default = true 35 | } 36 | 37 | variable "enable_patch_version_auto_upgrade" { 38 | default = true 39 | } 40 | 41 | variable "network_id" { 42 | default = "" 43 | } 44 | 45 | variable "subnet_id" { 46 | default = "" 47 | } 48 | 49 | variable "maintenance_window_start" { 50 | default = "" 51 | } 52 | 53 | variable "availability_zone" { 54 | default = "ru-9a" 55 | } 56 | 57 | variable "nodes_count" { 58 | default = 2 59 | } 60 | 61 | variable "keypair_name" { 62 | default = "" 63 | } 64 | 65 | variable "affinity_policy" { 66 | default = "" 67 | } 68 | 69 | variable "cpus" { 70 | default = 2 71 | } 72 | 73 | variable "ram_mb" { 74 | default = 4096 75 | } 76 | 77 | variable "volume_gb" { 78 | default = 32 79 | } 80 | 81 | variable "user_data" { 82 | default = "IyEvYmluL2Jhc2ggLXYKYXB0IC15IHVwZGF0ZQphcHQgLXkgaW5zdGFsbCBtdHI=" 83 | } 84 | 85 | variable "install_nvidia_device_plugin" { 86 | default = false 87 | } 88 | 89 | variable "labels" { 90 | default = { 91 | "label1" : "value1", 92 | "label2" : "value2" 93 | } 94 | } 95 | 96 | variable "taints" { 97 | type = list(object({ 98 | key = string 99 | value = string 100 | effect = string 101 | })) 102 | default = [{ 103 | effect = "NoSchedule" 104 | key = "key3" 105 | value = "value3" 106 | }, 107 | { 108 | effect = "NoSchedule" 109 | key = "key2" 110 | value = "value2" 111 | }] 112 | } 113 | 114 | variable "enable_audit_logs" { 115 | default = false 116 | } 117 | -------------------------------------------------------------------------------- /modules/cloud/server_remote_root_disk_with_gpu/main.tf: -------------------------------------------------------------------------------- 1 | resource "random_string" "random_name" { 2 | length = 5 3 | special = false 4 | } 5 | 6 | module "nat" { 7 | source = "../nat" 8 | } 9 | 10 | resource "openstack_networking_port_v2" "port_1" { 11 | name = "${var.server_name}-eth0" 12 | network_id = module.nat.network_id 13 | 14 | fixed_ip { 15 | subnet_id = module.nat.subnet_id 16 | } 17 | } 18 | 19 | module "image_datasource" { 20 | source = "../image_datasource" 21 | image_name = var.server_image_name 22 | } 23 | 24 | module "keypair" { 25 | source = "../keypair" 26 | keypair_name = "keypair-${random_string.random_name.result}" 27 | keypair_public_key = var.server_ssh_key 28 | keypair_user_id = var.server_ssh_key_user 29 | } 30 | 31 | resource "openstack_blockstorage_volume_v3" "volume_1" { 32 | name = "volume-for-${var.server_name}" 33 | size = var.server_root_disk_gb 34 | image_id = module.image_datasource.image_id 35 | volume_type = var.server_volume_type 36 | availability_zone = var.server_zone 37 | 38 | lifecycle { 39 | ignore_changes = [image_id] 40 | } 41 | } 42 | 43 | resource "openstack_compute_instance_v2" "instance_1" { 44 | name = var.server_name 45 | flavor_id = var.flavor_id 46 | key_pair = module.keypair.keypair_name 47 | availability_zone = var.server_zone 48 | 49 | network { 50 | port = openstack_networking_port_v2.port_1.id 51 | } 52 | 53 | dynamic "network" { 54 | for_each = var.server_license_type != "" ? [var.server_license_type] : [] 55 | 56 | content { 57 | name = var.server_license_type 58 | } 59 | } 60 | 61 | block_device { 62 | uuid = openstack_blockstorage_volume_v3.volume_1.id 63 | source_type = "volume" 64 | destination_type = "volume" 65 | boot_index = 0 66 | } 67 | 68 | tags = var.server_preemptible_tag 69 | 70 | vendor_options { 71 | ignore_resize_confirmation = true 72 | } 73 | 74 | dynamic "scheduler_hints" { 75 | for_each = var.server_group_id != "" ? [var.server_group_id] : [] 76 | content { 77 | group = var.server_group_id 78 | } 79 | } 80 | } 81 | 82 | module "floatingip" { 83 | source = "../floatingip" 84 | } 85 | 86 | resource "openstack_networking_floatingip_associate_v2" "association_1" { 87 | port_id = openstack_networking_port_v2.port_1.id 88 | floating_ip = module.floatingip.floatingip_address 89 | } 90 | -------------------------------------------------------------------------------- /modules/cloud/server_local_root_disk_with_security_group/main.tf: -------------------------------------------------------------------------------- 1 | resource "random_string" "random_name" { 2 | length = 5 3 | special = false 4 | } 5 | 6 | module "flavor" { 7 | source = "../flavor" 8 | flavor_name = "flavor-${random_string.random_name.result}" 9 | flavor_vcpus = var.server_vcpus 10 | flavor_ram_mb = var.server_ram_mb 11 | flavor_local_disk_gb = var.server_root_disk_gb 12 | } 13 | 14 | module "nat" { 15 | source = "../nat" 16 | } 17 | 18 | resource "openstack_networking_port_v2" "port_1" { 19 | name = "${var.server_name}-eth0" 20 | network_id = module.nat.network_id 21 | security_group_ids = [module.networking_security_group_1.networking_secgroup_id] 22 | allowed_address_pairs { 23 | ip_address = "0.0.0.0/0" 24 | } 25 | 26 | fixed_ip { 27 | subnet_id = module.nat.subnet_id 28 | } 29 | } 30 | 31 | module "networking_security_group_1" { 32 | source = "../networking_security_group_with_rules" 33 | name = "test_security_group" 34 | } 35 | 36 | # Note: If this resource is used, the port may still have the default security groups 37 | # applied, which are automatically created with the project. 38 | # resource "openstack_networking_port_secgroup_associate_v2" "port_1" { 39 | # port_id = openstack_networking_port_v2.port_1.id 40 | # security_group_ids = [ 41 | # module.networking_security_group_1.networking_secgroup_id, 42 | # ] 43 | # } 44 | 45 | module "image_datasource" { 46 | source = "../image_datasource" 47 | image_name = var.server_image_name 48 | } 49 | 50 | module "keypair" { 51 | source = "../keypair" 52 | keypair_name = "keypair-${random_string.random_name.result}" 53 | keypair_public_key = var.server_ssh_key 54 | keypair_user_id = var.server_ssh_key_user 55 | } 56 | 57 | resource "openstack_compute_instance_v2" "instance_1" { 58 | name = var.server_name 59 | image_id = module.image_datasource.image_id 60 | flavor_id = module.flavor.flavor_id 61 | key_pair = module.keypair.keypair_name 62 | availability_zone = var.server_zone 63 | 64 | network { 65 | port = openstack_networking_port_v2.port_1.id 66 | } 67 | 68 | lifecycle { 69 | ignore_changes = [image_id] 70 | } 71 | 72 | vendor_options { 73 | ignore_resize_confirmation = true 74 | } 75 | } 76 | 77 | module "floatingip" { 78 | source = "../floatingip" 79 | } 80 | 81 | resource "openstack_networking_floatingip_associate_v2" "association_1" { 82 | port_id = openstack_networking_port_v2.port_1.id 83 | floating_ip = module.floatingip.floatingip_address 84 | } 85 | -------------------------------------------------------------------------------- /modules/cloud/server_local_and_remote_disks/main.tf: -------------------------------------------------------------------------------- 1 | resource "random_string" "random_name" { 2 | length = 5 3 | special = false 4 | } 5 | 6 | module "flavor" { 7 | source = "../flavor" 8 | flavor_name = "flavor-${random_string.random_name.result}" 9 | flavor_vcpus = var.server_vcpus 10 | flavor_ram_mb = var.server_ram_mb 11 | flavor_local_disk_gb = var.server_root_disk_gb 12 | } 13 | 14 | module "nat" { 15 | source = "../nat" 16 | } 17 | 18 | resource "openstack_networking_port_v2" "port_1" { 19 | name = "${var.server_name}-eth0" 20 | network_id = module.nat.network_id 21 | 22 | fixed_ip { 23 | subnet_id = module.nat.subnet_id 24 | } 25 | } 26 | 27 | module "image_datasource" { 28 | source = "../image_datasource" 29 | image_name = var.server_image_name 30 | } 31 | 32 | module "keypair" { 33 | source = "../keypair" 34 | keypair_name = "keypair-${random_string.random_name.result}" 35 | keypair_public_key = var.server_ssh_key 36 | keypair_user_id = var.server_ssh_key_user 37 | } 38 | 39 | resource "openstack_blockstorage_volume_v3" "volume_1" { 40 | name = "volume-for-${var.server_name}" 41 | size = var.server_second_disk_gb 42 | image_id = module.image_datasource.image_id 43 | volume_type = var.server_second_volume_type 44 | availability_zone = var.server_zone 45 | 46 | lifecycle { 47 | ignore_changes = [image_id] 48 | } 49 | } 50 | 51 | resource "openstack_compute_instance_v2" "instance_1" { 52 | name = var.server_name 53 | image_id = module.image_datasource.image_id 54 | flavor_id = module.flavor.flavor_id 55 | key_pair = module.keypair.keypair_name 56 | availability_zone = var.server_zone 57 | 58 | network { 59 | port = openstack_networking_port_v2.port_1.id 60 | } 61 | 62 | block_device { 63 | uuid = module.image_datasource.image_id 64 | source_type = "image" 65 | destination_type = "local" 66 | boot_index = 0 67 | } 68 | 69 | block_device { 70 | uuid = openstack_blockstorage_volume_v3.volume_1.id 71 | source_type = "volume" 72 | destination_type = "volume" 73 | boot_index = -1 74 | } 75 | 76 | vendor_options { 77 | ignore_resize_confirmation = true 78 | } 79 | } 80 | 81 | module "floatingip" { 82 | source = "../floatingip" 83 | } 84 | 85 | resource "openstack_networking_floatingip_associate_v2" "association_1" { 86 | port_id = openstack_networking_port_v2.port_1.id 87 | floating_ip = module.floatingip.floatingip_address 88 | } 89 | -------------------------------------------------------------------------------- /examples/dbaas/redis_cluster/main.tf: -------------------------------------------------------------------------------- 1 | ################### 2 | # Init Terraform 3 | ################### 4 | 5 | terraform { 6 | required_providers { 7 | selectel = { 8 | source = "selectel/selectel" 9 | version = "~> 4.0.0-aplha" 10 | } 11 | openstack = { 12 | source = "terraform-provider-openstack/openstack" 13 | version = "1.42.0" 14 | } 15 | } 16 | } 17 | 18 | ############################### 19 | # Конфигурация Selectel Провайдера 20 | ############################### 21 | 22 | provider "selectel" { 23 | username = var.username 24 | password = var.password 25 | domain_name = var.domain_name 26 | } 27 | 28 | ############################### 29 | # Конфигурация Openstack Провайдера 30 | ############################### 31 | 32 | provider "openstack" { 33 | user_name = var.username 34 | password = var.password 35 | tenant_id = var.project_id 36 | project_domain_name = var.domain_name 37 | user_domain_name = var.domain_name 38 | auth_url = var.auth_url 39 | region = var.region 40 | } 41 | 42 | ############################### 43 | # Поиск Network and Subnet 44 | ############################### 45 | 46 | data "openstack_networking_network_v2" "my_net" { 47 | name = var.network_name 48 | } 49 | 50 | data "openstack_networking_subnet_v2" "my_subnet" { 51 | network_id = data.openstack_networking_network_v2.my_net.id 52 | } 53 | 54 | ############################### 55 | # Поиск datastore_type 56 | ############################### 57 | 58 | data "selectel_dbaas_datastore_type_v1" "dt" { 59 | project_id = var.project_id 60 | region = var.region 61 | filter { 62 | engine = "redis" 63 | version = "6" 64 | } 65 | } 66 | 67 | ############################### 68 | # Поиск flavor 69 | ############################### 70 | 71 | data "selectel_dbaas_flavor_v1" "flavor" { 72 | project_id = var.project_id 73 | region = var.region 74 | filter { 75 | datastore_type_id = data.selectel_dbaas_datastore_type_v1.dt.datastore_types[0].id 76 | } 77 | } 78 | 79 | ############################### 80 | # Создание Кластера БД 81 | ############################### 82 | 83 | resource "selectel_dbaas_datastore_v1" "datastore_1" { 84 | name = "datastore-1" 85 | project_id = var.project_id 86 | region = var.region 87 | type_id = data.selectel_dbaas_datastore_type_v1.dt.datastore_types[0].id 88 | subnet_id = data.openstack_networking_subnet_v2.my_subnet.id 89 | node_count = 2 90 | redis_password = var.redis_password 91 | flavor_id = data.selectel_dbaas_flavor_v1.flavor.flavors[0].id 92 | config = { 93 | maxmemory-policy = "noeviction" 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /modules/cloud/server_remote_root_disk/main.tf: -------------------------------------------------------------------------------- 1 | resource "random_string" "random_name" { 2 | length = 5 3 | special = false 4 | } 5 | 6 | module "flavor" { 7 | source = "../flavor" 8 | flavor_name = "flavor-${random_string.random_name.result}" 9 | flavor_vcpus = var.server_vcpus 10 | flavor_ram_mb = var.server_ram_mb 11 | } 12 | 13 | module "nat" { 14 | source = "../nat" 15 | } 16 | 17 | resource "openstack_networking_port_v2" "port_1" { 18 | name = "${var.server_name}-eth0" 19 | network_id = module.nat.network_id 20 | 21 | fixed_ip { 22 | subnet_id = module.nat.subnet_id 23 | } 24 | } 25 | 26 | module "image_datasource" { 27 | source = "../image_datasource" 28 | image_name = var.server_image_name 29 | } 30 | 31 | module "keypair" { 32 | source = "../keypair" 33 | keypair_name = "keypair-${random_string.random_name.result}" 34 | keypair_public_key = var.server_ssh_key 35 | keypair_user_id = var.server_ssh_key_user 36 | } 37 | 38 | resource "openstack_blockstorage_volume_v3" "volume_1" { 39 | name = "volume-for-${var.server_name}" 40 | size = var.server_root_disk_gb 41 | image_id = module.image_datasource.image_id 42 | volume_type = var.server_volume_type 43 | availability_zone = var.server_zone 44 | metadata = var.server_volume_metadata 45 | 46 | lifecycle { 47 | ignore_changes = [image_id] 48 | } 49 | } 50 | 51 | resource "openstack_compute_instance_v2" "instance_1" { 52 | name = var.server_name 53 | flavor_id = module.flavor.flavor_id 54 | key_pair = module.keypair.keypair_name 55 | availability_zone = var.server_zone 56 | 57 | network { 58 | port = openstack_networking_port_v2.port_1.id 59 | } 60 | 61 | dynamic "network" { 62 | for_each = var.server_license_type != "" ? [var.server_license_type] : [] 63 | 64 | content { 65 | name = var.server_license_type 66 | } 67 | } 68 | 69 | block_device { 70 | uuid = openstack_blockstorage_volume_v3.volume_1.id 71 | source_type = "volume" 72 | destination_type = "volume" 73 | boot_index = 0 74 | } 75 | 76 | tags = var.server_preemptible_tag 77 | 78 | vendor_options { 79 | ignore_resize_confirmation = true 80 | } 81 | 82 | dynamic "scheduler_hints" { 83 | for_each = var.server_group_id != "" ? [var.server_group_id] : [] 84 | content { 85 | group = var.server_group_id 86 | } 87 | } 88 | } 89 | 90 | module "floatingip" { 91 | source = "../floatingip" 92 | } 93 | 94 | resource "openstack_networking_floatingip_associate_v2" "association_1" { 95 | port_id = openstack_networking_port_v2.port_1.id 96 | floating_ip = module.floatingip.floatingip_address 97 | } 98 | --------------------------------------------------------------------------------