Skip to content

Commit 58e99b4

Browse files
authored
Update loadbalancer example to use stackit sources instead of openstack (#601)
Signed-off-by: Alexander Dahmen <alexander.dahmen@inovex.de>
1 parent 0b1b13e commit 58e99b4

3 files changed

Lines changed: 83 additions & 183 deletions

File tree

docs/resources/loadbalancer.md

Lines changed: 42 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -4,131 +4,68 @@ page_title: "stackit_loadbalancer Resource - stackit"
44
subcategory: ""
55
description: |-
66
Setting up supporting infrastructure
7-
Configuring an OpenStack provider
8-
To automate the creation of load balancers, OpenStack can be used to setup the supporting infrastructure.
9-
To set up the OpenStack provider, you can create a token through the STACKIT Portal, in your project's Infrastructure API page.
10-
There, the OpenStack user domain name, username, and password are generated and can be obtained. The provider can then be configured as follows:
11-
12-
terraform {
13-
required_providers {
14-
(...)
15-
openstack = {
16-
source = "terraform-provider-openstack/openstack"
17-
}
18-
}
19-
}
20-
21-
provider "openstack" {
22-
user_domain_name = "{OpenStack user domain name}"
23-
user_name = "{OpenStack username}"
24-
password = "{OpenStack password}"
25-
region = "RegionOne"
26-
auth_url = "https://keystone.api.iaas.eu01.stackit.cloud/v3"
27-
}
28-
29-
30-
Configuring the supporting infrastructure
31-
The example below uses OpenStack to create the network, router, a public IP address and a compute instance.
7+
The example below creates the supporting infrastructure using the STACKIT Terraform provider, including the network, network interface, a public IP address and server resources.
328
---
339

3410
# stackit_loadbalancer (Resource)
3511

3612
## Setting up supporting infrastructure
3713

3814

39-
### Configuring an OpenStack provider
40-
41-
42-
To automate the creation of load balancers, OpenStack can be used to setup the supporting infrastructure.
43-
To set up the OpenStack provider, you can create a token through the STACKIT Portal, in your project's Infrastructure API page.
44-
There, the OpenStack user domain name, username, and password are generated and can be obtained. The provider can then be configured as follows:
45-
```terraform
46-
terraform {
47-
required_providers {
48-
(...)
49-
openstack = {
50-
source = "terraform-provider-openstack/openstack"
51-
}
52-
}
53-
}
54-
55-
provider "openstack" {
56-
user_domain_name = "{OpenStack user domain name}"
57-
user_name = "{OpenStack username}"
58-
password = "{OpenStack password}"
59-
region = "RegionOne"
60-
auth_url = "https://keystone.api.iaas.eu01.stackit.cloud/v3"
61-
}
62-
63-
```
64-
65-
### Configuring the supporting infrastructure
66-
67-
The example below uses OpenStack to create the network, router, a public IP address and a compute instance.
15+
The example below creates the supporting infrastructure using the STACKIT Terraform provider, including the network, network interface, a public IP address and server resources.
6816

6917
## Example Usage
7018

7119
```terraform
7220
# Create a network
73-
resource "openstack_networking_network_v2" "example" {
74-
name = "example-network"
75-
}
76-
77-
# Create a subnet
78-
resource "openstack_networking_subnet_v2" "example" {
79-
name = "example-subnet"
80-
cidr = "192.168.0.0/25"
81-
dns_nameservers = ["8.8.8.8"]
82-
network_id = openstack_networking_network_v2.example.id
21+
resource "stackit_network" "example_network" {
22+
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
23+
name = "example-network"
24+
ipv4_nameservers = ["8.8.8.8"]
25+
ipv4_prefix = "192.168.0.0/25"
26+
labels = {
27+
"key" = "value"
28+
}
29+
routed = true
8330
}
8431
85-
# Get public network
86-
data "openstack_networking_network_v2" "public" {
87-
name = "floating-net"
32+
# Create a network interface
33+
resource "stackit_network_interface" "nic" {
34+
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
35+
network_id = stackit_network.example_network.network_id
8836
}
8937
90-
# Create a floating IP
91-
resource "openstack_networking_floatingip_v2" "example" {
92-
pool = data.openstack_networking_network_v2.public.name
38+
# Create a public IP and assign it to the network interface
39+
resource "stackit_public_ip" "public-ip" {
40+
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
41+
network_interface_id = stackit_network_interface.nic.network_interface_id
9342
}
9443
95-
# Get flavor for instance
96-
data "openstack_compute_flavor_v2" "example" {
97-
name = "g1.1"
44+
# Create a key pair for accessing the server instance
45+
resource "stackit_key_pair" "keypair" {
46+
name = "example-key-pair"
47+
public_key = chomp(file("path/to/id_rsa.pub"))
9848
}
9949
100-
# Create an instance
101-
resource "openstack_compute_instance_v2" "example" {
102-
depends_on = [openstack_networking_subnet_v2.example]
103-
name = "example-instance"
104-
flavor_id = data.openstack_compute_flavor_v2.example.id
105-
admin_pass = "example"
106-
security_groups = ["default"]
107-
108-
block_device {
109-
uuid = "4364cdb2-dacd-429b-803e-f0f7cfde1c24" // Ubuntu 22.04
110-
volume_size = 32
111-
source_type = "image"
112-
destination_type = "volume"
113-
delete_on_termination = true
114-
}
115-
116-
network {
117-
name = openstack_networking_network_v2.example.name
50+
# Create a server instance
51+
resource "stackit_server" "boot-from-volume" {
52+
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
53+
name = "example-server"
54+
boot_volume = {
55+
size = 64
56+
source_type = "image"
57+
source_id = "59838a89-51b1-4892-b57f-b3caf598ee2f" // Ubuntu 24.04
11858
}
59+
availability_zone = "xxxx-x"
60+
machine_type = "g1.1"
61+
keypair_name = stackit_key_pair.keypair.name
11962
}
12063
121-
# Create a router and attach it to the public network
122-
resource "openstack_networking_router_v2" "example" {
123-
name = "example-router"
124-
admin_state_up = "true"
125-
external_network_id = data.openstack_networking_network_v2.public.id
126-
}
127-
128-
# Attach the subnet to the router
129-
resource "openstack_networking_router_interface_v2" "example_interface" {
130-
router_id = openstack_networking_router_v2.example.id
131-
subnet_id = openstack_networking_subnet_v2.example.id
64+
# Attach the network interface to the server
65+
resource "stackit_server_network_interface_attach" "nic-attachment" {
66+
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
67+
server_id = stackit_server.boot-from-volume.server_id
68+
network_interface_id = stackit_network_interface.nic.network_interface_id
13269
}
13370
13471
# Create a load balancer
@@ -142,7 +79,7 @@ resource "stackit_loadbalancer" "example" {
14279
targets = [
14380
{
14481
display_name = "example-target"
145-
ip = openstack_compute_instance_v2.example.network.0.fixed_ip_v4
82+
ip = stackit_network_interface.nic.ipv4
14683
}
14784
]
14885
active_health_check = {
@@ -164,11 +101,11 @@ resource "stackit_loadbalancer" "example" {
164101
]
165102
networks = [
166103
{
167-
network_id = openstack_networking_network_v2.example.id
104+
network_id = stackit_network.example_network.network_id
168105
role = "ROLE_LISTENERS_AND_TARGETS"
169106
}
170107
]
171-
external_address = openstack_networking_floatingip_v2.example.address
108+
external_address = stackit_public_ip.public-ip.ip
172109
options = {
173110
private_network_only = false
174111
}

examples/resources/stackit_loadbalancer/resource.tf

Lines changed: 40 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,52 @@
11
# Create a network
2-
resource "openstack_networking_network_v2" "example" {
3-
name = "example-network"
4-
}
5-
6-
# Create a subnet
7-
resource "openstack_networking_subnet_v2" "example" {
8-
name = "example-subnet"
9-
cidr = "192.168.0.0/25"
10-
dns_nameservers = ["8.8.8.8"]
11-
network_id = openstack_networking_network_v2.example.id
2+
resource "stackit_network" "example_network" {
3+
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
4+
name = "example-network"
5+
ipv4_nameservers = ["8.8.8.8"]
6+
ipv4_prefix = "192.168.0.0/25"
7+
labels = {
8+
"key" = "value"
9+
}
10+
routed = true
1211
}
1312

14-
# Get public network
15-
data "openstack_networking_network_v2" "public" {
16-
name = "floating-net"
13+
# Create a network interface
14+
resource "stackit_network_interface" "nic" {
15+
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
16+
network_id = stackit_network.example_network.network_id
1717
}
1818

19-
# Create a floating IP
20-
resource "openstack_networking_floatingip_v2" "example" {
21-
pool = data.openstack_networking_network_v2.public.name
19+
# Create a public IP and assign it to the network interface
20+
resource "stackit_public_ip" "public-ip" {
21+
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
22+
network_interface_id = stackit_network_interface.nic.network_interface_id
2223
}
2324

24-
# Get flavor for instance
25-
data "openstack_compute_flavor_v2" "example" {
26-
name = "g1.1"
25+
# Create a key pair for accessing the server instance
26+
resource "stackit_key_pair" "keypair" {
27+
name = "example-key-pair"
28+
public_key = chomp(file("path/to/id_rsa.pub"))
2729
}
2830

29-
# Create an instance
30-
resource "openstack_compute_instance_v2" "example" {
31-
depends_on = [openstack_networking_subnet_v2.example]
32-
name = "example-instance"
33-
flavor_id = data.openstack_compute_flavor_v2.example.id
34-
admin_pass = "example"
35-
security_groups = ["default"]
36-
37-
block_device {
38-
uuid = "4364cdb2-dacd-429b-803e-f0f7cfde1c24" // Ubuntu 22.04
39-
volume_size = 32
40-
source_type = "image"
41-
destination_type = "volume"
42-
delete_on_termination = true
43-
}
44-
45-
network {
46-
name = openstack_networking_network_v2.example.name
31+
# Create a server instance
32+
resource "stackit_server" "boot-from-volume" {
33+
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
34+
name = "example-server"
35+
boot_volume = {
36+
size = 64
37+
source_type = "image"
38+
source_id = "59838a89-51b1-4892-b57f-b3caf598ee2f" // Ubuntu 24.04
4739
}
40+
availability_zone = "xxxx-x"
41+
machine_type = "g1.1"
42+
keypair_name = stackit_key_pair.keypair.name
4843
}
4944

50-
# Create a router and attach it to the public network
51-
resource "openstack_networking_router_v2" "example" {
52-
name = "example-router"
53-
admin_state_up = "true"
54-
external_network_id = data.openstack_networking_network_v2.public.id
55-
}
56-
57-
# Attach the subnet to the router
58-
resource "openstack_networking_router_interface_v2" "example_interface" {
59-
router_id = openstack_networking_router_v2.example.id
60-
subnet_id = openstack_networking_subnet_v2.example.id
45+
# Attach the network interface to the server
46+
resource "stackit_server_network_interface_attach" "nic-attachment" {
47+
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
48+
server_id = stackit_server.boot-from-volume.server_id
49+
network_interface_id = stackit_network_interface.nic.network_interface_id
6150
}
6251

6352
# Create a load balancer
@@ -71,7 +60,7 @@ resource "stackit_loadbalancer" "example" {
7160
targets = [
7261
{
7362
display_name = "example-target"
74-
ip = openstack_compute_instance_v2.example.network.0.fixed_ip_v4
63+
ip = stackit_network_interface.nic.ipv4
7564
}
7665
]
7766
active_health_check = {
@@ -93,11 +82,11 @@ resource "stackit_loadbalancer" "example" {
9382
]
9483
networks = [
9584
{
96-
network_id = openstack_networking_network_v2.example.id
85+
network_id = stackit_network.example_network.network_id
9786
role = "ROLE_LISTENERS_AND_TARGETS"
9887
}
9988
]
100-
external_address = openstack_networking_floatingip_v2.example.address
89+
external_address = stackit_public_ip.public-ip.ip
10190
options = {
10291
private_network_only = false
10392
}

stackit/internal/services/loadbalancer/loadbalancer/resource.go

Lines changed: 1 addition & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -262,33 +262,7 @@ func (r *loadBalancerResource) Schema(_ context.Context, _ resource.SchemaReques
262262
MarkdownDescription: `
263263
## Setting up supporting infrastructure` + "\n" + `
264264
265-
### Configuring an OpenStack provider` + "\n" + `
266-
267-
To automate the creation of load balancers, OpenStack can be used to setup the supporting infrastructure.
268-
To set up the OpenStack provider, you can create a token through the STACKIT Portal, in your project's Infrastructure API page.
269-
There, the OpenStack user domain name, username, and password are generated and can be obtained. The provider can then be configured as follows:` + "\n" +
270-
"```terraform" + `
271-
terraform {
272-
required_providers {
273-
(...)
274-
openstack = {
275-
source = "terraform-provider-openstack/openstack"
276-
}
277-
}
278-
}
279-
280-
provider "openstack" {
281-
user_domain_name = "{OpenStack user domain name}"
282-
user_name = "{OpenStack username}"
283-
password = "{OpenStack password}"
284-
region = "RegionOne"
285-
auth_url = "https://keystone.api.iaas.eu01.stackit.cloud/v3"
286-
}
287-
` + "\n```" + `
288-
289-
### Configuring the supporting infrastructure
290-
291-
The example below uses OpenStack to create the network, router, a public IP address and a compute instance.
265+
The example below creates the supporting infrastructure using the STACKIT Terraform provider, including the network, network interface, a public IP address and server resources.
292266
`,
293267
Attributes: map[string]schema.Attribute{
294268
"id": schema.StringAttribute{

0 commit comments

Comments
 (0)