51 lines
2.0 KiB
Markdown
51 lines
2.0 KiB
Markdown
# iac-homelab
|
|
|
|
## Description
|
|
|
|
This repository contains Infrastructure as Code (IaC) configurations for a home lab environment. It includes Terraform scripts for provisioning infrastructure resources and Ansible playbooks for configuring those resources.
|
|
|
|
## Usage
|
|
|
|
### Prerequisites
|
|
|
|
- Terraform installed on your machine
|
|
- Ansible installed on your machine
|
|
- Proxmox VE installed on homelab
|
|
|
|
#### Proxmox Role and User
|
|
|
|
The Proxmox role is responsible for configuring Proxmox VE on the homelab. It includes tasks for setting up the Proxmox VE cluster, creating virtual machines, and configuring storage.
|
|
|
|
Following the least privilege principle, the role creates a dedicated user account with limited permissions for managing the Proxmox VE cluster.
|
|
|
|
```bash
|
|
pveum role add TerraformProv -privs "Datastore.Allocate Datastore.AllocateSpace Datastore.Audit Pool.Allocate Sys.Audit Sys.Console Sys.Modify VM.Allocate VM.Audit VM.Clone VM.Config.CDROM VM.Config.Cloudinit VM.Config.CPU VM.Config.Disk VM.Config.HWType VM.Config.Memory VM.Config.Network VM.Config.Options VM.Console VM.Migrate VM.Monitor VM.PowerMgmt SDN.Use"
|
|
```
|
|
|
|
Create a dedicated user account with limited permissions for managing the Proxmox VE cluster.
|
|
|
|
```bash
|
|
pveum user add terraform@pve --password <password>
|
|
pveum acl modify / -user terraform@pve -role TerraformProv
|
|
```
|
|
|
|
Generate API keys for the Proxmox VE cluster.
|
|
|
|
```bash
|
|
pveum user token add terraform@pve terraform -expire 0 -privsep 0 -comment "Terraform token"
|
|
```
|
|
|
|
### Provisioning Infrastructure
|
|
|
|
1. Clone this repository to your local machine.
|
|
2. Navigate to the `terraform/prod` directory.
|
|
3. Run `terraform init` to initialize the Terraform environment.
|
|
4. Run `terraform plan` to preview the infrastructure changes.
|
|
5. Run `terraform apply` to apply the infrastructure changes.
|
|
|
|
### Configuring Infrastructure
|
|
|
|
1. Navigate to the `ansible` directory.
|
|
2. Run `ansible-playbook playbooks/setup_dns_server.yml` to set up the DNS server.
|
|
(Or `ansible-playbook playbooks/update_dns_records.yml` to update DNS records).
|