Terraform шаблоны для создания инстанса в облаке

Описание Terraform шаблонов для создания инстансов с различными конфигурациями сети

Эти шаблоны можно использовать для создания инстанса с помощью Terraform. ff

Инструкция по установке Terraform и его базовым операциям доступна по ссылке.

В официальной документации Terraform можно найти более подробную информацию.

CentOS 7 (настройка инстанса с серой и белой сетью)

#### Configure the OpenStack Provider ####

provider "openstack" {

user_name = ""

tenant_name = ""

password = ""

auth_url = "https://auth.pscloud.io/v3/"

region = "kz-ala-1"

}

#### End config block ####

#### Vars ####

variable "centos_7_image" {

default = "22e935a1-dffe-43d5-939f-98b5a2c92771"

}

variable "os_tenant_network" {

default = ""

}

#### End vars block####

#### Create network and subnet ####

resource "openstack_networking_network_v2" "network_name" {

name = "network_name"

admin_state_up = "true"

}

resource "openstack_networking_subnet_v2" "subnet_name" {

name = "subnet_name"

network_id = openstack_networking_network_v2.network_name.id

cidr = "192.168.0.0/24"

ip_version = 4

dns_nameservers = ["195.210.46.132", "195.210.46.195"]

depends_on = [openstack_networking_network_v2.network_name]

}

#### End Create network and subnet block ####

#### Security ####

resource "openstack_compute_keypair_v2" "keypair_name" {

name = "keypair_name"

public_key = ""

}

resource "openstack_compute_secgroup_v2" "sg_name" {

name = "sg_name"

description = "security group for name"

rule {

from_port = 22

to_port = 22

ip_protocol = "tcp"

cidr = "0.0.0.0/0"

}

rule {

from_port = -1

to_port = -1

ip_protocol = "icmp"

cidr = "0.0.0.0/0"

}

}

#### End security block ####

#### create instance ####

resource "openstack_blockstorage_volume_v3" "volume_name_with_os" {

name = "volume_name_with_os"

description = ""

size = 30

volume_type = "ceph-ssd"

image_id = var.centos_7_image

enable_online_resize = true

}

resource "openstack_blockstorage_volume_v3" "additional_volume_name" {

name = "additional_volume_name"

description = ""

size = 100

volume_type = "ceph-ssd"

enable_online_resize = true

}

resource "openstack_compute_instance_v2" "instance_name" {

name = "instance_name"

flavor_name = "d1.ram4cpu1"

key_pair = "keypair_name"

security_groups = ["sg_name"]

config_drive = true

user_data = <<-EOF

#cloud-config

password: your password here

chpasswd: { expire: False }

ssh_pwauth: True

EOF

block_device {

uuid = openstack_blockstorage_volume_v3.volume_name_with_os.id

source_type = "volume"

boot_index = 0

destination_type = "volume"

delete_on_termination = false

}

network {

uuid = openstack_networking_network_v2.network_name.id

}

network {

uuid = var.os_tenant_network

fixed_ip_v4 = "10.0.0.155"

}

depends_on = [openstack_compute_secgroup_v2.sg_name, openstack_blockstorage_volume_v3.volume_name_with_os, openstack_networking_subnet_v2.subnet_name]

}

resource "openstack_compute_volume_attach_v2" "additional_volume_name" {

instance_id = openstack_compute_instance_v2.instance_name.id

volume_id = openstack_blockstorage_volume_v3.additional_volume_name.id

depends_on = [openstack_blockstorage_volume_v3.additional_volume_name]

}

#### End create instance block ####

Блок Configure the OpenStack Provide

Описывает конфигурацию подключения к openstack. Необходимо указать:

  • user_name - имя пользователя openstack
  • tenant_name - имя проекта в openstack
  • password - пароль пользователя openstack
  • region - регион, в котором необходимо создать ресурсы

Блок Vars

Описывает переменные, которые используются в шаблоне:

  • centos_7_image содержит id образа CentOS 7
  • os_tenant_network содержит id прокинутой в проект выделенной сети, следует указать

Блок Create network and subnet

Описывает создание серой сети и подсети в проекте. Вместо network_name и subnet_name указать имя сети и подсети соответственно, во всем шаблоне.

Блок Security

Описывает создание групп безопасности и ключевой пары. Вместо sg_name указать имя группы безопасности, вместо keypair_name указать имя ключевой пары. В поле public_key указать публичный ключ, который необходимо прокинуть в инстанс. В данном примере настроены 2 правила:

  • разрешенн входящий трафик на 22/tcp
  • разрешен весь входящий трафик icmp

Блок create instance

