Compare commits

...

15 commits

18 changed files with 200 additions and 195 deletions

2
.gitignore vendored
View file

@ -1,3 +1,5 @@
.terraform*
terraform*
*.qcow2
*.tfvars
.idea

View file

@ -17,7 +17,3 @@ provider "stackit" {
service_account_key_path = var.service_account_key_path
enable_beta_resources = true
}
module "project" {
source = "./project"
}

View file

@ -1,163 +1,162 @@
/* ------- project 1 - landingzone ------------ */
resource "stackit_network" "wan_network" {
project_id = module.project.project_info["project1"].project_id
name = "wan_network"
resource "stackit_network" "landingzone_wan" {
project_id = module.project.project_info["landingzone"].project_id
name = "landingzone_wan"
ipv4_nameservers = ["1.1.1.1", "8.8.8.8"]
ipv4_prefix = "10.220.0.0/24"
routed = true
}
resource "stackit_network" "lan_network1" {
project_id = module.project.project_info["project1"].project_id
name = "lan_network1"
resource "stackit_network" "landingzone_lan" {
project_id = module.project.project_info["landingzone"].project_id
name = "landingzone_lan"
ipv4_prefix = "10.220.1.0/24"
routed = true
}
resource "stackit_network_interface" "wan" {
project_id = module.project.project_info["project1"].project_id
network_id = stackit_network.wan_network.network_id
resource "stackit_network_interface" "landingzone_wan" {
project_id = module.project.project_info["landingzone"].project_id
network_id = stackit_network.landingzone_wan.network_id
security = false
name = "MGMT"
ipv4 = "10.220.0.254"
}
resource "stackit_network_interface" "lan1" {
project_id = module.project.project_info["project1"].project_id
network_id = stackit_network.lan_network1.network_id
resource "stackit_network_interface" "landingzone_lan" {
project_id = module.project.project_info["landingzone"].project_id
network_id = stackit_network.landingzone_lan.network_id
security = false
name = "LAN1"
}
/* ---------- project 2 core ------------------ */
resource "stackit_network" "p2_lan_network1" {
project_id = module.project.project_info["project2"].project_id
name = "p2_lan_network"
resource "stackit_network" "core_lan" {
project_id = module.project.project_info["core"].project_id
name = "core_lan"
ipv4_prefix = "10.220.5.0/24"
routed = true
}
resource "stackit_network_interface" "p2_lan1" {
project_id = module.project.project_info["project2"].project_id
network_id = stackit_network.p2_lan_network1.network_id
resource "stackit_network_interface" "core_lan" {
project_id = module.project.project_info["core"].project_id
network_id = stackit_network.core_lan.network_id
security = false
name = "P2LAN1"
//security_group_ids = [ stackit_security_group.example.security_group_id ]
name = "CORELAN"
// security_group_ids = [ stackit_security_group.example.security_group_id ]
}
/* this is for adding a second network interface to the core project (for WAN access).
resource "stackit_network" "p2_wan_network1" {
project_id = module.project.project_info["project2"].project_id
name = "wan"
/* this is for adding a second network interface to the core project (for WAN access).*/
resource "stackit_network" "core_wan" {
project_id = module.project.project_info["core"].project_id
name = "core_wan"
ipv4_prefix = "10.220.50.0/24"
routed = true
}
resource "stackit_network_interface" "p2_wan_interface1" {
project_id = module.project.project_info["project2"].project_id
network_id = stackit_network.p2_wan_network1.network_id
resource "stackit_network_interface" "core_wan" {
project_id = module.project.project_info["core"].project_id
network_id = stackit_network.core_wan.network_id
security = false
name = "wan_if"
name = "core_wan_if"
}
*/
/**/
/* ---------- project 3 backup ------------------ */
resource "stackit_network" "p3_lan_network1" {
project_id = module.project.project_info["project3"].project_id
name = "p3_lan_network"
resource "stackit_network" "backup_lan" {
project_id = module.project.project_info["backup"].project_id
name = "backup_lan"
ipv4_prefix = "10.220.6.0/24"
routed = true
}
resource "stackit_network_interface" "p3_lan1" {
project_id = module.project.project_info["project3"].project_id
network_id = stackit_network.p3_lan_network1.network_id
resource "stackit_network_interface" "backup_lan" {
project_id = module.project.project_info["backup"].project_id
network_id = stackit_network.backup_lan.network_id
security = false
name = "P3LAN1"
name = "BACKUPLAN"
//security_group_ids = [ stackit_security_group.example.security_group_id ]
}
/* project 4 for SKE, so no configuration necessary here */
/* ------- project 5 - vpn ------------ */
resource "stackit_network" "wan_network_beta" {
project_id = module.project.project_info["project5"].project_id
name = "wan_network_beta"
resource "stackit_network" "vpn_wan" {
project_id = module.project.project_info["vpn"].project_id
name = "vpn_wan"
ipv4_nameservers = ["1.1.1.1", "8.8.8.8"]
ipv4_prefix = "10.230.0.0/24"
routed = true
}
resource "stackit_network" "lan_network_beta" {
project_id = module.project.project_info["project5"].project_id
name = "lan_network_beta"
resource "stackit_network" "vpn_lan" {
project_id = module.project.project_info["vpn"].project_id
name = "vpn_lan"
ipv4_prefix = "10.230.1.0/24"
routed = true
}
resource "stackit_network_interface" "wan_beta" {
project_id = module.project.project_info["project5"].project_id
network_id = stackit_network.wan_network_beta.network_id
resource "stackit_network_interface" "vpn_wan" {
project_id = module.project.project_info["vpn"].project_id
network_id = stackit_network.vpn_wan.network_id
security = false
name = "MGMT"
ipv4 = "10.230.0.254"
}
resource "stackit_network_interface" "lan_beta" {
project_id = module.project.project_info["project5"].project_id
network_id = stackit_network.lan_network_beta.network_id
resource "stackit_network_interface" "vpn_lan" {
project_id = module.project.project_info["vpn"].project_id
network_id = stackit_network.vpn_lan.network_id
security = false
name = "LAN1"
name = "VPNLAN"
}
/* ---------- project 6 infra ------------------ */
resource "stackit_network" "p6_lan_network1" {
project_id = module.project.project_info["project6"].project_id
name = "p6_lan_network"
resource "stackit_network" "infra_lan" {
project_id = module.project.project_info["infra"].project_id
name = "infra_lan"
ipv4_prefix = "10.230.5.0/24"
routed = true
}
resource "stackit_network_interface" "p6_lan1" {
project_id = module.project.project_info["project6"].project_id
network_id = stackit_network.p6_lan_network1.network_id
resource "stackit_network_interface" "infra_lan" {
project_id = module.project.project_info["infra"].project_id
network_id = stackit_network.infra_lan.network_id
security = false
name = "P6LAN1"
//security_group_ids = [ stackit_security_group.example_beta.security_group_id ]
name = "INFRALAN"
// security_group_ids = [ stackit_security_group.example_beta.security_group_id ]
}
/* ---------- public IP configuration------------- */
resource "stackit_public_ip" "wan_ip" {
project_id = module.project.project_info["project1"].project_id
network_interface_id = stackit_network_interface.wan.network_interface_id
resource "stackit_public_ip" "landingzone_wan" {
project_id = module.project.project_info["landingzone"].project_id
network_interface_id = stackit_network_interface.landingzone_wan.network_interface_id
}
resource "stackit_public_ip" "wan_ip_beta" {
project_id = module.project.project_info["project5"].project_id
network_interface_id = stackit_network_interface.wan_beta.network_interface_id
resource "stackit_public_ip" "vpn_wan" {
project_id = module.project.project_info["vpn"].project_id
network_interface_id = stackit_network_interface.vpn_wan.network_interface_id
}
*/ this is for adding a public IP to the second project (core) for WAN access.
resource "stackit_public_ip" "wan_server" {
project_id = module.project.project_info["project2"].project_id
network_interface_id = stackit_network_interface.p2_wan_interface1.network_interface_id
/* this is for adding a public IP to the second project (core) for WAN access. */
resource "stackit_public_ip" "core_wan" {
project_id = module.project.project_info["core"].project_id
network_interface_id = stackit_network_interface.core_wan.network_interface_id
}
*/
/* Output the public IPs for both projects */
output "public_ips" {
value = {
"pfsense-alpha" = stackit_public_ip.wan_ip.ip
"pfsense-beta" = stackit_public_ip.wan_ip_beta.ip
//"wan_server" = stackit_public_ip.wan_server.ip
"pfsense-alpha" = stackit_public_ip.landingzone_wan.ip
"pfsense-beta" = stackit_public_ip.vpn_wan.ip
"wan_server" = stackit_public_ip.core_wan.ip
}
}
output "private_ips" {
value = {
"linux-alpha" = stackit_network_interface.p2_lan1.ipv4
"linux-beta" = stackit_network_interface.p6_lan1.ipv4
"linux-alpha" = stackit_network_interface.core_lan.ipv4
"linux-beta" = stackit_network_interface.infra_lan.ipv4
}
}

View file

@ -13,7 +13,7 @@ resource "null_resource" "pfsense_image_file" {
// Upload VPN Appliance Image to STACKIT
resource "stackit_image" "pfsense_image" {
project_id = module.project.project_info["project1"].project_id
project_id = module.project.project_info["landingzone"].project_id
name = "pfsense-2.7.2-amd64-image"
local_file_path = "./pfsense.qcow2"
disk_format = "qcow2"
@ -34,7 +34,7 @@ resource "stackit_image" "pfsense_image" {
// Upload VPN Appliance Image to STACKIT
resource "stackit_image" "pfsense_image_beta" {
project_id = module.project.project_info["project5"].project_id
project_id = module.project.project_info["vpn"].project_id
name = "pfsense-2.7.2-amd64-image"
local_file_path = "./pfsense.qcow2"
disk_format = "qcow2"

View file

@ -1,6 +1,6 @@
// This file is part of the STACKIT Terraform module for deploying a pfSense appliance.
resource "stackit_volume" "pfsense_vol" {
project_id = module.project.project_info["project1"].project_id
project_id = module.project.project_info["landingzone"].project_id
name = "pfsense-2.7.2-root"
availability_zone = var.region_az1
size = 50
@ -12,7 +12,7 @@ resource "stackit_volume" "pfsense_vol" {
}
resource "stackit_server" "pfsense_appliance" {
project_id = module.project.project_info["project1"].project_id
project_id = module.project.project_info["landingzone"].project_id
name = "pfSense-alpha"
boot_volume = {
source_type = "volume"
@ -20,13 +20,13 @@ resource "stackit_server" "pfsense_appliance" {
}
availability_zone = var.region_az1
machine_type = var.flavor
network_interfaces = [stackit_network_interface.wan.network_interface_id]
depends_on = [ stackit_network.wan_network ]
network_interfaces = [stackit_network_interface.landingzone_wan.network_interface_id]
depends_on = [ stackit_network.landingzone_wan ]
}
// This file is part of the STACKIT Terraform module for deploying a pfSense appliance.
resource "stackit_volume" "pfsense_vol_beta" {
project_id = module.project.project_info["project5"].project_id
project_id = module.project.project_info["vpn"].project_id
name = "pfsense-2.7.2-root"
availability_zone = var.region_az1
size = 50
@ -38,7 +38,7 @@ resource "stackit_volume" "pfsense_vol_beta" {
}
resource "stackit_server" "pfsense_appliance_beta" {
project_id = module.project.project_info["project5"].project_id
project_id = module.project.project_info["vpn"].project_id
name = "pfSense-beta"
boot_volume = {
source_type = "volume"
@ -46,7 +46,7 @@ resource "stackit_server" "pfsense_appliance_beta" {
}
availability_zone = var.region_az1
machine_type = var.flavor
network_interfaces = [stackit_network_interface.wan_beta.network_interface_id, stackit_network_interface.lan_beta.network_interface_id ]
depends_on = [ stackit_network.wan_network_beta ]
network_interfaces = [stackit_network_interface.vpn_wan.network_interface_id, stackit_network_interface.vpn_lan.network_interface_id ]
depends_on = [ stackit_network.vpn_wan ]
}

View file

@ -1,9 +1,9 @@
// Attach network interfaces to the pfSense server without recreating the server
resource "stackit_server_network_interface_attach" "nic-attachment-lan1" {
project_id = module.project.project_info["project1"].project_id
project_id = module.project.project_info["landingzone"].project_id
server_id = stackit_server.pfsense_appliance.server_id
network_interface_id = stackit_network_interface.lan1.network_interface_id
network_interface_id = stackit_network_interface.landingzone_lan.network_interface_id
depends_on = [ stackit_server.pfsense_appliance ]
}

View file

@ -1,6 +1,6 @@
// create the server in the second project (core)
resource "stackit_volume" "example_vol" {
project_id = module.project.project_info["project2"].project_id
project_id = module.project.project_info["core"].project_id
name = "example_root"
availability_zone = var.region_az1
size = 200
@ -12,7 +12,7 @@ resource "stackit_volume" "example_vol" {
}
resource "stackit_server" "dev_server" {
project_id = module.project.project_info["project2"].project_id
project_id = module.project.project_info["core"].project_id
name = "linux-alpha"
boot_volume = {
source_type = "volume"
@ -20,19 +20,19 @@ resource "stackit_server" "dev_server" {
}
availability_zone = var.region_az1
machine_type = var.flavor
network_interfaces = [stackit_network_interface.p2_lan1.network_interface_id ]
network_interfaces = [stackit_network_interface.core_lan.network_interface_id ]
keypair_name = stackit_key_pair.keypair.name
depends_on = [ stackit_network_interface.p2_lan1 ]
depends_on = [ stackit_network_interface.core_lan ]
}
data "stackit_image" "debian" {
project_id = module.project.project_info["project2"].project_id
project_id = module.project.project_info["core"].project_id
image_id = "d1151962-f2cd-45e6-9c67-185c5055c7e0" // Debian 12 (Bookworm) x86_64
}
// create the server in the third project (backup)
resource "stackit_volume" "example_vol_p3" {
project_id = module.project.project_info["project3"].project_id
project_id = module.project.project_info["backup"].project_id
name = "root_volume"
availability_zone = var.region_az1
size = 200
@ -44,7 +44,7 @@ resource "stackit_volume" "example_vol_p3" {
}
resource "stackit_server" "dev_server_p3" {
project_id = module.project.project_info["project3"].project_id
project_id = module.project.project_info["backup"].project_id
name = "server2"
boot_volume = {
source_type = "volume"
@ -52,15 +52,15 @@ resource "stackit_server" "dev_server_p3" {
}
availability_zone = var.region_az1
machine_type = var.flavor
network_interfaces = [stackit_network_interface.p3_lan1.network_interface_id ]
network_interfaces = [stackit_network_interface.backup_lan.network_interface_id ]
keypair_name = stackit_key_pair.keypair.name
depends_on = [ stackit_network_interface.p3_lan1 ]
depends_on = [ stackit_network_interface.backup_lan ]
}
// create the server in the sixth project (infra)
resource "stackit_volume" "example_vol_p6" {
project_id = module.project.project_info["project6"].project_id
project_id = module.project.project_info["infra"].project_id
name = "root_volume"
availability_zone = var.region_az1
size = 200
@ -72,7 +72,7 @@ resource "stackit_volume" "example_vol_p6" {
}
resource "stackit_server" "dev_server_p6" {
project_id = module.project.project_info["project6"].project_id
project_id = module.project.project_info["infra"].project_id
name = "linux-beta"
boot_volume = {
source_type = "volume"
@ -80,9 +80,9 @@ resource "stackit_server" "dev_server_p6" {
}
availability_zone = var.region_az1
machine_type = var.flavor
network_interfaces = [stackit_network_interface.p6_lan1.network_interface_id ]
network_interfaces = [stackit_network_interface.infra_lan.network_interface_id ]
keypair_name = stackit_key_pair.keypair.name
depends_on = [ stackit_network_interface.p6_lan1 ]
depends_on = [ stackit_network_interface.infra_lan ]
}

View file

@ -1,7 +1,7 @@
// Security Group and Security Group Rules
resource "stackit_security_group" "example" {
project_id = module.project.project_info["project2"].project_id
project_id = module.project.project_info["core"].project_id
name = "test"
labels = {
"key" = "example"
@ -10,7 +10,7 @@ resource "stackit_security_group" "example" {
resource "stackit_security_group_rule" "icmp_ingress" {
security_group_id = stackit_security_group.example.security_group_id
project_id = module.project.project_info["project2"].project_id
project_id = module.project.project_info["core"].project_id
direction = "ingress"
icmp_parameters = {
code = 0
@ -21,7 +21,7 @@ resource "stackit_security_group_rule" "icmp_ingress" {
}
}
resource "stackit_security_group_rule" "icmp_egress" {
project_id = module.project.project_info["project2"].project_id
project_id = module.project.project_info["core"].project_id
security_group_id = stackit_security_group.example.security_group_id
direction = "egress"
icmp_parameters = {
@ -35,7 +35,7 @@ resource "stackit_security_group_rule" "icmp_egress" {
resource "stackit_security_group_rule" "ssh_ingress" {
security_group_id = stackit_security_group.example.security_group_id
project_id = module.project.project_info["project2"].project_id
project_id = module.project.project_info["core"].project_id
direction = "ingress"
protocol = {
@ -51,7 +51,7 @@ resource "stackit_security_group_rule" "ssh_ingress" {
// Security Group and Security Group Rules
resource "stackit_security_group" "example_beta" {
project_id = module.project.project_info["project6"].project_id
project_id = module.project.project_info["infra"].project_id
name = "test"
labels = {
"key" = "example"
@ -60,7 +60,7 @@ resource "stackit_security_group" "example_beta" {
resource "stackit_security_group_rule" "icmp_ingress_beta" {
security_group_id = stackit_security_group.example_beta.security_group_id
project_id = module.project.project_info["project6"].project_id
project_id = module.project.project_info["infra"].project_id
direction = "ingress"
icmp_parameters = {
code = 0
@ -71,7 +71,7 @@ resource "stackit_security_group_rule" "icmp_ingress_beta" {
}
}
resource "stackit_security_group_rule" "icmp_egress_beta" {
project_id = module.project.project_info["project6"].project_id
project_id = module.project.project_info["infra"].project_id
security_group_id = stackit_security_group.example_beta.security_group_id
direction = "egress"
icmp_parameters = {
@ -85,7 +85,7 @@ resource "stackit_security_group_rule" "icmp_egress_beta" {
resource "stackit_security_group_rule" "ssh_ingress_beta" {
security_group_id = stackit_security_group.example_beta.security_group_id
project_id = module.project.project_info["project6"].project_id
project_id = module.project.project_info["infra"].project_id
direction = "ingress"
protocol = {

View file

@ -1,16 +1,16 @@
resource "stackit_objectstorage_bucket" "example" {
project_id = module.project.project_info["project3"].project_id
project_id = module.project.project_info["backup"].project_id
name = "073a0ea0-9282-4ed6-8990-d5c4bff7cc3f"
}
resource "stackit_objectstorage_credentials_group" "example" {
project_id = module.project.project_info["project3"].project_id
project_id = module.project.project_info["backup"].project_id
name = "example-credentials-group"
depends_on = [ stackit_objectstorage_bucket.example ]
}
resource "stackit_objectstorage_credential" "example" {
project_id = module.project.project_info["project3"].project_id
project_id = module.project.project_info["backup"].project_id
credentials_group_id = stackit_objectstorage_credentials_group.example.credentials_group_id
expiration_timestamp = "2028-01-02T03:04:05Z"
depends_on = [ stackit_objectstorage_credentials_group.example ]

View file

@ -1,5 +1,5 @@
resource "stackit_ske_cluster" "demo-cluster" {
project_id = module.project.project_info["project4"].project_id
project_id = module.project.project_info["ske"].project_id
name = "demo-clustr"
node_pools = [
{
@ -34,7 +34,7 @@ output "ske-egress-ip" {
}
resource "stackit_network" "ske_network" {
project_id = module.project.project_info["project4"].project_id
project_id = module.project.project_info["ske"].project_id
name = "ske_network"
ipv4_nameservers = ["1.1.1.1", "9.9.9.9"]
ipv4_prefix = "10.220.10.0/24"

View file

@ -1,6 +1,6 @@
// keypair adding to the server
resource "stackit_key_pair" "keypair" {
name = "073a0ea0-9282-4ed6-8990-d5c4bff7cc3f"
public_key = chomp(file("/root/.ssh/id_ed25519.pub"))
public_key = chomp(file(var.public_key_file))
}

View file

@ -33,3 +33,8 @@ variable "flavor" {
default = "m1.2"
}
variable "public_key_file" {
type = string
default = "/root/.ssh/id_ed25519.pub"
}

5
modules.tf Normal file
View file

@ -0,0 +1,5 @@
module "project" {
source = "./modules/project"
organization_id = var.organization_id
service_account_key_path = var.service_account_key_path
}

View file

@ -1,47 +1,3 @@
variable "projects_alpha" {
type = map(object({
name = string
owner_email = string
}))
default = {
project1 = {
name = "landingzone"
owner_email = "michael.sodan@stackit.cloud"
}
project2 = {
name = "core"
owner_email = "michael.sodan@stackit.cloud"
}
project3 = {
name = "backup"
owner_email = "michael.sodan@stackit.cloud"
}
project4 = {
name = "ske"
owner_email = "markus.brunsch@stackit.cloud"
}
}
}
variable "projects_beta" {
type = map(object({
name = string
owner_email = string
}))
default = {
project5 = {
name = "vpn"
owner_email = "michael.sodan@stackit.cloud"
}
project6 = {
name = "infra"
owner_email = "michael.sodan@stackit.cloud"
}
}
}
resource "stackit_resourcemanager_project" "projects_alpha" {
for_each = var.projects_alpha
parent_container_id = var.organization_id

View file

@ -0,0 +1,77 @@
# -- variables
variable "organization_id" {
default = "03a34540-3c1a-4794-b2c6-7111ecf824ef"
}
variable "service_account_key_path" {
default = "/root/.stackit/credentials.json"
}
variable "default_region" {
default ="eu01"
}
variable "region_az1" {
default = "eu01-1"
}
variable "region_az2" {
default = "eu01-2"
}
variable "region_az3" {
default = "eu01-3"
}
variable "region_metro" {
default = "eu01-m"
}
variable "flavor" {
type = string
description = ""
default = "c1.2"
}
variable "projects_alpha" {
type = map(object({
name = string
owner_email = string
}))
default = {
landingzone = {
name = "landingzone"
owner_email = "michael.sodan@stackit.cloud"
}
core = {
name = "core"
owner_email = "michael.sodan@stackit.cloud"
}
backup = {
name = "backup"
owner_email = "michael.sodan@stackit.cloud"
}
ske = {
name = "ske"
owner_email = "markus.brunsch@stackit.cloud"
}
}
}
variable "projects_beta" {
type = map(object({
name = string
owner_email = string
}))
default = {
vpn = {
name = "vpn"
owner_email = "michael.sodan@stackit.cloud"
}
infra = {
name = "infra"
owner_email = "michael.sodan@stackit.cloud"
}
}
}

View file

@ -1,35 +0,0 @@
# -- variables
variable "organization_id" {
default = "03a34540-3c1a-4794-b2c6-7111ecf824ef"
}
variable "service_account_key_path" {
default = "/root/.stackit/credentials.json"
}
variable "default_region" {
default ="eu01"
}
variable "region_az1" {
default = "eu01-1"
}
variable "region_az2" {
default = "eu01-2"
}
variable "region_az3" {
default = "eu01-3"
}
variable "region_metro" {
default = "eu01-m"
}
variable "flavor" {
type = string
description = ""
default = "c1.2"
}