diff --git a/week-2/opdracht-2/README.md b/week-2/opdracht-2/README.md new file mode 100644 index 0000000..1452b3d --- /dev/null +++ b/week-2/opdracht-2/README.md @@ -0,0 +1,111 @@ +# 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` \ No newline at end of file diff --git a/week-2/opdracht-2/iac-week-2.gif b/week-2/opdracht-2/iac-week-2.gif new file mode 100644 index 0000000..d8e3de9 Binary files /dev/null and b/week-2/opdracht-2/iac-week-2.gif differ