Описывает создание инстанса. Необходимо убедиться, что измененные ранее имена сети, подсети, группы безопасности и ключевой пары также изменены в этом блоке. Вместо volume_name_with_os указать имя диска на котором будет установлена ОС. Также в этом ресурсе указать:

  • size - размер диска
  • volume_type - тип диска, ceph-ssd и ceph-hdd для SSD и HDD соответственно

Ресурс additional_volume_name нужен лишь в том случае, если к инстансу необходимо присоеденить дополнительный диск. В случае необходимости указать имя дополнительного диска, размер и тип по аналогии с основным диском.

Ресурс instance_name отвечает за создание самого инстанса на основе ранее созданного диска с именем volume_name_with_os. Вместо instance_name указать имя инстанса, помимо этого нужно указать:

  • flavor_name - имя флейвора, по аналогии с примером
  • key_pair - имя ключевой пары, указанной ранее
  • security_groups - имя группы безопасности, указанной ранее
  • user_data - в этом поле, указывается ряд команд, которые необходимо выполнить внутри инстанса. Так например, часть

password: "your password here"

chpasswd: { expire: False }

ssh_pwauth: True

отвечает за сброс пароля для пользователей centos, debian, ubuntu в соответствии с дистрибутивом. Вместо your password here, указать свой пароль в кавычках.

Часть

network {

uuid = var.os_tenant_network

fixed_ip_v4 = ""

}

отвечает за создание интерфейса внутри инстанса, который будет связан с выделенной белой сетью. Здесь необходимо указать белый ip адрес в поле fixed_ip_v4, который указали на предыдущем этапе.

Последний ресурс в этом блоке с именем additional_volume_name отвечает за аттач дополнительного диска, создание которого было рассмотрено ранее. В этом ресурсе есть нужда, только в том случае, если было создание диска. Здесь необходимо изменить instance_name и additional_volume_name на имя инстанса и имя дополнительного диска соответственно.

CentOS 7 (настройка инстанса только с белой сетью)

В этом случае шаблон будет отличаться лишь тем, что в нем не будет блока Create network and subnet, а также есть изменения в блоке create instance:

  • не будет создания интерфейса соединенного с серой сетью, т.е. следующую часть нужно удалить

network {

uuid = openstack_networking_network_v2.network_name.id

}

  • в строке depends_on нужно убрать зависимость от подсети

до

depends_on = [openstack_compute_secgroup_v2.sg_name, openstack_blockstorage_volume_v3.volume_name_with_os]

после

depends_on = [openstack_compute_secgroup_v2.sg_name, openstack_blockstorage_volume_v3.volume_name_with_os, openstack_networking_subnet_v2.subnet_name]

Конечный вид шаблона для создания инстанса только с белой сетью

#### Configure the OpenStack Provider ####

provider "openstack" {

user_name = ""

tenant_name = ""

password = ""

auth_url = "https://auth.pscloud.io/v3/"

region = "kz-ala-1"

}

#### End config block ####

#### Vars ####

variable "centos_7_image" {

default = "22e935a1-dffe-43d5-939f-98b5a2c92771"

}

variable "os_tenant_network" {

default = ""

}

#### End vars block####

#### Security ####

resource "openstack_compute_keypair_v2" "keypair_name" {

name = "keypair_name"

public_key = ""

}

resource "openstack_compute_secgroup_v2" "sg_name" {

name = "sg_name"

description = "security group for name"

rule {

from_port = 22

to_port = 22

ip_protocol = "tcp"

cidr = "0.0.0.0/0"

}

rule {

from_port = -1

to_port = -1

ip_protocol = "icmp"

cidr = "0.0.0.0/0"

}

}

#### End security block ####

#### create instance ####

resource "openstack_blockstorage_volume_v3" "volume_name_with_os" {

name = "volume_name_with_os"

description = ""

size = 30

volume_type = "ceph-ssd"

image_id = var.centos_7_image

enable_online_resize = true

}

resource "openstack_blockstorage_volume_v3" "additional_volume_name" {

name = "additional_volume_name"

description = ""

size = 100

volume_type = "ceph-ssd"

enable_online_resize = true

}

resource "openstack_compute_instance_v2" "instance_name" {

name = "instance_name"

flavor_name = "d1.ram4cpu1"

key_pair = "keypair_name"

security_groups = ["sg_name"]

config_drive = true

user_data = <<-EOF

#cloud-config

password: your password here

chpasswd: { expire: False }

ssh_pwauth: True

EOF

block_device {

uuid = openstack_blockstorage_volume_v3.volume_name_with_os.id

source_type = "volume"

boot_index = 0

destination_type = "volume"

delete_on_termination = false

}

network {

uuid = var.os_tenant_network

fixed_ip_v4 = "10.0.0.155"

}

depends_on = [openstack_compute_secgroup_v2.sg_name, openstack_blockstorage_volume_v3.volume_name_with_os]

}

