2.8 KiB
2.8 KiB
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-initazure.pub
is uploaded as public key.
- A file
/home/iac/hello.txt
containingHello 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
- 2
- Each VM is provisioned with 1 vCPU and 2 GB RAM.
- The
skylab
user is created using cloud-initskylab.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
andntpdate
are installed with cloud-init. - VM private IP addresses are stored in the
vm_info.txt
file.
Demo
This demo shows:
- Applying the Terraform plan
terraform apply --auto-approve
- This shows the ip addresses of the VM's in the output.
- Opening an SSH session to one of the ESXi VMs
ssh -i /home/student/.ssh/skylab skylab@192.168.1.115
- Opening an SSH session to one of the Azure VMs
ssh azurevm
(using SSH config file)
- Showing the content of the
hello.txt
file.cat hello.txt