# 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. ```mermaid 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](iac-week-2.gif) 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`