Difference between revisions of "Terraform or OpenTofu"

From docwiki
Jump to: navigation, search
(network.tf)
(Creating a VM and Adding a DNS Entry)
Line 67: Line 67:
 
specifics via "data" blocks.
 
specifics via "data" blocks.
   
<code>
+
<pre>
 
terraform {
 
terraform {
 
}
 
}
Line 125: Line 125:
 
name = "west1"
 
name = "west1"
 
}
 
}
</code>
+
</pre>

Revision as of 07:15, 19 April 2024

Example how to configure a simple network in Google via Terraform/OpenTofu

Creating a Network

main.tf

 terraform {
 }
 provider "google" {
  project = "linux-lv-test"
  region  = "europe-west1"
  zone    = "europe-west1-d"
 }

network.tf

resource "google_compute_network" "lv_vpc" {
  project                 = "linux-lv-test"
  name                    = "linux-lv-vpc"
  auto_create_subnetworks = false
  mtu                     = 1460
}
resource "google_compute_subnetwork" "lv_vpc_west1" {
  name          = "mywest1"
  ip_cidr_range = "10.20.0.0/16"
  region        = "europe-west1"
  network       = google_compute_network.lv_vpc.id
  secondary_ip_range {
    range_name    = "lv-secondary-range"
    ip_cidr_range = "10.120.0.0/24"
  }
}
resource "google_compute_firewall" "lvfw" {
  name    = "lv-fw"
  network = google_compute_network.lv_vpc.id
  allow {
    protocol = "icmp"
  }
  allow {
    protocol = "tcp"
    ports    = ["22", "80", "443","10000-20000"]
  }
  #source_tags = ["linux-lv"]
  source_ranges = ["0.0.0.0/0"]
}
resource "google_compute_router" "lvrouter" {
  name    = "lv-router"
  region  = google_compute_subnetwork.lv_vpc_west1.region
  network = google_compute_network.lv_vpc.id
}
resource "google_compute_router_nat" "lvnat" {
  name   = "lv-router-nat"
  router = google_compute_router.lvrouter.name
  region = google_compute_router.lvrouter.region
  nat_ip_allocate_option = "AUTO_ONLY"
  source_subnetwork_ip_ranges_to_nat = "ALL_SUBNETWORKS_ALL_IP_RANGES"
}

Creating a VM and Adding a DNS Entry

If this is in a different project we can read out the network specifics via "data" blocks.

terraform {
}

provider "google" {
  project = "linux-lv-test"
  region  = "europe-west1"
  zone    = "europe-west1-d"
}


resource "google_compute_instance" "lv_testsrv" {
  name         = "lvsrv"
  #machine_type = "f1-micro"
  machine_type = "e2-micro"
  zone        = "europe-west1-b"

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-12"
    }
  }
  metadata_startup_script = "sudo apt-get update; sudo apt-get upgrade -yq ; apt-get install -yq joe bind9-host tmux vim"

  metadata = {
    ssh-keys = "mond:${file("mond.pub")}"
  }
  network_interface {
     subnetwork = data.google_compute_subnetwork.lv_vpc_west1.id
     access_config {
    }
  }
  tags=["linux-lv"]

}
resource "google_dns_record_set" "lvsrv" {
  name         = "lvsrv.g.mond.at."
  managed_zone = data.google_dns_managed_zone.gmond.managed_zone_id
  type         = "A"
  ttl          = 600
  rrdatas      = [local.pubip_lvsrv]
  project = "arctic-sign-343718"
}

data "google_dns_managed_zone" "gmond" {
  name     = "g-mond"
  project = "arctic-sign-343718"
  #dns_name = "g.mond.at."
}

data "google_compute_network" "lv_vpc" {
  project                 = "linux-lv-test"
  name                    = "linux-lv-vpc"
}

data "google_compute_subnetwork" "lv_vpc_west1" {
  name          = "west1"
}