resource "openstack_compute_volume_attach_v2" "additional_volume_name" {

instance_id = openstack_compute_instance_v2.instance_name.id

volume_id = openstack_blockstorage_volume_v3.additional_volume_name.id

depends_on = [openstack_blockstorage_volume_v3.additional_volume_name]

}

#### End create instance block ####

CentOS 7 (настройка инстанса с серой сетью и плавающим IP адресом)

Данный шаблон отличается тем что в нем есть блоки работы с "плавающим" IP адресом, а так же создания маршрутизатора.

#### Configure the OpenStack Provider ####

provider "openstack" {

user_name = ""

tenant_name = ""

password = ""

auth_url = "https://auth.pscloud.io/v3/"

region = "kz-ala-"

}

#### End config block ####

#### Vars ####

variable "image_id" {

default = "22e935a1-dffe-43d5-939f-98b5a2c92771"

}

#### End vars block####

#### Import SSH key ####

resource "openstack_compute_keypair_v2" "ssh" {

name = "keypair_name"

public_key = ""

}

#### End Import block ####

#### Create Network ####

resource "openstack_networking_network_v2" "private_network" {

name = "network_name"

admin_state_up = "true"

}

#### End Network block ####

#### Сreate subnet ####

resource "openstack_networking_subnet_v2" "private_subnet" {

name = "subnet_name"

network_id = openstack_networking_network_v2.private_network.id

cidr = "192.168.0.0/24"

dns_nameservers = [

"195.210.46.195",

"195.210.46.132"

]

ip_version = 4

enable_dhcp = true

depends_on = [openstack_networking_network_v2.private_network]

}

#### End subnet block ####

#### Create Router ####

resource "openstack_networking_router_v2" "router" {

name = "router_name"

external_network_id = "83554642-6df5-4c7a-bf55-21bc74496109" #UUID of the floating ip network

admin_state_up = "true"

depends_on = [openstack_networking_network_v2.private_network]

}

#### End router block ####

#### Adding interface to the router ####

resource "openstack_networking_router_interface_v2" "router_interface" {

router_id = openstack_networking_router_v2.router.id

subnet_id = openstack_networking_subnet_v2.private_subnet.id

depends_on = [openstack_networking_router_v2.router]

}

#### End interface block ####

#### Allocate ip to the project ####

resource "openstack_networking_floatingip_v2" "instance_fip" {

pool = "FloatingIP Net"

}

#### End Allocate IP block ####

#### Create security group #####

resource "openstack_compute_secgroup_v2" "security_group" {

name = "sg_name"

description = "open all icmp, and ssh"

rule {

from_port = 22

to_port = 22

ip_protocol = "tcp"

cidr = "0.0.0.0/0"

}

rule {

from_port = -1

to_port = -1

ip_protocol = "icmp"

cidr = "0.0.0.0/0"

} }

#### End security group block ####

#### Create Disk ####

resource "openstack_blockstorage_volume_v3" "disk" {

name = "volume_name"

volume_type = "ceph-ssd" #type: ceph-backup, ceph-ssd, ceph-hdd

size = "25"

image_id = var.image_id

enable_online_resize = "true"

}

#### End Create disk block ####

#### Create Instanse ####

resource "openstack_compute_instance_v2" "instance" {

name = "instance_name"

flavor_name = "d1.ram2cpu1"

key_pair = openstack_compute_keypair_v2.ssh.name

security_groups = [openstack_compute_secgroup_v2.security_group.name]

depends_on = [

openstack_networking_network_v2.private_network,

openstack_blockstorage_volume_v3.disk

]

network {

uuid = openstack_networking_network_v2.private_network.id

}

block_device {

uuid = openstack_blockstorage_volume_v3.disk.id

boot_index = 0

source_type = "volume"

destination_type = "volume"

delete_on_termination = false

}

}

#### End Create Instans block ####

#### Assign floating IP ####

resource "openstack_compute_floatingip_associate_v2" "instance_fip_association" {

floating_ip = openstack_networking_floatingip_v2.instance_fip.address

instance_id = openstack_compute_instance_v2.instance.id

fixed_ip = openstack_compute_instance_v2.instance.access_ip_v4

}

#### End Assign floadting IP block ####

Блок Create router Описывает создание маршрутизатора, с внешней сетью "FloatingIP Net".

Блок Adding interface to the router Добавляет интерфейс к роутеру.

Блок Allocate ip to the project Запрашивает "плавающий" IP адрес, для дальнейшего его назначения.

Блок Assign floating IP Сопоставляет IP адрес инстанса, с "плавающим" IP адресом.

question
Не нашли подходящего ответа?
Напишите запрос в службу поддержки
Написать сейчас