############################## # OpenStack Provider ############################## provider "openstack" { user_name = "" tenant_name = "" password = "" auth_url = "https://auth.pscloud.io/v3/" region = "kz-ala-1" } ############################## # Variables ############################## variable "image_id" { default = "22e935a1-dffe-43d5-939f-98b5a2c92771" } ############################## # SSH Keypair Import ############################## resource "openstack_compute_keypair_v2" "ssh" { name = "keypair_name" public_key = "" } ############################## # Create Private Network ############################## resource "openstack_networking_network_v2" "private_network" { name = "network_name" admin_state_up = true } ############################## # Create 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 ] } ############################## # Create Router ############################## resource "openstack_networking_router_v2" "router" { name = "router_name" external_network_id = "83554642-6df5-4c7a-bf55-21bc74496109" # Floating IP network UUID admin_state_up = true depends_on = [ openstack_networking_network_v2.private_network ] } ############################## # Add Interface to 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 ] } ############################## # Allocate Floating IP ############################## resource "openstack_networking_floatingip_v2" "instance_fip" { pool = "FloatingIP Net" } ############################## # Security Group ############################## resource "openstack_compute_secgroup_v2" "security_group" { name = "sg_name" description = "Allow 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" } } ############################## # Create Boot Volume ############################## resource "openstack_blockstorage_volume_v3" "disk" { name = "volume_name" volume_type = "ceph-ssd" # Available: ceph-ssd, ceph-hdd, ceph-backup size = 25 image_id = var.image_id enable_online_resize = true } ############################## # Create Compute Instance ############################## 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] 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 } depends_on = [ openstack_networking_network_v2.private_network, openstack_blockstorage_volume_v3.disk ] } ############################## # Associate 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 }