main.tf
terraform {
required_providers {
openstack = {
source = "terraform-provider-openstack/openstack"
version = "1.54.1"
}
}
}
variable "user_name" {}
variable "tenant_name" {}
variable "password" {}
variable "auth_url" {}
provider "openstack" {
user_name = var.user_name
tenant_name = var.tenant_name
password = var.password
auth_url = var.auth_url
}
resource "openstack_compute_keypair_v2" "keypair" {
name = "my_key_pair_name"
public_key = "ssh-rsa A******************************************************************"
}
data "openstack_images_image_v2" "image_name" {
name = "Ubuntu 22.04"
}
data "openstack_images_image_v2" "image_name_win" {
name = "MS Windows 11"
}
resource "openstack_compute_instance_v2" "instance" {
name = "instance"
image_id = data.openstack_images_image_v2.image_name.id
flavor_name = "4vcpu.8ram"
key_pair = openstack_compute_keypair_v2.keypair.name
block_device {
uuid = data.openstack_images_image_v2.image_name.id
source_type = "image"
volume_size = 50
boot_index = 0
destination_type = "volume"
delete_on_termination = true
}
scheduler_hints {
different_host = [openstack_compute_instance_v2.instance_win.id, openstack_compute_instance_v2.instance_win.id]
}
network {
port = openstack_networking_port_v2.port.id
}
}
resource "openstack_compute_instance_v2" "instance_win" {
name = "instance_win"
image_id = data.openstack_images_image_v2.image_name_win.id
flavor_name = "4vcpu.8ram"
block_device {
uuid = data.openstack_images_image_v2.image_name_win.id
source_type = "image"
volume_size = 100
boot_index = 0
destination_type = "volume"
delete_on_termination = true
}
metadata = {
admin_pass = "Qwe123#"
}
scheduler_hints {
group = openstack_compute_servergroup_v2.servergroup.id
}
network {
port = openstack_networking_port_v2.port2.id
}
}
resource "openstack_compute_instance_v2" "instance_win2" {
name = "instance_win2"
image_id = data.openstack_images_image_v2.image_name_win.id
flavor_name = "4vcpu.8ram"
block_device {
uuid = data.openstack_images_image_v2.image_name_win.id
source_type = "image"
volume_size = 100
boot_index = 0
destination_type = "volume"
delete_on_termination = true
}
metadata = {
admin_pass = "Qwe123#"
}
scheduler_hints {
group = openstack_compute_servergroup_v2.servergroup.id
}
network {
port = openstack_networking_port_v2.port3.id
}
}
resource "openstack_compute_servergroup_v2" "servergroup" {
name = "servergroup"
policies = ["affinity"]
}
resource "openstack_networking_network_v2" "network" {
name = "network"
admin_state_up = "true"
}
resource "openstack_networking_port_v2" "port" {
name = "port"
network_id = openstack_networking_network_v2.network.id
admin_state_up = "true"
security_group_ids = [openstack_networking_secgroup_v2.secgroup.id]
fixed_ip {
subnet_id = openstack_networking_subnet_v2.subnet.id
ip_address = "10.0.0.10"
}
}
resource "openstack_networking_port_v2" "port2" {
name = "port"
network_id = openstack_networking_network_v2.network.id
admin_state_up = "true"
security_group_ids = [openstack_networking_secgroup_v2.secgroup.id]
fixed_ip {
subnet_id = openstack_networking_subnet_v2.subnet.id
ip_address = "10.0.0.11"
}
}
resource "openstack_networking_port_v2" "port3" {
name = "port"
network_id = openstack_networking_network_v2.network.id
admin_state_up = "true"
security_group_ids = [openstack_networking_secgroup_v2.secgroup.id]
fixed_ip {
subnet_id = openstack_networking_subnet_v2.subnet.id
ip_address = "10.0.0.12"
}
}
resource "openstack_networking_subnet_v2" "subnet" {
name = "subnet"
network_id = openstack_networking_network_v2.network.id
cidr = "10.0.0.0/24"
ip_version = 4
}
data "openstack_networking_network_v2" "network_ext" {
name = "ext-net"
}
data "openstack_networking_subnet_ids_v2" "subnets_ext" {
network_id = data.openstack_networking_network_v2.network_ext.id
}
resource "openstack_networking_floatingip_v2" "floatip" {
pool = data.openstack_networking_network_v2.network_ext.name
subnet_ids = data.openstack_networking_subnet_ids_v2.subnets_ext.ids
description = "float_ip"
}
resource "openstack_networking_router_v2" "router" {
name = "router"
admin_state_up = true
external_network_id = data.openstack_networking_network_v2.network_ext.id
}
resource "openstack_networking_router_interface_v2" "router_interface" {
router_id = openstack_networking_router_v2.router.id
subnet_id = openstack_networking_subnet_v2.subnet.id
}
resource "openstack_networking_floatingip_associate_v2" "fip" {
floating_ip = openstack_networking_floatingip_v2.floatip.address
port_id = openstack_networking_port_v2.port.id
}
resource "openstack_blockstorage_volume_v3" "vol" {
name = "myvol"
description = "volume"
size = 100
}
resource "openstack_compute_volume_attach_v2" "attached" {
instance_id = openstack_compute_instance_v2.instance.id
volume_id = openstack_blockstorage_volume_v3.vol.id
}
resource "openstack_networking_secgroup_v2" "secgroup" {
name = "secgroup"
description = "My neutron security group"
}
resource "openstack_networking_secgroup_rule_v2" "secgroup_rule_1" {
direction = "ingress"
ethertype = "IPv4"
protocol = "tcp"
port_range_min = 22
port_range_max = 22
remote_ip_prefix = "0.0.0.0/0"
security_group_id = openstack_networking_secgroup_v2.secgroup.id
}
resource "openstack_networking_secgroup_rule_v2" "secgroup_rule_2" {
direction = "egress"
ethertype = "IPv4"
protocol = "tcp"
port_range_min = 80
port_range_max = 80
remote_ip_prefix = "0.0.0.0/0"
security_group_id = openstack_networking_secgroup_v2.secgroup.id
}
resource "openstack_images_image_v2" "image" {
name = "RancherOS"
image_source_url = "https://releases.rancher.com/os/latest/rancheros-openstack.img"
local_file_path = "rancheros-openstack.img"
container_format = "bare"
disk_format = "raw"
min_disk_gb = "20"
min_ram_mb = "8192"
visibility = "private"
}
terraform.tfvars
user_name = "Example_user"
tenant_name = "Example_tenant"
password = "Example_password"
auth_url = "https://portal.inferit.cloud:5000/v3"