111 lines
2.8 KiB
Markdown
111 lines
2.8 KiB
Markdown
# 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
|
||
|
||

|
||
|
||
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` |