Files
windesheim-iac/week-2/opdracht-2/README.md
2025-05-03 18:36:26 +00:00

2.8 KiB
Raw Blame History

Terraform Deployment Week 2 Assignment

This repository contains Terraform configurations for provisioning infrastructure on ESXi and Azure.

All sensitive information (e.g. SSH key files, passwords) and custom values are handled using Terraform variables stored in a separate file.

graph TD
  subgraph ESXi omgeving
    ESXiNIC[NIC]:::existing
    ESXivSwitch[vSwitch]
    Portgroup[Portgroup]
    ESXivSwitch --> ESXiNIC
    ESXiNIC --> Portgroup

    Web1[Webserver 1]
    Web2[Webserver 2]
    DB[Databaseserver]



    Portgroup --> Web1
    Portgroup --> Web2
    Portgroup --> DB
  end

  subgraph Azure
    VNet[Virtual Network]
    Subnet[Subnet]
    NIC[NIC]
    NSG["NSG (SSH open)"]
    VM[Linux VM]
    PIP[Public IP]

    VNet --> Subnet
    Subnet --> NIC
    NIC --> VM
    NSG --> NIC
    VM --> PIP
  end

  subgraph Data
    AzurePublicKey["SSH Public Key (azure.pub)"]
    AzurePrivateKey["SSH Private Key (azure)"]
    SkylabPublicKey["SSH Public Key (skylab.pub)"]
    Userdata[Userdata]
    AzureCloudInit[Azure Cloudinit]
    VMinfo["Output file: vm_info.txt"]
  end

  SkylabPublicKey --> Userdata
  AzurePrivateKey --> Userdata
  AzurePublicKey --> AzureCloudInit
  Userdata --> Web1
  Userdata --> Web2
  Userdata --> DB
  AzureCloudInit --> VM

  Web1 --> VMinfo
  Web2 --> VMinfo
  DB --> VMinfo
  VM --> VMinfo

  classDef existing stroke:#268b26

Azure

  • Complete network setup:
    • Virtual Network
    • Subnet
    • Network Security Group
    • NIC
  • One Ubuntu 24.04 VM.
  • VM type: Standard_B2ats_v2
  • Public IP address enabled
  • The iac user is created using cloud-init
    • azure.pub is uploaded as public key.
  • A file /home/iac/hello.txt containing Hello World is created using cloud-init
  • VM public and private IP address is stored in the vm_info.txt file.

ESXi

  • Creates three Ubuntu 24.04 VMs.
    • 2 webserver
    • 1 databaseserver
  • Each VM is provisioned with 1 vCPU and 2 GB RAM.
  • The skylab user is created using cloud-init
    • skylab.pub is uploaded as public key.
    • azure private key us uploaded to access the Azure VM.
    • A SSH config file is created with info for connecting to the Azure VM.
    • sudo access.
    • no password prompt.
  • The packages wget and ntpdate are installed with cloud-init.
  • VM private IP addresses are stored in the vm_info.txt file.

Demo

demo

This demo shows:

  1. Applying the Terraform plan
    • terraform apply --auto-approve
    • This shows the ip addresses of the VM's in the output.
  2. Opening an SSH session to one of the ESXi VMs
    • ssh -i /home/student/.ssh/skylab skylab@192.168.1.115
  3. Opening an SSH session to one of the Azure VMs
    • ssh azurevm (using SSH config file)
  4. Showing the content of the hello.txt file.
    • cat hello.txt