Examples of manifestos
This manifest will create the following Virtual Machines service group objects:
- Virtual machine;
- Type of virtual machine;
- Image of the virtual machine;
- Key couple.
Manifest listing for creating Virtual Machines service group resources:
1terraform { 2 required_providers { 3 vkcs = { 4 source="vk-cs/vkcs" 5 version=" ~> 0.1.12" 6 } 7 } 8}
1resource "vkcs_blockstorage_volume" "vol" { 2 name="instance1_vol" 3 size = 10 4 image_id = "4d8bc6c0-5623-43bf-9179-1bebcb943b47" 5 volume_type="ceph" 6 availability_zone = "AZ1" 7} 8resource "vkcs_compute_instance" "instance1" { 9 # Instance name within the Platform 10 name="terraform-test" 11 # The flavor ID for the instance. You can find out with the command: openstack flavor list 12 flavor_id = "dc84b839-a97b-4074-83d6-233531ffd8b3" 13 # The name of the key pair for the instance. You can find out with the command: openstack keypair list 14 key_pair = "some_keypair" 15 # SG for instance 16 security_groups = ["default"] 17 block_device { 18 uuid = "${vkcs_blockstorage_volume.vol.id}" 19 source_type="volume" 20 boot_index = 0 21 destination_type = "volume" 22 delete_on_termination = true 23 } 24 # Network for the instance. 25 network { 26 name="net-project001" 27 } 28}
With this manifest, the following objects will be created:
- Block storage;
- Snapshot of block storage.
Listing of the manifest for creating block devices without a VM:
1terraform { 2 required_providers { 3 vkcs = { 4 source="vk-cs/vkcs" 5 version="~>0.1.12" 6 } 7 } 8} 9resource "vkcs_blockstorage_volume" "vol" { 10 name="vol" 11 size = 10 12 volume_type="ceph" 13 availability_zone = "AZ1" 14} 15resource "vkcs_blockstorage_snapshot" "vol-snapshot" { 16 name="vol_snapshot" 17 volume_id = "${vkcs_blockstorage_volume.vol.id}" 18}
This manifest will create the following network subsystem objects:
- Virtual network;
- Subnet;
- Virtual router;
- Security team.
Listing of the manifest for creating network devices without a VM:
1terraform { 2 required_providers { 3 vkcs = { 4 source="vk-cs/vkcs" 5 version="~>0.1.12" 6 } 7 } 8} 9resource "vkcs_networking_network" "network_test" { 10 name="test_network" 11 admin_state_up = "true" 12 port_security_enabled = false 13} 14resource "vkcs_networking_subnet" "subnet_test" { 15 name="test_subnet" 16 network_id = "${vkcs_networking_network.network_test.id}" 17 cidr="192.168.199.0/24" 18} 19resource "vkcs_networking_router" "router_test" { 20 name="router_test" 21 admin_state_up = true 22 external_network_id = "76dfd377-b303-4b69-8cab-0d2f640130c5" 23} 24resource "vkcs_networking_router_interface" "router_interface_test" { 25 router_id = "${vkcs_networking_router.router_test.id}" 26 subnet_id = "${vkcs_networking_subnet.subnet_test.id}" 27} 28resource "vkcs_networking_secgroup" "secgroup_test" { 29 name="secgroup_test" 30 description = "My security group" 31} 32resource "vkcs_networking_secgroup_rule" "secgroup_rule_test" { 33 direction = "ingress" 34 ethertype="IPv4" 35 protocol="tcp" 36 port_range_min = 22 37 port_range_max = 22 38 remote_ip_prefix = "0.0.0.0/0" 39 security_group_id = "${vkcs_networking_secgroup.secgroup_test.id}" 40}
With this manifest, the following objects of the Load Balancers service group will be created:
- HTTP load balancers.
- TCP load balancers.
Additionally, there will be:
- Test network, subnet, security group.
- VM instance.
- Block storage.
1terraform { 2 required_providers { 3 vkcs = { 4 source="vk-cs/vkcs" 5 version="~>0.1.12" 6 } 7 } 8} 9resource "vkcs_networking_network" "network_test" { 10 name="network_test" 11 admin_state_up = "true" 12 port_security_enabled = "true" 13} 14resource "vkcs_networking_subnet" "subnet_test" { 15 name="test_subnet" 16 network_id = "${vkcs_networking_network.network_test.id}" 17 cidr="192.168.199.0/24" 18} 19resource "vkcs_networking_router" "router_test" { 20 name="router_test" 21 admin_state_up = true 22 external_network_id = "76dfd377-b303-4b69-8cab-0d2f640130c5" 23} 24resource "vkcs_networking_router_interface" "router_interface_test" { 25 router_id = "${vkcs_networking_router.router_test.id}" 26 subnet_id = "${vkcs_networking_subnet.subnet_test.id}" 27} 28resource "vkcs_networking_secgroup" "secgroup_test" { 29 name="secgroup_test" 30 description = "My security group" 31} 32resource "vkcs_networking_secgroup_rule" "secgroup_rule_test_ssh" { 33 direction = "ingress" 34 ethertype="IPv4" 35 protocol="tcp" 36 port_range_min = 22 37 port_range_max = 22 38 remote_ip_prefix = "0.0.0.0/0" 39 security_group_id = "${vkcs_networking_secgroup.secgroup_test.id}" 40} 41resource "vkcs_networking_secgroup_rule" "secgroup_rule_test_http" { 42 direction = "ingress" 43 ethertype="IPv4" 44 protocol="tcp" 45 port_range_min = 8080 46 port_range_max = 8080 47 remote_ip_prefix = "0.0.0.0/0" 48 security_group_id = "${vkcs_networking_secgroup.secgroup_test.id}" 49} 50resource "vkcs_networking_secgroup_rule" "secgroup_rule_test_tcp" { 51 direction = "ingress" 52 ethertype="IPv4" 53 protocol="tcp" 54 port_range_min = 9090 55 port_range_max = 9090 56 remote_ip_prefix = "0.0.0.0/0" 57 security_group_id = "${vkcs_networking_secgroup.secgroup_test.id}" 58} 59resource "vkcs_lb_loadbalancer" "loadbalancer_test_http" { 60 name="loadbalancer_test_http" 61 vip_subnet_id = "${vkcs_networking_subnet.subnet_test.id}" 62 security_group_ids = [ "${vkcs_networking_secgroup.secgroup_test.id}" ] 63} 64resource "vkcs_lb_loadbalancer" "loadbalancer_test_tcp" { 65 name="loadbalancer_test_tcp" 66 vip_subnet_id = "${vkcs_networking_subnet.subnet_test.id}" 67 security_group_ids = [ "${vkcs_networking_secgroup.secgroup_test.id}" ] 68} 69resource "vkcs_lb_listener" "listener_test_http" { 70 name="listener_test_http" 71 protocol="HTTP" 72 protocol_port = 8080 73 loadbalancer_id = "${vkcs_lb_loadbalancer.loadbalancer_test_http.id}" 74} 75resource "vkcs_lb_listener" "listener_test_tcp" { 76 name="listener_test_tcp" 77 protocol="TCP" 78 protocol_port = 9090 79 loadbalancer_id = "${vkcs_lb_loadbalancer.loadbalancer_test_tcp.id}" 80} 81resource "vkcs_lb_pool" "pool_test_http" { 82 name="pool_test_http" 83 protocol="HTTP" 84 lb_method = "ROUND_ROBIN" 85 loadbalancer_id = "${vkcs_lb_loadbalancer.loadbalancer_test_http.id}" 86} 87resource "vkcs_lb_pool" "pool_test_tcp" { 88 name="pool_test_tcp" 89 protocol="TCP" 90 lb_method = "ROUND_ROBIN" 91 loadbalancer_id = "${vkcs_lb_loadbalancer.loadbalancer_test_tcp.id}" 92} 93resource "vkcs_lb_l7policy" "l7policy_test_http" { 94 name="test" 95 action = "REDIRECT_TO_URL" 96 description = "test description" 97 position = 1 98 listener_id = "${vkcs_lb_listener.listener_test_http.id}" 99 redirect_url = "http://www.example.com" 100} 101resource "vkcs_lb_l7rule" "l7rule_test" { 102 l7policy_id = "${vkcs_lb_l7policy.l7policy_test_http.id}" 103 compare_type = "EQUAL_TO" 104 type="PATH" 105 value="/api" 106} 107resource "vkcs_blockstorage_volume" "vol1_test" { 108 name="instance1_vol" 109 size = 10 110 image_id = "4d8bc6c0-5623-43bf-9179-1bebcb943b47" 111 volume_type="ceph" 112 availability_zone = "AZ1" 113} 114resource "vkcs_blockstorage_volume" "vol2_test" { 115 name="instance1_vol" 116 size = 10 117 image_id = "4d8bc6c0-5623-43bf-9179-1bebcb943b47" 118 volume_type="ceph" 119 availability_zone = "AZ1" 120} 121resource "vkcs_compute_instance" "instance1_test" { 122 name="terraform-instance1-test" 123 flavor_id = "fc83b839-a97b-4074-83d6-211531ffd8b3" 124 key_pair = "CentOS-Basic-1-1-10GB-5CDfA91u" 125 security_groups = ["secgroup_test"] 126 block_device { 127 uuid = "${vkcs_blockstorage_volume.vol1_test.id}" 128 source_type="volume" 129 boot_index = 0 130 destination_type = "volume" 131 delete_on_termination = true 132 } 133 network { 134 name="network_test" 135 } 136 depends_on = [ 137 vkcs_networking_network.network_test, 138 vkcs_networking_subnet.subnet_test, 139 vkcs_networking_secgroup.secgroup_test 140 ] 141} 142resource "vkcs_compute_instance" "instance2_test" { 143 name="terraform-instance2-test" 144 flavor_id = "fc83b839-a97b-4074-83d6-211531ffd8b3" 145 key_pair = "CentOS-Basic-1-1-10GB-5CDfA91u" 146 security_groups = ["secgroup_test"] 147 block_device { 148 uuid = "${vkcs_blockstorage_volume.vol2_test.id}" 149 source_type="volume" 150 boot_index = 0 151 destination_type = "volume" 152 delete_on_termination = true 153 } 154 network { 155 name="network_test" 156 } 157 depends_on = [ 158 vkcs_networking_network.network_test, 159 vkcs_networking_subnet.subnet_test, 160 vkcs_networking_secgroup.secgroup_test 161 ] 162} 163resource "vkcs_lb_members" "members_http_test" { 164 pool_id = "${vkcs_lb_pool.pool_test_http.id}" 165 member { 166 address = "${vkcs_compute_instance.instance1_test.access_ip_v4}" 167 protocol_port = 8080 168 weight = 2 169 } 170 member { 171 address = "${vkcs_compute_instance.instance2_test.access_ip_v4}" 172 protocol_port = 8080 173 weight = 10 174 } 175} 176resource "vkcs_lb_members" "members_tcp_test" { 177 pool_id = "${vkcs_lb_pool.pool_test_tcp.id}" 178 member { 179 address = "${vkcs_compute_instance.instance1_test.access_ip_v4}" 180 protocol_port = 9090 181 weight = 10 182 } 183 member { 184 address = "${vkcs_compute_instance.instance2_test.access_ip_v4}" 185 protocol_port = 9090 186 weight = 2 187 } 188}
This manifest will create the following Kubernetes Clusters service group objects:
- Kubernetes cluster.
- A group of Kubernetes clusters.
Service group resource creation manifest listing Kubernetes Clusters:
1terraform { 2 required_providers { 3 vkcs = { 4 source="vk-cs/vkcs" 5 version="0.1.4" 6 } 7 } 8} 9data "vkcs_kubernetes_clustertemplate" "cluster_template" { 10 name="Kubernetes-almalinux-v1.22.6-mcs.external" 11} 12data "vkcs_networking_subnet" "subnet_project" { 13 name="subnet-project001" 14} 15data "vkcs_networking_network" "network_project" { 16 name="net-project001" 17} 18data "vkcs_compute_flavor" "k8s_flavor" { 19 name="Standard-2-4" 20}
1resource "vkcs_kubernetes_cluster" "cluster_test" { 2 name="cluster-test" 3 cluster_template_id = data.vkcs_kubernetes_clustertemplate.cluster_template.id 4 subnet_id=data.vkcs_networking_subnet.subnet_project.id 5 network_id = data.vkcs_networking_network.network_project.id 6 master_flavor = data.vkcs_compute_flavor.k8s_flavor.id 7 master_count = 1 8 # The name of the key pair for the cluster instance. You can find out with the command: openstack 9key pair list 10 keypair="my_keys" 11 availability_zone = "AZ1" 12 floating_ip_enabled = true 13}
1resource "vkcs_kubernetes_node_group" "nodegroup_k8s" { 2 name="nodegroup-k8s" 3 cluster_id = vkcs_kubernetes_cluster.cluster_test.id 4 node_count = 1 5 availability_zones = ["AZ1"] 6 volume_type="ceph" 7 volume_size = 30 8 max_node_unavailable = 1 9}
With this manifest, the following objects of the Managed DBs service group will be created:
- Database instance.
- Database cluster.
Listing of the resource creation manifest for the Managed DBs service group:
1terraform { 2 required_providers { 3 vkcs = { 4 source="vk-cs/vkcs" 5 version="~>0.1.12" 6 } 7 } 8} 9data "vkcs_networking_subnet" "subnet_project" { 10 name="subnet-project001" 11} 12data "vkcs_networking_network" "network_project" { 13 name="net-project001" 14} 15data "vkcs_compute_flavor" "db_flavor" { 16 name="Basic-1-2" 17} 18resource "vkcs_db_cluster" "db_cluster" { 19 name="db-cluster" 20# Versions can be taken from the Self-Service Portal UI 21 datastore { 22 type="postgresql" 23 version="12" 24 } 25 cluster_size = 3 26 flavor_id = data.vkcs_compute_flavor.db_flavor.id 27 volume_size = 10 28 volume_type="ceph" 29 network { 30 uuid = data.vkcs_networking_network.network_project.id 31 } 32} 33resource "vkcs_db_instance" "db_instance" { 34 name="db-instance" 35# Versions can be taken from the self-service portal UI 36 datastore { 37 type="mysql" 38 version="5.7" 39 } 40 flavor_id = data.vkcs_compute_flavor.db_flavor.id 41 size = 10 42 volume_type="ceph" 43 network { 44 uuid = data.vkcs_networking_network.network_project.id 45 } 46}