Compare commits
464 Commits
monitoring
...
150cef1aca
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
150cef1aca | ||
|
|
a30ad99ee4 | ||
|
|
d2b6d95a49 | ||
|
|
adc415e95a | ||
|
|
e8303d5129 | ||
|
|
f37021346b | ||
|
|
5a99928c6f | ||
|
|
59c83c296b | ||
|
|
b6cb031edb | ||
|
|
cb5ffc16d8 | ||
|
|
f375c9567f | ||
|
|
f0400c02b6 | ||
|
|
d1d7331238 | ||
|
|
459dbc5d18 | ||
| a4a68eeb5a | |||
|
|
99958979d6 | ||
|
|
0e4d229df2 | ||
|
|
53883108d8 | ||
|
|
fcbf6ce092 | ||
|
|
cf21863b0f | ||
|
|
653a923fa8 | ||
|
|
13c819e66c | ||
|
|
28a653b203 | ||
|
|
cf7ab7fbe6 | ||
|
|
12d0a75b3a | ||
|
|
668e86d7c2 | ||
| 0fb593a313 | |||
|
|
b5dc130207 | ||
|
|
0efa1e5125 | ||
|
|
34e05725dd | ||
|
|
b6b1bee25c | ||
|
|
3b3461fd3c | ||
|
|
7cbed63c92 | ||
|
|
a008e766f2 | ||
|
|
543394a825 | ||
|
|
23d6d75117 | ||
|
|
86433a58d0 | ||
|
|
3344e24a48 | ||
|
|
2621bc9f36 | ||
|
|
72de87c8c4 | ||
| 0ef9703757 | |||
|
|
d77d213d89 | ||
|
|
e793794fdd | ||
|
|
d1ae5ba7a0 | ||
|
|
84e30c8ee2 | ||
|
|
644128cd3f | ||
|
|
6912f5c55d | ||
|
|
fc0e39b9c7 | ||
|
|
8627b00ed8 | ||
|
|
0212f0fdd2 | ||
|
|
edfe594e7e | ||
|
|
791f13fca5 | ||
|
|
c3248fde1f | ||
|
|
c137ea0881 | ||
|
|
818b6505dd | ||
|
|
4a1958876f | ||
|
|
6bdb536848 | ||
|
|
6023ee25e1 | ||
|
|
e5d24f557a | ||
|
|
f8e137b67b | ||
|
|
76241e75a8 | ||
|
|
d5ce6ff96a | ||
|
|
44b1a2fb33 | ||
|
|
7dc1999928 | ||
|
|
63d480927d | ||
|
|
fa86fa4c9c | ||
|
|
444b597ade | ||
|
|
c81a9b7704 | ||
|
|
6cab6519b1 | ||
|
|
ce992ca743 | ||
|
|
092d1ac209 | ||
|
|
6acf2f9944 | ||
|
|
8d18f42b2e | ||
|
|
152f10ed8b | ||
|
|
d99ebca829 | ||
| df91305e13 | |||
|
|
6f2b6e0290 | ||
|
|
fc34833472 | ||
|
|
7f37211a8b | ||
|
|
ccc956f70b | ||
|
|
511f32e521 | ||
|
|
87a3e84f5b | ||
|
|
1743145e9f | ||
|
|
d561ac6e04 | ||
|
|
99bc31dee9 | ||
|
|
ac8e7acbd4 | ||
|
|
0ad5dbe741 | ||
|
|
7d9b054340 | ||
|
|
4b1e8a7cac | ||
|
|
8f190eb188 | ||
|
|
95ae6919b0 | ||
|
|
52e97f3a7c | ||
|
|
461aa1bc54 | ||
|
|
c38461a6e8 | ||
|
|
6bcb6fa93f | ||
|
|
f4181349f8 | ||
|
|
9d860367cc | ||
|
|
f654c59dd5 | ||
|
|
d22ac5cef2 | ||
|
|
0fd69e0b90 | ||
|
|
e8d87ff092 | ||
|
|
23612a38f2 | ||
|
|
bd100c15e7 | ||
|
|
dc5392446c | ||
|
|
f8cf139b10 | ||
|
|
ac955d327f | ||
|
|
9e6339037a | ||
|
|
b647f6afee | ||
|
|
aabb3d5009 | ||
|
|
4ed64ab91c | ||
|
|
f57e0bef02 | ||
|
|
9ed7466fd8 | ||
|
|
4d7766d1b1 | ||
|
|
09ae954085 | ||
|
|
8fd9fd5b20 | ||
|
|
dcb764eca7 | ||
|
|
b6a4ad6816 | ||
|
|
bbaaf655fa | ||
|
|
7228dc6e11 | ||
|
|
8953702608 | ||
|
|
0be33cb8db | ||
|
|
0f0b5db29b | ||
|
|
009f244739 | ||
|
|
2f87039f17 | ||
|
|
72fa38e928 | ||
|
|
9e68802090 | ||
|
|
d05cfcf317 | ||
|
|
80f810fb0c | ||
|
|
9153324795 | ||
|
|
91b5817e5f | ||
|
|
1dfa7889ab | ||
|
|
08d7da0c35 | ||
|
|
9ebeb42023 | ||
|
|
075f34b1fb | ||
|
|
210c89c2c7 | ||
|
|
b93a6e50ab | ||
|
|
85cc1f8c6a | ||
|
|
8e781b0c54 | ||
|
|
d8ad35b8e9 | ||
|
|
a9973d1e0f | ||
| 4113011f63 | |||
|
|
018782d986 | ||
|
|
3681e8c03e | ||
|
|
8f377e4cf3 | ||
|
|
419acaa40d | ||
|
|
42b204bf8a | ||
|
|
1d7dcb7d82 | ||
|
|
d63ca0b4f9 | ||
|
|
e9440327aa | ||
|
|
dcc7e282c7 | ||
|
|
6d5fc7c5c6 | ||
| 312fdf9986 | |||
|
|
4e0b4fa049 | ||
|
|
cf7c2a1436 | ||
|
|
3dc6555ad1 | ||
|
|
27ff9286b4 | ||
|
|
6e50461999 | ||
|
|
3f1c3a40cf | ||
|
|
0116ec4cc3 | ||
|
|
f962d0a6d7 | ||
|
|
dc3c0d7cb1 | ||
|
|
b05f9fad09 | ||
|
|
8650995926 | ||
|
|
e5469d2cb8 | ||
|
|
702698ddcd | ||
|
|
d233d582d4 | ||
|
|
3839fac162 | ||
|
|
b01dac85da | ||
|
|
37a49824d0 | ||
|
|
0127016ab2 | ||
|
|
e0b6fcb24a | ||
|
|
e7d9a8fec5 | ||
|
|
1a9addc537 | ||
|
|
401f25b1c4 | ||
|
|
ece522074e | ||
|
|
c30c0074f1 | ||
|
|
fa51dc2c4d | ||
|
|
c1810fde8a | ||
| a781ef8b14 | |||
|
|
92b2a9d609 | ||
|
|
9250b0f193 | ||
| 24869f47ee | |||
| bb5a57e909 | |||
| 9f3d81729d | |||
| 064d3e8b3d | |||
| ef7e3c61ed | |||
| 64951e1e5e | |||
| 58931732f7 | |||
| be8e50d590 | |||
| e309acd67d | |||
| 4e7f14ea5a | |||
| b79f0505b7 | |||
| 045ac85353 | |||
| 60af4304b6 | |||
| 96e946ac09 | |||
| 6584ed9dc4 | |||
| 3017c27910 | |||
| c25c2a25ad | |||
| 0476e489d4 | |||
| bf0d7a20a7 | |||
| ed0091cd05 | |||
| 402f93ab38 | |||
| 8944da8c99 | |||
| d671700466 | |||
| 562e102a9b | |||
| f4c60d7560 | |||
| 0dae8327eb | |||
| 39b7b91f45 | |||
| a7f77514d6 | |||
| b45dcea4c3 | |||
| 2ed70b4964 | |||
| dbf0b18f07 | |||
| 1cfc9b5f5d | |||
| c8f75bef8a | |||
| fc171b48e9 | |||
| 5504d0c6f4 | |||
| 025e9a8f1c | |||
| 06db61c6c0 | |||
| 8601ad9cd9 | |||
| 1f7318f1c3 | |||
| cdc78955b1 | |||
| 6f0c751f63 | |||
| f1ef759206 | |||
| 5f5f8cb173 | |||
| eb93eb7352 | |||
| 9cd9a30fbe | |||
| 5a30521d66 | |||
| 725d403d34 | |||
| 9a604042ca | |||
| 10406e1705 | |||
| 4717f63bc3 | |||
| 2ff74cdc7c | |||
| 87f2d6bf95 | |||
| 88ec796267 | |||
| 344a29a374 | |||
| c7fbe8e963 | |||
| 03acab784a | |||
| 3ce3ecac66 | |||
| bc24c00c50 | |||
| 3e9a843e1b | |||
| 5e99408c1f | |||
| e4a2c47da2 | |||
| 13ebe67a35 | |||
| ca1cdd0634 | |||
| 74e53d1364 | |||
| e946bd71f0 | |||
| 905b4619d6 | |||
| 97e9889251 | |||
| 9f3ac95d8d | |||
| 84523d0054 | |||
| f8c6b327f9 | |||
| 79662aa545 | |||
| 69b91a2e1d | |||
| 9961fe1ed4 | |||
| 4db6f0b06f | |||
| 307413f3f2 | |||
| 836ef66cf0 | |||
| 4cbaebc98b | |||
| c1d85b7f89 | |||
| c087f32355 | |||
| 9ad585681f | |||
| 40ab77f061 | |||
| 1d0adb7689 | |||
| 1d6b216b74 | |||
| df0d81ec4d | |||
| ea7d079f27 | |||
| 5022fc90ab | |||
| 45c478bede | |||
| 03b8abbe4d | |||
| 42ea1e2d03 | |||
| b85b237129 | |||
| 1d6a8c154c | |||
| 6f14d48d5e | |||
| fa9fd9c65f | |||
| 86cf979453 | |||
| cc0fd647ab | |||
| 591522f643 | |||
| 643fefb4bf | |||
| e8810195cd | |||
| 3d2669497a | |||
| 42f7a2773d | |||
| 35c1bdb3bf | |||
| 9605b9d3bd | |||
| dfa219191d | |||
| 14502df261 | |||
| ea7e05dcc2 | |||
| 26f7d3214f | |||
| 173a36c518 | |||
| fcb1777336 | |||
| f82c13cd09 | |||
| e9a854faed | |||
| 344e8dff69 | |||
| 36c2e9540c | |||
| 40dda3241f | |||
| db67f71a3c | |||
| 920ea80261 | |||
| ad03943339 | |||
| a349ce13f8 | |||
| 7d7129632f | |||
| e3b3401544 | |||
| bba9278895 | |||
| d941557e88 | |||
| 4964552483 | |||
| 7e0b0a859b | |||
| b33bd5f252 | |||
| 63b9a8fd13 | |||
| 6350cb681f | |||
| 676fc02c91 | |||
| 75e0d99495 | |||
| b51cd1a868 | |||
| 7187dc8280 | |||
| 86708542c9 | |||
| 74172c4e5a | |||
| 8c8835d1d5 | |||
| 286d20f8c1 | |||
| 05ba1bbdb3 | |||
| 7c2ef04d47 | |||
| 73eee46101 | |||
| 510da9c2a4 | |||
| 702c71fcff | |||
| 3f31f77bc8 | |||
| 6f5bc65171 | |||
| 6107e474c1 | |||
| e7f8fd2ccd | |||
| 1272fa3cb3 | |||
| a76c99e825 | |||
| d1b6df7d94 | |||
| 14d28f7937 | |||
| a67818c0f3 | |||
| 0d03a42337 | |||
| 853cd90148 | |||
| 4108600a57 | |||
| 59826cb7a9 | |||
| cb99f1f5d2 | |||
| a61491acf3 | |||
| 7b483364be | |||
| 9a8978d046 | |||
| 72b943ee04 | |||
| dd3cf2cd0f | |||
| dbd1c94ada | |||
| c532e7b7de | |||
| 3c90b68896 | |||
| 36c5215ed4 | |||
| d7d0027b64 | |||
| 428809719a | |||
| 45d8c51a75 | |||
| 7c605a7337 | |||
| a3cd499297 | |||
| ac0a4c0580 | |||
| 932beed25a | |||
| 79f5a9d129 | |||
| b2ebe28397 | |||
| 6c300ca545 | |||
| eea499a32c | |||
| fcd839a00e | |||
| 45b5e65e36 | |||
| 900098b9c1 | |||
| 1b5213af1d | |||
| efcd022d27 | |||
| 9f328a01a4 | |||
| 97e9c8c037 | |||
| b885d1d707 | |||
| a084340ce0 | |||
| 1b5597ac09 | |||
| 8710665255 | |||
| 81e292dc2b | |||
| aa5087882d | |||
| 1959a667d4 | |||
| 405aae5209 | |||
| b7e090ed7c | |||
| 02b788ee63 | |||
| a642d2382d | |||
| 6ea3611e08 | |||
| a255908108 | |||
| 9b85eabf41 | |||
| 1fb37b2da9 | |||
| 4193f33183 | |||
| 2ae45aca00 | |||
| 19f7af6b1c | |||
| 94f609140b | |||
| d60f24183b | |||
| 1728ede010 | |||
| 1d828f455c | |||
| a12ff980c5 | |||
| 9cb44fb15c | |||
| ffd5e085e1 | |||
| 0403077495 | |||
| 2124f86879 | |||
| 86c03c882d | |||
| 2725aecb58 | |||
| 0c99612913 | |||
| 7e93e9b1b1 | |||
| d2d3ee7c78 | |||
| 8dc2243140 | |||
| 2a323f5675 | |||
| cfc70229ee | |||
| 593e71509b | |||
| bca855046f | |||
| 7aa29a3f67 | |||
| 0f27698fef | |||
| a493cb75f9 | |||
| 31a4d7e3d3 | |||
| 79706c90ff | |||
| fabc113c84 | |||
| 01bc13e0a2 | |||
| 1eb12c2582 | |||
| 6d43a0c7a8 | |||
| c85d4f7a3d | |||
| 7ffc2c983b | |||
| 4fd272ddf7 | |||
| 99fb15f8f0 | |||
| bd27975bf3 | |||
| ee3f2d7fcf | |||
| 81accaf9a2 | |||
| 23052096f2 | |||
| 0fc6bc340b | |||
| 36ccbcbab1 | |||
| 574fdfe25c | |||
| 0987226b0d | |||
| b200294ebc | |||
| 27553fc4d1 | |||
| 7925990631 | |||
| 4639725099 | |||
| edb019c38e | |||
| 1742dff512 | |||
| 01e02a6687 | |||
| bca03f901a | |||
| 4c72e35707 | |||
| ff925aee83 | |||
| 05fa4eaa43 | |||
| 48b8548528 | |||
| 0764cc8bd7 | |||
| 28e57361e2 | |||
| 5e1522fefb | |||
| 4a2120f830 | |||
| e09c33d307 | |||
| 943795984f | |||
| 796881ecc5 | |||
| cf507a70af | |||
| c104009aaa | |||
| d085f80ea7 | |||
| 8121e5c048 | |||
| c51615543b | |||
| 625c4b8fe1 | |||
| 23b43a16b3 | |||
| 44b9d099c7 | |||
| 350a149645 | |||
| b358c93c16 | |||
| 6feea89ec1 | |||
| b09f8e1ad5 | |||
| 06b28b1297 | |||
| f807f47642 | |||
| 79f231eaa1 | |||
| e6abae943d | |||
| e5f84ccbf2 | |||
| 9d482087e5 | |||
| face668dfc | |||
| 8293c842e6 | |||
| fc31dd2a5a | |||
| efecef6832 | |||
| 5612932691 | |||
| 0f4d2dcb7c | |||
| c625e48dee | |||
| 23bdd17e25 |
59
.gitignore
vendored
59
.gitignore
vendored
@@ -1,15 +1,9 @@
|
|||||||
# macOS system files
|
# macOS
|
||||||
.DS_Store
|
.DS_Store
|
||||||
.AppleDouble
|
.AppleDouble
|
||||||
.LSOverride
|
.LSOverride
|
||||||
|
|
||||||
# Icon must end with two \r
|
|
||||||
Icon
|
Icon
|
||||||
|
|
||||||
# Thumbnails
|
|
||||||
._*
|
._*
|
||||||
|
|
||||||
# Files that might appear in the root of a volume
|
|
||||||
.DocumentRevisions-V100
|
.DocumentRevisions-V100
|
||||||
.fseventsd
|
.fseventsd
|
||||||
.Spotlight-V100
|
.Spotlight-V100
|
||||||
@@ -17,36 +11,53 @@ Icon
|
|||||||
.Trashes
|
.Trashes
|
||||||
.VolumeIcon.icns
|
.VolumeIcon.icns
|
||||||
.com.apple.timemachine.donotpresent
|
.com.apple.timemachine.donotpresent
|
||||||
|
|
||||||
# Directories potentially created on remote AFP share
|
|
||||||
.AppleDB
|
.AppleDB
|
||||||
.AppleDesktop
|
.AppleDesktop
|
||||||
Network Trash Folder
|
Network Trash Folder
|
||||||
Temporary Items
|
Temporary Items
|
||||||
.apdisk
|
.apdisk
|
||||||
|
|
||||||
# VS Code
|
|
||||||
.vscode/
|
|
||||||
|
|
||||||
# macOS metadata
|
|
||||||
*.icloud
|
*.icloud
|
||||||
|
|
||||||
# Terraform
|
# IDE
|
||||||
terraform/
|
.vscode/
|
||||||
|
.idea/
|
||||||
|
.kiro/
|
||||||
|
|
||||||
|
# Terraform (track .tf files, ignore state and runtime)
|
||||||
.terraform/
|
.terraform/
|
||||||
*.tfstate
|
*.tfstate
|
||||||
*.tfstate.backup
|
*.tfstate.backup
|
||||||
|
# *.tfvars
|
||||||
# Crash log files
|
!*.tfvars.example
|
||||||
|
!*.pkrvars.hcl
|
||||||
crash.log
|
crash.log
|
||||||
|
|
||||||
# Ignore override files as they are usually used to override resources locally
|
|
||||||
*.override.tf
|
*.override.tf
|
||||||
*.override.tf.json
|
*.override.tf.json
|
||||||
|
|
||||||
# Ignore CLI configuration files
|
|
||||||
.terraformrc
|
.terraformrc
|
||||||
.terraformrc.json
|
terraform.rc
|
||||||
|
|
||||||
# Ignore secrets
|
# Ansible
|
||||||
|
*.retry
|
||||||
|
ansible/vault/*.vault
|
||||||
|
|
||||||
|
# Packer
|
||||||
|
packer_cache/
|
||||||
|
|
||||||
|
# Secrets
|
||||||
|
*.pem
|
||||||
|
*.key
|
||||||
|
|
||||||
|
# Environment files with secrets
|
||||||
|
boilerplates/**/.env
|
||||||
|
|
||||||
|
# Local paths
|
||||||
|
~/
|
||||||
|
|
||||||
|
# Misc
|
||||||
doppler-token.yaml
|
doppler-token.yaml
|
||||||
|
|
||||||
|
# talhelper generated machine configs — contain secrets, never commit
|
||||||
|
talos/talhelper/clusterconfig/
|
||||||
|
# talenv.yaml plaintext — only commit the SOPS-encrypted version
|
||||||
|
talos/talhelper/talenv.yaml
|
||||||
|
!talos/talhelper/talenv.sops.yaml
|
||||||
3
.sops.yaml
Normal file
3
.sops.yaml
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
creation_rules:
|
||||||
|
- path_regex: talos/talhelper/talenv.yaml
|
||||||
|
age: age1xkyuv8r8ce6lu3d64jfspz4e50k6pxlaxwmuplzrtnpfnnrnycaq6mfsrn
|
||||||
166
README.md
166
README.md
@@ -1,102 +1,102 @@
|
|||||||
# A Homelab based on Red Hat Technologies
|
# mk-labs
|
||||||
|
|
||||||
This repository is the configuration of my homelab. In addition to providing services, the purpose of my homelab is to learn advanced concepts primarily based on Red Hat OpenShift.
|
Automated infrastructure provisioning and configuration for a personal homelab, built on GitOps practices with clear tool responsibility boundaries.
|
||||||
|
|
||||||
This implementation is built on easily accessible consumer based hardware and will focus heavily on GitOps practices and automation will be used wherever possible.
|
## Architecture
|
||||||
|
|
||||||
This repo is a mono-repo that is broken up into three sections:
|
A single operator action — setting a VM record's status to **Staged** in NetBox — triggers a fully automated provisioning pipeline:
|
||||||
|
```
|
||||||
|
NetBox (webhook) → n8n (validate & orchestrate) → Terraform (create VM + DHCP)
|
||||||
|
→ Ansible (OS config + DNS + status update)
|
||||||
|
```
|
||||||
|
|
||||||
- infra-config
|
| Tool | Host | IP | Responsibility |
|
||||||
- apps
|
|------|------|----|---------------|
|
||||||
- cluster
|
| NetBox | fire-station | 10.1.71.102 | Source of truth — VM records, IP allocation, VLAN data |
|
||||||
|
| n8n | tiki-room | 10.1.71.23 | Event orchestration, validation, pipeline sequencing |
|
||||||
|
| Terraform | city-hall | 10.1.71.35 | Proxmox VM lifecycle, Unifi DHCP reservations |
|
||||||
|
| Ansible / Semaphore | imagineering | 10.1.71.22 | OS configuration, DNS records, NetBox status updates |
|
||||||
|
| Proxmox | fantasyland | 10.1.71.13 | Target hypervisor |
|
||||||
|
|
||||||
|
All systems on the Server Trusted VLAN (10.1.71.0/24).
|
||||||
|
|
||||||
|
## Repository Structure
|
||||||
|
```
|
||||||
|
homelab/
|
||||||
|
├── ansible/
|
||||||
|
│ ├── inventory/ # NetBox dynamic inventory + static
|
||||||
|
│ ├── playbooks/ # Runnable playbooks (vm-provision, DNS, OS updates)
|
||||||
|
│ ├── roles/ # vm-baseline, dns-manager, common, haproxy, n8n, observer, etc.
|
||||||
|
│ ├── tasks/ # Shared includable task files
|
||||||
|
│ ├── group_vars/ # Group variable definitions
|
||||||
|
│ ├── host_vars/ # Per-host variable definitions
|
||||||
|
│ ├── templates/ # Jinja2 templates
|
||||||
|
│ └── ansible.cfg
|
||||||
|
│
|
||||||
|
├── terraform/
|
||||||
|
│ ├── proxmox/vm/ # bpg/proxmox provider — VM creation from templates
|
||||||
|
│ ├── unifi/dhcp/ # Unifi provider — DHCP static reservations on UDM Pro
|
||||||
|
│ └── dns/ # DNS record management
|
||||||
|
│
|
||||||
|
├── packer/
|
||||||
|
│ ├── ubuntu-24.04/ # Ubuntu 24.04 VM template (small → xlarge-plus sizes)
|
||||||
|
│ └── fedora-42/ # Fedora 42 VM template
|
||||||
|
│
|
||||||
|
├── n8n/
|
||||||
|
│ └── workflows/ # Exported n8n workflow JSON (vm-provisioning)
|
||||||
|
│
|
||||||
|
├── netbox/
|
||||||
|
│ └── initializers/ # Custom fields, VLANs, IP prefixes as code
|
||||||
|
│
|
||||||
|
└── docs/
|
||||||
|
└── decisions/ # Architecture decision records
|
||||||
|
```
|
||||||
|
|
||||||
|
## Pipeline Flow
|
||||||
|
|
||||||
|
| # | System | Action |
|
||||||
|
|---|--------|--------|
|
||||||
|
| 1 | NetBox | Operator sets VM status to Staged → webhook fires |
|
||||||
|
| 2 | n8n | Validates payload (hostname, IP, VLAN, template, proxmox_node) |
|
||||||
|
| 3 | n8n → city-hall | SSH + `terraform apply` — creates VM on Proxmox |
|
||||||
|
| 4 | n8n | Queries Proxmox API for MAC address |
|
||||||
|
| 5 | n8n → NetBox | Writes MAC to VM interface record |
|
||||||
|
| 6 | n8n → city-hall | SSH + `terraform apply` — creates DHCP reservation on UDM Pro |
|
||||||
|
| 7 | n8n → imagineering | Triggers Ansible via Semaphore API |
|
||||||
|
| 8 | Ansible | OS baseline, SSH hardening, Technitium DNS A record |
|
||||||
|
| 9 | Ansible → NetBox | Sets VM status to Active |
|
||||||
|
|
||||||
|
On any failure, NetBox status is set to **Failed**. No auto-retry — operator investigates.
|
||||||
|
|
||||||
## Hardware
|
## Hardware
|
||||||
|
|
||||||
- Dell 7050 SFF (7)
|
- 7× Dell 7050 SFF
|
||||||
- Minisforum TH60 (3)
|
- 3× Minisforum TH60
|
||||||
- Minisforum MS01 (2)
|
- 2× Minisforum MS01
|
||||||
- Synology 1621+
|
- Synology DS1621+
|
||||||
|
- Ubiquiti UDM Pro
|
||||||
|
|
||||||
## Software
|
## Software Stack
|
||||||
|
|
||||||
- Proxmox (Virtualization)
|
- **Virtualization**: Proxmox
|
||||||
- Cloudflare (Domain Hosting, Public DNS)
|
- **Automation**: Terraform, Ansible, n8n, Semaphore
|
||||||
- Unbound (Recursive DNS)
|
- **DNS**: Technitium (authoritative), Unbound (recursive)
|
||||||
- FreeIPA (Identity management, Authoritive DNS)
|
- **IPAM/DCIM**: NetBox
|
||||||
- Matchbox (iPXE)
|
- **Networking**: Ubiquiti UDM Pro
|
||||||
- Red Hat OpenShift
|
- **Templates**: Packer (Ubuntu 24.04, Fedora 42)
|
||||||
- OpenShift Agent Based Installer (Install OpenShift)
|
|
||||||
- [Red Hat Advanced Cluster Management for Kubernetes](https://www.redhat.com/en/technologies/management/advanced-cluster-management)
|
|
||||||
- [Vault](https://www.hashicorp.com/en/products/vault)
|
|
||||||
- [OpenShift GitOps (ArgoCD)](https://www.redhat.com/en/technologies/cloud-computing/openshift/gitops)
|
|
||||||
- [Red Hat Ansible Automation Platform](https://www.redhat.com/en/technologies/management/ansible)
|
|
||||||
|
|
||||||
## Prerequisites
|
|
||||||
|
|
||||||
- Ansible user created
|
|
||||||
- Ansible configured
|
|
||||||
- [Networking](docs/networks.md)
|
|
||||||
- [Proxmox](docs/proxmox.md) (In my homelab, internal DNS, identity manangement, and ipxe are hosted here.)
|
|
||||||
- Matchbox
|
|
||||||
- DNS
|
|
||||||
- Domain Registration
|
|
||||||
|
|
||||||
## Assumptions
|
|
||||||
|
|
||||||
There are a dozen different architectures you could use to deploy OpenShift in every which way.
|
|
||||||
For the sake of this documentation we'll assume the following:
|
|
||||||
|
|
||||||
## Getting Started
|
## Getting Started
|
||||||
|
|
||||||
[Step-by-Step Walkthrough](step-by-step.md)
|
See [docs/decisions/vm-provisioning-flow.md](docs/decisions/vm-provisioning-flow.md) for the full architecture decision record.
|
||||||
|
|
||||||
### Hub Cluster
|
Previous OpenShift/ACM/Fastpass content is preserved in the `archive/pre-mk-labs` branch.
|
||||||
|
|
||||||
You'll need an OpenShift "Hub Cluster" with access to persistant storage.
|
## Security
|
||||||
A Single Node OpenShift (SNO) instance, installed on bare metal, will act as a Hub cluster and run:
|
|
||||||
|
|
||||||
- Advanced Cluster Management
|
No sensitive data is stored in this repository. Secrets are managed via Ansible Vault and environment variables on pipeline hosts.
|
||||||
- Ansible Automation Platform
|
|
||||||
- Vault
|
|
||||||
- ~~OpenShift GitOps~~
|
|
||||||
|
|
||||||
#### Network Prerequisites
|
|
||||||
|
|
||||||
The prerequisites for OpenShift in traditional and HCP patterns are largely the same - it just kind of depends on where your DNS records go to.
|
|
||||||
|
|
||||||
| Cluster | Endpoint | VIP | DNS A Record | Notes |
|
|
||||||
|------------------|-------------|---------------|-----------------------------------|----------------------------------|
|
|
||||||
| Hub Cluster (SNO) | App Ingress | 192.168.0.10 | *.apps.hub-cluster.example.com | SNO App VIP goes to IP of node |
|
|
||||||
| Hub Cluster (SNO) | API | 192.168.0.10 | api.hub-cluster.example.com | SNO API goes to IP of node |
|
|
||||||
|
|
||||||
These DNS entries should be put in your Authoratitive DNS.
|
|
||||||
|
|
||||||
#### ACM & GitOps Configuration
|
|
||||||
|
|
||||||
Before you start creating clusters you may want to create some Policies, integrate ACM and ArgoCD, etc. This step is optional in case you're just interested in trying out Hosted Control Planes or copy/paste around a cluster for testing purposes.
|
|
||||||
|
|
||||||
Find additional details in the ./02-rhacm-config folder.
|
|
||||||
|
|
||||||
#### Creating a Cluster
|
|
||||||
|
|
||||||
With everything in its right place, you can now start to declaratively create clusters
|
|
||||||
|
|
||||||
./05-clusters/hcp-bmh - HCP to Bare Metal Hosts
|
|
||||||
|
|
||||||
### Internal Cluster
|
|
||||||
|
|
||||||
Two additional bare metal nodes, to be added to Advanced Cluster Management (ACM) running on the SNO Hub. These will be used to create another HCP cluster.
|
|
||||||
These servers have a BMC interface with Redfish - if not, then you'll need to manually manage the boot and installation of those servers.
|
|
||||||
This makes it to where you just need 3 bare metal nodes. You could run one HCP Bare Metal cluster with both of the other nodes, but then you have a shared storage requirement that can't be satisfied by ODF since that needs at least 3 nodes.
|
|
||||||
|
|
||||||
### External Cluster
|
|
||||||
|
|
||||||
You'll also either need you just need at least 2 bare metal nodes.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Credits
|
**Status**: 🚧 Active Development — VM Provisioning Pipeline
|
||||||
|
|
||||||
- Ken Moini - As I used his [repo](https://github.com/kenmoini/ztp-for-you-and-me) as the baseline for this project.
|
**Last Updated**: February 2026
|
||||||
- Ryan Etten
|
|
||||||
- Andrew Potozniak
|
|
||||||
|
|||||||
193
ansible/DNS_MANAGEMENT_REFACTOR.md
Executable file
193
ansible/DNS_MANAGEMENT_REFACTOR.md
Executable file
@@ -0,0 +1,193 @@
|
|||||||
|
# DNS Management Refactor - Modular & Repeatable
|
||||||
|
|
||||||
|
This document explains the refactoring of DNS management from standalone playbooks to modular, reusable tasks.
|
||||||
|
|
||||||
|
## 🎯 **What Changed**
|
||||||
|
|
||||||
|
### **Before (Monolithic)**
|
||||||
|
```yaml
|
||||||
|
# Standalone playbook: add_technitium_dns_entry.yml
|
||||||
|
- name: Add entry to Technitium DNS
|
||||||
|
hosts: all
|
||||||
|
tasks:
|
||||||
|
- name: Create DNS entry
|
||||||
|
effectivelywild.technitium_dns.technitium_dns_add_record:
|
||||||
|
# ... hardcoded parameters
|
||||||
|
```
|
||||||
|
|
||||||
|
### **After (Modular)**
|
||||||
|
```yaml
|
||||||
|
# Reusable task: tasks/add_technitium_dns_entry.yml
|
||||||
|
- name: Create DNS entry for {{ dns_record_name }}
|
||||||
|
effectivelywild.technitium_dns.technitium_dns_add_record:
|
||||||
|
# ... parameterized with variables
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📁 **New Structure**
|
||||||
|
|
||||||
|
```
|
||||||
|
ansible/
|
||||||
|
├── playbooks/
|
||||||
|
│ ├── tasks/
|
||||||
|
│ │ └── add_technitium_dns_entry.yml # ✅ Reusable task file
|
||||||
|
│ ├── add_dns_entry.yml # ✅ New playbook using task
|
||||||
|
│ ├── add_technitium_dns_entry.yml.backup # 📦 Backed up old version
|
||||||
|
│ └── roles/
|
||||||
|
│ └── dns-manager/ # ✅ Enhanced role
|
||||||
|
│ ├── tasks/main.yml # Uses task file
|
||||||
|
│ └── defaults/main.yml # Technitium defaults
|
||||||
|
└── scripts/
|
||||||
|
└── migrate-dns-references.sh # ✅ Migration helper
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🚀 **Usage Examples**
|
||||||
|
|
||||||
|
### **1. In Playbooks (Direct Task Include)**
|
||||||
|
```yaml
|
||||||
|
- name: Add DNS entry for my server
|
||||||
|
hosts: my_servers
|
||||||
|
tasks:
|
||||||
|
- name: Create DNS entry
|
||||||
|
ansible.builtin.include_tasks: tasks/add_technitium_dns_entry.yml
|
||||||
|
vars:
|
||||||
|
dns_record_name: "{{ inventory_hostname }}"
|
||||||
|
dns_zone: "{{ base_domain }}"
|
||||||
|
dns_ip_address: "{{ ansible_default_ipv4.address }}"
|
||||||
|
```
|
||||||
|
|
||||||
|
### **2. Using the DNS Manager Role**
|
||||||
|
```yaml
|
||||||
|
- name: Setup cluster DNS
|
||||||
|
hosts: control_plane[0]
|
||||||
|
roles:
|
||||||
|
- role: dns-manager
|
||||||
|
vars:
|
||||||
|
cluster_endpoint: "my-cluster.local.mk-labs.cloud"
|
||||||
|
cluster_vip: "10.1.71.100"
|
||||||
|
```
|
||||||
|
|
||||||
|
### **3. Using the New Playbook**
|
||||||
|
```yaml
|
||||||
|
# Import the new modular playbook
|
||||||
|
- import_playbook: add_dns_entry.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
### **4. In Cluster Network Setup**
|
||||||
|
```yaml
|
||||||
|
- name: Setup complete cluster network
|
||||||
|
ansible.builtin.include_role:
|
||||||
|
name: cluster-network-setup
|
||||||
|
vars:
|
||||||
|
cluster_name: "fastpass"
|
||||||
|
cluster_endpoint: "fastpass.local.mk-labs.cloud"
|
||||||
|
cluster_vip: "10.1.71.53"
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔧 **Migration Guide**
|
||||||
|
|
||||||
|
### **Automatic Migration**
|
||||||
|
```bash
|
||||||
|
# Run the migration script to find references
|
||||||
|
./scripts/migrate-dns-references.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### **Manual Updates**
|
||||||
|
|
||||||
|
1. **Replace playbook imports:**
|
||||||
|
```yaml
|
||||||
|
# OLD
|
||||||
|
- import_playbook: add_technitium_dns_entry.yml
|
||||||
|
|
||||||
|
# NEW
|
||||||
|
- import_playbook: add_dns_entry.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Use task includes in roles:**
|
||||||
|
```yaml
|
||||||
|
- ansible.builtin.include_tasks: tasks/add_technitium_dns_entry.yml
|
||||||
|
vars:
|
||||||
|
dns_record_name: "my-server"
|
||||||
|
dns_ip_address: "10.1.71.100"
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Use the dns-manager role:**
|
||||||
|
```yaml
|
||||||
|
- ansible.builtin.include_role:
|
||||||
|
name: dns-manager
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📋 **Variable Reference**
|
||||||
|
|
||||||
|
### **Task Variables (`tasks/add_technitium_dns_entry.yml`)**
|
||||||
|
| Variable | Default | Description |
|
||||||
|
|----------|---------|-------------|
|
||||||
|
| `dns_record_name` | `inventory_hostname` | DNS record name |
|
||||||
|
| `dns_zone` | `base_domain` | DNS zone |
|
||||||
|
| `dns_ip_address` | `ip_address` | IP address for A record |
|
||||||
|
| `dns_record_type` | `A` | DNS record type |
|
||||||
|
| `dns_ttl` | `360` | TTL in seconds |
|
||||||
|
| `dns_create_ptr` | `true` | Create PTR record |
|
||||||
|
| `dns_debug` | `true` | Show debug output |
|
||||||
|
|
||||||
|
### **DNS Manager Role Variables**
|
||||||
|
| Variable | Default | Description |
|
||||||
|
|----------|---------|-------------|
|
||||||
|
| `cluster_endpoint` | - | Full cluster FQDN |
|
||||||
|
| `cluster_vip` | - | Cluster VIP address |
|
||||||
|
| `dns_management_enabled` | `true` | Enable DNS management |
|
||||||
|
| `use_hosts_file_fallback` | `true` | Add to /etc/hosts |
|
||||||
|
| `dns_ttl` | `360` | DNS TTL |
|
||||||
|
| `create_ptr_record` | `true` | Create PTR record |
|
||||||
|
|
||||||
|
## 🎯 **Benefits**
|
||||||
|
|
||||||
|
### ✅ **Modularity**
|
||||||
|
- Single task file used across multiple contexts
|
||||||
|
- Consistent DNS management approach
|
||||||
|
- Easy to maintain and update
|
||||||
|
|
||||||
|
### ✅ **Flexibility**
|
||||||
|
- Works in playbooks, roles, and standalone
|
||||||
|
- Parameterized for different use cases
|
||||||
|
- Supports multiple DNS providers (extensible)
|
||||||
|
|
||||||
|
### ✅ **Maintainability**
|
||||||
|
- One place to update DNS logic
|
||||||
|
- Clear variable interface
|
||||||
|
- Better error handling and debugging
|
||||||
|
|
||||||
|
### ✅ **Integration**
|
||||||
|
- Seamlessly integrates with cluster setup
|
||||||
|
- Works with existing homelab infrastructure
|
||||||
|
- Compatible with Traefik load balancer setup
|
||||||
|
|
||||||
|
## 🔄 **Integration with Cluster Setup**
|
||||||
|
|
||||||
|
The DNS management now integrates seamlessly with your cluster deployment:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# In fastpass-first-control-plane role
|
||||||
|
- name: Setup network infrastructure for FastPass cluster
|
||||||
|
ansible.builtin.include_role:
|
||||||
|
name: cluster-network-setup
|
||||||
|
vars:
|
||||||
|
cluster_name: "{{ cluster_name }}"
|
||||||
|
cluster_endpoint: "{{ control_plane_endpoint }}"
|
||||||
|
cluster_vip: "{{ ansible_default_ipv4.address }}"
|
||||||
|
control_plane_nodes: "{{ groups['fastpass_control_plane'] }}"
|
||||||
|
```
|
||||||
|
|
||||||
|
This automatically:
|
||||||
|
1. ✅ Creates DNS entry for `fastpass.local.mk-labs.cloud`
|
||||||
|
2. ✅ Configures Traefik load balancer
|
||||||
|
3. ✅ Tests connectivity
|
||||||
|
4. ✅ Provides fallback to /etc/hosts
|
||||||
|
|
||||||
|
## 🚀 **Next Steps**
|
||||||
|
|
||||||
|
1. **Test the refactored approach** with your FastPass cluster
|
||||||
|
2. **Extend to other clusters** (Hub, Internal) using the same pattern
|
||||||
|
3. **Add support for other DNS providers** if needed
|
||||||
|
4. **Create monitoring** for DNS health checks
|
||||||
|
|
||||||
|
This modular approach makes your homelab's DNS management much more maintainable and repeatable across all your Kubernetes clusters!
|
||||||
@@ -54,7 +54,7 @@
|
|||||||
|
|
||||||
# (pathspec) Colon-separated paths in which Ansible will search for collections content. Collections must be in nested *subdirectories*, not directly in these directories. For example, if ``COLLECTIONS_PATHS`` includes ``'{{ ANSIBLE_HOME ~ "/collections" }}'``, and you want to add ``my.collection`` to that directory, it must be saved as ``'{{ ANSIBLE_HOME} ~ "/collections/ansible_collections/my/collection" }}'``.
|
# (pathspec) Colon-separated paths in which Ansible will search for collections content. Collections must be in nested *subdirectories*, not directly in these directories. For example, if ``COLLECTIONS_PATHS`` includes ``'{{ ANSIBLE_HOME ~ "/collections" }}'``, and you want to add ``my.collection`` to that directory, it must be saved as ``'{{ ANSIBLE_HOME} ~ "/collections/ansible_collections/my/collection" }}'``.
|
||||||
|
|
||||||
;collections_path=/Users/rblundon/.ansible/collections:/usr/share/ansible/collections
|
collections_path=/opt/ansible-collections:/usr/share/ansible/collections
|
||||||
|
|
||||||
# (boolean) A boolean to enable or disable scanning the sys.path for installed collections.
|
# (boolean) A boolean to enable or disable scanning the sys.path for installed collections.
|
||||||
;collections_scan_sys_path=True
|
;collections_scan_sys_path=True
|
||||||
@@ -209,7 +209,7 @@ private_key_file=~/.ssh/ansible
|
|||||||
remote_user=wed
|
remote_user=wed
|
||||||
|
|
||||||
# (pathspec) Colon-separated paths in which Ansible will search for Roles.
|
# (pathspec) Colon-separated paths in which Ansible will search for Roles.
|
||||||
;roles_path=/Users/rblundon/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles
|
roles_path=./roles
|
||||||
|
|
||||||
# (string) Set the main callback used to display Ansible output. You can only have one at a time.
|
# (string) Set the main callback used to display Ansible output. You can only have one at a time.
|
||||||
# You can have many other callbacks, but just one can be in charge of stdout.
|
# You can have many other callbacks, but just one can be in charge of stdout.
|
||||||
6
ansible/create_jarvis_user.yml
Normal file
6
ansible/create_jarvis_user.yml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
- name: Create jarvis user and deploy SSH key
|
||||||
|
hosts: all
|
||||||
|
become: true
|
||||||
|
roles:
|
||||||
|
- jarvis_user
|
||||||
154
ansible/group_vars/all/semaphore.yml
Normal file
154
ansible/group_vars/all/semaphore.yml
Normal file
@@ -0,0 +1,154 @@
|
|||||||
|
---
|
||||||
|
# ============================================================================
|
||||||
|
# Semaphore configuration-as-code
|
||||||
|
# ============================================================================
|
||||||
|
# Drives a freshly-deployed Semaphore instance into its desired state via
|
||||||
|
# the Semaphore REST API. Idempotent: every object is checked first; only
|
||||||
|
# missing ones are created. Existing objects are left alone.
|
||||||
|
#
|
||||||
|
# Loaded from group_vars/all/semaphore.yml so that the configuration is
|
||||||
|
# version-controlled in the homelab repo and survives a wipe-and-redeploy
|
||||||
|
# of the Semaphore VM.
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# API connection (defaults to the local Traefik-fronted service-name URL).
|
||||||
|
# Override semaphore_api_url to point at a specific instance if needed.
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
semaphore_api_url: "https://semaphore.local.mk-labs.cloud/api"
|
||||||
|
semaphore_api_validate_certs: true
|
||||||
|
semaphore_api_token: "{{ vault_semaphore_api_token }}"
|
||||||
|
|
||||||
|
# Feature flag — keeps day1_deploy_semaphore.yml deploy-only by default.
|
||||||
|
# Set true to also run the configuration pass.
|
||||||
|
semaphore_configure: false
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Declarative configuration of the Semaphore instance.
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Top-level shape:
|
||||||
|
#
|
||||||
|
# semaphore_config:
|
||||||
|
# project: single dict — the lab uses one project ("mk-labs")
|
||||||
|
# keys: list of credentials Semaphore stores
|
||||||
|
# repositories: git repos Semaphore can clone
|
||||||
|
# inventories: Ansible inventories from those repos
|
||||||
|
# environments: env-var bundles
|
||||||
|
# templates: task templates that tie everything together
|
||||||
|
#
|
||||||
|
# Each list element has a unique "name" used as the natural identity key.
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
semaphore_config:
|
||||||
|
project:
|
||||||
|
name: mk-labs
|
||||||
|
alert: false
|
||||||
|
max_parallel_tasks: 0 # 0 = unlimited
|
||||||
|
|
||||||
|
keys:
|
||||||
|
# The ansible-vault password. login_password type with empty login
|
||||||
|
# — only the password field is consumed by Semaphore at runtime.
|
||||||
|
- name: ansible-vault-pass
|
||||||
|
type: login_password
|
||||||
|
login: ""
|
||||||
|
password: "{{ vault_ansible_vault_password }}"
|
||||||
|
|
||||||
|
# SSH key for the gitea deploy access (clone the homelab repo).
|
||||||
|
- name: gitea-deploy
|
||||||
|
type: ssh
|
||||||
|
ssh_login: git
|
||||||
|
ssh_private_key: "{{ vault_gitea_deploy_key }}"
|
||||||
|
|
||||||
|
# SSH key for the universal automation account 'wed' — pre-baked in
|
||||||
|
# every mk-labs VM template. This is the canonical user Semaphore
|
||||||
|
# uses to reach the fleet.
|
||||||
|
- name: wed-ssh
|
||||||
|
type: ssh
|
||||||
|
ssh_login: wed
|
||||||
|
ssh_private_key: "{{ vault_wed_ssh_private_key }}"
|
||||||
|
|
||||||
|
# SSH key Semaphore can use to reach the fleet as jarvis (admin
|
||||||
|
# account provisioned by linux-baseline). Retained for jobs that
|
||||||
|
# specifically need jarvis-level access; the default is wed-ssh.
|
||||||
|
- name: jarvis-ssh
|
||||||
|
type: ssh
|
||||||
|
ssh_login: jarvis
|
||||||
|
ssh_private_key: "{{ vault_jarvis_ssh_private_key }}"
|
||||||
|
|
||||||
|
repositories:
|
||||||
|
- name: homelab
|
||||||
|
git_url: "ssh://git@gitea.mk-labs.cloud:2221/rblundon/homelab.git"
|
||||||
|
git_branch: main
|
||||||
|
ssh_key: gitea-deploy
|
||||||
|
|
||||||
|
inventories:
|
||||||
|
- name: production
|
||||||
|
type: file
|
||||||
|
inventory_file: ansible/inventory.yml
|
||||||
|
repository: homelab
|
||||||
|
# wed is the universal automation account pre-baked in every VM
|
||||||
|
# template. Semaphore uses it for fleet-wide jobs.
|
||||||
|
ssh_key: wed-ssh
|
||||||
|
# become_key is Semaphore's sudo PASSWORD slot, not a second SSH
|
||||||
|
# key. wed has passwordless sudo on every host, so reference the
|
||||||
|
# built-in "None" key. (Semaphore rejects an SSH-type key here.)
|
||||||
|
become_key: None
|
||||||
|
|
||||||
|
environments:
|
||||||
|
- name: default
|
||||||
|
env:
|
||||||
|
ANSIBLE_HOST_KEY_CHECKING: "False"
|
||||||
|
ANSIBLE_FORCE_COLOR: "True"
|
||||||
|
# Semaphore runs ansible-playbook from the cloned REPO ROOT (not
|
||||||
|
# from the playbook's directory as I first assumed). Path is
|
||||||
|
# therefore relative to repo root, not playbook dir.
|
||||||
|
ANSIBLE_ROLES_PATH: "ansible/roles"
|
||||||
|
# Collections are installed by the semaphore role into a host-side
|
||||||
|
# directory bind-mounted into the container at this path.
|
||||||
|
ANSIBLE_COLLECTIONS_PATH: "/opt/ansible-collections"
|
||||||
|
|
||||||
|
templates:
|
||||||
|
- name: "day0_linux_baseline"
|
||||||
|
description: "Apply the mk-labs Linux baseline to one or more hosts."
|
||||||
|
app: ansible
|
||||||
|
playbook: ansible/playbooks/day0_linux_baseline.yml
|
||||||
|
inventory: production
|
||||||
|
repository: homelab
|
||||||
|
environment: default
|
||||||
|
vault_password: ansible-vault-pass
|
||||||
|
arguments: '["--diff"]'
|
||||||
|
survey_vars:
|
||||||
|
- name: target
|
||||||
|
title: "Target host or group"
|
||||||
|
description: "Inventory target (e.g. figment, semaphore_server, all)"
|
||||||
|
required: true
|
||||||
|
type: TextVar
|
||||||
|
default_value: "all"
|
||||||
|
|
||||||
|
- name: "day1_deploy_semaphore"
|
||||||
|
description: "Re-deploy Semaphore + PostgreSQL on figment."
|
||||||
|
app: ansible
|
||||||
|
playbook: ansible/playbooks/day1_deploy_semaphore.yml
|
||||||
|
inventory: production
|
||||||
|
repository: homelab
|
||||||
|
environment: default
|
||||||
|
vault_password: ansible-vault-pass
|
||||||
|
arguments: '["--diff"]'
|
||||||
|
|
||||||
|
- name: "day0_linux_baseline_check"
|
||||||
|
description: "Dry-run the baseline — shows diffs, applies nothing."
|
||||||
|
app: ansible
|
||||||
|
playbook: ansible/playbooks/day0_linux_baseline.yml
|
||||||
|
inventory: production
|
||||||
|
repository: homelab
|
||||||
|
environment: default
|
||||||
|
vault_password: ansible-vault-pass
|
||||||
|
arguments: '["--check","--diff"]'
|
||||||
|
survey_vars:
|
||||||
|
- name: target
|
||||||
|
title: "Target host or group"
|
||||||
|
description: "Inventory target (e.g. figment, semaphore_server, all)"
|
||||||
|
required: true
|
||||||
|
type: TextVar
|
||||||
|
default_value: "all"
|
||||||
4
ansible/group_vars/all/step_ca.yml
Normal file
4
ansible/group_vars/all/step_ca.yml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
step_ca_url: "https://turnstile.local.mk-labs.cloud:9000"
|
||||||
|
step_ca_fingerprint: "f63c44e76381e359978bd2dca07c928d04ad44b575f0364fa66b5725c7e7891b"
|
||||||
|
step_ca_provisioner_name: "admin"
|
||||||
41
ansible/group_vars/all/vars
Normal file
41
ansible/group_vars/all/vars
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
---
|
||||||
|
# file: group_vars/all
|
||||||
|
|
||||||
|
# Proxmox variables
|
||||||
|
proxmox_user: "root@pam"
|
||||||
|
proxmox_password: "{{ vault_proxmox_root_password }}"
|
||||||
|
proxmox_host: "main-street-usa.local.mk-labs.cloud"
|
||||||
|
|
||||||
|
# DNS variables
|
||||||
|
dns_server: "monorail" # .local.mk-labs.cloud"
|
||||||
|
#dns_admin: "admin"
|
||||||
|
base_domain: "local.mk-labs.cloud"
|
||||||
|
# DHCP server
|
||||||
|
#dhcp_server: "matchbox"
|
||||||
|
|
||||||
|
# Terraform variables
|
||||||
|
terraform_server: "infra01"
|
||||||
|
|
||||||
|
# Traefik variables
|
||||||
|
traefik_server: "lightning-lane"
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# JARVIS automation account
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Public key for the 'jarvis' user provisioned by the linux-baseline role on
|
||||||
|
# every host. Public keys are not secret; the matching private key lives on
|
||||||
|
# the JARVIS command centre (carousel-of-progress) and, when needed, in
|
||||||
|
# group_vars/all/vault as vault_jarvis_ssh_private_key.
|
||||||
|
jarvis_ssh_public_key: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID5sym5ajFvDyzw395BkHv7qVb66XPTx/OF1p19MGuNo jarvis@mk-labs"
|
||||||
|
|
||||||
|
step_ca_principal_mappings:
|
||||||
|
- local_user: wed
|
||||||
|
principals:
|
||||||
|
- ryan.blundon@protonmail.com
|
||||||
|
- ryan.blundon
|
||||||
|
- ryanblundon
|
||||||
|
- local_user: rblundon
|
||||||
|
principals:
|
||||||
|
- ryan.blundon@protonmail.com
|
||||||
|
- ryan.blundon
|
||||||
|
- ryanblundon
|
||||||
436
ansible/group_vars/all/vault
Normal file
436
ansible/group_vars/all/vault
Normal file
@@ -0,0 +1,436 @@
|
|||||||
|
$ANSIBLE_VAULT;1.1;AES256
|
||||||
|
65653162653536373535643935613236366335356333336264346637323164633739633965656664
|
||||||
|
3434656433323239366665356134386564643135663135360a653232636463656332343565313763
|
||||||
|
61326635636333393730356131356466363063613734653565643766383431363166656532393934
|
||||||
|
3631373264353563650a616362633165666239323563623161656238633737316236303133313034
|
||||||
|
66353461643535373638616364663365643961656635643566613336633466343739386234313532
|
||||||
|
38353066313763643266623739366261646633363962336239623830613265383335383763376534
|
||||||
|
62653865626662383330656530336534366136313965373764353133326139623132646364396337
|
||||||
|
33333366366434393037373361376538376334336265663162336239646237306332623039343032
|
||||||
|
37333832383762663534643638666234623062373734626335323537616334303638376164656634
|
||||||
|
64623962313064363166383930636136383935613237613434373733383836666532363265643739
|
||||||
|
37376333363736326334383864633734393263623536393239393564643131616132373230356633
|
||||||
|
61636165333537356632303034346431353139383065393832323236626331353236666263376666
|
||||||
|
38306631653862343064656135396638636363613139373062653735366565376165353330636162
|
||||||
|
38653530366263356437323433653437373362356166633235386330623333326264333961643434
|
||||||
|
30323130613431353064393138303465316630383462653062326264393035393735396134396665
|
||||||
|
36383963633938363662633035626538663366323461656136323934353731626264396364643337
|
||||||
|
63356337343161366237353135313966616630316362396362343962356564643365626664633165
|
||||||
|
62383765303436303239376365316632353463666664306164313933346162343833303963313835
|
||||||
|
62353565333231646462383664356230623165363333653335343438346233316534333132366634
|
||||||
|
31326138663433663132393761343335656636366237656337666331633062303363633938303536
|
||||||
|
31303238323932336330363064323963306132633961313634616232636163353439363666623230
|
||||||
|
65666632653730303134343032616331363932616532313365633038623135396463316666373637
|
||||||
|
34343736383731363239303330306561356162623962396564323239376661363761336434376264
|
||||||
|
34373037623331643666366165306161356365326261366566323233656538363061636637343164
|
||||||
|
39323130613530386661343839623361303862323763373864626536376562643766643263376665
|
||||||
|
64373334333436653061653962373437366437643034306633343830626230346532653565353135
|
||||||
|
33326339656266616237643362333062346564333563326463393535356465666166626463643132
|
||||||
|
36316263323761653333363632386261633432383431386435363362663734626634353761663035
|
||||||
|
32383464396632396361623531303937383366633131613861646364303662343761323530303139
|
||||||
|
39333866663164363431656233663064383633386261313063646435333666376465626532343636
|
||||||
|
62386166306635353061623365313738306237616430386461343262613039346261353662346462
|
||||||
|
65616261656534336631646434316336646337333661336530633834633037363834346539646466
|
||||||
|
33346466643238343133326339393264613763626532633938613765373262393236643533383661
|
||||||
|
33306233623130666161326365366164333434373463323662316432633263323761316338623065
|
||||||
|
66306332656438303938393430633563303761303239346266386664333837613336316539643736
|
||||||
|
31353234613664313061306433656165373737336166343930653837303532346163613564376661
|
||||||
|
61376237383562353639393565303332633366376632386532333736303738333362353334353366
|
||||||
|
36343166633533303834346265666536353633343564623062613030323934653863343062323136
|
||||||
|
34323635363238623336653062666636646263343731316537346635346235613862623530326633
|
||||||
|
30396338386233663335613661646132386230356631326331653962393336653937376264313931
|
||||||
|
65363465343265643034363963656262666131393632653561626330396166386566396363663538
|
||||||
|
66323935383166623038326437323730363266316530313938373261366363613731656638386634
|
||||||
|
31316261616630306131633936326635333632643731313730303438656563343133373732376537
|
||||||
|
38623330633539653034343364656261316336353466653663646333653636653266373363333732
|
||||||
|
61333461346131366233336162363033623636386634613731303032393738333537393131316539
|
||||||
|
65643238613432306436376432373364656530323331633762393566396531396466653463353832
|
||||||
|
34393662616435343137373364663839613464346564663631343837366530313061326561656664
|
||||||
|
33623163333864346661393634333830336133383337373833346132353531656236363661323338
|
||||||
|
64313663356432373137343461333539386665643130316463336134396436623730666165623939
|
||||||
|
33373832353932386238353866336130356530613766626235316332623132343735636335633437
|
||||||
|
37303766386434373930383663386565383732636635646133393637383963353134633433616431
|
||||||
|
33616464633431666361393931623631313731343863636234646130313136346639323662373236
|
||||||
|
62623830633838326432326339383533373430346635643739646639633739343639636665376333
|
||||||
|
30396238356161373734633562643466643036363239396538613465346238356366363730623965
|
||||||
|
32336533303331363336666238363863313066376230353932323466316432653264346334373931
|
||||||
|
61303066313831376233313261633336643265396139663037333031636666383738313763313366
|
||||||
|
38386138363738353265613363353339323930343934393036343234626162353037326638636236
|
||||||
|
66343634323136663134373737366433616632653737316534633232323237343566623361666131
|
||||||
|
34393331373835613934316235336635666633646465373866356566656261373066653937316339
|
||||||
|
37396366643564333130383237613933613736376161616231666139643030613338333133356336
|
||||||
|
37343362363433653638373335363130313362306236393231646637383736663236376537303533
|
||||||
|
31633230333933666131613764336532373633353132373839326562356438386236643537386231
|
||||||
|
35616662643431383661343937613738393963373865383465306532336137373730653832633930
|
||||||
|
37656661326434633730346364326661653937313561333437383064313933363231393164616464
|
||||||
|
31333664386134376264376339303838656431633966663263303465376161633866376161313531
|
||||||
|
62346266316533326639303661396164376666383864363262316630636561326366373363633063
|
||||||
|
33666263333132323232346235633837363138663539366131303633313662326664373332353664
|
||||||
|
39306235313732376164306164386534346666633037316334366431363063663137356464656234
|
||||||
|
35656164303933306661373932663831346531636530386139373837633263396632643235383361
|
||||||
|
65393939303338656537353130316361366139363933363031393735666336323931373632303663
|
||||||
|
63333137663265353962653861316365643239396562333933383964663730663230353331386638
|
||||||
|
62396435323162663036303334323936633436626136663537376562363430376239356136343261
|
||||||
|
36323062363935643562326161643065333437343331613135383932333835396565646631646437
|
||||||
|
39633035326662653334616366323736323032616264623166326563326361363263623736623739
|
||||||
|
62633762346135626666636463343132303433346330303631656634646537616537363764626564
|
||||||
|
30316539303964626635613338623261613430656432376265386636613566313732386561653564
|
||||||
|
66363538643463653233373433353965623765303038333931623036666435303330633136663966
|
||||||
|
31313964323439376637613530343635376166333765306466353337623633343539313330373437
|
||||||
|
64343930636465636265383261633664313762303533326234626461623563636466643039343336
|
||||||
|
62346462343639323862353036326335383735323337396465613737336661633465363330363161
|
||||||
|
38323561613935303334303261323032616332333231363762303831373961323033626663383637
|
||||||
|
35323134666636353766313330316231323938326532333030383638646230643735653663346634
|
||||||
|
38363261626663393139313031633032343038396433353563363531306232386539303734323463
|
||||||
|
63313938373735383631373665613333303530383335363262306230326665666535333564346163
|
||||||
|
39336132643464666538356461393330616264383632623037623634336530376164336336323336
|
||||||
|
61646165333835333961323439663864386562326131653564623861386336303934346263643036
|
||||||
|
32666632623537376537646634313839363038666336386238343531323664396461633030373334
|
||||||
|
35396463373339633931383636353062396562383763373939633336346463623733303039663733
|
||||||
|
31663834326661623064323132353431366362636466623332363532316435386333636562633562
|
||||||
|
36613465363936623462316136643664336261353938653362393938666266663330323163653338
|
||||||
|
63333732616330323438633038366465353865353965663333376466613834633166303761633361
|
||||||
|
37613863313230653235653034613137303231343961616330316664653333303436356561353562
|
||||||
|
37623839646536363036613964336230373537653130366330633137356661366561386566323165
|
||||||
|
38653633373538633762643935346661363961663265616433383832666635666331366635636637
|
||||||
|
32336532373164373135363533333539623739383330646431356363636430326433376364393265
|
||||||
|
35643561613033623231366362393737663964396266313232666362326436303331653764366436
|
||||||
|
30363135663234356363613065643763353836626133656334653138393562393032623631343130
|
||||||
|
30303936656636366465633163323061333863393532366563316233353466613566316563336539
|
||||||
|
33326137383263393266393166336361656538353963313366353434333864623238333435653836
|
||||||
|
39376138356461663262356665363835653638623031396539353132623737333736353937623533
|
||||||
|
65386333396666633365313262323739633461383464386663313163646632646335646433663834
|
||||||
|
34616663386661363135653765386534633339653232326133396332646136653230393431626637
|
||||||
|
30366433336633643837363434383439343562366164353235653833306138643431316537343931
|
||||||
|
34396535393432383163653231623837633961366437653434623164333333323563666330613866
|
||||||
|
36393561656135303731666638393737653565303836326264373137303264656334653163366433
|
||||||
|
35376362326133666336303732656561326164663832623732613830393063343231323363353366
|
||||||
|
66636233366436363565336231663964303532343962333732313832323762343638356231343461
|
||||||
|
65373062383564346266323362336666613735316161366136303032313039373464383532343932
|
||||||
|
30396530373030303933353264363330353132376164303062623538613632323932373230363838
|
||||||
|
32633766316533316665393033326161373361333166643436356430623262663032646262616633
|
||||||
|
32643436646264343366343862356339626561346561353463616534306139383133656433636331
|
||||||
|
32333735346163353434616530623235373037376664326266343933326439663965653865333766
|
||||||
|
31653163643134346331313331633561643336663130353936323439636331383134646665656630
|
||||||
|
63663866663938663632646664323936613434333731306264306633643335393566343564346537
|
||||||
|
35326132303632373731373532623662373861356534343536613731366666373439343563663737
|
||||||
|
64326339313533323936393362613564333065623731653930363264373061636665313135623062
|
||||||
|
63373565306535373763356664333465343666626439626666393734303962303762393066643139
|
||||||
|
62663334313736663132386232613061326636313664326462353361633362323464653038396662
|
||||||
|
64363862356439633564313065363361313161643962316166643936346539626339396230333633
|
||||||
|
39333132393135613264653363323233643032376266313630313735373966373966386239336635
|
||||||
|
34643739363935353463373434343430633438346136306337393061646139346230636531376537
|
||||||
|
36633861303264633662373365623261303635363836333163623864323338613739383134636237
|
||||||
|
62326561356535626564633038643230646431613866643239646563323035353434313837663863
|
||||||
|
66326530353265626361643738333266346339326532663166656432613631313137396463643864
|
||||||
|
64343339373131363066303437633436306462316166356131366134626331343635323837643136
|
||||||
|
39306461316230663134346563313662616532616239333735303061373138383363386232373062
|
||||||
|
61643838366266613637336433323062336434313836376434636433306135303734376661376361
|
||||||
|
38373438623331653165643837303733393436626166623762623531316164666163316661643761
|
||||||
|
39616539653831336261333335643834663533363233333732643431363836386633663539386638
|
||||||
|
39356336653438663061306230316464616533363036363434663335383530326432376632396338
|
||||||
|
38386130386532333861353362313838383964663861663962353039613565636339346162383331
|
||||||
|
32313337353430343130326466623666326263343438663463376134336131323735663261356263
|
||||||
|
34613638303262366666643036353766653039393739303738366330643033316632616232393032
|
||||||
|
36336161646434373332646663313834623064336437316666623663613861333838363731336564
|
||||||
|
63636633623664353432323836306564616239343731316335333234336465363232326430643231
|
||||||
|
30623063316130396531376237363363386465393838303463336439616333353338366436323634
|
||||||
|
66626463326136343533343263303033333766306632303333376136643137353831323135666430
|
||||||
|
61313663336363356531633866663366333433343433643664663665643335633035303034666334
|
||||||
|
62653233616136656462343930636534636432353237363538356365636635373865353532643764
|
||||||
|
32646431376165616235396133323162373330386664636336336266363961316462613263303131
|
||||||
|
33303635306136303366353331653239306130616464303835363437313566363436663032353061
|
||||||
|
32356639333061636536383238396665393232663562363662366563653831343037626535666432
|
||||||
|
33353261623936313563323564643134666232333839386162663331326461393239623135383530
|
||||||
|
31323861666631663933636338323239386336356339623738646430333136336635643562353263
|
||||||
|
64313931656435383134353063383665646538306661396163653434373031326134336235646461
|
||||||
|
39343734313965313365643135643166366133313465323366633038663333366535633532623966
|
||||||
|
36666134316165613830323933333339336663363964323764313430613130653236336664393863
|
||||||
|
64306437316235306565333238666164353738336539353064343161343834656262653666636663
|
||||||
|
36353063326262653466303534616530616139636166343137666439336335363539393439633436
|
||||||
|
36623963623839623834656431396162396562373330316438383739363637613366613163336138
|
||||||
|
35373730383165316330366332373939643839336634613934653538303866343738656534653263
|
||||||
|
33303361343237356430373266653062313037663230366531366363393937653439363732333036
|
||||||
|
31343365633862623038316536363031356336383461396562626236313038313239623665316439
|
||||||
|
30336137356438343362363536303234346637373833313231663333616263303233336161383130
|
||||||
|
34316265613736383830363639366139313537313661633736303634326237643330663735356561
|
||||||
|
65626136613831376432383363383731663763356432663264346561646535633966643462326232
|
||||||
|
31623930303262616535356633663938323635643462663731366433623961623435303062616263
|
||||||
|
63353836333235336362353039343431313262646137303364613838306339623930666466636132
|
||||||
|
32656434623738333565636164303535393734346462353436313030396264623332393932653861
|
||||||
|
36383533363030356664326332376662616139343065343932656262623334633334633462383635
|
||||||
|
63666439343130623936376636633635613335363264363136643366636535613938373866356336
|
||||||
|
35666632313565633630373039316262316339333035366332356138393261613836633437363136
|
||||||
|
33653033343536623264366466356561323063313031633464353963383661316131643166663566
|
||||||
|
36373937326333393164353234336433656336626134363236303032396531353862333535336466
|
||||||
|
65393865333565386538386665373166383235633739383934643334653763366161396565616166
|
||||||
|
61333666353666393230326134636661376237353937646236343034626135366535383631333035
|
||||||
|
61346231386233326564656636363066396636393966353539666231646464323636303038656562
|
||||||
|
31656238373331303031393034346630643263613365643232663861373336363662356265326164
|
||||||
|
61323866663033636534313365376466303538666463663539623231313632303262326638633539
|
||||||
|
62313239356365313932653735363662666266643765633138393037653662656566656130663133
|
||||||
|
61373531316261646234666361313766626139613762306563343561363961656565666163313532
|
||||||
|
35323837333737366138316164376537613834313135306461633735613362376233306134373537
|
||||||
|
65323339393039336230373237386434333639623762643133363339303265623065326438623531
|
||||||
|
65356632363237613937633132326231333938336639663438653861353761396434643136643238
|
||||||
|
62363162666366653831626531353236623532656437313134343633626666383437363761626331
|
||||||
|
35386431646564653233613632373435623665613335316164636562356264663033366639636439
|
||||||
|
63356231393362663736366431616161633065303537366538393935363033303636653836346132
|
||||||
|
30633036653836656433636631313863303132666531326563303266316566623934666361653932
|
||||||
|
35623265613635343435373361353635343261656233356535303037383433353731313539613463
|
||||||
|
64363334383666663639623735393934646366386437633638613034316366336337316561333731
|
||||||
|
38363339386561373834333037626565623335613563323366656365643032373834616339663838
|
||||||
|
64646534623432323363303032323666643636323536666239616238323932353165663535633465
|
||||||
|
64633934303565396533313165393438373231376664616237373562306130363531393833353365
|
||||||
|
63623033343762326437306536663734386365653131346235303837336236366665346234316163
|
||||||
|
32616539666634653839633739303837646563313364333864343231306663383530313963386434
|
||||||
|
34313965393731653963643336336134343764343065646436303739356530333761386465333333
|
||||||
|
35653363653361366462636162663134333431323866306235343764333035373534656138643933
|
||||||
|
30653962613339313833343532613939636332633236303733313135313932356136383439326635
|
||||||
|
31386565343337333662663762356361623835353830333865613437336532623936343365343231
|
||||||
|
33336137616266303835366662643737666333346433366663666462396531643463373562623237
|
||||||
|
38383537666639363839653538303266303965613762373561643433376664313966326561653764
|
||||||
|
66396566366265343962393633653765643563666634646637623161323538623961393039333036
|
||||||
|
33363530653935386331396533666432626634616463663763396663353133393461623866383061
|
||||||
|
64366132646132663263636131333031643736663031663336623065386266653638376639336334
|
||||||
|
36653932643831303931613532333036323766376235303433633564303062623336646166303533
|
||||||
|
63353063303033623032643333653733393332303466366538353062373666363438366432316131
|
||||||
|
36613335396531663238343139313061613363393463363035366132353439353433646237646265
|
||||||
|
37633964316466636337363331383565323866653036386435376530343661323565666539663230
|
||||||
|
38386232376436623064613232636637313931316535643661306536343661653135313335616534
|
||||||
|
34633761663066316430313361393063623033373636633133653536383764306433346235343761
|
||||||
|
37393764633561653632653565383937383436666662336633633261653861323533303732613738
|
||||||
|
64653739323636613639643465316437356163356238656139663034313738363532373861393333
|
||||||
|
64613038386535396565656538663163313161353831306237313064666566336534646233393137
|
||||||
|
37336265316361613430663961356361653636636235323439306537666363353361643664363631
|
||||||
|
63643631336134323032636463393639613636643130313136326538376461363937643436633561
|
||||||
|
39663433623663346462356437666230313937396132633834386661613436653839616136343234
|
||||||
|
35333437386663353863306166393634363734323636333137343938353461386366326239396236
|
||||||
|
65303939623437376535633463626166653935343033303066383064306332356230623566393062
|
||||||
|
34666566353238653730613561383434343332333732356334623836616334393464373965633334
|
||||||
|
37313564393463663862386535626338336235613132376530666635343832386231366533363562
|
||||||
|
32626162626434366261623431373938646237643462623337653466653538653732393634366639
|
||||||
|
62666231376239393066366336386166646631396632613631313663633435646337313465643231
|
||||||
|
63356566333764333238326165613832643161346366396635663032623133386132666333343337
|
||||||
|
63323637383035363833653162326231616461653062613765363165313638313234343266333334
|
||||||
|
62383362343232363431613364383930376338303839633261656236636264353335333938333731
|
||||||
|
63616666626437643432393438376661616262643939363239353836323036303139666338336261
|
||||||
|
31306437353536623561333531346630643761336235373230373135326361393739613934653361
|
||||||
|
38346532313364633638306665306563646433353038346238313530363163396166353535343537
|
||||||
|
34343330373063383566333335386162326339383835373665363464616139383331646436343365
|
||||||
|
30386564323733393461653662323334656637363566343737356239306462303762383332656239
|
||||||
|
30643439343161636434656338636533396364643632383030646639356534343963666466613566
|
||||||
|
39373833633265623563396363653830393661633636646265643362633731626462636531313362
|
||||||
|
35366331383635643564316461633431646565393863373635323834363934336335653831613330
|
||||||
|
39646262633636343832626362393730643163616565363765346266316636343065393630333866
|
||||||
|
62333931336161636230326132393739616665646462653666346532356265643235333131343635
|
||||||
|
31326638626162356333356261623531646464633139666539373261376230336661313937363036
|
||||||
|
32313464316364623838343231346538303237393137363233366234373031346238303932383461
|
||||||
|
66613537346136313262313337636565383639383863346535393361363930616535626264376565
|
||||||
|
30303236663065363161663836356130363130363339643335653366623065373566353136353933
|
||||||
|
39363761636130646537393166623335353431616462343364383535393661313738343265313138
|
||||||
|
38323066333239616137623233323664616232323262666530373064366138316431643430643462
|
||||||
|
32653262386565396335646431633534663031613536656561643434366464353335313239393464
|
||||||
|
36333866343063656533623432306231343065343530343638653739343731336131626532376566
|
||||||
|
37653833313233386538666464386232353466303035316232646339653533663831323261636330
|
||||||
|
32646166366633656631393762626236356633393130386165643264663437666433336138353938
|
||||||
|
37653866646364333134313366316366636132623764366562623932383239643265646461646434
|
||||||
|
63656233316639616134666635373434323030643136626238646637386634333439616231336136
|
||||||
|
38326431363062326232626238613334356633353362653138643237646339333762616330383934
|
||||||
|
63613235376530373834333834316539343330313862666262633439333062633261646138626434
|
||||||
|
33616162316632366537393939343163333530393939613936323164663034326536666133303365
|
||||||
|
63643337343037363363663235316330316131353064383933323131643036623862303835336633
|
||||||
|
39376134313264333834306330366136643434386566393466313835396466306363663565303065
|
||||||
|
33393431636163376365396139346162346239343838616561373162643931623365336436626636
|
||||||
|
39613030356162363931316166376231303033306366616162366239396333323838363465353261
|
||||||
|
64303561386563383834386166323739626237376164326533616533343338316430366365333966
|
||||||
|
31343233666365663830323030336161623466633261303637373537336333663262383238393833
|
||||||
|
33383033343630663237653338636436346565356238313434346666336436653835326133313038
|
||||||
|
65353530333839373136326132326439306431333334633933663065316531616263633533346431
|
||||||
|
62383862653162613532383136363830313964366161306166343934363865316533643736373431
|
||||||
|
61323135343030346336356232326138376564343131636263336332333239303733323338663830
|
||||||
|
32373639343063353261623831623237663133646535636338353333653237653539656438666436
|
||||||
|
63636537336636313762336531346531313637653834386535313666306636303338306465303764
|
||||||
|
63366133396263636164386339343131653361363831363932303734333634343734636163383539
|
||||||
|
33613430353236616132636431656636633561316161623661373663396462633930343865336236
|
||||||
|
32373534666135303730303663333337643033346231646661393137643161383833626335336561
|
||||||
|
66366433303436313132636230313531316261613564323963626438623530633634363265613939
|
||||||
|
37666636313632353831343238646237666464333039306630343531626339323562346162663130
|
||||||
|
65633133366564306230666436663630316434616634656661306461353866396662376331666630
|
||||||
|
30323166386535633361316633303830623031393531343532633930616439326465613631613838
|
||||||
|
38326630366534363036666433333237363636643366333161343336363936323730313339343132
|
||||||
|
35356231666633386537366236303136663261336532386338316565343239333261613838623861
|
||||||
|
31366531343232653431343436343766386331303133363534616536633337656433326265656161
|
||||||
|
66356235616135363634313835666134346232356663326361396537303339373334323861383161
|
||||||
|
33393438313061613465666536666636643166613463363165393338643066613231636138343537
|
||||||
|
64333731376139353934316631393561356163366237386337393061343235633131613962383731
|
||||||
|
66376261633832323864356564326532356363343762313563393331393933316336373434333237
|
||||||
|
35396531303330396363333163373361643837383766333730303031613665313237383532666264
|
||||||
|
65613237623136336239653566646366376538356362643062386436363466616331336665616432
|
||||||
|
31383365363630663530643764633335336332386332663661393733343038626265383432306630
|
||||||
|
38653861356636313634326266633637653764396233313463393964653739306234666662336432
|
||||||
|
33393139343864346233653763343762616230383131353166396265653031326232656333626264
|
||||||
|
63616339663564363665626338316661623230646534373231313662343736316462663763333364
|
||||||
|
30333137386161336664386536366538313934313039333832323763313264373861666239643466
|
||||||
|
33383334633736333634306262316265323634386635313764376532646364356565396538656137
|
||||||
|
63316232643832383865303934636364313036666237636632393137373933656263646534623230
|
||||||
|
65616231323035643531353430326630353761633234636234343834656664323161383335343235
|
||||||
|
62616533366465303961306134386265303933616236346332623536393236633366333634316264
|
||||||
|
31396361343833623131306266336238343866303361303336346566656639616134383063396235
|
||||||
|
31626633333665373934333961646263663730653331326137383031383736646633356536333431
|
||||||
|
39303632383030613465656236333763393737353865386235333830613665653363393536646630
|
||||||
|
65353733613536653963393831636530636231366266343262376631393062623163313031623230
|
||||||
|
62326561653165306339633439376461346330393231313366666339346536313765363163616630
|
||||||
|
35373564366563656161376336323031346339313734633139383563393966373637616266666265
|
||||||
|
34623330313265373935396130643231353131313163393333396337396666636439633035326635
|
||||||
|
32663762333537663839346531663132613636366639643364373333343262326264366136363331
|
||||||
|
61613833643639656632353931663830613634383334653036323462323262386265313637656535
|
||||||
|
36333834306438633532616335663562383730306337656336663035643136386261326130336363
|
||||||
|
32623330333764616565333162383234656463363432313039666265653563323232613930303765
|
||||||
|
30623834666665636332303862663832303537656664643362643636616265613739356664646462
|
||||||
|
61326466303266626166333730343330396439356663376362666536623539353666636230373533
|
||||||
|
35363461326263366137313037323166396133646430616664343165623533393963623535626237
|
||||||
|
39633362393636373131626364636437343361303435396138363735326235383237633964336138
|
||||||
|
31643935646431386537643733353862666138333238323461623638356535316365653530376464
|
||||||
|
33343465653134613536343563376564663133336532343330666131346663363434623238303862
|
||||||
|
31306331633238623836346466616230356532316232323734356638343532643032633937653061
|
||||||
|
37393265333233626563353963363637653338393964363832663734303566356633623733393164
|
||||||
|
64383536343862393134336638353733373262396563303266346535346266306238616531336162
|
||||||
|
35363638333431396163303530353461363338656363336366376430316464353131623661346366
|
||||||
|
35313930353538343830333337356163613765356361343663613933366464353935336361636436
|
||||||
|
65356465346535613231363932303339646162303238376236323461303062313336656366306563
|
||||||
|
31353464333539343839353764393665393235653537313939373563303436626635663766303336
|
||||||
|
35333838323734386537623334366235653534623664396664656264633735353634663332353364
|
||||||
|
65306132346464363966313963346633353538633936363164393566376630376365316139376132
|
||||||
|
38323039653465346462666439656134393964623563393664643634313638323832356164323863
|
||||||
|
31366535336238663236666162336166313933376531643137343665653765623961333464633332
|
||||||
|
30306265306364643738386561303833326363303836333032393462643764663664613536363835
|
||||||
|
30663937333038663435326637663636383165363632326337653932336130333932333861366235
|
||||||
|
66313566613033383631376132333634653639336666386164613934353230613239383239313038
|
||||||
|
30653162643233636638393036353032353632316166333938313966626133643237376461313065
|
||||||
|
34323762376133393535613864636461616261343031393266666165316236323231323534376465
|
||||||
|
63386363343933316139356163363132343666366132313038643938653865663934383335336364
|
||||||
|
31646563346339323633643366653861323030636138663861636434306238623738636331393538
|
||||||
|
66333765626132346533313261646434633236633432333430613266333161643566326434363633
|
||||||
|
62373033356337393232353566666263353539326564333766303335666135343461386530626562
|
||||||
|
63633137623361366362616432613237353231616465656232373835376463386132663331633737
|
||||||
|
63306136326264643365356634336233303163663135366531643362303666653630363962666637
|
||||||
|
61626539613333306263323564373435613961633439633261373530363137376132326462633035
|
||||||
|
30353838336433313135623530643663643232653364316263356164633661383937393238363262
|
||||||
|
34393666663361613735623435626238646266376533333963653630663462653733373130393338
|
||||||
|
32626361366632633630323363376238343534626230373835353036333065396435653964326534
|
||||||
|
33356466643839626162316438356437623732656664613434613165643666656230656434633638
|
||||||
|
61316134333631326365313532313335633634356466663834666531653365333333616137643835
|
||||||
|
30666664353134313236653337366466623966366131313962346564663432633535363938333261
|
||||||
|
37353464383832373366613531666161323632616236613631653433643562326134623838393135
|
||||||
|
62323533373336663434386166333862366639626562343830396533646138636261326161393339
|
||||||
|
33613961353431653537373931396531623061653163376230663338376636613136353433646231
|
||||||
|
33633236306238336432323134393463653161303662336266313562316337343430373532663930
|
||||||
|
39613133646432343238393762386266303531663032306130653532376262353238636231393539
|
||||||
|
36376332633563633661353835386364633461363437333038363865356237643739323133653235
|
||||||
|
66373931336330626663383136363265363133393239393131623465383433363336333237653131
|
||||||
|
64656662316665356665303765343932363733666362353031656234373363663364666537663030
|
||||||
|
34646233386630633438313166396663383732366233373139343431373463346133316663643036
|
||||||
|
31633536663266383132393032313563653035303034336161356139396636353365636163383031
|
||||||
|
30666637363933643262393065633463313836653530663232303736306537636533343431333966
|
||||||
|
32386330356564613932306466353931393839316562353362303765663263383738363765333136
|
||||||
|
36383036376130306133393166333734316231376165393832383735623838353466353664353834
|
||||||
|
39326136656239626434313930306435333533623533643236393437313038393235386364323766
|
||||||
|
62323537666333613066356236313361376138656232343430363438346261646165623565313435
|
||||||
|
65326532623761343239666664636637613034623736386665303634613737613964333630613533
|
||||||
|
31653731353533613866663166653237663162623236353838646465373734613466616362363833
|
||||||
|
39346335373539376439643937363233373362616334323231623232353061343830383336666466
|
||||||
|
31303663643061653866326632333336626462623835366564356231316263326130393138306330
|
||||||
|
66333532336164633931306136373531666131356130313262313038626138653864633734636132
|
||||||
|
61353638333133383035333937626333376564316465333539653138323739356265613664653536
|
||||||
|
35656136343036363532613335336230373364336432343731326132666662636664356364303335
|
||||||
|
66613736633231393534626539333536626565663231396536363062353037346563643934313236
|
||||||
|
32363138386430633761383065343834376631643539626330313638333534333734333239383632
|
||||||
|
39383833656134393165666533353739303834633330653936643637316639663033363865653631
|
||||||
|
36313735613962393264623938336432336538393937316634626165383934356562353035316533
|
||||||
|
33353735653133636439393763356430303863326235623932623464356636666265653065383736
|
||||||
|
31613666303065653035303131646364386636393035663865336164376536323462666239356333
|
||||||
|
33373562383863323635613634643165336465613734613034366236633835363733306662613462
|
||||||
|
30326565346365633131363331643165346466366666633231643538303430376530393139393063
|
||||||
|
32666664313162303065616261326261353130623564343761633861373034646161643163373533
|
||||||
|
36386665626530313030343032376531656333356332666437383530613834356336386465353539
|
||||||
|
66623062646236333465316137316564363938303966613561643830353332333537373736626438
|
||||||
|
64653239613063646430386631313435306462303566333734663462626530356530663235303166
|
||||||
|
31633366613264316137303334613366366537646261303962646364643238383062643732386436
|
||||||
|
39643430613562663136633130666563396538306633633034323064386136303034306531323564
|
||||||
|
63646633303035353831653438366635646562613639313230396462373161363030386264623033
|
||||||
|
62343031616135346238303337313931643461386363396663333231626661613938626366653837
|
||||||
|
33303265656561313332353463363534666232363561353532643532386133306332333930373161
|
||||||
|
66626135303036633566303961646461383236663737643265346566393963343634623164633966
|
||||||
|
61313031333863383237313633663633333866366230313936396334383361393338656465346437
|
||||||
|
65613763643061386463386431386539656635393435633032343030633738373936613833623938
|
||||||
|
39316239363835633339343161623237656230633763313031643663623466323764663366376165
|
||||||
|
36366530363535376636383561343161643037626639323830396665303238663534633531613735
|
||||||
|
39316639633730376533643932633432353835353439646666653766666338646662643162373263
|
||||||
|
65356563303235633963633232393736636537346637376462626637303535383063373134613732
|
||||||
|
32663763663364633463633738343535316436303365343665356133313836616164343434613133
|
||||||
|
34626434643531343461346332636539636463313539393830613434333933643632313737356564
|
||||||
|
39386137383165616139626363613732626336366461663339346134656530396464323533313265
|
||||||
|
32346535356466383135636638616166313663613565353765346264376535653135356638663538
|
||||||
|
30623834393935636562656639643737373462643137363063663737306361336339653334633665
|
||||||
|
65316237633436303761393766393234326538653633363936303534646566373338623935666538
|
||||||
|
38313761643437313565663762613838636163633066313630353631353934396338353665653330
|
||||||
|
35393661356630313436373761383462396434643535316364383338343433613061353637333563
|
||||||
|
38376562373462316334313632343965326235323231653030666666616163346438626437386637
|
||||||
|
65656163653935656530366239663237633937336166613132356333623964666630386331383331
|
||||||
|
32303166386431643739303363646633376331623166313135653265656636663236363936336462
|
||||||
|
63303135613539663233366362323565396137623264353431373836356233666332633731666364
|
||||||
|
62376565633037373832393366306431613863353137306535393664313866616235633638306365
|
||||||
|
32633761386462386339343066316263663438623330373733333634363736623637636661636331
|
||||||
|
38353835333962633537633864616132643563616437336334326633323636393833363666353261
|
||||||
|
36363732383565623233343439666430303961306263363032383238653265323637313430613133
|
||||||
|
63633338323536386139613233343636326564356564353065386664646230666561336338366436
|
||||||
|
35353162633864633764373535366634303738346236633362626165393632383762343036313930
|
||||||
|
62363864626338393736373938343264356235393763653432306330363363313762333137303362
|
||||||
|
35393061356165666230343135663438303834363533323064626532663662323063386333623166
|
||||||
|
39353037363363373166316238393565353266353665666465333134303234373263663135346364
|
||||||
|
36646463343032326339663130393963663861323130356365396365643265313833353234323330
|
||||||
|
34336661363733613362343739366636336265356464613033343132353031663965656634613831
|
||||||
|
33656466376132656465383664363231653235623036346634666166623532323635313130303836
|
||||||
|
36393064356637623139653333633164666332303539623863383538386262363064356130353337
|
||||||
|
62393063633637383965346139626265666463356362633163363537303166336264346332636363
|
||||||
|
39613735626132366137356365303331633037623132623637383164636565653963626632626338
|
||||||
|
65383663633831613666396534333061643966313366303937333261303135353762656331336638
|
||||||
|
35643539326161646433633862623762626539396137303863616139383832613639653033653933
|
||||||
|
39373734393066613132323739383036313830346239306132656464646462626661633931623932
|
||||||
|
36626163353563633764323466303966636161646532316134383034393733653363363933353738
|
||||||
|
34383563666166323865656430346661633663363635623566336632353633303838303436616266
|
||||||
|
34326131623331616533306465373365396437303764383231356631313335393364643664663864
|
||||||
|
33313033303463376139376466643434383461643264316534306166303163373661643962343030
|
||||||
|
36653665353232363630363437376266306531633934626230653338383664343638313334306636
|
||||||
|
38666162623761366237383236346564333333633162623832656462616662313031316166383465
|
||||||
|
31663362336663353564636335393738333565356432306139363661656663313234396664623832
|
||||||
|
38393630666338663031323464383535303539643931393732616666366661316163626339643437
|
||||||
|
34316532613063353264303462366534613035653834356562646637633137643839653237353937
|
||||||
|
34326230396137383531393962346137643035333834376537363865643366623932303662303839
|
||||||
|
64373431306464363762356563663038343737356165313832613965653065326532356133646137
|
||||||
|
30326232643334656363343533383163643130343836366430333836396463386666623465366336
|
||||||
|
61343236303336623863303630336437613932353832623866633661653566623431653938306238
|
||||||
|
37326630616131646634383539353234323766363633333030613937616632333432366565343537
|
||||||
|
35613237343838333430656336313232653530373863663031386433356337643334303363666532
|
||||||
|
65633033333463366636616138646632636534333963643864383033343463666338373630313232
|
||||||
|
63326365666666663262383664353664623963343366626364363965626435666363306237346130
|
||||||
|
30306661386334653137336464393465646135353436336138616563366163366664346331646666
|
||||||
|
61613334323330663835366163623836363534666531353737656464663935333765326235306566
|
||||||
|
61353962363034663563386137373432656166663661653861396361653930653539363333613435
|
||||||
|
64373731616330396130363464653865303931333637393333386531303365646130646161366263
|
||||||
|
61643234333563386338643331303164323638346639353765656632386262366666376665356164
|
||||||
|
34393464656634303130323738353161643537613337383661343232363961613931613234643361
|
||||||
|
34663938626364636562613332373161323932386532356261353137393533633731653034633966
|
||||||
|
62316666613738383665303433376438303266646264353133303566636436373966343662363561
|
||||||
|
63333662613930323666656166373763303961333332363231396532376564393966333135373966
|
||||||
|
65623664303537376362383861663238663463396537353866666333656664323562373165646633
|
||||||
|
35396661353639356363613834653432346539633135663565376234383866343433383339666362
|
||||||
|
63373330336562323138343934646466373738333039346361623836653231633566316435383636
|
||||||
|
61326535393339616639366563383662636136353162393961303362393866363436663630303762
|
||||||
|
65343632396238623137333462633633653761336635663265326332623631393566323530623562
|
||||||
|
36666431396532303939316662663138356631336434373732393463306336303435626232316638
|
||||||
|
36363733383831363930666132396661633733616464393264343339333166633739346236383833
|
||||||
|
33373962313762323430343161616361636363366334613032323637316261656333633639333066
|
||||||
|
34653635393031323262353037396130383964363037633463653331653965363562326532623037
|
||||||
|
383331306234353238633435663136623634
|
||||||
18
ansible/group_vars/ntp_servers/vars
Normal file
18
ansible/group_vars/ntp_servers/vars
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
# file: group_vars/ntp_servers/vars
|
||||||
|
#Ansible vars template for NTP servers.
|
||||||
|
|
||||||
|
ntp_servers:
|
||||||
|
- 0.us.pool.ntp.org
|
||||||
|
- 1.us.pool.ntp.org
|
||||||
|
|
||||||
|
allowed_networks:
|
||||||
|
- "192.168.1.0/24"
|
||||||
|
- "192.168.2.0/24"
|
||||||
|
- "192.168.3.0/24"
|
||||||
|
- "192.168.5.0/24"
|
||||||
|
- "192.168.9.0/24"
|
||||||
|
- "192.168.10.0/24"
|
||||||
|
- "192.168.250.0/24"
|
||||||
|
- "10.1.71.0/24"
|
||||||
|
- "10.1.82.0/24"
|
||||||
19
ansible/group_vars/proxmox/oidc.yml
Normal file
19
ansible/group_vars/proxmox/oidc.yml
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
---
|
||||||
|
# ansible/group_vars/proxmox/oidc.yml
|
||||||
|
#
|
||||||
|
# Proxmox OIDC configuration for Authentik integration.
|
||||||
|
# Client credentials come from vault.yml.
|
||||||
|
|
||||||
|
proxmox_oidc_realm_name: "authentik"
|
||||||
|
proxmox_oidc_issuer_url: "https://authentik.local.mk-labs.cloud/application/o/proxmox/"
|
||||||
|
proxmox_oidc_username_claim: "username"
|
||||||
|
proxmox_oidc_scopes: "openid email profile"
|
||||||
|
proxmox_oidc_autocreate: true
|
||||||
|
proxmox_oidc_default_realm: false
|
||||||
|
proxmox_oidc_comment: "Authentik SSO"
|
||||||
|
|
||||||
|
# ACL entries - grant your Authentik user admin access
|
||||||
|
proxmox_oidc_acl_entries:
|
||||||
|
- path: "/"
|
||||||
|
user: "rblundon@authentik"
|
||||||
|
role: "Administrator"
|
||||||
17
ansible/group_vars/proxmox/vault
Normal file
17
ansible/group_vars/proxmox/vault
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
$ANSIBLE_VAULT;1.1;AES256
|
||||||
|
64613361376364346139313833613465663361336634326430393261366630306466363935613139
|
||||||
|
3634363235343736643230623865386436333734663531310a343965396534336262356234623966
|
||||||
|
39353332626662636666383935383530613139626439373664323063633063316264383331646533
|
||||||
|
3366333837613731310a656462633638376432326365343135373863313665346566383933353630
|
||||||
|
37303565323630633739396433323165326262363863386233343134636236646366633765616432
|
||||||
|
33633165613239653762343935386637393437386431383961306436373765343736313634333933
|
||||||
|
30376463646464303066613561613564353938306664373464333966383664383034616439343735
|
||||||
|
38363966323366343465393530383736393364373361326234356365363163356632393834393464
|
||||||
|
39393530356235383830323065636535383138353864373237333164323436623737383435313261
|
||||||
|
64366362626232386438376131633533633162356432613835656465623762633464353936303236
|
||||||
|
63353633633262633461353963653534663336396134373435303266386162393965343165303335
|
||||||
|
65313436666334383965373837376664323861376162373834363439653539383231346634633737
|
||||||
|
30626431373739633930313937643938343165383536373465613535366562313439396533643864
|
||||||
|
36323032316131333962373732306334373939333363386564653465303261393337333466316130
|
||||||
|
32326533353165393635393130396164636363623937313566343333386562616662383038613565
|
||||||
|
35386638383365633362
|
||||||
59
ansible/host_vars/arcade/vars
Normal file
59
ansible/host_vars/arcade/vars
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
---
|
||||||
|
# file: host_vars/vm_template/vars
|
||||||
|
# Ansible vars template for hosts created via cloning.
|
||||||
|
|
||||||
|
# Supported hypervisors:
|
||||||
|
# - Proxmox
|
||||||
|
|
||||||
|
platform: "proxmox"
|
||||||
|
|
||||||
|
# This is the Proxmox node where all the VM templates are stored. (Templates are not global.)
|
||||||
|
|
||||||
|
proxmox_clone_node: "fantasyland"
|
||||||
|
|
||||||
|
# Templates are named in the following format (all lower case): <OS Distribution>-<OS Version>-<VM Size>
|
||||||
|
# Current OS offerings are:
|
||||||
|
# - Ubuntu
|
||||||
|
# - 24.04
|
||||||
|
# - Fedora
|
||||||
|
# - 42
|
||||||
|
|
||||||
|
vm_os_distribution: "ubuntu"
|
||||||
|
vm_os_version: "24.04"
|
||||||
|
|
||||||
|
# Current VM sizes are:
|
||||||
|
# - Small: 2 cores, 2GB memory, 8 GiB virtual disk
|
||||||
|
# - Medium: 2 cores, 4GB memory, 16 GiB virtual disk
|
||||||
|
# - Large: 4 cores, 4GB memory, 32 GiB virtual disk
|
||||||
|
# - Large Plus: 4 cores, 4GB memory, 48 GiB virtual disk
|
||||||
|
# - Xlarge: 4 cores, 8GB memory, 64 GiB virtual disk
|
||||||
|
# - Xlarge Plus: 4 cores, 8GB memory, 128 GiB virtual disk
|
||||||
|
|
||||||
|
vm_size: "large"
|
||||||
|
|
||||||
|
# Proxmox storage target.
|
||||||
|
|
||||||
|
vm_storage: "liberty-tree"
|
||||||
|
|
||||||
|
# Proxmox does not yet do dynamic load balancing, the host target sets the target for HA groups
|
||||||
|
# and backup groups. (ha_group will be factored out in the next functionality update.)
|
||||||
|
|
||||||
|
ha_group: "pve03"
|
||||||
|
proxmox_host_target: "pve03"
|
||||||
|
|
||||||
|
# Currently, only single NIC VMs using IPv4 are supported via cloning. The IP address also
|
||||||
|
# sets the Proxmox VMID. The VMID is a combination of the 3rd and 4th octet of the IPv4 address.
|
||||||
|
|
||||||
|
ip_address: 10.1.71.111
|
||||||
|
# vm_mac_address: 'BC:24:11:11:BC:58'
|
||||||
|
|
||||||
|
# Software
|
||||||
|
# Future enhancement will allow specification of additional software to automatically deploy to
|
||||||
|
# the VM after creation.
|
||||||
|
|
||||||
|
#terraform_version: "1.11.3"
|
||||||
|
|
||||||
|
# ---
|
||||||
|
|
||||||
|
vm_clone_source: "{{ vm_os_distribution }}-{{ vm_os_version }}-{{ vm_size }}"
|
||||||
|
hostname: "{{ inventory_hostname }}.{{ base_domain }}" # Change variable to fqdn
|
||||||
25
ansible/host_vars/astro-orbiter/vars.yml
Normal file
25
ansible/host_vars/astro-orbiter/vars.yml
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
---
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# FILE: ansible/host_vars/astro_orbiter/vars.yml
|
||||||
|
# HOST: astro-orbiter (10.1.71.130)
|
||||||
|
# ROLE: Ollama inference host with AMD RX 5700 GPU passthrough
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ansible_host: 10.1.71.130
|
||||||
|
ansible_user: wed
|
||||||
|
ansible_become: true
|
||||||
|
|
||||||
|
# LVM root expansion — xlarge template uses sda3 partition, standard VG/LV names
|
||||||
|
common_expand_root_lvm: true
|
||||||
|
common_root_pv: /dev/sda3
|
||||||
|
common_root_vg: ubuntu-vg
|
||||||
|
common_root_lv: ubuntu-lv
|
||||||
|
|
||||||
|
# Ollama — all defaults apply; explicitly documented here for visibility
|
||||||
|
ollama_rocm_version: "6.2"
|
||||||
|
ollama_default_model: "qwen3:8b"
|
||||||
|
ollama_hsa_override_gfx_version: "10.1.0"
|
||||||
|
ollama_data_disk: /dev/sdb
|
||||||
|
ollama_data_vg: ollama-vg
|
||||||
|
ollama_data_lv: ollama-lv
|
||||||
|
ollama_data_dir: /var/lib/ollama
|
||||||
58
ansible/host_vars/big-thunder-mountain/old_vars
Normal file
58
ansible/host_vars/big-thunder-mountain/old_vars
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
---
|
||||||
|
# file: host_vars/vm_template/vars
|
||||||
|
# Ansible vars template for hosts created via cloning.
|
||||||
|
|
||||||
|
# Supported hypervisors:
|
||||||
|
# - Proxmox
|
||||||
|
|
||||||
|
platform: "proxmox"
|
||||||
|
|
||||||
|
# This is the Proxmox node where all the VM templates are stored. (Templates are not global.)
|
||||||
|
|
||||||
|
proxmox_clone_node: "fantasyland"
|
||||||
|
|
||||||
|
# Templates are named in the following format (all lower case): <OS Distribution>-<OS Version>-<VM Size>
|
||||||
|
# Current OS offerings are:
|
||||||
|
# - Ubuntu
|
||||||
|
# - 24.04
|
||||||
|
# - Fedora
|
||||||
|
# - 42
|
||||||
|
|
||||||
|
vm_os_distribution: "ubuntu"
|
||||||
|
vm_os_version: "24.04"
|
||||||
|
|
||||||
|
# Current VM sizes are:
|
||||||
|
# - Small: 2 cores, 2GB memory, 8 GiB virtual disk
|
||||||
|
# - Medium: 2 cores, 4GB memory, 16 GiB virtual disk
|
||||||
|
# - Large: 4 cores, 4GB memory, 32 GiB virtual disk
|
||||||
|
# - Large Plus: 4 cores, 4GB memory, 48 GiB virtual disk
|
||||||
|
# - Xlarge: 4 cores, 8GB memory, 64 GiB virtual disk
|
||||||
|
# - Xlarge Plus: 4 cores, 8GB memory, 128 GiB virtual disk
|
||||||
|
|
||||||
|
vm_size: "large-plus"
|
||||||
|
|
||||||
|
# Proxmox storage target.
|
||||||
|
|
||||||
|
vm_storage: "general"
|
||||||
|
|
||||||
|
# Proxmox does not yet do dynamic load balancing, the host target sets the target for HA groups
|
||||||
|
# and backup groups. (ha_group will be factored out in the next functionality update.)
|
||||||
|
|
||||||
|
ha_group: "pve03"
|
||||||
|
proxmox_host_target: "pve03"
|
||||||
|
|
||||||
|
# Currently, only single NIC VMs using IPv4 are supported via cloning. The IP address also
|
||||||
|
# sets the Proxmox VMID. The VMID is a combination of the 3rd and 4th octet of the IPv4 address.
|
||||||
|
|
||||||
|
ip_address: 10.1.71.52
|
||||||
|
vm_mac_address: 'BC:24:11:11:BC:58'
|
||||||
|
|
||||||
|
# Software
|
||||||
|
# Future enhancement will allow specification of additional software to automatically deploy to
|
||||||
|
# the VM after creation.
|
||||||
|
|
||||||
|
#terraform_version: "1.11.3"
|
||||||
|
|
||||||
|
# ---
|
||||||
|
vm_clone_source: "{{ vm_os_distribution }}-{{ vm_os_version }}-{{ vm_size }}"
|
||||||
|
hostname: "{{ inventory_hostname }}.{{ base_domain }}" # Change variable to fqdn
|
||||||
99
ansible/host_vars/big-thunder-mountain/vars
Normal file
99
ansible/host_vars/big-thunder-mountain/vars
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
---
|
||||||
|
# file: host_vars/vm_template/vars
|
||||||
|
# Ansible vars template for hosts created via cloning.
|
||||||
|
|
||||||
|
# Supported hypervisors:
|
||||||
|
# - Proxmox
|
||||||
|
|
||||||
|
platform: "proxmox"
|
||||||
|
|
||||||
|
# Templates are named in the following format (all lower case): <OS Distribution>-<OS Version>-<VM Size>
|
||||||
|
# Current OS offerings are:
|
||||||
|
# - Ubuntu (clone)
|
||||||
|
# - 24.04
|
||||||
|
# - Fedora (clone)
|
||||||
|
# - 42
|
||||||
|
# - Talos (create)
|
||||||
|
# - 1.11.5
|
||||||
|
|
||||||
|
vm_os_distribution: "talos"
|
||||||
|
vm_os_version: "1.11.5"
|
||||||
|
|
||||||
|
# VM ISO
|
||||||
|
# Talos: talos-v1.11.5-nocloud-amd64.iso
|
||||||
|
|
||||||
|
vm_iso_storage: "templates"
|
||||||
|
vm_iso: "talos-v{{ vm_os_version }}-nocloud-amd64.iso"
|
||||||
|
|
||||||
|
# This is the Proxmox node where all the VM templates are stored. (Templates are not global.)
|
||||||
|
# Comment out for VM create
|
||||||
|
|
||||||
|
proxmox_clone_node: "fantasyland"
|
||||||
|
|
||||||
|
# Proxmox storage target.
|
||||||
|
|
||||||
|
vm_storage: "liberty-tree"
|
||||||
|
|
||||||
|
# Current VM sizes are:
|
||||||
|
# - Small: 2 cores, 2GB memory, 8 GiB virtual disk
|
||||||
|
# - Medium: 2 cores, 4GB memory, 16 GiB virtual disk
|
||||||
|
# - Large: 4 cores, 4GB memory, 32 GiB virtual disk
|
||||||
|
# - Large Plus: 4 cores, 4GB memory, 48 GiB virtual disk
|
||||||
|
# - Xlarge: 4 cores, 8GB memory, 64 GiB virtual disk
|
||||||
|
# - Xlarge Plus: 4 cores, 8GB memory, 128 GiB virtual disk
|
||||||
|
|
||||||
|
vm_size: "large-plus"
|
||||||
|
|
||||||
|
# Proxmox does not yet do dynamic load balancing, the host target sets the target for HA groups
|
||||||
|
# and backup groups. (ha_group will be factored out in the next functionality update.)
|
||||||
|
|
||||||
|
ha_group: "pve03"
|
||||||
|
proxmox_host_target: "pve03"
|
||||||
|
|
||||||
|
# Currently, only single NIC VMs using IPv4 are supported via cloning. The IP address also
|
||||||
|
# sets the Proxmox VMID. The VMID is a combination of the 3rd and 4th octet of the IPv4 address.
|
||||||
|
|
||||||
|
ip_address: 10.1.71.52
|
||||||
|
vm_mac_address: 'BC:24:11:11:BC:58'
|
||||||
|
|
||||||
|
# Software
|
||||||
|
# Future enhancement will allow specification of additional software to automatically deploy to
|
||||||
|
# the VM after creation.
|
||||||
|
|
||||||
|
#terraform_version: "1.11.3"
|
||||||
|
|
||||||
|
# ---
|
||||||
|
|
||||||
|
vm_clone_source: "{{ vm_os_distribution }}-{{ vm_os_version }}-{{ vm_size }}"
|
||||||
|
hostname: "{{ inventory_hostname }}.{{ base_domain }}" # Change variable to fqdn
|
||||||
|
|
||||||
|
# Dictionaries for VM resources
|
||||||
|
# - cores (quantity)
|
||||||
|
# - memory (MB)
|
||||||
|
# - virtual disk (GiB)
|
||||||
|
|
||||||
|
vm_definitions:
|
||||||
|
small:
|
||||||
|
cores: 2
|
||||||
|
memory: 2048
|
||||||
|
disk: 8
|
||||||
|
medium:
|
||||||
|
cores: 2
|
||||||
|
memory: 4096
|
||||||
|
disk: 16
|
||||||
|
large:
|
||||||
|
cores: 4
|
||||||
|
memory: 4096
|
||||||
|
disk: 32
|
||||||
|
large-plus:
|
||||||
|
cores: 4
|
||||||
|
memory: 4096
|
||||||
|
disk: 48
|
||||||
|
xlarge:
|
||||||
|
cores: 4
|
||||||
|
memory: 8192
|
||||||
|
disk: 64
|
||||||
|
xlarge-plus:
|
||||||
|
cores: 4
|
||||||
|
memory: 8192
|
||||||
|
disk: 128
|
||||||
16
ansible/host_vars/carousel-of-progress/vars.yml
Normal file
16
ansible/host_vars/carousel-of-progress/vars.yml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
---
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# FILE: ansible/host_vars/astro_orbiter/vars.yml
|
||||||
|
# HOST: astro-orbiter (10.1.71.130)
|
||||||
|
# ROLE: Ollama inference host with AMD RX 5700 GPU passthrough
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ansible_host: 10.1.71.131
|
||||||
|
ansible_user: wed
|
||||||
|
ansible_become: true
|
||||||
|
|
||||||
|
# LVM root expansion — xlarge template uses sda3 partition, standard VG/LV names
|
||||||
|
common_expand_root_lvm: true
|
||||||
|
common_root_pv: /dev/sda3
|
||||||
|
common_root_vg: ubuntu-vg
|
||||||
|
common_root_lv: ubuntu-lv
|
||||||
48
ansible/host_vars/city-hall/vars
Normal file
48
ansible/host_vars/city-hall/vars
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
---
|
||||||
|
# file: host_vars/vm_template/vars
|
||||||
|
# Ansible vars template for hosts created via cloning.
|
||||||
|
|
||||||
|
# Supported hypervisors:
|
||||||
|
# - Proxmox
|
||||||
|
|
||||||
|
platform: "proxmox"
|
||||||
|
|
||||||
|
# This is the Proxmox node where all the VM templates are stored. (Templates are not global.)
|
||||||
|
|
||||||
|
proxmox_clone_node: "fantasyland"
|
||||||
|
|
||||||
|
# Templates are named in the following format (all lower case): <OS Distribution>-<OS Version>-<VM Size>
|
||||||
|
# Current OS offerings are:
|
||||||
|
# - Fedora (42)
|
||||||
|
# Current VM sizes are:
|
||||||
|
# - Small: 2 cores, 2GB memory, 8 GiB virtual disk
|
||||||
|
# - Medium: 2 cores, 4GB memory, 16 GiB virtual disk
|
||||||
|
# - Large: 4 cores, 4GB memory, 32 GiB virtual disk
|
||||||
|
# - Xlarge: 4 cores, 8GB memory, 64 GiB virtual disk
|
||||||
|
|
||||||
|
vm_clone_source: "fedora-42-small"
|
||||||
|
|
||||||
|
# Proxmox storage target.
|
||||||
|
|
||||||
|
vm_storage: "mk-general"
|
||||||
|
|
||||||
|
# Proxmox does not yet do dynamic load balancing, the host target sets the target for HA groups
|
||||||
|
# and backup groups. (ha_group will be factored out in the next functionality update.)
|
||||||
|
|
||||||
|
ha_group: "pve03"
|
||||||
|
proxmox_host_target: "pve03"
|
||||||
|
|
||||||
|
# Currently, only single NIC VMs using IPv4 are supported via cloning. The IP address also
|
||||||
|
# sets the Proxmox VMID. The VMID is a combination of the 3rd and 4th octet of the IPv4 address.
|
||||||
|
|
||||||
|
ip_address: 10.1.71.21
|
||||||
|
|
||||||
|
# Software
|
||||||
|
# Future enhancement will allow specification of additional software to automatically deploy to
|
||||||
|
# the VM after creation.
|
||||||
|
|
||||||
|
#terraform_version: "1.11.3"
|
||||||
|
|
||||||
|
# ---
|
||||||
|
|
||||||
|
hostname: "{{ inventory_hostname }}.{{ base_domain }}" # Change variable to fqdn
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
---
|
---
|
||||||
# file: host_vars/matchbox/vars
|
# file: host_vars/docker01/vars
|
||||||
|
|
||||||
# Networking
|
# Networking
|
||||||
# primary_interface: "enp1s0f0"
|
# primary_interface: "enp1s0f0"
|
||||||
mac_address: "BC:24:11:03:A9:7B"
|
#mac_address: "BC:24:11:03:A9:7B"
|
||||||
ip_address: 10.1.71.211
|
ip_address: 10.1.71.211
|
||||||
hostname: "{{ inventory_hostname }}.{{ base_domain }}"
|
hostname: "{{ inventory_hostname }}.{{ base_domain }}"
|
||||||
|
|
||||||
12
ansible/host_vars/guest-relations/vars
Normal file
12
ansible/host_vars/guest-relations/vars
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
# file: host_vars/guest-relations/vars
|
||||||
|
# guest-relations — Guest Relations
|
||||||
|
# VM provisioned by Terraform (pre-pipeline bootstrap)
|
||||||
|
|
||||||
|
# ─── Network ─────────────────────────────────────────────────────────────────
|
||||||
|
ip_address: 10.1.71.40
|
||||||
|
|
||||||
|
# ─── Application ─────────────────────────────────────────────────────────────
|
||||||
|
app_role: identity_provider
|
||||||
|
app_name: authentik
|
||||||
|
app_deployment: docker_compose
|
||||||
60
ansible/host_vars/haunted-mansion/old_vars
Normal file
60
ansible/host_vars/haunted-mansion/old_vars
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
---
|
||||||
|
# file: host_vars/vm_template/vars
|
||||||
|
# Ansible vars template for hosts created via cloning.
|
||||||
|
|
||||||
|
# Supported hypervisors:
|
||||||
|
# - Proxmox
|
||||||
|
|
||||||
|
platform: "proxmox"
|
||||||
|
|
||||||
|
# This is the Proxmox node where all the VM templates are stored. (Templates are not global.)
|
||||||
|
|
||||||
|
proxmox_clone_node: "fantasyland"
|
||||||
|
|
||||||
|
# Templates are named in the following format (all lower case): <OS Distribution>-<OS Version>-<VM Size>
|
||||||
|
# Current OS offerings are:
|
||||||
|
# - Ubuntu
|
||||||
|
# - 24.04
|
||||||
|
# - Fedora
|
||||||
|
# - 42
|
||||||
|
|
||||||
|
vm_os_distribution: "ubuntu"
|
||||||
|
vm_os_version: "24.04"
|
||||||
|
|
||||||
|
# Current VM sizes are:
|
||||||
|
# - Small: 2 cores, 2GB memory, 8 GiB virtual disk
|
||||||
|
# - Medium: 2 cores, 4GB memory, 16 GiB virtual disk
|
||||||
|
# - Large: 4 cores, 4GB memory, 32 GiB virtual disk
|
||||||
|
# - Large Plus: 4 cores, 4GB memory, 48 GiB virtual disk
|
||||||
|
# - Xlarge: 4 cores, 8GB memory, 64 GiB virtual disk
|
||||||
|
# - Xlarge Plus: 4 cores, 8GB memory, 128 GiB virtual disk
|
||||||
|
|
||||||
|
vm_size: "xlarge"
|
||||||
|
|
||||||
|
# Proxmox storage target.
|
||||||
|
|
||||||
|
vm_storage: "general"
|
||||||
|
|
||||||
|
# Proxmox does not yet do dynamic load balancing, the host target sets the target for HA groups
|
||||||
|
# and backup groups. (ha_group will be factored out in the next functionality update.)
|
||||||
|
|
||||||
|
ha_group: "pve03"
|
||||||
|
proxmox_host_target: "pve03"
|
||||||
|
|
||||||
|
# Currently, only single NIC VMs using IPv4 are supported via cloning. The IP address also
|
||||||
|
# sets the Proxmox VMID. The VMID is a combination of the 3rd and 4th octet of the IPv4 address.
|
||||||
|
|
||||||
|
ip_address: 10.1.71.61
|
||||||
|
vm_mac_address: 'BC:24:11:C9:3A:13'
|
||||||
|
|
||||||
|
# Software
|
||||||
|
# Future enhancement will allow specification of additional software to automatically deploy to
|
||||||
|
# the VM after creation.
|
||||||
|
|
||||||
|
#terraform_version: "1.11.3"
|
||||||
|
|
||||||
|
# ---
|
||||||
|
|
||||||
|
|
||||||
|
vm_clone_source: "{{ vm_os_distribution }}-{{ vm_os_version }}-{{ vm_size }}"
|
||||||
|
hostname: "{{ inventory_hostname }}.{{ base_domain }}" # Change variable to fqdn
|
||||||
99
ansible/host_vars/haunted-mansion/vars
Normal file
99
ansible/host_vars/haunted-mansion/vars
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
---
|
||||||
|
# file: host_vars/vm_template/vars
|
||||||
|
# Ansible vars template for hosts created via cloning.
|
||||||
|
|
||||||
|
# Supported hypervisors:
|
||||||
|
# - Proxmox
|
||||||
|
|
||||||
|
platform: "proxmox"
|
||||||
|
|
||||||
|
# Templates are named in the following format (all lower case): <OS Distribution>-<OS Version>-<VM Size>
|
||||||
|
# Current OS offerings are:
|
||||||
|
# - Ubuntu (clone)
|
||||||
|
# - 24.04
|
||||||
|
# - Fedora (clone)
|
||||||
|
# - 42
|
||||||
|
# - Talos (create)
|
||||||
|
# - 1.11.5
|
||||||
|
|
||||||
|
vm_os_distribution: "talos"
|
||||||
|
vm_os_version: "1.11.5"
|
||||||
|
|
||||||
|
# VM ISO
|
||||||
|
# Talos: talos-v1.11.5-nocloud-amd64.iso
|
||||||
|
|
||||||
|
vm_iso_storage: "templates"
|
||||||
|
vm_iso: "talos-v{{ vm_os_version }}-nocloud-amd64.iso"
|
||||||
|
|
||||||
|
# This is the Proxmox node where all the VM templates are stored. (Templates are not global.)
|
||||||
|
# Comment out for VM create
|
||||||
|
|
||||||
|
proxmox_clone_node: "fantasyland"
|
||||||
|
|
||||||
|
# Proxmox storage target.
|
||||||
|
|
||||||
|
vm_storage: "liberty-tree"
|
||||||
|
|
||||||
|
# Current VM sizes are:
|
||||||
|
# - Small: 2 cores, 2GB memory, 8 GiB virtual disk
|
||||||
|
# - Medium: 2 cores, 4GB memory, 16 GiB virtual disk
|
||||||
|
# - Large: 4 cores, 4GB memory, 32 GiB virtual disk
|
||||||
|
# - Large Plus: 4 cores, 4GB memory, 48 GiB virtual disk
|
||||||
|
# - Xlarge: 4 cores, 8GB memory, 64 GiB virtual disk
|
||||||
|
# - Xlarge Plus: 4 cores, 8GB memory, 128 GiB virtual disk
|
||||||
|
|
||||||
|
vm_size: "xlarge"
|
||||||
|
|
||||||
|
# Proxmox does not yet do dynamic load balancing, the host target sets the target for HA groups
|
||||||
|
# and backup groups. (ha_group will be factored out in the next functionality update.)
|
||||||
|
|
||||||
|
ha_group: "pve03"
|
||||||
|
proxmox_host_target: "pve03"
|
||||||
|
|
||||||
|
# Currently, only single NIC VMs using IPv4 are supported via cloning. The IP address also
|
||||||
|
# sets the Proxmox VMID. The VMID is a combination of the 3rd and 4th octet of the IPv4 address.
|
||||||
|
|
||||||
|
ip_address: 10.1.71.61
|
||||||
|
vm_mac_address: 'BC:24:11:C9:3A:13'
|
||||||
|
|
||||||
|
# Software
|
||||||
|
# Future enhancement will allow specification of additional software to automatically deploy to
|
||||||
|
# the VM after creation.
|
||||||
|
|
||||||
|
#terraform_version: "1.11.3"
|
||||||
|
|
||||||
|
# ---
|
||||||
|
|
||||||
|
vm_clone_source: "{{ vm_os_distribution }}-{{ vm_os_version }}-{{ vm_size }}"
|
||||||
|
hostname: "{{ inventory_hostname }}.{{ base_domain }}" # Change variable to fqdn
|
||||||
|
|
||||||
|
# Dictionaries for VM resources
|
||||||
|
# - cores (quantity)
|
||||||
|
# - memory (MB)
|
||||||
|
# - virtual disk (GiB)
|
||||||
|
|
||||||
|
vm_definitions:
|
||||||
|
small:
|
||||||
|
cores: 2
|
||||||
|
memory: 2048
|
||||||
|
disk: 8
|
||||||
|
medium:
|
||||||
|
cores: 2
|
||||||
|
memory: 4096
|
||||||
|
disk: 16
|
||||||
|
large:
|
||||||
|
cores: 4
|
||||||
|
memory: 4096
|
||||||
|
disk: 32
|
||||||
|
large-plus:
|
||||||
|
cores: 4
|
||||||
|
memory: 4096
|
||||||
|
disk: 48
|
||||||
|
xlarge:
|
||||||
|
cores: 4
|
||||||
|
memory: 8192
|
||||||
|
disk: 64
|
||||||
|
xlarge-plus:
|
||||||
|
cores: 4
|
||||||
|
memory: 8192
|
||||||
|
disk: 128
|
||||||
12
ansible/host_vars/lightning_lane/vars
Normal file
12
ansible/host_vars/lightning_lane/vars
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
# file: host_vars/lightning_lane/vars
|
||||||
|
# lightning-lane — Traefik Reverse Proxy / Load Balancer
|
||||||
|
# VM provisioned by Terraform (pre-pipeline bootstrap)
|
||||||
|
|
||||||
|
# ─── Network ─────────────────────────────────────────────────────────────────
|
||||||
|
ip_address: 10.1.71.35
|
||||||
|
|
||||||
|
# ─── Application ─────────────────────────────────────────────────────────────
|
||||||
|
app_role: reverse_proxy
|
||||||
|
app_name: traefik
|
||||||
|
app_deployment: docker_compose
|
||||||
59
ansible/host_vars/peter-pans-flight/old_vars
Normal file
59
ansible/host_vars/peter-pans-flight/old_vars
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
---
|
||||||
|
# file: host_vars/vm_template/vars
|
||||||
|
# Ansible vars template for hosts created via cloning.
|
||||||
|
|
||||||
|
# Supported hypervisors:
|
||||||
|
# - Proxmox
|
||||||
|
|
||||||
|
platform: "proxmox"
|
||||||
|
|
||||||
|
# This is the Proxmox node where all the VM templates are stored. (Templates are not global.)
|
||||||
|
|
||||||
|
proxmox_clone_node: "fantasyland"
|
||||||
|
|
||||||
|
# Templates are named in the following format (all lower case): <OS Distribution>-<OS Version>-<VM Size>
|
||||||
|
# Current OS offerings are:
|
||||||
|
# - Ubuntu
|
||||||
|
# - 24.04
|
||||||
|
# - Fedora
|
||||||
|
# - 42
|
||||||
|
|
||||||
|
vm_os_distribution: "ubuntu"
|
||||||
|
vm_os_version: "24.04"
|
||||||
|
|
||||||
|
# Current VM sizes are:
|
||||||
|
# - Small: 2 cores, 2GB memory, 8 GiB virtual disk
|
||||||
|
# - Medium: 2 cores, 4GB memory, 16 GiB virtual disk
|
||||||
|
# - Large: 4 cores, 4GB memory, 32 GiB virtual disk
|
||||||
|
# - Large Plus: 4 cores, 4GB memory, 48 GiB virtual disk
|
||||||
|
# - Xlarge: 4 cores, 8GB memory, 64 GiB virtual disk
|
||||||
|
# - Xlarge Plus: 4 cores, 8GB memory, 128 GiB virtual disk
|
||||||
|
|
||||||
|
vm_size: "xlarge"
|
||||||
|
|
||||||
|
# Proxmox storage target.
|
||||||
|
|
||||||
|
vm_storage: "general"
|
||||||
|
|
||||||
|
# Proxmox does not yet do dynamic load balancing, the host target sets the target for HA groups
|
||||||
|
# and backup groups. (ha_group will be factored out in the next functionality update.)
|
||||||
|
|
||||||
|
ha_group: "pve03"
|
||||||
|
proxmox_host_target: "pve03"
|
||||||
|
|
||||||
|
# Currently, only single NIC VMs using IPv4 are supported via cloning. The IP address also
|
||||||
|
# sets the Proxmox VMID. The VMID is a combination of the 3rd and 4th octet of the IPv4 address.
|
||||||
|
|
||||||
|
ip_address: 10.1.71.62
|
||||||
|
vm_mac_address: 'BC:24:11:AA:8F:3A'
|
||||||
|
|
||||||
|
# Software
|
||||||
|
# Future enhancement will allow specification of additional software to automatically deploy to
|
||||||
|
# the VM after creation.
|
||||||
|
|
||||||
|
#terraform_version: "1.11.3"
|
||||||
|
|
||||||
|
# ---
|
||||||
|
|
||||||
|
vm_clone_source: "{{ vm_os_distribution }}-{{ vm_os_version }}-{{ vm_size }}"
|
||||||
|
hostname: "{{ inventory_hostname }}.{{ base_domain }}" # Change variable to fqdn
|
||||||
99
ansible/host_vars/peter-pans-flight/vars
Normal file
99
ansible/host_vars/peter-pans-flight/vars
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
---
|
||||||
|
# file: host_vars/vm_template/vars
|
||||||
|
# Ansible vars template for hosts created via cloning.
|
||||||
|
|
||||||
|
# Supported hypervisors:
|
||||||
|
# - Proxmox
|
||||||
|
|
||||||
|
platform: "proxmox"
|
||||||
|
|
||||||
|
# Templates are named in the following format (all lower case): <OS Distribution>-<OS Version>-<VM Size>
|
||||||
|
# Current OS offerings are:
|
||||||
|
# - Ubuntu (clone)
|
||||||
|
# - 24.04
|
||||||
|
# - Fedora (clone)
|
||||||
|
# - 42
|
||||||
|
# - Talos (create)
|
||||||
|
# - 1.11.5
|
||||||
|
|
||||||
|
vm_os_distribution: "talos"
|
||||||
|
vm_os_version: "1.11.5"
|
||||||
|
|
||||||
|
# VM ISO
|
||||||
|
# Talos: talos-v1.11.5-nocloud-amd64.iso
|
||||||
|
|
||||||
|
vm_iso_storage: "templates"
|
||||||
|
vm_iso: "talos-v{{ vm_os_version }}-nocloud-amd64.iso"
|
||||||
|
|
||||||
|
# This is the Proxmox node where all the VM templates are stored. (Templates are not global.)
|
||||||
|
# Comment out for VM create
|
||||||
|
|
||||||
|
proxmox_clone_node: "fantasyland"
|
||||||
|
|
||||||
|
# Proxmox storage target.
|
||||||
|
|
||||||
|
vm_storage: "liberty-tree"
|
||||||
|
|
||||||
|
# Current VM sizes are:
|
||||||
|
# - Small: 2 cores, 2GB memory, 8 GiB virtual disk
|
||||||
|
# - Medium: 2 cores, 4GB memory, 16 GiB virtual disk
|
||||||
|
# - Large: 4 cores, 4GB memory, 32 GiB virtual disk
|
||||||
|
# - Large Plus: 4 cores, 4GB memory, 48 GiB virtual disk
|
||||||
|
# - Xlarge: 4 cores, 8GB memory, 64 GiB virtual disk
|
||||||
|
# - Xlarge Plus: 4 cores, 8GB memory, 128 GiB virtual disk
|
||||||
|
|
||||||
|
vm_size: "xlarge"
|
||||||
|
|
||||||
|
# Proxmox does not yet do dynamic load balancing, the host target sets the target for HA groups
|
||||||
|
# and backup groups. (ha_group will be factored out in the next functionality update.)
|
||||||
|
|
||||||
|
ha_group: "pve03"
|
||||||
|
proxmox_host_target: "pve03"
|
||||||
|
|
||||||
|
# Currently, only single NIC VMs using IPv4 are supported via cloning. The IP address also
|
||||||
|
# sets the Proxmox VMID. The VMID is a combination of the 3rd and 4th octet of the IPv4 address.
|
||||||
|
|
||||||
|
ip_address: 10.1.71.62
|
||||||
|
vm_mac_address: 'BC:24:11:AA:8F:3A'
|
||||||
|
|
||||||
|
# Software
|
||||||
|
# Future enhancement will allow specification of additional software to automatically deploy to
|
||||||
|
# the VM after creation.
|
||||||
|
|
||||||
|
#terraform_version: "1.11.3"
|
||||||
|
|
||||||
|
# ---
|
||||||
|
|
||||||
|
vm_clone_source: "{{ vm_os_distribution }}-{{ vm_os_version }}-{{ vm_size }}"
|
||||||
|
hostname: "{{ inventory_hostname }}.{{ base_domain }}" # Change variable to fqdn
|
||||||
|
|
||||||
|
# Dictionaries for VM resources
|
||||||
|
# - cores (quantity)
|
||||||
|
# - memory (MB)
|
||||||
|
# - virtual disk (GiB)
|
||||||
|
|
||||||
|
vm_definitions:
|
||||||
|
small:
|
||||||
|
cores: 2
|
||||||
|
memory: 2048
|
||||||
|
disk: 8
|
||||||
|
medium:
|
||||||
|
cores: 2
|
||||||
|
memory: 4096
|
||||||
|
disk: 16
|
||||||
|
large:
|
||||||
|
cores: 4
|
||||||
|
memory: 4096
|
||||||
|
disk: 32
|
||||||
|
large-plus:
|
||||||
|
cores: 4
|
||||||
|
memory: 4096
|
||||||
|
disk: 48
|
||||||
|
xlarge:
|
||||||
|
cores: 4
|
||||||
|
memory: 8192
|
||||||
|
disk: 64
|
||||||
|
xlarge-plus:
|
||||||
|
cores: 4
|
||||||
|
memory: 8192
|
||||||
|
disk: 128
|
||||||
59
ansible/host_vars/space-mountain/old_vars
Normal file
59
ansible/host_vars/space-mountain/old_vars
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
---
|
||||||
|
# file: host_vars/vm_template/vars
|
||||||
|
# Ansible vars template for hosts created via cloning.
|
||||||
|
|
||||||
|
# Supported hypervisors:
|
||||||
|
# - Proxmox
|
||||||
|
|
||||||
|
platform: "proxmox"
|
||||||
|
|
||||||
|
# This is the Proxmox node where all the VM templates are stored. (Templates are not global.)
|
||||||
|
|
||||||
|
proxmox_clone_node: "fantasyland"
|
||||||
|
|
||||||
|
# Templates are named in the following format (all lower case): <OS Distribution>-<OS Version>-<VM Size>
|
||||||
|
# Current OS offerings are:
|
||||||
|
# - Ubuntu
|
||||||
|
# - 24.04
|
||||||
|
# - Fedora
|
||||||
|
# - 42
|
||||||
|
|
||||||
|
vm_os_distribution: "ubuntu"
|
||||||
|
vm_os_version: "24.04"
|
||||||
|
|
||||||
|
# Current VM sizes are:
|
||||||
|
# - Small: 2 cores, 2GB memory, 8 GiB virtual disk
|
||||||
|
# - Medium: 2 cores, 4GB memory, 16 GiB virtual disk
|
||||||
|
# - Large: 4 cores, 4GB memory, 32 GiB virtual disk
|
||||||
|
# - Large Plus: 4 cores, 4GB memory, 48 GiB virtual disk
|
||||||
|
# - Xlarge: 4 cores, 8GB memory, 64 GiB virtual disk
|
||||||
|
# - Xlarge Plus: 4 cores, 8GB memory, 128 GiB virtual disk
|
||||||
|
|
||||||
|
vm_size: "large-plus"
|
||||||
|
|
||||||
|
# Proxmox storage target.
|
||||||
|
|
||||||
|
vm_storage: "general"
|
||||||
|
|
||||||
|
# Proxmox does not yet do dynamic load balancing, the host target sets the target for HA groups
|
||||||
|
# and backup groups. (ha_group will be factored out in the next functionality update.)
|
||||||
|
|
||||||
|
ha_group: "pve03"
|
||||||
|
proxmox_host_target: "pve03"
|
||||||
|
|
||||||
|
# Currently, only single NIC VMs using IPv4 are supported via cloning. The IP address also
|
||||||
|
# sets the Proxmox VMID. The VMID is a combination of the 3rd and 4th octet of the IPv4 address.
|
||||||
|
|
||||||
|
ip_address: 10.1.71.51
|
||||||
|
vm_mac_address: 'BC:24:11:1A:E8:8C'
|
||||||
|
|
||||||
|
# Software
|
||||||
|
# Future enhancement will allow specification of additional software to automatically deploy to
|
||||||
|
# the VM after creation.
|
||||||
|
|
||||||
|
#terraform_version: "1.11.3"
|
||||||
|
|
||||||
|
# ---
|
||||||
|
|
||||||
|
vm_clone_source: "{{ vm_os_distribution }}-{{ vm_os_version }}-{{ vm_size }}"
|
||||||
|
hostname: "{{ inventory_hostname }}.{{ base_domain }}" # Change variable to fqdn
|
||||||
99
ansible/host_vars/space-mountain/vars
Normal file
99
ansible/host_vars/space-mountain/vars
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
---
|
||||||
|
# file: host_vars/vm_template/vars
|
||||||
|
# Ansible vars template for hosts created via cloning.
|
||||||
|
|
||||||
|
# Supported hypervisors:
|
||||||
|
# - Proxmox
|
||||||
|
|
||||||
|
platform: "proxmox"
|
||||||
|
|
||||||
|
# Templates are named in the following format (all lower case): <OS Distribution>-<OS Version>-<VM Size>
|
||||||
|
# Current OS offerings are:
|
||||||
|
# - Ubuntu (clone)
|
||||||
|
# - 24.04
|
||||||
|
# - Fedora (clone)
|
||||||
|
# - 42
|
||||||
|
# - Talos (create)
|
||||||
|
# - 1.11.5
|
||||||
|
|
||||||
|
vm_os_distribution: "talos"
|
||||||
|
vm_os_version: "1.11.5"
|
||||||
|
|
||||||
|
# VM ISO
|
||||||
|
# Talos: talos-v1.11.5-nocloud-amd64.iso
|
||||||
|
|
||||||
|
vm_iso_storage: "templates"
|
||||||
|
vm_iso: "talos-v{{ vm_os_version }}-nocloud-amd64.iso"
|
||||||
|
|
||||||
|
# This is the Proxmox node where all the VM templates are stored. (Templates are not global.)
|
||||||
|
# Comment out for VM create
|
||||||
|
|
||||||
|
proxmox_clone_node: "fantasyland"
|
||||||
|
|
||||||
|
# Proxmox storage target.
|
||||||
|
|
||||||
|
vm_storage: "liberty-tree"
|
||||||
|
|
||||||
|
# Current VM sizes are:
|
||||||
|
# - Small: 2 cores, 2GB memory, 8 GiB virtual disk
|
||||||
|
# - Medium: 2 cores, 4GB memory, 16 GiB virtual disk
|
||||||
|
# - Large: 4 cores, 4GB memory, 32 GiB virtual disk
|
||||||
|
# - Large Plus: 4 cores, 4GB memory, 48 GiB virtual disk
|
||||||
|
# - Xlarge: 4 cores, 8GB memory, 64 GiB virtual disk
|
||||||
|
# - Xlarge Plus: 4 cores, 8GB memory, 128 GiB virtual disk
|
||||||
|
|
||||||
|
vm_size: "large-plus"
|
||||||
|
|
||||||
|
# Proxmox does not yet do dynamic load balancing, the host target sets the target for HA groups
|
||||||
|
# and backup groups. (ha_group will be factored out in the next functionality update.)
|
||||||
|
|
||||||
|
ha_group: "pve03"
|
||||||
|
proxmox_host_target: "pve03"
|
||||||
|
|
||||||
|
# Currently, only single NIC VMs using IPv4 are supported via cloning. The IP address also
|
||||||
|
# sets the Proxmox VMID. The VMID is a combination of the 3rd and 4th octet of the IPv4 address.
|
||||||
|
|
||||||
|
ip_address: 10.1.71.51
|
||||||
|
vm_mac_address: 'BC:24:11:1A:E8:8C'
|
||||||
|
|
||||||
|
# Software
|
||||||
|
# Future enhancement will allow specification of additional software to automatically deploy to
|
||||||
|
# the VM after creation.
|
||||||
|
|
||||||
|
#terraform_version: "1.11.3"
|
||||||
|
|
||||||
|
# ---
|
||||||
|
|
||||||
|
vm_clone_source: "{{ vm_os_distribution }}-{{ vm_os_version }}-{{ vm_size }}"
|
||||||
|
hostname: "{{ inventory_hostname }}.{{ base_domain }}" # Change variable to fqdn
|
||||||
|
|
||||||
|
# Dictionaries for VM resources
|
||||||
|
# - cores (quantity)
|
||||||
|
# - memory (MB)
|
||||||
|
# - virtual disk (GiB)
|
||||||
|
|
||||||
|
vm_definitions:
|
||||||
|
small:
|
||||||
|
cores: 2
|
||||||
|
memory: 2048
|
||||||
|
disk: 8
|
||||||
|
medium:
|
||||||
|
cores: 2
|
||||||
|
memory: 4096
|
||||||
|
disk: 16
|
||||||
|
large:
|
||||||
|
cores: 4
|
||||||
|
memory: 4096
|
||||||
|
disk: 32
|
||||||
|
large-plus:
|
||||||
|
cores: 4
|
||||||
|
memory: 4096
|
||||||
|
disk: 48
|
||||||
|
xlarge:
|
||||||
|
cores: 4
|
||||||
|
memory: 8192
|
||||||
|
disk: 64
|
||||||
|
xlarge-plus:
|
||||||
|
cores: 4
|
||||||
|
memory: 8192
|
||||||
|
disk: 128
|
||||||
59
ansible/host_vars/splash-mountain/old_vars
Normal file
59
ansible/host_vars/splash-mountain/old_vars
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
---
|
||||||
|
# file: host_vars/vm_template/vars
|
||||||
|
# Ansible vars template for hosts created via cloning.
|
||||||
|
|
||||||
|
# Supported hypervisors:
|
||||||
|
# - Proxmox
|
||||||
|
|
||||||
|
platform: "proxmox"
|
||||||
|
|
||||||
|
# This is the Proxmox node where all the VM templates are stored. (Templates are not global.)
|
||||||
|
|
||||||
|
proxmox_clone_node: "fantasyland"
|
||||||
|
|
||||||
|
# Templates are named in the following format (all lower case): <OS Distribution>-<OS Version>-<VM Size>
|
||||||
|
# Current OS offerings are:
|
||||||
|
# - Ubuntu
|
||||||
|
# - 24.04
|
||||||
|
# - Fedora
|
||||||
|
# - 42
|
||||||
|
|
||||||
|
vm_os_distribution: "ubuntu"
|
||||||
|
vm_os_version: "24.04"
|
||||||
|
|
||||||
|
# Current VM sizes are:
|
||||||
|
# - Small: 2 cores, 2GB memory, 8 GiB virtual disk
|
||||||
|
# - Medium: 2 cores, 4GB memory, 16 GiB virtual disk
|
||||||
|
# - Large: 4 cores, 4GB memory, 32 GiB virtual disk
|
||||||
|
# - Large Plus: 4 cores, 4GB memory, 48 GiB virtual disk
|
||||||
|
# - Xlarge: 4 cores, 8GB memory, 64 GiB virtual disk
|
||||||
|
# - Xlarge Plus: 4 cores, 8GB memory, 128 GiB virtual disk
|
||||||
|
|
||||||
|
vm_size: "large-plus"
|
||||||
|
|
||||||
|
# Proxmox storage target.
|
||||||
|
|
||||||
|
vm_storage: "general"
|
||||||
|
|
||||||
|
# Proxmox does not yet do dynamic load balancing, the host target sets the target for HA groups
|
||||||
|
# and backup groups. (ha_group will be factored out in the next functionality update.)
|
||||||
|
|
||||||
|
ha_group: "pve03"
|
||||||
|
proxmox_host_target: "pve03"
|
||||||
|
|
||||||
|
# Currently, only single NIC VMs using IPv4 are supported via cloning. The IP address also
|
||||||
|
# sets the Proxmox VMID. The VMID is a combination of the 3rd and 4th octet of the IPv4 address.
|
||||||
|
|
||||||
|
ip_address: 10.1.71.53
|
||||||
|
vm_mac_address: 'BC:24:11:84:D7:2F'
|
||||||
|
|
||||||
|
# Software
|
||||||
|
# Future enhancement will allow specification of additional software to automatically deploy to
|
||||||
|
# the VM after creation.
|
||||||
|
|
||||||
|
#terraform_version: "1.11.3"
|
||||||
|
|
||||||
|
# ---
|
||||||
|
|
||||||
|
vm_clone_source: "{{ vm_os_distribution }}-{{ vm_os_version }}-{{ vm_size }}"
|
||||||
|
hostname: "{{ inventory_hostname }}.{{ base_domain }}" # Change variable to fqdn
|
||||||
99
ansible/host_vars/splash-mountain/vars
Normal file
99
ansible/host_vars/splash-mountain/vars
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
---
|
||||||
|
# file: host_vars/vm_template/vars
|
||||||
|
# Ansible vars template for hosts created via cloning.
|
||||||
|
|
||||||
|
# Supported hypervisors:
|
||||||
|
# - Proxmox
|
||||||
|
|
||||||
|
platform: "proxmox"
|
||||||
|
|
||||||
|
# Templates are named in the following format (all lower case): <OS Distribution>-<OS Version>-<VM Size>
|
||||||
|
# Current OS offerings are:
|
||||||
|
# - Ubuntu (clone)
|
||||||
|
# - 24.04
|
||||||
|
# - Fedora (clone)
|
||||||
|
# - 42
|
||||||
|
# - Talos (create)
|
||||||
|
# - 1.11.5
|
||||||
|
|
||||||
|
vm_os_distribution: "talos"
|
||||||
|
vm_os_version: "1.11.5"
|
||||||
|
|
||||||
|
# VM ISO
|
||||||
|
# Talos: talos-v1.11.5-nocloud-amd64.iso
|
||||||
|
|
||||||
|
vm_iso_storage: "templates"
|
||||||
|
vm_iso: "talos-v{{ vm_os_version }}-nocloud-amd64.iso"
|
||||||
|
|
||||||
|
# This is the Proxmox node where all the VM templates are stored. (Templates are not global.)
|
||||||
|
# Comment out for VM create
|
||||||
|
|
||||||
|
proxmox_clone_node: "fantasyland"
|
||||||
|
|
||||||
|
# Proxmox storage target.
|
||||||
|
|
||||||
|
vm_storage: "liberty-tree"
|
||||||
|
|
||||||
|
# Current VM sizes are:
|
||||||
|
# - Small: 2 cores, 2GB memory, 8 GiB virtual disk
|
||||||
|
# - Medium: 2 cores, 4GB memory, 16 GiB virtual disk
|
||||||
|
# - Large: 4 cores, 4GB memory, 32 GiB virtual disk
|
||||||
|
# - Large Plus: 4 cores, 4GB memory, 48 GiB virtual disk
|
||||||
|
# - Xlarge: 4 cores, 8GB memory, 64 GiB virtual disk
|
||||||
|
# - Xlarge Plus: 4 cores, 8GB memory, 128 GiB virtual disk
|
||||||
|
|
||||||
|
vm_size: "large-plus"
|
||||||
|
|
||||||
|
# Proxmox does not yet do dynamic load balancing, the host target sets the target for HA groups
|
||||||
|
# and backup groups. (ha_group will be factored out in the next functionality update.)
|
||||||
|
|
||||||
|
ha_group: "pve03"
|
||||||
|
proxmox_host_target: "pve03"
|
||||||
|
|
||||||
|
# Currently, only single NIC VMs using IPv4 are supported via cloning. The IP address also
|
||||||
|
# sets the Proxmox VMID. The VMID is a combination of the 3rd and 4th octet of the IPv4 address.
|
||||||
|
|
||||||
|
ip_address: 10.1.71.53
|
||||||
|
vm_mac_address: 'BC:24:11:84:D7:2F'
|
||||||
|
|
||||||
|
# Software
|
||||||
|
# Future enhancement will allow specification of additional software to automatically deploy to
|
||||||
|
# the VM after creation.
|
||||||
|
|
||||||
|
#terraform_version: "1.11.3"
|
||||||
|
|
||||||
|
# ---
|
||||||
|
|
||||||
|
vm_clone_source: "{{ vm_os_distribution }}-{{ vm_os_version }}-{{ vm_size }}"
|
||||||
|
hostname: "{{ inventory_hostname }}.{{ base_domain }}" # Change variable to fqdn
|
||||||
|
|
||||||
|
# Dictionaries for VM resources
|
||||||
|
# - cores (quantity)
|
||||||
|
# - memory (MB)
|
||||||
|
# - virtual disk (GiB)
|
||||||
|
|
||||||
|
vm_definitions:
|
||||||
|
small:
|
||||||
|
cores: 2
|
||||||
|
memory: 2048
|
||||||
|
disk: 8
|
||||||
|
medium:
|
||||||
|
cores: 2
|
||||||
|
memory: 4096
|
||||||
|
disk: 16
|
||||||
|
large:
|
||||||
|
cores: 4
|
||||||
|
memory: 4096
|
||||||
|
disk: 32
|
||||||
|
large-plus:
|
||||||
|
cores: 4
|
||||||
|
memory: 4096
|
||||||
|
disk: 48
|
||||||
|
xlarge:
|
||||||
|
cores: 4
|
||||||
|
memory: 8192
|
||||||
|
disk: 64
|
||||||
|
xlarge-plus:
|
||||||
|
cores: 4
|
||||||
|
memory: 8192
|
||||||
|
disk: 128
|
||||||
100
ansible/host_vars/splash/vars
Normal file
100
ansible/host_vars/splash/vars
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
---
|
||||||
|
# file: host_vars/vm_template/vars
|
||||||
|
# Ansible vars template for hosts creation via clone or create.
|
||||||
|
|
||||||
|
# Supported hypervisors:
|
||||||
|
# - Proxmox
|
||||||
|
|
||||||
|
platform: "proxmox"
|
||||||
|
|
||||||
|
# Templates are named in the following format (all lower case): <OS Distribution>-<OS Version>-<VM Size>
|
||||||
|
# Current OS offerings are:
|
||||||
|
# - Ubuntu (clone)
|
||||||
|
# - 24.04
|
||||||
|
# - Fedora (clone)
|
||||||
|
# - 42
|
||||||
|
# - Talos (create)
|
||||||
|
# - 1.11.5
|
||||||
|
|
||||||
|
vm_os_distribution: "talos"
|
||||||
|
vm_os_version: "1.11.5"
|
||||||
|
|
||||||
|
# VM ISO
|
||||||
|
# Talos: talos-v1.11.5-nocloud-amd64.iso
|
||||||
|
|
||||||
|
vm_iso_storage: "templates"
|
||||||
|
vm_iso: "talos-v{{ vm_os_version }}-nocloud-amd64.iso"
|
||||||
|
|
||||||
|
# This is the Proxmox node where all the VM templates are stored. (Templates are not global.)
|
||||||
|
# Comment out for VM create
|
||||||
|
|
||||||
|
proxmox_clone_node: "fantasyland"
|
||||||
|
|
||||||
|
# Proxmox storage target.
|
||||||
|
|
||||||
|
vm_storage: "liberty-tree"
|
||||||
|
|
||||||
|
# Current VM sizes are:
|
||||||
|
# - Small: 2 cores, 2GB memory, 8 GiB virtual disk
|
||||||
|
# - Medium: 2 cores, 4GB memory, 16 GiB virtual disk
|
||||||
|
# - Large: 4 cores, 4GB memory, 32 GiB virtual disk
|
||||||
|
# - Large Plus: 4 cores, 4GB memory, 48 GiB virtual disk
|
||||||
|
# - Xlarge: 4 cores, 8GB memory, 64 GiB virtual disk
|
||||||
|
# - Xlarge Plus: 4 cores, 8GB memory, 128 GiB virtual disk
|
||||||
|
|
||||||
|
vm_size: "small"
|
||||||
|
|
||||||
|
# Proxmox does not yet do dynamic load balancing, the host target sets the target for HA groups
|
||||||
|
# and backup groups. (ha_group will be factored out in the next functionality update.)
|
||||||
|
|
||||||
|
ha_group: "pve03"
|
||||||
|
proxmox_host_target: "tomorrowland"
|
||||||
|
|
||||||
|
# Currently, only single NIC VMs using IPv4 are supported via cloning. The IP address also
|
||||||
|
# sets the Proxmox VMID. The VMID is a combination of the 3rd and 4th octet of the IPv4 address.
|
||||||
|
# Comment out vm_mac_address if new MAC address should be generated
|
||||||
|
|
||||||
|
ip_address: 10.1.71.99
|
||||||
|
vm_mac_address: 'BC:24:11:97:C3:AA'
|
||||||
|
|
||||||
|
# Software
|
||||||
|
# Future enhancement will allow specification of additional software to automatically deploy to
|
||||||
|
# the VM after creation.
|
||||||
|
|
||||||
|
#terraform_version: "1.11.3"
|
||||||
|
|
||||||
|
# ---
|
||||||
|
|
||||||
|
vm_clone_source: "{{ vm_os_distribution }}-{{ vm_os_version }}-{{ vm_size }}"
|
||||||
|
hostname: "{{ inventory_hostname }}.{{ base_domain }}" # Change variable to fqdn
|
||||||
|
|
||||||
|
# Dictionaries for VM resources
|
||||||
|
# - cores (quantity)
|
||||||
|
# - memory (MB)
|
||||||
|
# - virtual disk (GiB)
|
||||||
|
|
||||||
|
vm_definitions:
|
||||||
|
small:
|
||||||
|
cores: 2
|
||||||
|
memory: 2048
|
||||||
|
disk: 8
|
||||||
|
medium:
|
||||||
|
cores: 2
|
||||||
|
memory: 4096
|
||||||
|
disk: 16
|
||||||
|
large:
|
||||||
|
cores: 4
|
||||||
|
memory: 4096
|
||||||
|
disk: 32
|
||||||
|
large-plus:
|
||||||
|
cores: 4
|
||||||
|
memory: 4096
|
||||||
|
disk: 48
|
||||||
|
xlarge:
|
||||||
|
cores: 4
|
||||||
|
memory: 8192
|
||||||
|
disk: 64
|
||||||
|
xlarge-plus:
|
||||||
|
cores: 4
|
||||||
|
memory: 8192
|
||||||
|
disk: 128
|
||||||
50
ansible/host_vars/sundial/vars
Normal file
50
ansible/host_vars/sundial/vars
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
---
|
||||||
|
# file: host_vars/vm_template/vars
|
||||||
|
# Ansible vars template for hosts created via cloning.
|
||||||
|
|
||||||
|
# Supported hypervisors:
|
||||||
|
# - Proxmox
|
||||||
|
|
||||||
|
platform: "proxmox"
|
||||||
|
|
||||||
|
# This is the Proxmox node where all the VM templates are stored. (Templates are not global.)
|
||||||
|
|
||||||
|
proxmox_clone_node: "fantasyland"
|
||||||
|
|
||||||
|
# Templates are named in the following format (all lower case): <OS Distribution>-<OS Version>-<VM Size>
|
||||||
|
# Current OS offerings are:
|
||||||
|
# - Fedora (42)
|
||||||
|
# Current VM sizes are:
|
||||||
|
# - Small: 2 cores, 2GB memory, 8 GiB virtual disk
|
||||||
|
# - Medium: 2 cores, 4GB memory, 16 GiB virtual disk
|
||||||
|
# - Large: 4 cores, 4GB memory, 32 GiB virtual disk
|
||||||
|
# - Large Plus: 4 cores, 4GB memory, 48 GiB virtual disk
|
||||||
|
# - Xlarge: 4 cores, 8GB memory, 64 GiB virtual disk
|
||||||
|
# - Xlarge Plus: 4 cores, 8GB memory, 128 GiB virtual disk
|
||||||
|
|
||||||
|
vm_clone_source: "fedora-42-small"
|
||||||
|
|
||||||
|
# Proxmox storage target.
|
||||||
|
|
||||||
|
vm_storage: "general"
|
||||||
|
|
||||||
|
# Proxmox does not yet do dynamic load balancing, the host target sets the target for HA groups
|
||||||
|
# and backup groups. (ha_group will be factored out in the next functionality update.)
|
||||||
|
|
||||||
|
ha_group: "fantasyland"
|
||||||
|
proxmox_host_target: "fantasyland"
|
||||||
|
|
||||||
|
# Currently, only single NIC VMs using IPv4 are supported via cloning. The IP address also
|
||||||
|
# sets the Proxmox VMID. The VMID is a combination of the 3rd and 4th octet of the IPv4 address.
|
||||||
|
|
||||||
|
ip_address: 10.1.71.21
|
||||||
|
|
||||||
|
# Software
|
||||||
|
# Future enhancement will allow specification of additional software to automatically deploy to
|
||||||
|
# the VM after creation.
|
||||||
|
|
||||||
|
#terraform_version: "1.11.3"
|
||||||
|
|
||||||
|
# ---
|
||||||
|
|
||||||
|
hostname: "{{ inventory_hostname }}.{{ base_domain }}" # Change variable to fqdn
|
||||||
59
ansible/host_vars/tiki-room/vars
Normal file
59
ansible/host_vars/tiki-room/vars
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
---
|
||||||
|
# file: host_vars/vm_template/vars
|
||||||
|
# Ansible vars template for hosts created via cloning.
|
||||||
|
|
||||||
|
# Supported hypervisors:
|
||||||
|
# - Proxmox
|
||||||
|
|
||||||
|
platform: "proxmox"
|
||||||
|
|
||||||
|
# This is the Proxmox node where all the VM templates are stored. (Templates are not global.)
|
||||||
|
|
||||||
|
proxmox_clone_node: "fantasyland"
|
||||||
|
|
||||||
|
# Templates are named in the following format (all lower case): <OS Distribution>-<OS Version>-<VM Size>
|
||||||
|
# Current OS offerings are:
|
||||||
|
# - Ubuntu
|
||||||
|
# - 24.04
|
||||||
|
# - Fedora
|
||||||
|
# - 42
|
||||||
|
|
||||||
|
vm_os_distribution: "ubuntu"
|
||||||
|
vm_os_version: "24.04"
|
||||||
|
|
||||||
|
# Current VM sizes are:
|
||||||
|
# - Small: 2 cores, 2GB memory, 8 GiB virtual disk
|
||||||
|
# - Medium: 2 cores, 4GB memory, 16 GiB virtual disk
|
||||||
|
# - Large: 4 cores, 4GB memory, 32 GiB virtual disk
|
||||||
|
# - Large Plus: 4 cores, 4GB memory, 48 GiB virtual disk
|
||||||
|
# - Xlarge: 4 cores, 8GB memory, 64 GiB virtual disk
|
||||||
|
# - Xlarge Plus: 4 cores, 8GB memory, 128 GiB virtual disk
|
||||||
|
|
||||||
|
vm_size: "large"
|
||||||
|
|
||||||
|
# Proxmox storage target.
|
||||||
|
|
||||||
|
vm_storage: "general"
|
||||||
|
|
||||||
|
# Proxmox does not yet do dynamic load balancing, the host target sets the target for HA groups
|
||||||
|
# and backup groups. (ha_group will be factored out in the next functionality update.)
|
||||||
|
|
||||||
|
ha_group: "pve03"
|
||||||
|
proxmox_host_target: "pve03"
|
||||||
|
|
||||||
|
# Currently, only single NIC VMs using IPv4 are supported via cloning. The IP address also
|
||||||
|
# sets the Proxmox VMID. The VMID is a combination of the 3rd and 4th octet of the IPv4 address.
|
||||||
|
|
||||||
|
ip_address: 10.1.71.23
|
||||||
|
# vm_mac_address: 'BC:24:11:11:BC:58'
|
||||||
|
|
||||||
|
# Software
|
||||||
|
# Future enhancement will allow specification of additional software to automatically deploy to
|
||||||
|
# the VM after creation.
|
||||||
|
|
||||||
|
#terraform_version: "1.11.3"
|
||||||
|
|
||||||
|
# ---
|
||||||
|
|
||||||
|
vm_clone_source: "{{ vm_os_distribution }}-{{ vm_os_version }}-{{ vm_size }}"
|
||||||
|
hostname: "{{ inventory_hostname }}.{{ base_domain }}" # Change variable to fqdn
|
||||||
27
ansible/host_vars/turnstile/vars
Normal file
27
ansible/host_vars/turnstile/vars
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
---
|
||||||
|
# file: host_vars/turnstile/vars
|
||||||
|
# turnstile — Smallstep step-ca SSH Certificate Authority
|
||||||
|
# VM provisioned by Terraform (pre-pipeline bootstrap)
|
||||||
|
|
||||||
|
# ─── Network ─────────────────────────────────────────────────────────────────
|
||||||
|
ip_address: 10.1.71.34
|
||||||
|
|
||||||
|
# ─── Application ─────────────────────────────────────────────────────────────
|
||||||
|
app_role: ssh_certificate_authority
|
||||||
|
app_name: step-ca
|
||||||
|
app_deployment: docker_compose
|
||||||
|
|
||||||
|
# ─── step-ca Configuration ───────────────────────────────────────────────────
|
||||||
|
stepca_hostname: turnstile.local.mk-labs.cloud
|
||||||
|
stepca_dns_names: "turnstile.local.mk-labs.cloud,10.1.71.34"
|
||||||
|
stepca_ssh_enabled: true
|
||||||
|
stepca_listen_port: 9000
|
||||||
|
|
||||||
|
# ─── OIDC Provisioner (Authentik) ────────────────────────────────────────────
|
||||||
|
# Client ID and secret stored in vault
|
||||||
|
stepca_oidc_provisioner_name: authentik
|
||||||
|
stepca_oidc_configuration_endpoint: "https://authentik.local.mk-labs.cloud/application/o/step-ca/.well-known/openid-configuration"
|
||||||
|
stepca_oidc_listen_address: ":10000"
|
||||||
|
stepca_oidc_domains:
|
||||||
|
- "local.mk-labs.cloud"
|
||||||
|
- "protonmail.com"
|
||||||
17
ansible/host_vars/turnstile/vault
Normal file
17
ansible/host_vars/turnstile/vault
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
$ANSIBLE_VAULT;1.1;AES256
|
||||||
|
30383930323363386234333433636465393263613336646464666365643730386430353864616334
|
||||||
|
3865343031653162313736656437373666636136653263360a613961646133376262633164393535
|
||||||
|
31363434633634303035663133316230633538363936303266373931313661346563333832653032
|
||||||
|
6239376363646530620a303231363333363233623038326165316463383662656565626534396232
|
||||||
|
62333133623530643932643430663166373930353733363866336533643233373261333130613635
|
||||||
|
31633337376337663833613634666436383862386431636537373363343333323932363761653366
|
||||||
|
61353166613162346436396138316561646165303566376366323462663861616364336539313138
|
||||||
|
30386430373566353761383636626335393463376661356666303861353564313832346333396134
|
||||||
|
30653861363866336331336164323130623230666237356165613934333239386536373664643065
|
||||||
|
33643139346562346663313533643433353462363665323166313364373335366665373435643935
|
||||||
|
65303863663864393238393732303065343364306264396333376233666233346664323334336532
|
||||||
|
38373164383835663163363137643531303163396236623565666436363261393563343133333161
|
||||||
|
36663934303633663062346161636333396135336135616136303664636562363862353764343562
|
||||||
|
39643430396636313139336130656363306562363430346233313530663963366238326334623135
|
||||||
|
62383632613061316262323038303333323739303137363334626637666663666263613132336433
|
||||||
|
65346266393733633632
|
||||||
104
ansible/host_vars/vm_template/vars
Normal file
104
ansible/host_vars/vm_template/vars
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
---
|
||||||
|
# file: host_vars/vm_template/vars
|
||||||
|
# Ansible vars template for hosts creation via clone or create.
|
||||||
|
|
||||||
|
# Supported hypervisors:
|
||||||
|
# - Proxmox
|
||||||
|
|
||||||
|
platform: "proxmox"
|
||||||
|
|
||||||
|
# Templates are named in the following format (all lower case): <OS Distribution>-<OS Version>-<VM Size>
|
||||||
|
# Current OS offerings are:
|
||||||
|
# - Ubuntu (clone)
|
||||||
|
# - 24.04
|
||||||
|
# - Fedora (clone)
|
||||||
|
# - 42
|
||||||
|
# - Talos (create)
|
||||||
|
# - 1.11.5
|
||||||
|
|
||||||
|
vm_os_distribution: "ubuntu"
|
||||||
|
vm_os_version: "24.04"
|
||||||
|
|
||||||
|
# VM ISO
|
||||||
|
# Talos: talos-v1.11.5-nocloud-amd64.iso
|
||||||
|
|
||||||
|
vm_iso_storage: "templates"
|
||||||
|
vm_iso: "talos-v{{ vm_os_version }}-nocloud-amd64.iso"
|
||||||
|
|
||||||
|
# This is the Proxmox node where all the VM templates are stored. (Templates are not global.)
|
||||||
|
# Comment out for VM create
|
||||||
|
|
||||||
|
proxmox_clone_node: "fantasyland"
|
||||||
|
|
||||||
|
# Proxmox storage target.
|
||||||
|
|
||||||
|
vm_storage: "general"
|
||||||
|
|
||||||
|
# Current VM sizes are:
|
||||||
|
# - Small: 2 cores, 2GB memory, 8 GiB virtual disk
|
||||||
|
# - Medium: 2 cores, 4GB memory, 16 GiB virtual disk
|
||||||
|
# - Large: 4 cores, 4GB memory, 32 GiB virtual disk
|
||||||
|
# - Large Plus: 4 cores, 4GB memory, 48 GiB virtual disk
|
||||||
|
# - Xlarge: 4 cores, 8GB memory, 64 GiB virtual disk
|
||||||
|
# - Xlarge Plus: 4 cores, 8GB memory, 128 GiB virtual disk
|
||||||
|
|
||||||
|
vm_size: "large-plus"
|
||||||
|
|
||||||
|
# Proxmox does not yet do dynamic load balancing, the host target sets the target for HA groups
|
||||||
|
# and backup groups. (ha_group will be factored out in the next functionality update.)
|
||||||
|
|
||||||
|
ha_group: "pve03"
|
||||||
|
proxmox_host_target: "tomorrowland"
|
||||||
|
|
||||||
|
# Currently, only single NIC VMs using IPv4 are supported via cloning. The IP address also
|
||||||
|
# sets the Proxmox VMID. The VMID is a combination of the 3rd and 4th octet of the IPv4 address.
|
||||||
|
# Comment out vm_mac_address if new MAC address should be generated
|
||||||
|
|
||||||
|
ip_address: 10.1.71.249
|
||||||
|
# vm_mac_address: 'BC:24:11:11:BC:58'
|
||||||
|
|
||||||
|
# Software
|
||||||
|
# Future enhancement will allow specification of additional software to automatically deploy to
|
||||||
|
# the VM after creation.
|
||||||
|
|
||||||
|
#terraform_version: "1.11.3"
|
||||||
|
|
||||||
|
# ---
|
||||||
|
|
||||||
|
vm_clone_source: "{{ vm_os_distribution }}-{{ vm_os_version }}-{{ vm_size }}"
|
||||||
|
hostname: "{{ inventory_hostname }}.{{ base_domain }}" # Change variable to fqdn
|
||||||
|
|
||||||
|
# Dictionaries for VM resources
|
||||||
|
# - cores (quantity)
|
||||||
|
# - memory (MB)
|
||||||
|
# - virtual disk (GiB)
|
||||||
|
|
||||||
|
small:
|
||||||
|
cores: 2
|
||||||
|
memory: 2048
|
||||||
|
disk: 8
|
||||||
|
|
||||||
|
medium:
|
||||||
|
cores: 2
|
||||||
|
memory: 4096
|
||||||
|
disk: 16
|
||||||
|
|
||||||
|
large:
|
||||||
|
cores: 4
|
||||||
|
memory: 4096
|
||||||
|
disk: 32
|
||||||
|
|
||||||
|
large-plus:
|
||||||
|
cores: 4
|
||||||
|
memory: 4096
|
||||||
|
disk: 48
|
||||||
|
|
||||||
|
xlarge:
|
||||||
|
cores: 4
|
||||||
|
memory: 8192
|
||||||
|
disk: 64
|
||||||
|
|
||||||
|
xlarge-plus:
|
||||||
|
cores: 4
|
||||||
|
memory: 8192
|
||||||
|
disk: 128
|
||||||
114
ansible/inventory.yml
Executable file
114
ansible/inventory.yml
Executable file
@@ -0,0 +1,114 @@
|
|||||||
|
# file: inventory.yml
|
||||||
|
proxmox:
|
||||||
|
hosts:
|
||||||
|
main-street-usa:
|
||||||
|
ansible_host: 10.1.71.11
|
||||||
|
ansible_user: wed
|
||||||
|
ansible_become: true
|
||||||
|
tomorrowland:
|
||||||
|
fantasyland:
|
||||||
|
|
||||||
|
magic_kingdom:
|
||||||
|
hosts:
|
||||||
|
main-street-usa:
|
||||||
|
tomorrowland:
|
||||||
|
fantasyland:
|
||||||
|
|
||||||
|
dns_server:
|
||||||
|
hosts:
|
||||||
|
monorail:
|
||||||
|
|
||||||
|
ntp_servers:
|
||||||
|
hosts:
|
||||||
|
sundial:
|
||||||
|
|
||||||
|
load_balancers:
|
||||||
|
hosts:
|
||||||
|
lightning-lane:
|
||||||
|
ansible_become: true
|
||||||
|
|
||||||
|
step_ca_server:
|
||||||
|
hosts:
|
||||||
|
turnstile:
|
||||||
|
ansible_become: true
|
||||||
|
|
||||||
|
authentik_server:
|
||||||
|
hosts:
|
||||||
|
guest-relations:
|
||||||
|
ansible_become: true
|
||||||
|
|
||||||
|
gitea_servers:
|
||||||
|
hosts:
|
||||||
|
mad-tea-party:
|
||||||
|
ansible_user: wed
|
||||||
|
ansible_become: true
|
||||||
|
|
||||||
|
nextcloud_server:
|
||||||
|
hosts:
|
||||||
|
the-grid:
|
||||||
|
ansible_become: true
|
||||||
|
|
||||||
|
semaphore_server:
|
||||||
|
hosts:
|
||||||
|
figment:
|
||||||
|
ansible_host: 10.1.71.37
|
||||||
|
ansible_user: wed
|
||||||
|
ansible_become: true
|
||||||
|
|
||||||
|
n8n_server:
|
||||||
|
hosts:
|
||||||
|
tiki-room:
|
||||||
|
|
||||||
|
ollama_server:
|
||||||
|
hosts:
|
||||||
|
astro-orbiter:
|
||||||
|
ansible_host: 10.1.71.130
|
||||||
|
ansible_user: wed
|
||||||
|
ansible_become: true
|
||||||
|
|
||||||
|
hermes_server:
|
||||||
|
hosts:
|
||||||
|
carousel-of-progress:
|
||||||
|
ansible_host: 10.1.71.131
|
||||||
|
ansible_user: wed
|
||||||
|
ansible_become: true
|
||||||
|
|
||||||
|
honcho_server:
|
||||||
|
hosts:
|
||||||
|
lincoln:
|
||||||
|
ansible_host: 10.1.71.132
|
||||||
|
ansible_user: wed
|
||||||
|
ansible_become: true
|
||||||
|
|
||||||
|
papermc_server:
|
||||||
|
# ansible-galaxy role install engonzal.papermc
|
||||||
|
hosts:
|
||||||
|
arcade:
|
||||||
|
|
||||||
|
dev_servers:
|
||||||
|
hosts:
|
||||||
|
scrim:
|
||||||
|
|
||||||
|
# dhcp_server:
|
||||||
|
# hosts:
|
||||||
|
# matchbox:
|
||||||
|
|
||||||
|
backup_servers:
|
||||||
|
hosts:
|
||||||
|
timekeeper:
|
||||||
|
|
||||||
|
talos_control:
|
||||||
|
hosts:
|
||||||
|
city-hall:
|
||||||
|
ansible_become: true
|
||||||
|
vars:
|
||||||
|
talosctl_version: "v1.12.4"
|
||||||
|
talos_cluster_name: "fastpass"
|
||||||
|
|
||||||
|
# matchbox_server:
|
||||||
|
# hosts:
|
||||||
|
# matchbox:
|
||||||
|
|
||||||
|
terraform_server:
|
||||||
|
hosts:
|
||||||
|
infra01:
|
||||||
5
ansible/mk
Executable file
5
ansible/mk
Executable file
@@ -0,0 +1,5 @@
|
|||||||
|
space-mountain
|
||||||
|
splash-mountain
|
||||||
|
big-thunder-mountain
|
||||||
|
peter-pans-flight
|
||||||
|
haunted-mansion
|
||||||
84
ansible/playbooks/add_dhcp_reservation.yml
Executable file
84
ansible/playbooks/add_dhcp_reservation.yml
Executable file
@@ -0,0 +1,84 @@
|
|||||||
|
---
|
||||||
|
- name: Bind VM MAC address to IP address on Ubiquiti
|
||||||
|
hosts: all
|
||||||
|
gather_facts: false
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: Set VM MAC address (if defined in vars)
|
||||||
|
delegate_to: "localhost"
|
||||||
|
community.proxmox.proxmox_kvm:
|
||||||
|
api_user: "{{ proxmox_user }}"
|
||||||
|
api_password: "{{ proxmox_password }}"
|
||||||
|
api_host: "{{ proxmox_host }}"
|
||||||
|
node: "{{ proxmox_clone_node }}"
|
||||||
|
vmid: "{{ vm_id }}"
|
||||||
|
net:
|
||||||
|
net0: "virtio={{ vm_mac_address }},bridge=vmbr0,firewall=1"
|
||||||
|
update: true
|
||||||
|
update_unsafe: true
|
||||||
|
when: vm_mac_address is defined
|
||||||
|
|
||||||
|
- name: Get VM MAC address from Proxmox (not defined in vars)
|
||||||
|
when: vm_mac_address is not defined
|
||||||
|
block:
|
||||||
|
- name: Retrieve information about specific VM by name and get current configuration
|
||||||
|
delegate_to: "localhost"
|
||||||
|
community.proxmox.proxmox_vm_info:
|
||||||
|
api_user: "{{ proxmox_user }}"
|
||||||
|
api_password: "{{ proxmox_password }}"
|
||||||
|
api_host: "{{ proxmox_host }}"
|
||||||
|
name: "{{ inventory_hostname }}"
|
||||||
|
config: current
|
||||||
|
register: proxmox_vm_info
|
||||||
|
|
||||||
|
- name: Extract net0 information
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
vm_net0: "{{ proxmox_vm_info.proxmox_vms[0].config.net0 }}"
|
||||||
|
|
||||||
|
- name: Extract MAC address using regex
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
vm_mac_address: "{{ vm_net0 | regex_search('([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}') }}"
|
||||||
|
|
||||||
|
- name: Assign VM MAC address to IP address on Ubiquiti with Terraform
|
||||||
|
when: vm_mac_address is defined
|
||||||
|
delegate_to: "{{ groups['terraform_server'][0] }}"
|
||||||
|
block:
|
||||||
|
- name: Create a directory if it does not exist
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "~/homelab/terraform/unifi-dhcp"
|
||||||
|
state: directory
|
||||||
|
mode: '0755'
|
||||||
|
|
||||||
|
- name: Create Unifi provider file from template
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: templates/unifi_provider.tf.j2
|
||||||
|
dest: ~/homelab/terraform/unifi-dhcp/provider.tf
|
||||||
|
mode: '0644'
|
||||||
|
|
||||||
|
- name: Create Unifi user (host) file from template
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: templates/unifi-user.tf.j2
|
||||||
|
dest: ~/homelab/terraform/unifi-dhcp/{{ inventory_hostname }}.tf
|
||||||
|
mode: '0644'
|
||||||
|
|
||||||
|
- name: Configure Unifi via Terraform
|
||||||
|
community.general.terraform:
|
||||||
|
project_path: ~/homelab/terraform/unifi-dhcp
|
||||||
|
state: present
|
||||||
|
force_init: true
|
||||||
|
|
||||||
|
# - name: Add line to hosts file
|
||||||
|
# delegate_to: "{{ groups['dhcp_server'][0] }}"
|
||||||
|
# become: true
|
||||||
|
# ansible.builtin.lineinfile:
|
||||||
|
# path: /etc/dnsmasq.d/hosts.conf
|
||||||
|
# regexp: "# {{ inventory_hostname }}$"
|
||||||
|
# line: "dhcp-host={{ vm_mac_address | lower }},{{ ip_address }} # {{ inventory_hostname }}"
|
||||||
|
# state: present
|
||||||
|
# # restart dnsmasq service
|
||||||
|
# - name: Restart service dnsmasq
|
||||||
|
# delegate_to: "{{ groups['dhcp_server'][0] }}"
|
||||||
|
# become: true
|
||||||
|
# ansible.builtin.service:
|
||||||
|
# name: dnsmasq
|
||||||
|
# state: restarted
|
||||||
13
ansible/playbooks/add_dns_entry.yml
Executable file
13
ansible/playbooks/add_dns_entry.yml
Executable file
@@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
# Replacement for add_technitium_dns_entry.yml
|
||||||
|
# This playbook uses the modular task file approach
|
||||||
|
|
||||||
|
- name: Add DNS entry using Technitium DNS
|
||||||
|
hosts: all
|
||||||
|
gather_facts: false
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: Include Technitium DNS entry task
|
||||||
|
ansible.builtin.include_tasks: tasks/add_technitium_dns_entry.yml
|
||||||
|
vars:
|
||||||
|
host_name: "{{ inventory_hostname }}"
|
||||||
95
ansible/playbooks/add_service_route.yml
Normal file
95
ansible/playbooks/add_service_route.yml
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
---
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# FILE: playbooks/add_service_route.yml
|
||||||
|
# DESCRIPTION: Ensures all services in the Traefik dynamic config directory
|
||||||
|
# are routed and have DNS CNAME records on monorail.
|
||||||
|
#
|
||||||
|
# 1. Syncs boilerplates/traefik/dynamic/ to lightning-lane
|
||||||
|
# 2. Scans the directory for service configs
|
||||||
|
# 3. Extracts all hostnames from Host() rules (supports multi-host)
|
||||||
|
# 4. Creates CNAME records for each hostname -> lightning-lane
|
||||||
|
#
|
||||||
|
# PREREQUISITES:
|
||||||
|
# - Service dynamic config YAML committed to boilerplates/traefik/dynamic/
|
||||||
|
# - vault_technitium_api_key defined in group_vars/all/vault
|
||||||
|
#
|
||||||
|
# USAGE:
|
||||||
|
# ansible-playbook -i inventory.yml playbooks/add_service_route.yml
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
- name: Sync Traefik routes and ensure DNS records
|
||||||
|
hosts: localhost
|
||||||
|
connection: local
|
||||||
|
gather_facts: false
|
||||||
|
|
||||||
|
vars:
|
||||||
|
base_domain: "local.mk-labs.cloud"
|
||||||
|
dns_server: "monorail"
|
||||||
|
traefik_host: "lightning-lane.local.mk-labs.cloud"
|
||||||
|
traefik_user: "wed"
|
||||||
|
traefik_dynamic_path: "/opt/docker/traefik/dynamic/"
|
||||||
|
dynamic_config_dir: "{{ playbook_dir }}/../../boilerplates/traefik/dynamic"
|
||||||
|
|
||||||
|
# Files in the dynamic directory that are NOT service routes
|
||||||
|
exclude_configs:
|
||||||
|
- default.yml
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
# ── Step 1: Sync dynamic config to lightning-lane ──
|
||||||
|
- name: Sync Traefik dynamic configuration to lightning-lane
|
||||||
|
ansible.builtin.shell: >
|
||||||
|
rsync -av --delete
|
||||||
|
{{ dynamic_config_dir }}/
|
||||||
|
{{ traefik_user }}@{{ traefik_host }}:{{ traefik_dynamic_path }}
|
||||||
|
register: sync_result
|
||||||
|
changed_when: "'sending incremental file list' in sync_result.stdout"
|
||||||
|
|
||||||
|
# ── Step 2: Discover hostnames from Traefik router rules ──
|
||||||
|
- name: Find all dynamic config files
|
||||||
|
ansible.builtin.find:
|
||||||
|
paths: "{{ dynamic_config_dir }}"
|
||||||
|
patterns: "*.yml"
|
||||||
|
register: config_files
|
||||||
|
|
||||||
|
- name: Read config files
|
||||||
|
ansible.builtin.slurp:
|
||||||
|
src: "{{ item.path }}"
|
||||||
|
register: slurped_configs
|
||||||
|
loop: "{{ config_files.files }}"
|
||||||
|
when: item.path | basename not in exclude_configs
|
||||||
|
|
||||||
|
- name: Extract all hostnames from Host() rules
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
hostnames: >-
|
||||||
|
{% set hosts = [] -%}
|
||||||
|
{% for result in slurped_configs.results if result.content is defined -%}
|
||||||
|
{% set content = result.content | b64decode -%}
|
||||||
|
{% for match in content | regex_findall('Host\(`([^`]+)`\)') -%}
|
||||||
|
{% for h in match.split(' || ') -%}
|
||||||
|
{% set h = h | regex_replace('`', '') | trim -%}
|
||||||
|
{% if h.endswith('.local.mk-labs.cloud') and h not in hosts -%}
|
||||||
|
{% set _ = hosts.append(h) -%}
|
||||||
|
{% endif -%}
|
||||||
|
{% endfor -%}
|
||||||
|
{% endfor -%}
|
||||||
|
{% endfor -%}
|
||||||
|
{{ hosts | unique | list }}
|
||||||
|
|
||||||
|
- name: Display hostnames to create
|
||||||
|
ansible.builtin.debug:
|
||||||
|
msg: "Hostnames found: {{ hostnames }}"
|
||||||
|
|
||||||
|
# ── Step 3: Create DNS CNAME records ──
|
||||||
|
- name: Create DNS CNAME record for each hostname
|
||||||
|
effectivelywild.technitium_dns.technitium_dns_add_record:
|
||||||
|
api_url: "http://{{ dns_server }}.{{ base_domain }}"
|
||||||
|
api_token: "{{ vault_technitium_api_key }}"
|
||||||
|
zone: "{{ base_domain }}"
|
||||||
|
name: "{{ item }}"
|
||||||
|
type: "CNAME"
|
||||||
|
cname: "lightning-lane.{{ base_domain }}"
|
||||||
|
ttl: 360
|
||||||
|
validate_certs: false
|
||||||
|
loop: "{{ hostnames }}"
|
||||||
|
loop_control:
|
||||||
|
label: "{{ item }}"
|
||||||
18
ansible/playbooks/add_technitium_dns_entry.yml.backup
Executable file
18
ansible/playbooks/add_technitium_dns_entry.yml.backup
Executable file
@@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
- name: Add entry to Technitium DNS
|
||||||
|
hosts: all
|
||||||
|
gather_facts: false
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: "Create DNS entry for {{ inventory_hostname }}"
|
||||||
|
delegate_to: localhost
|
||||||
|
effectivelywild.technitium_dns.technitium_dns_add_record:
|
||||||
|
api_url: "http://{{ dns_server }}.{{ base_domain }}"
|
||||||
|
api_token: "{{ vault_technitium_api_key }}"
|
||||||
|
zone: "{{ base_domain }}"
|
||||||
|
name: "{{ inventory_hostname }}.{{ base_domain }}"
|
||||||
|
type: "A"
|
||||||
|
ipAddress: "{{ ip_address }}"
|
||||||
|
ptr: true
|
||||||
|
ttl: 360
|
||||||
|
# validate_certs: false
|
||||||
20
ansible/playbooks/configure_proxmox_oidc.yml
Normal file
20
ansible/playbooks/configure_proxmox_oidc.yml
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
# ansible/playbooks/configure_proxmox_oidc.yml
|
||||||
|
#
|
||||||
|
# Configures Proxmox OIDC authentication with Authentik.
|
||||||
|
# Only targets one node since realm config is cluster-wide.
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# cd ansible
|
||||||
|
# ansible-playbook -i inventory.yml playbooks/configure_proxmox_oidc.yml
|
||||||
|
#
|
||||||
|
# To also set up ACL entries for your user:
|
||||||
|
# ansible-playbook -i inventory.yml playbooks/configure_proxmox_oidc.yml \
|
||||||
|
# -e '{"proxmox_oidc_acl_entries": [{"path": "/", "user": "rblundon@authentik", "role": "Administrator"}]}'
|
||||||
|
|
||||||
|
- name: Configure Proxmox Authentik OIDC
|
||||||
|
hosts: main-street-usa
|
||||||
|
become: true
|
||||||
|
roles:
|
||||||
|
- role: proxmox
|
||||||
|
tags: [proxmox-oidc]
|
||||||
37
ansible/playbooks/configure_unbound.yml
Executable file
37
ansible/playbooks/configure_unbound.yml
Executable file
@@ -0,0 +1,37 @@
|
|||||||
|
---
|
||||||
|
- name: Master playbook to install and configure unbound
|
||||||
|
hosts: unbound_servers
|
||||||
|
become: true
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: Permit traffic in default zone for dns service
|
||||||
|
ansible.posix.firewalld:
|
||||||
|
service: dns
|
||||||
|
permanent: true
|
||||||
|
immediate: true
|
||||||
|
state: enabled
|
||||||
|
|
||||||
|
- name: Create the directory
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: /etc/systemd/resolved.conf.d
|
||||||
|
state: directory
|
||||||
|
mode: '0755'
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
|
||||||
|
- name: Put `unbound.conf` in the correct place
|
||||||
|
ansible.builtin.copy:
|
||||||
|
src: ../roles/common/files/unbound.conf
|
||||||
|
dest: /etc/systemd/resolved.conf.d/unbound.conf
|
||||||
|
mode: '0644'
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
|
||||||
|
- name: Restart service systemd-resolved
|
||||||
|
ansible.builtin.service:
|
||||||
|
name: systemd-resolved
|
||||||
|
state: restarted
|
||||||
|
|
||||||
|
- name: Install unbound via role
|
||||||
|
ansible.builtin.import_role:
|
||||||
|
name: Anthony25.unbound
|
||||||
23
ansible/playbooks/create_vm.yml
Executable file
23
ansible/playbooks/create_vm.yml
Executable file
@@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
- name: Master playbook to create VM
|
||||||
|
hosts: all
|
||||||
|
gather_facts: false
|
||||||
|
|
||||||
|
- name: Proxmox Create VM Playbook
|
||||||
|
ansible.builtin.import_playbook: proxmox_create_vm.yml
|
||||||
|
|
||||||
|
- name: Set cloud-init network
|
||||||
|
ansible.builtin.import_playbook: populate_cloud_init.yml
|
||||||
|
when: vm_os_distribution == "ubuntu"
|
||||||
|
|
||||||
|
- name: DNS Playbook
|
||||||
|
ansible.builtin.import_playbook: add_dns_entry.yml
|
||||||
|
|
||||||
|
- name: DHCP Playbook
|
||||||
|
ansible.builtin.import_playbook: add_dhcp_reservation.yml
|
||||||
|
|
||||||
|
- name: Start VM Playbook
|
||||||
|
ansible.builtin.import_playbook: proxmox_start_vm.yml
|
||||||
|
|
||||||
|
- name: Set Hostname Playbook
|
||||||
|
ansible.builtin.import_playbook: set_hostname.yml
|
||||||
6
infra-config/playbooks/create_vm_from_clone.yml → ansible/playbooks/create_vm_from_clone.yml
Normal file → Executable file
6
infra-config/playbooks/create_vm_from_clone.yml → ansible/playbooks/create_vm_from_clone.yml
Normal file → Executable file
@@ -6,11 +6,15 @@
|
|||||||
- name: Proxmox Clone VM Playbook
|
- name: Proxmox Clone VM Playbook
|
||||||
ansible.builtin.import_playbook: proxmox_clone_vm.yml
|
ansible.builtin.import_playbook: proxmox_clone_vm.yml
|
||||||
|
|
||||||
|
- name: Set cloud-init network
|
||||||
|
ansible.builtin.import_playbook: populate_cloud_init.yml
|
||||||
|
when: vm_os_distribution == "ubuntu"
|
||||||
|
|
||||||
- name: DNS Playbook
|
- name: DNS Playbook
|
||||||
ansible.builtin.import_playbook: add_dns_entry.yml
|
ansible.builtin.import_playbook: add_dns_entry.yml
|
||||||
|
|
||||||
- name: DHCP Playbook
|
- name: DHCP Playbook
|
||||||
ansible.builtin.import_playbook: add_dhcp_entry.yml
|
ansible.builtin.import_playbook: add_dhcp_reservation.yml
|
||||||
|
|
||||||
- name: Start VM Playbook
|
- name: Start VM Playbook
|
||||||
ansible.builtin.import_playbook: proxmox_start_vm.yml
|
ansible.builtin.import_playbook: proxmox_start_vm.yml
|
||||||
6
ansible/playbooks/day0_baseline.yml
Normal file
6
ansible/playbooks/day0_baseline.yml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
- name: Apply day0 baseline
|
||||||
|
hosts: "{{ target | default('all') }}"
|
||||||
|
become: true
|
||||||
|
roles:
|
||||||
|
- day0-baseline
|
||||||
32
ansible/playbooks/day0_expand_root_lv.yml
Normal file
32
ansible/playbooks/day0_expand_root_lv.yml
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
---
|
||||||
|
# ============================================================================
|
||||||
|
# day0_expand_root_lv.yml
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Reclaims unallocated PE on the root volume group, extending the root LV
|
||||||
|
# to fill the VG and resizing the underlying filesystem (ext4 or xfs).
|
||||||
|
#
|
||||||
|
# Belongs to the day0 host-provisioning lifecycle. The Ubuntu Server
|
||||||
|
# autoinstall template ships with the root LV at ~half the disk size by
|
||||||
|
# default; this playbook is the canonical one-shot fix-up for that.
|
||||||
|
#
|
||||||
|
# Idempotent and safe to re-run. Hosts without LVM are no-op'd cleanly.
|
||||||
|
#
|
||||||
|
# Opt-out: set `expand_root_lv_skip: true` in host_vars/<host>.yml for
|
||||||
|
# hosts where free PE should NOT be claimed by root (e.g. hosts with a
|
||||||
|
# planned second LV in the same VG for application data).
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# ansible-playbook playbooks/day0_expand_root_lv.yml
|
||||||
|
# ansible-playbook playbooks/day0_expand_root_lv.yml -e target=lincoln
|
||||||
|
# ansible-playbook playbooks/day0_expand_root_lv.yml -e target=honcho_server
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
- name: Expand root logical volume to fill VG
|
||||||
|
hosts: "{{ target | default('all') }}"
|
||||||
|
become: true
|
||||||
|
gather_facts: true
|
||||||
|
tasks:
|
||||||
|
- name: Apply expand_root_lv role unless host opts out
|
||||||
|
ansible.builtin.include_role:
|
||||||
|
name: expand_root_lv
|
||||||
|
when: not (expand_root_lv_skip | default(false) | bool)
|
||||||
23
ansible/playbooks/day0_linux_baseline.yml
Normal file
23
ansible/playbooks/day0_linux_baseline.yml
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
# ============================================================================
|
||||||
|
# day0_linux_baseline.yml
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Applies the mk-labs Linux baseline (linux-baseline role) to one or more
|
||||||
|
# hosts. Idempotent and safe to re-run.
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# ansible-playbook playbooks/day0_linux_baseline.yml
|
||||||
|
# ansible-playbook playbooks/day0_linux_baseline.yml -e target=figment
|
||||||
|
# ansible-playbook playbooks/day0_linux_baseline.yml -e target=semaphore_server
|
||||||
|
#
|
||||||
|
# To trigger an opt-in full system upgrade:
|
||||||
|
# ansible-playbook playbooks/day0_linux_baseline.yml \
|
||||||
|
# -e target=figment -e 'baseline_features={"full_upgrade": true}'
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
- name: Apply mk-labs Linux baseline
|
||||||
|
hosts: "{{ target | default('all') }}"
|
||||||
|
become: true
|
||||||
|
gather_facts: true
|
||||||
|
roles:
|
||||||
|
- linux-baseline
|
||||||
30
ansible/playbooks/day0_provision.yml
Normal file
30
ansible/playbooks/day0_provision.yml
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
---
|
||||||
|
# ============================================================================
|
||||||
|
# day0_provision.yml
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Umbrella day0 playbook. Runs the full host-provisioning lifecycle in
|
||||||
|
# the correct order against newly-built VMs, so the operator runs ONE
|
||||||
|
# command per new host rather than chaining day0 steps manually.
|
||||||
|
#
|
||||||
|
# Order matters:
|
||||||
|
# 1. linux-baseline — timezone, NTP, packages, SSH hardening, jarvis user
|
||||||
|
# 2. expand_root_lv — reclaim PE left unallocated by the Ubuntu
|
||||||
|
# autoinstall template default
|
||||||
|
#
|
||||||
|
# Idempotent: every step is safe to re-run. Suitable to apply periodically
|
||||||
|
# from Semaphore as a baseline-drift check.
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# ansible-playbook playbooks/day0_provision.yml -e target=lincoln
|
||||||
|
# ansible-playbook playbooks/day0_provision.yml -e target=honcho_server
|
||||||
|
#
|
||||||
|
# For finer control over a single phase, the constituent playbooks are:
|
||||||
|
# playbooks/day0_linux_baseline.yml
|
||||||
|
# playbooks/day0_expand_root_lv.yml
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
- name: Import day0 linux baseline
|
||||||
|
ansible.builtin.import_playbook: day0_linux_baseline.yml
|
||||||
|
|
||||||
|
- name: Import day0 expand root LV
|
||||||
|
ansible.builtin.import_playbook: day0_expand_root_lv.yml
|
||||||
400
ansible/playbooks/day1_configure_netbox_catalog.yml
Normal file
400
ansible/playbooks/day1_configure_netbox_catalog.yml
Normal file
@@ -0,0 +1,400 @@
|
|||||||
|
---
|
||||||
|
# ansible/playbooks/day1_configure_netbox_catalog.yml
|
||||||
|
#
|
||||||
|
# Creates the tag taxonomy and custom fields in NetBox for service catalog
|
||||||
|
# documentation. Run once (idempotent — uses name-based checks).
|
||||||
|
#
|
||||||
|
# Usage (from ansible/ directory):
|
||||||
|
# ansible-playbook playbooks/day1_configure_netbox_catalog.yml
|
||||||
|
#
|
||||||
|
# Requires:
|
||||||
|
# - vault_netbox_token in Ansible Vault
|
||||||
|
# - netbox reachable at http://fire-station.local.mk-labs.cloud
|
||||||
|
|
||||||
|
- name: Configure NetBox service catalog taxonomy
|
||||||
|
hosts: localhost
|
||||||
|
gather_facts: false
|
||||||
|
|
||||||
|
vars_files:
|
||||||
|
- "{{ playbook_dir }}/../group_vars/all/vault"
|
||||||
|
|
||||||
|
vars:
|
||||||
|
netbox_url: "http://fire-station.local.mk-labs.cloud"
|
||||||
|
netbox_token: "{{ vault_netbox_token }}"
|
||||||
|
netbox_api: "{{ netbox_url }}/api"
|
||||||
|
headers:
|
||||||
|
Authorization: "Token {{ netbox_token }}"
|
||||||
|
Content-Type: "application/json"
|
||||||
|
Accept: "application/json"
|
||||||
|
|
||||||
|
# ── Tag definitions ───────────────────────────────────────────────────
|
||||||
|
tags:
|
||||||
|
# Infrastructure type
|
||||||
|
- name: k8s
|
||||||
|
slug: k8s
|
||||||
|
color: "2196f3" # blue
|
||||||
|
description: "Workload running in the fastpass Kubernetes cluster"
|
||||||
|
- name: vm
|
||||||
|
slug: vm
|
||||||
|
color: "4caf50" # green
|
||||||
|
description: "Traditional VM or LXC on Proxmox"
|
||||||
|
# Service tier
|
||||||
|
- name: platform
|
||||||
|
slug: platform
|
||||||
|
color: "9c27b0" # purple
|
||||||
|
description: "Platform/infrastructure service (not user-facing)"
|
||||||
|
- name: application
|
||||||
|
slug: application
|
||||||
|
color: "ff9800" # orange
|
||||||
|
description: "User-facing application workload"
|
||||||
|
# Service categories
|
||||||
|
- name: monitoring
|
||||||
|
slug: monitoring
|
||||||
|
color: "607d8b" # grey
|
||||||
|
description: "Metrics, logging, alerting"
|
||||||
|
- name: auth
|
||||||
|
slug: auth
|
||||||
|
color: "607d8b"
|
||||||
|
description: "Authentication and SSO"
|
||||||
|
- name: gitops
|
||||||
|
slug: gitops
|
||||||
|
color: "607d8b"
|
||||||
|
description: "GitOps and CI/CD"
|
||||||
|
- name: dashboard
|
||||||
|
slug: dashboard
|
||||||
|
color: "607d8b"
|
||||||
|
description: "Dashboard and portal services"
|
||||||
|
- name: storage
|
||||||
|
slug: storage
|
||||||
|
color: "607d8b"
|
||||||
|
description: "Storage and file services"
|
||||||
|
- name: dns
|
||||||
|
slug: dns
|
||||||
|
color: "607d8b"
|
||||||
|
description: "DNS and name resolution"
|
||||||
|
- name: automation
|
||||||
|
slug: automation
|
||||||
|
color: "607d8b"
|
||||||
|
description: "Automation and orchestration"
|
||||||
|
- name: networking
|
||||||
|
slug: networking
|
||||||
|
color: "607d8b"
|
||||||
|
description: "Network infrastructure services"
|
||||||
|
- name: inference
|
||||||
|
slug: inference
|
||||||
|
color: "607d8b"
|
||||||
|
description: "AI/ML inference workloads"
|
||||||
|
|
||||||
|
# ── Custom field definitions ──────────────────────────────────────────
|
||||||
|
# object_types use app_label.model format
|
||||||
|
custom_fields:
|
||||||
|
- name: hostnames
|
||||||
|
label: Hostnames
|
||||||
|
type: longtext
|
||||||
|
object_types:
|
||||||
|
- ipam.ipaddress
|
||||||
|
- virtualization.virtualmachine
|
||||||
|
description: "All DNS names that resolve to this service (comma-separated)"
|
||||||
|
ui_visible: always
|
||||||
|
ui_editable: yes
|
||||||
|
|
||||||
|
- name: namespace
|
||||||
|
label: Namespace
|
||||||
|
type: text
|
||||||
|
object_types:
|
||||||
|
- ipam.ipaddress
|
||||||
|
- virtualization.virtualmachine
|
||||||
|
description: "Kubernetes namespace (blank for VM-based services)"
|
||||||
|
ui_visible: always
|
||||||
|
ui_editable: yes
|
||||||
|
|
||||||
|
- name: managed_by
|
||||||
|
label: Managed By
|
||||||
|
type: select
|
||||||
|
object_types:
|
||||||
|
- ipam.ipaddress
|
||||||
|
- virtualization.virtualmachine
|
||||||
|
description: "How this service is managed"
|
||||||
|
choices:
|
||||||
|
- ArgoCD
|
||||||
|
- Ansible
|
||||||
|
- Manual
|
||||||
|
ui_visible: always
|
||||||
|
ui_editable: yes
|
||||||
|
|
||||||
|
- name: thematic_name
|
||||||
|
label: Thematic Name
|
||||||
|
type: text
|
||||||
|
object_types:
|
||||||
|
- ipam.ipaddress
|
||||||
|
- virtualization.virtualmachine
|
||||||
|
description: "Disney/Magic Kingdom thematic hostname for this service"
|
||||||
|
ui_visible: always
|
||||||
|
ui_editable: yes
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
|
||||||
|
# ── Tags ─────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
- name: Fetch existing tags
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "{{ netbox_api }}/extras/tags/?limit=200"
|
||||||
|
method: GET
|
||||||
|
headers: "{{ headers }}"
|
||||||
|
return_content: true
|
||||||
|
status_code: 200
|
||||||
|
register: existing_tags_response
|
||||||
|
|
||||||
|
- name: Set existing tag slugs fact
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
existing_tag_slugs: "{{ existing_tags_response.json.results | map(attribute='slug') | list }}"
|
||||||
|
|
||||||
|
- name: Create tags
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "{{ netbox_api }}/extras/tags/"
|
||||||
|
method: POST
|
||||||
|
headers: "{{ headers }}"
|
||||||
|
body_format: json
|
||||||
|
body:
|
||||||
|
name: "{{ item.name }}"
|
||||||
|
slug: "{{ item.slug }}"
|
||||||
|
color: "{{ item.color }}"
|
||||||
|
description: "{{ item.description }}"
|
||||||
|
status_code: 201
|
||||||
|
loop: "{{ tags }}"
|
||||||
|
when: item.slug not in existing_tag_slugs
|
||||||
|
register: tag_creation
|
||||||
|
changed_when: tag_creation.status == 201
|
||||||
|
|
||||||
|
# ── Custom Fields ─────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
- name: Fetch existing custom fields
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "{{ netbox_api }}/extras/custom-fields/?limit=200"
|
||||||
|
method: GET
|
||||||
|
headers: "{{ headers }}"
|
||||||
|
return_content: true
|
||||||
|
status_code: 200
|
||||||
|
register: existing_cf_response
|
||||||
|
|
||||||
|
- name: Set existing custom field names fact
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
existing_cf_names: "{{ existing_cf_response.json.results | map(attribute='name') | list }}"
|
||||||
|
|
||||||
|
- name: Create custom field — hostnames
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "{{ netbox_api }}/extras/custom-fields/"
|
||||||
|
method: POST
|
||||||
|
headers: "{{ headers }}"
|
||||||
|
body_format: json
|
||||||
|
body:
|
||||||
|
name: hostnames
|
||||||
|
label: Hostnames
|
||||||
|
type: longtext
|
||||||
|
object_types: "{{ custom_fields[0].object_types }}"
|
||||||
|
description: "{{ custom_fields[0].description }}"
|
||||||
|
ui_visible: always
|
||||||
|
ui_editable: yes
|
||||||
|
status_code: 201
|
||||||
|
when: "'hostnames' not in existing_cf_names"
|
||||||
|
register: cf_hostnames
|
||||||
|
changed_when: cf_hostnames.status == 201
|
||||||
|
|
||||||
|
- name: Create custom field — namespace
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "{{ netbox_api }}/extras/custom-fields/"
|
||||||
|
method: POST
|
||||||
|
headers: "{{ headers }}"
|
||||||
|
body_format: json
|
||||||
|
body:
|
||||||
|
name: namespace
|
||||||
|
label: Namespace
|
||||||
|
type: text
|
||||||
|
object_types: "{{ custom_fields[1].object_types }}"
|
||||||
|
description: "{{ custom_fields[1].description }}"
|
||||||
|
ui_visible: always
|
||||||
|
ui_editable: yes
|
||||||
|
status_code: 201
|
||||||
|
when: "'namespace' not in existing_cf_names"
|
||||||
|
register: cf_namespace
|
||||||
|
changed_when: cf_namespace.status == 201
|
||||||
|
|
||||||
|
- name: Create choice set for managed_by field
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "{{ netbox_api }}/extras/custom-field-choice-sets/"
|
||||||
|
method: POST
|
||||||
|
headers: "{{ headers }}"
|
||||||
|
body_format: json
|
||||||
|
body:
|
||||||
|
name: managed-by-choices
|
||||||
|
extra_choices:
|
||||||
|
- - ArgoCD
|
||||||
|
- ArgoCD
|
||||||
|
- - Ansible
|
||||||
|
- Ansible
|
||||||
|
- - Manual
|
||||||
|
- Manual
|
||||||
|
status_code: [201, 400]
|
||||||
|
register: choice_set
|
||||||
|
changed_when: choice_set.status == 201
|
||||||
|
|
||||||
|
- name: Fetch choice set ID
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "{{ netbox_api }}/extras/custom-field-choice-sets/?name=managed-by-choices"
|
||||||
|
method: GET
|
||||||
|
headers: "{{ headers }}"
|
||||||
|
return_content: true
|
||||||
|
status_code: 200
|
||||||
|
register: choice_set_response
|
||||||
|
|
||||||
|
- name: Create custom field — managed_by
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "{{ netbox_api }}/extras/custom-fields/"
|
||||||
|
method: POST
|
||||||
|
headers: "{{ headers }}"
|
||||||
|
body_format: json
|
||||||
|
body:
|
||||||
|
name: managed_by
|
||||||
|
label: Managed By
|
||||||
|
type: select
|
||||||
|
object_types: "{{ custom_fields[2].object_types }}"
|
||||||
|
description: "{{ custom_fields[2].description }}"
|
||||||
|
choice_set: "{{ choice_set_response.json.results[0].id }}"
|
||||||
|
ui_visible: always
|
||||||
|
ui_editable: yes
|
||||||
|
status_code: 201
|
||||||
|
when: "'managed_by' not in existing_cf_names"
|
||||||
|
register: cf_managed_by
|
||||||
|
changed_when: cf_managed_by.status == 201
|
||||||
|
|
||||||
|
- name: Create custom field — thematic_name
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "{{ netbox_api }}/extras/custom-fields/"
|
||||||
|
method: POST
|
||||||
|
headers: "{{ headers }}"
|
||||||
|
body_format: json
|
||||||
|
body:
|
||||||
|
name: thematic_name
|
||||||
|
label: Thematic Name
|
||||||
|
type: text
|
||||||
|
object_types: "{{ custom_fields[3].object_types }}"
|
||||||
|
description: "{{ custom_fields[3].description }}"
|
||||||
|
ui_visible: always
|
||||||
|
ui_editable: yes
|
||||||
|
status_code: 201
|
||||||
|
when: "'thematic_name' not in existing_cf_names"
|
||||||
|
register: cf_thematic_name
|
||||||
|
changed_when: cf_thematic_name.status == 201
|
||||||
|
|
||||||
|
# ── Provisioning Pipeline Fields ──────────────────────────────────────
|
||||||
|
# These fields drive the NetBox → n8n → Terraform pipeline.
|
||||||
|
# proxmox_datastore already exists — PATCH it to add utilidor choice.
|
||||||
|
# data_disk_enabled and data_disk_size_gb are new POSTs.
|
||||||
|
|
||||||
|
- name: Fetch proxmox_datastore field ID
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "{{ netbox_api }}/extras/custom-fields/?name=proxmox_datastore"
|
||||||
|
method: GET
|
||||||
|
headers: "{{ headers }}"
|
||||||
|
return_content: true
|
||||||
|
status_code: 200
|
||||||
|
register: proxmox_datastore_cf_response
|
||||||
|
|
||||||
|
- name: Fetch proxmox-datastore-choices choice set ID
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "{{ netbox_api }}/extras/custom-field-choice-sets/?name=proxmox-datastore-choices"
|
||||||
|
method: GET
|
||||||
|
headers: "{{ headers }}"
|
||||||
|
return_content: true
|
||||||
|
status_code: 200
|
||||||
|
register: datastore_choice_set_response
|
||||||
|
|
||||||
|
- name: Create proxmox-datastore-choices choice set if missing
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "{{ netbox_api }}/extras/custom-field-choice-sets/"
|
||||||
|
method: POST
|
||||||
|
headers: "{{ headers }}"
|
||||||
|
body_format: json
|
||||||
|
body:
|
||||||
|
name: proxmox-datastore-choices
|
||||||
|
extra_choices:
|
||||||
|
- - liberty-tree
|
||||||
|
- liberty-tree
|
||||||
|
- - utilidor
|
||||||
|
- utilidor
|
||||||
|
status_code: [201, 400]
|
||||||
|
register: datastore_choice_set_create
|
||||||
|
changed_when: datastore_choice_set_create.status == 201
|
||||||
|
when: datastore_choice_set_response.json.count == 0
|
||||||
|
|
||||||
|
- name: Re-fetch proxmox-datastore-choices choice set ID after possible creation
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "{{ netbox_api }}/extras/custom-field-choice-sets/?name=proxmox-datastore-choices"
|
||||||
|
method: GET
|
||||||
|
headers: "{{ headers }}"
|
||||||
|
return_content: true
|
||||||
|
status_code: 200
|
||||||
|
register: datastore_choice_set_response
|
||||||
|
|
||||||
|
- name: Patch proxmox_datastore field to use choice set with utilidor
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "{{ netbox_api }}/extras/custom-fields/{{ proxmox_datastore_cf_response.json.results[0].id }}/"
|
||||||
|
method: PATCH
|
||||||
|
headers: "{{ headers }}"
|
||||||
|
body_format: json
|
||||||
|
body:
|
||||||
|
choice_set: "{{ datastore_choice_set_response.json.results[0].id }}"
|
||||||
|
status_code: 200
|
||||||
|
when: proxmox_datastore_cf_response.json.count > 0
|
||||||
|
register: cf_datastore_patch
|
||||||
|
changed_when: cf_datastore_patch.status == 200
|
||||||
|
|
||||||
|
- name: Create custom field — data_disk_enabled
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "{{ netbox_api }}/extras/custom-fields/"
|
||||||
|
method: POST
|
||||||
|
headers: "{{ headers }}"
|
||||||
|
body_format: json
|
||||||
|
body:
|
||||||
|
name: data_disk_enabled
|
||||||
|
label: Data Disk Enabled
|
||||||
|
type: boolean
|
||||||
|
object_types:
|
||||||
|
- virtualization.virtualmachine
|
||||||
|
description: "When true, Terraform provisions a second disk for application data storage."
|
||||||
|
default: false
|
||||||
|
ui_visible: always
|
||||||
|
ui_editable: yes
|
||||||
|
status_code: 201
|
||||||
|
when: "'data_disk_enabled' not in existing_cf_names"
|
||||||
|
register: cf_data_disk_enabled
|
||||||
|
changed_when: cf_data_disk_enabled.status == 201
|
||||||
|
|
||||||
|
- name: Create custom field — data_disk_size_gb
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "{{ netbox_api }}/extras/custom-fields/"
|
||||||
|
method: POST
|
||||||
|
headers: "{{ headers }}"
|
||||||
|
body_format: json
|
||||||
|
body:
|
||||||
|
name: data_disk_size_gb
|
||||||
|
label: Data Disk Size (GB)
|
||||||
|
type: integer
|
||||||
|
object_types:
|
||||||
|
- virtualization.virtualmachine
|
||||||
|
description: "Size in GB for the optional second data disk. Only used when data_disk_enabled is true."
|
||||||
|
ui_visible: always
|
||||||
|
ui_editable: yes
|
||||||
|
status_code: 201
|
||||||
|
when: "'data_disk_size_gb' not in existing_cf_names"
|
||||||
|
register: cf_data_disk_size
|
||||||
|
changed_when: cf_data_disk_size.status == 201
|
||||||
|
|
||||||
|
# ── Summary ───────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
- name: Summary
|
||||||
|
ansible.builtin.debug:
|
||||||
|
msg:
|
||||||
|
- "Tags created: {{ tag_creation.results | selectattr('status', 'equalto', 201) | list | length }}"
|
||||||
|
- "Tags skipped (already exist): {{ tag_creation.results | selectattr('skipped', 'defined') | list | length }}"
|
||||||
|
- "Custom fields configured: hostnames, namespace, managed_by, thematic_name, proxmox_datastore (patched), data_disk_enabled, data_disk_size_gb"
|
||||||
18
ansible/playbooks/day1_deploy_authentik.yml
Normal file
18
ansible/playbooks/day1_deploy_authentik.yml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# FILE: playbooks/deploy_authentik.yml
|
||||||
|
# DESCRIPTION: Deploys Authentik identity provider on guest-relations.
|
||||||
|
# Installs Docker and configures Authentik with PostgreSQL and Redis.
|
||||||
|
#
|
||||||
|
# USAGE:
|
||||||
|
# ansible-playbook -i inventory.yml playbooks/deploy_authentik.yml
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
- name: Deploy Authentik identity provider
|
||||||
|
hosts: authentik_server
|
||||||
|
become: true
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- common
|
||||||
|
- docker-host
|
||||||
|
- authentik
|
||||||
23
ansible/playbooks/day1_deploy_gitea.yml
Normal file
23
ansible/playbooks/day1_deploy_gitea.yml
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# FILE: ansible/playbooks/day1_deploy_gitea.yml
|
||||||
|
# DESCRIPTION: Deploys Gitea + PostgreSQL on mad-tea-party (10.1.71.129)
|
||||||
|
# Role chain: common → docker-host → gitea
|
||||||
|
#
|
||||||
|
# USAGE:
|
||||||
|
# ansible-playbook -i ansible/inventory.yml ansible/playbooks/day1_deploy_gitea.yml
|
||||||
|
#
|
||||||
|
# SECRETS REQUIRED IN VAULT (group_vars/all/vault):
|
||||||
|
# vault_gitea_db_password
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
- name: Deploy Gitea on mad-tea-party
|
||||||
|
hosts: gitea_servers
|
||||||
|
become: true
|
||||||
|
|
||||||
|
vars:
|
||||||
|
gitea_db_password: "{{ vault_gitea_db_password }}"
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- role: docker-host
|
||||||
|
- role: gitea
|
||||||
79
ansible/playbooks/day1_deploy_hermes.yml
Normal file
79
ansible/playbooks/day1_deploy_hermes.yml
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
---
|
||||||
|
# =============================================================================
|
||||||
|
# day1_deploy_hermes.yml
|
||||||
|
# Deploy Hermes Agent (Nous Research) on carousel-of-progress (10.1.71.131)
|
||||||
|
#
|
||||||
|
# FIRST-RUN WORKFLOW:
|
||||||
|
# 1. Run this playbook:
|
||||||
|
# ansible-playbook playbooks/day1_deploy_hermes.yml
|
||||||
|
#
|
||||||
|
# 2. SSH to the host and run the setup wizard as the hermes user:
|
||||||
|
# ssh wed@carousel-of-progress.local.mk-labs.cloud
|
||||||
|
# sudo -u hermes hermes setup
|
||||||
|
#
|
||||||
|
# 3. Once configured, start and verify the service:
|
||||||
|
# sudo systemctl start hermes
|
||||||
|
# sudo systemctl status hermes
|
||||||
|
# sudo journalctl -u hermes -f
|
||||||
|
#
|
||||||
|
# VARIABLES:
|
||||||
|
# hermes_skip_browser: true — set to skip Playwright/Chromium install
|
||||||
|
# (saves ~300MB if browser automation not needed)
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
- name: Deploy Hermes Agent on carousel-of-progress
|
||||||
|
hosts: carousel-of-progress
|
||||||
|
gather_facts: true
|
||||||
|
|
||||||
|
pre_tasks:
|
||||||
|
- name: Verify target is carousel-of-progress
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- inventory_hostname == "carousel-of-progress"
|
||||||
|
fail_msg: >
|
||||||
|
This playbook is scoped to carousel-of-progress only.
|
||||||
|
Got: {{ inventory_hostname }}
|
||||||
|
|
||||||
|
- name: Confirm OS is Ubuntu
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- ansible_distribution == "Ubuntu"
|
||||||
|
fail_msg: >
|
||||||
|
This playbook requires Ubuntu. Found: {{ ansible_distribution }}.
|
||||||
|
(If running Fedora, swap apt tasks for dnf and adjust Playwright deps.)
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- role: hermes
|
||||||
|
vars:
|
||||||
|
hermes_skip_browser: false # set true to skip Chromium install
|
||||||
|
|
||||||
|
post_tasks:
|
||||||
|
- name: Verify hermes binary is accessible system-wide
|
||||||
|
ansible.builtin.command: hermes --version
|
||||||
|
register: hermes_version_check
|
||||||
|
changed_when: false
|
||||||
|
failed_when: hermes_version_check.rc != 0
|
||||||
|
|
||||||
|
- name: Print hermes version
|
||||||
|
ansible.builtin.debug:
|
||||||
|
msg: "{{ hermes_version_check.stdout }}"
|
||||||
|
|
||||||
|
- name: Print post-install instructions
|
||||||
|
ansible.builtin.debug:
|
||||||
|
msg:
|
||||||
|
- "============================================================"
|
||||||
|
- "Hermes installed on carousel-of-progress (10.1.71.131)"
|
||||||
|
- "============================================================"
|
||||||
|
- "Next steps:"
|
||||||
|
- " 1. SSH to the host:"
|
||||||
|
- " ssh wed@carousel-of-progress.local.mk-labs.cloud"
|
||||||
|
- " 2. Run the setup wizard as the hermes user:"
|
||||||
|
- " sudo -u hermes hermes setup"
|
||||||
|
- " 3. After config, start the service:"
|
||||||
|
- " sudo systemctl start hermes"
|
||||||
|
- " 4. Verify:"
|
||||||
|
- " sudo systemctl status hermes"
|
||||||
|
- " sudo journalctl -u hermes -f"
|
||||||
|
- "============================================================"
|
||||||
|
- "Service is ENABLED but NOT STARTED — config required first."
|
||||||
|
- "============================================================"
|
||||||
18
ansible/playbooks/day1_deploy_honcho.yml
Normal file
18
ansible/playbooks/day1_deploy_honcho.yml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
# ============================================================================
|
||||||
|
# day1_deploy_honcho.yml
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Deploys Honcho + pgvector PostgreSQL on the `lincoln` host. Assumes day0
|
||||||
|
# host provisioning (linux-baseline + expand_root_lv) is already complete.
|
||||||
|
#
|
||||||
|
# Run via:
|
||||||
|
# ansible-playbook -i inventory.yml playbooks/day0_provision.yml -e target=lincoln
|
||||||
|
# ansible-playbook -i inventory.yml playbooks/day1_deploy_honcho.yml
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
- name: Deploy Honcho on lincoln
|
||||||
|
hosts: honcho_server
|
||||||
|
become: true
|
||||||
|
gather_facts: true
|
||||||
|
roles:
|
||||||
|
- honcho
|
||||||
91
ansible/playbooks/day1_deploy_nextcloud.yml
Normal file
91
ansible/playbooks/day1_deploy_nextcloud.yml
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
---
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# FILE: playbooks/day1_deploy_nextcloud.yml
|
||||||
|
# DESCRIPTION: Deploys Nextcloud on the-grid
|
||||||
|
# Runs: docker-host → nextcloud
|
||||||
|
#
|
||||||
|
# USAGE:
|
||||||
|
# ansible-playbook -i inventory.yml playbooks/day1_deploy_nextcloud.yml
|
||||||
|
# ansible-playbook -i inventory.yml playbooks/day1_deploy_nextcloud.yml --limit the-grid
|
||||||
|
#
|
||||||
|
# SECRETS REQUIRED IN VAULT (group_vars/all/vault):
|
||||||
|
# vault_nextcloud_db_root_password
|
||||||
|
# vault_nextcloud_db_password
|
||||||
|
# vault_nextcloud_admin_user
|
||||||
|
# vault_nextcloud_admin_password
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
- name: Deploy Nextcloud on the-grid
|
||||||
|
hosts: the-grid
|
||||||
|
become: true
|
||||||
|
|
||||||
|
vars:
|
||||||
|
# NFS prerequisite
|
||||||
|
nfs_packages:
|
||||||
|
- nfs-common
|
||||||
|
|
||||||
|
# Compose stack location
|
||||||
|
nextcloud_base_dir: /opt/docker/nextcloud
|
||||||
|
|
||||||
|
# Secrets from vault
|
||||||
|
nextcloud_db_root_password: "{{ vault_nextcloud_db_root_password }}"
|
||||||
|
nextcloud_db_password: "{{ vault_nextcloud_db_password }}"
|
||||||
|
nextcloud_admin_user: "{{ vault_nextcloud_admin_user }}"
|
||||||
|
nextcloud_admin_password: "{{ vault_nextcloud_admin_password }}"
|
||||||
|
|
||||||
|
pre_tasks:
|
||||||
|
- name: Install NFS client
|
||||||
|
ansible.builtin.apt:
|
||||||
|
name: "{{ nfs_packages }}"
|
||||||
|
state: present
|
||||||
|
update_cache: true
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- role: docker-host
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: Create Nextcloud directory
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "{{ nextcloud_base_dir }}"
|
||||||
|
state: directory
|
||||||
|
owner: "{{ ansible_user }}"
|
||||||
|
group: docker
|
||||||
|
mode: "0775"
|
||||||
|
|
||||||
|
- name: Deploy Compose file
|
||||||
|
ansible.builtin.copy:
|
||||||
|
src: "{{ playbook_dir }}/../../boilerplates/nextcloud/compose.yml"
|
||||||
|
dest: "{{ nextcloud_base_dir }}/compose.yml"
|
||||||
|
owner: "{{ ansible_user }}"
|
||||||
|
group: docker
|
||||||
|
mode: "0644"
|
||||||
|
|
||||||
|
- name: Deploy .env from vault
|
||||||
|
ansible.builtin.copy:
|
||||||
|
content: |
|
||||||
|
# Managed by Ansible — do not edit manually
|
||||||
|
MYSQL_ROOT_PASSWORD={{ nextcloud_db_root_password }}
|
||||||
|
MYSQL_PASSWORD={{ nextcloud_db_password }}
|
||||||
|
NEXTCLOUD_ADMIN_USER={{ nextcloud_admin_user }}
|
||||||
|
NEXTCLOUD_ADMIN_PASSWORD={{ nextcloud_admin_password }}
|
||||||
|
dest: "{{ nextcloud_base_dir }}/.env"
|
||||||
|
owner: "{{ ansible_user }}"
|
||||||
|
group: docker
|
||||||
|
mode: "0600"
|
||||||
|
|
||||||
|
- name: Start Nextcloud stack
|
||||||
|
community.docker.docker_compose_v2:
|
||||||
|
project_src: "{{ nextcloud_base_dir }}"
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Wait for Nextcloud to become ready
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "http://the-grid.local.mk-labs.cloud/status.php"
|
||||||
|
status_code: 200
|
||||||
|
return_content: true
|
||||||
|
register: nextcloud_status
|
||||||
|
until: >
|
||||||
|
nextcloud_status.status == 200 and
|
||||||
|
(nextcloud_status.content | from_json).installed == true
|
||||||
|
retries: 20
|
||||||
|
delay: 15
|
||||||
35
ansible/playbooks/day1_deploy_ollama.yml
Normal file
35
ansible/playbooks/day1_deploy_ollama.yml
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
---
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# FILE: ansible/playbooks/day1_deploy_ollama.yml
|
||||||
|
# DESCRIPTION: Deploys Ollama with ROCm GPU acceleration on astro-orbiter.
|
||||||
|
# Assumes day0_baseline.yml has already run (common role complete).
|
||||||
|
# PCIe passthrough for the RX 5700 must be configured in Proxmox
|
||||||
|
# and the GPU must be visible to the VM before running this playbook.
|
||||||
|
#
|
||||||
|
# Pre-flight check:
|
||||||
|
# ssh wed@astro-orbiter 'lspci | grep -i amd'
|
||||||
|
# Should show the RX 5700 before proceeding.
|
||||||
|
#
|
||||||
|
# Usage (from ansible/ directory):
|
||||||
|
# ansible-playbook playbooks/day1_deploy_ollama.yml
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
- name: Deploy Ollama with ROCm on astro-orbiter
|
||||||
|
hosts: astro-orbiter
|
||||||
|
become: true
|
||||||
|
|
||||||
|
pre_tasks:
|
||||||
|
- name: Verify AMD GPU is visible to the VM
|
||||||
|
command: lspci
|
||||||
|
register: lspci_output
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: Fail if no AMD GPU detected
|
||||||
|
fail:
|
||||||
|
msg: >
|
||||||
|
No AMD GPU detected via lspci. Verify PCIe passthrough is configured
|
||||||
|
in Proxmox and the RX 5700 is visible to the VM before proceeding.
|
||||||
|
when: "'AMD' not in lspci_output.stdout and 'Radeon' not in lspci_output.stdout"
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- ollama
|
||||||
17
ansible/playbooks/day1_deploy_semaphore.yml
Normal file
17
ansible/playbooks/day1_deploy_semaphore.yml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
---
|
||||||
|
# ============================================================================
|
||||||
|
# day1_deploy_semaphore.yml
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Deploys SemaphoreUI + PostgreSQL on the imagineering host (figment).
|
||||||
|
# Run AFTER day0_linux_baseline.yml has been applied to the target.
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# ansible-playbook -i inventory.yml playbooks/day1_deploy_semaphore.yml
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
- name: Deploy SemaphoreUI on imagineering
|
||||||
|
hosts: semaphore_server
|
||||||
|
become: true
|
||||||
|
gather_facts: true
|
||||||
|
roles:
|
||||||
|
- semaphore
|
||||||
18
ansible/playbooks/day1_deploy_traefik.yml
Normal file
18
ansible/playbooks/day1_deploy_traefik.yml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# FILE: playbooks/deploy_traefik.yml
|
||||||
|
# DESCRIPTION: Deploys Traefik reverse proxy on lightning-lane.
|
||||||
|
# Installs Docker and configures Traefik with Cloudflare DNS-01
|
||||||
|
# certificate resolution for *.local.mk-labs.cloud
|
||||||
|
#
|
||||||
|
# USAGE:
|
||||||
|
# ansible-playbook -i inventory.yml playbooks/deploy_traefik.yml
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
- name: Deploy Traefik reverse proxy
|
||||||
|
hosts: load_balancers
|
||||||
|
become: true
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- docker-host
|
||||||
|
- traefik
|
||||||
7
ansible/playbooks/day1_docker.yml
Normal file
7
ansible/playbooks/day1_docker.yml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
- name: Apply common role
|
||||||
|
hosts: "{{ target | default('all') }}"
|
||||||
|
become: true
|
||||||
|
roles:
|
||||||
|
- common
|
||||||
|
- docker-host
|
||||||
80
ansible/playbooks/day2_install_node_exporter.yml
Normal file
80
ansible/playbooks/day2_install_node_exporter.yml
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
---
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# FILE: ansible/playbooks/day2_install_node_exporter.yml
|
||||||
|
# DESCRIPTION: Install and configure Prometheus Node Exporter on Linux hosts.
|
||||||
|
#
|
||||||
|
# Targets two groups with different firewall managers:
|
||||||
|
# - proxmox_nodes : Proxmox hypervisors (Debian, firewalld not present,
|
||||||
|
# uses iptables/no firewall — just open the port via UFW
|
||||||
|
# if present, otherwise skip)
|
||||||
|
# - monitored_vms : Ubuntu VMs managed by UFW
|
||||||
|
#
|
||||||
|
# After installing on new hosts, re-runs day1_deploy_monitoring.yml to refresh
|
||||||
|
# the Prometheus scrape config is NOT needed — targets are already statically
|
||||||
|
# defined in prometheus.yaml.j2 for the Proxmox nodes. For new VMs, add the
|
||||||
|
# IP to the prometheus.yaml.j2 proxmox-vms job and re-run day1_deploy_monitoring.yml.
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# ansible-playbook -i inventory.yml playbooks/day2_install_node_exporter.yml
|
||||||
|
# ansible-playbook -i inventory.yml playbooks/day2_install_node_exporter.yml --limit proxmox_nodes
|
||||||
|
# ansible-playbook -i inventory.yml playbooks/day2_install_node_exporter.yml --limit monitored_vms
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# ── Play 1: Proxmox hypervisors ───────────────────────────────────────────────
|
||||||
|
# Proxmox runs Debian. The prometheus.prometheus.node_exporter role installs
|
||||||
|
# a binary + systemd service without touching apt, which is what we want on
|
||||||
|
# hypervisors (keep the package footprint clean).
|
||||||
|
# Note: Proxmox does not run UFW. Port 9100 is open by default on VLAN 71.
|
||||||
|
|
||||||
|
- name: Install Node Exporter on Proxmox hypervisors
|
||||||
|
hosts: proxmox_nodes
|
||||||
|
become: true
|
||||||
|
|
||||||
|
vars:
|
||||||
|
node_exporter_version: "1.9.1"
|
||||||
|
node_exporter_web_listen_address: "0.0.0.0:9100"
|
||||||
|
node_exporter_enabled_collectors:
|
||||||
|
- systemd
|
||||||
|
- processes
|
||||||
|
- filesystem
|
||||||
|
- meminfo
|
||||||
|
- cpu
|
||||||
|
- diskstats
|
||||||
|
- netdev
|
||||||
|
- loadavg
|
||||||
|
- uname
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- role: prometheus.prometheus.node_exporter
|
||||||
|
|
||||||
|
# ── Play 2: Ubuntu VMs ────────────────────────────────────────────────────────
|
||||||
|
# Standard Ubuntu hosts with UFW. Same role, adds UFW allow rule for 9100.
|
||||||
|
|
||||||
|
- name: Install Node Exporter on monitored VMs
|
||||||
|
hosts: monitored_vms
|
||||||
|
become: true
|
||||||
|
|
||||||
|
vars:
|
||||||
|
node_exporter_version: "1.9.1"
|
||||||
|
node_exporter_web_listen_address: "0.0.0.0:9100"
|
||||||
|
node_exporter_enabled_collectors:
|
||||||
|
- systemd
|
||||||
|
- processes
|
||||||
|
- filesystem
|
||||||
|
- meminfo
|
||||||
|
- cpu
|
||||||
|
- diskstats
|
||||||
|
- netdev
|
||||||
|
- loadavg
|
||||||
|
- uname
|
||||||
|
|
||||||
|
pre_tasks:
|
||||||
|
- name: Open Node Exporter port in UFW
|
||||||
|
community.general.ufw:
|
||||||
|
rule: allow
|
||||||
|
port: "9100"
|
||||||
|
proto: tcp
|
||||||
|
comment: "Prometheus Node Exporter"
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- role: prometheus.prometheus.node_exporter
|
||||||
0
infra-config/playbooks/del_dns_entry.yml → ansible/playbooks/del_dns_entry.yml
Normal file → Executable file
0
infra-config/playbooks/del_dns_entry.yml → ansible/playbooks/del_dns_entry.yml
Normal file → Executable file
5
ansible/playbooks/deploy_n8n_server.yml
Executable file
5
ansible/playbooks/deploy_n8n_server.yml
Executable file
@@ -0,0 +1,5 @@
|
|||||||
|
- name: 1. Deploy n8n server
|
||||||
|
hosts: n8n_server
|
||||||
|
gather_facts: true
|
||||||
|
roles:
|
||||||
|
- role: n8n
|
||||||
5
ansible/playbooks/deploy_ntp_servers.yml
Executable file
5
ansible/playbooks/deploy_ntp_servers.yml
Executable file
@@ -0,0 +1,5 @@
|
|||||||
|
- name: 1. Deploy NTP servers
|
||||||
|
hosts: ntp_servers
|
||||||
|
gather_facts: true
|
||||||
|
roles:
|
||||||
|
- role: ntp-server
|
||||||
29
ansible/playbooks/deploy_step_ca.yml
Normal file
29
ansible/playbooks/deploy_step_ca.yml
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
---
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# FILE: playbooks/deploy_step_ca.yml
|
||||||
|
# DESCRIPTION: Deploys Smallstep step-ca SSH Certificate Authority on turnstile.
|
||||||
|
# Installs Docker and configures step-ca with SSH certificate support.
|
||||||
|
#
|
||||||
|
# PREREQUISITES:
|
||||||
|
# - VM provisioned via Terraform
|
||||||
|
# - DNS record for turnstile.local.mk-labs.cloud on monorail
|
||||||
|
# - Authentik OIDC application created (for post-init provisioner setup)
|
||||||
|
#
|
||||||
|
# USAGE:
|
||||||
|
# ansible-playbook -i inventory.yml playbooks/deploy_step_ca.yml
|
||||||
|
#
|
||||||
|
# POST-DEPLOY:
|
||||||
|
# 1. Note the CA fingerprint from the init output
|
||||||
|
# 2. Add the OIDC provisioner (see docs/guides/step-ca-setup.md)
|
||||||
|
# 3. Deploy Traefik route via update_traefik_routes.yml
|
||||||
|
# 4. Bootstrap client workstations with: step ca bootstrap
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
- name: Deploy step-ca SSH Certificate Authority
|
||||||
|
hosts: step_ca_server
|
||||||
|
become: true
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- common
|
||||||
|
- docker-host
|
||||||
|
- step-ca
|
||||||
7
ansible/playbooks/enroll_step_ca_client.yml
Normal file
7
ansible/playbooks/enroll_step_ca_client.yml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
- name: Enroll host as step-ca SSH client
|
||||||
|
hosts: "{{ target | default('all') }}"
|
||||||
|
become: true
|
||||||
|
tasks:
|
||||||
|
- name: Include step-ca client enrollment
|
||||||
|
ansible.builtin.include_tasks: roles/common/tasks/step_ca_client.yml
|
||||||
67
ansible/playbooks/install_monitoring.yml
Executable file
67
ansible/playbooks/install_monitoring.yml
Executable file
@@ -0,0 +1,67 @@
|
|||||||
|
---
|
||||||
|
- name: Master playbook to install and configure prometheus
|
||||||
|
hosts: prometheus_server
|
||||||
|
become: true
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: Install prerequisite software
|
||||||
|
ansible.builtin.dnf:
|
||||||
|
name:
|
||||||
|
- tar
|
||||||
|
- python3-dnf
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Permit prometheus metrics in default zone for dns service
|
||||||
|
ansible.posix.firewalld:
|
||||||
|
port: 9100/tcp
|
||||||
|
permanent: true
|
||||||
|
immediate: true
|
||||||
|
state: enabled
|
||||||
|
|
||||||
|
- name: Permit traffic in default zone for dns service
|
||||||
|
ansible.posix.firewalld:
|
||||||
|
port: 9090/tcp
|
||||||
|
permanent: true
|
||||||
|
immediate: true
|
||||||
|
state: enabled
|
||||||
|
|
||||||
|
- name: Install prometheus via role
|
||||||
|
ansible.builtin.import_role:
|
||||||
|
name: prometheus.prometheus.prometheus
|
||||||
|
vars:
|
||||||
|
prometheus_targets:
|
||||||
|
node:
|
||||||
|
- targets:
|
||||||
|
- localhost:9100
|
||||||
|
labels:
|
||||||
|
env: mk-labs
|
||||||
|
|
||||||
|
- name: Permit grafana in default zone for dns service
|
||||||
|
ansible.posix.firewalld:
|
||||||
|
port: 3000/tcp
|
||||||
|
permanent: true
|
||||||
|
immediate: true
|
||||||
|
state: enabled
|
||||||
|
|
||||||
|
- name: Install grafana via role
|
||||||
|
ansible.builtin.import_role:
|
||||||
|
name: grafana.grafana.grafana
|
||||||
|
|
||||||
|
# - name: Create/Update Data sources
|
||||||
|
# grafana.grafana.datasource:
|
||||||
|
# dataSource: |
|
||||||
|
# {
|
||||||
|
# "name": "Prometheus",
|
||||||
|
# "type": "prometheus",
|
||||||
|
# "access": "proxy",
|
||||||
|
# "url": "http://localhost:9090",
|
||||||
|
# "jsonData": {
|
||||||
|
# "httpMethod": "POST",
|
||||||
|
# "manageAlerts": true,
|
||||||
|
# "prometheusType": "Prometheus",
|
||||||
|
# "cacheLevel": "High"
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
# grafana_url: "{{ grafana_url }}"
|
||||||
|
# grafana_api_key: "{{ grafana_api_key }}"
|
||||||
|
# state: present
|
||||||
15
ansible/playbooks/install_talosctl.yml
Normal file
15
ansible/playbooks/install_talosctl.yml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# FILE: playbooks/install_talosctl.yml
|
||||||
|
# DESCRIPTION: Install talosctl on city-hall for managing the fastpass cluster.
|
||||||
|
# USAGE:
|
||||||
|
# cd ansible
|
||||||
|
# ansible-playbook -i inventory.yml playbooks/install_talosctl.yml
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
- name: Install talosctl
|
||||||
|
hosts: talos_control
|
||||||
|
become: true
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- talosctl
|
||||||
0
infra-config/playbooks/monitoring.yml → ansible/playbooks/monitoring.yml
Normal file → Executable file
0
infra-config/playbooks/monitoring.yml → ansible/playbooks/monitoring.yml
Normal file → Executable file
16
ansible/playbooks/node_explorer.yml
Executable file
16
ansible/playbooks/node_explorer.yml
Executable file
@@ -0,0 +1,16 @@
|
|||||||
|
---
|
||||||
|
- name: Master playbook to install and configure prometheus node explorer
|
||||||
|
hosts: prometheus_server
|
||||||
|
become: true
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: Permit prometheus metrics in default zone for dns service
|
||||||
|
ansible.posix.firewalld:
|
||||||
|
port: 9100/tcp
|
||||||
|
permanent: true
|
||||||
|
immediate: true
|
||||||
|
state: enabled
|
||||||
|
|
||||||
|
- name: Install prometheus node exporter via role
|
||||||
|
ansible.builtin.import_role:
|
||||||
|
name: prometheus.prometheus.node_exporter
|
||||||
31
ansible/playbooks/populate_cloud_init.yml
Executable file
31
ansible/playbooks/populate_cloud_init.yml
Executable file
@@ -0,0 +1,31 @@
|
|||||||
|
---
|
||||||
|
- name: Create VM ID from IP address for Proxmox hosts
|
||||||
|
hosts: all
|
||||||
|
gather_facts: false
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: Modify Proxmox Ubuntu VM
|
||||||
|
delegate_to: "localhost"
|
||||||
|
when: platform is defined and platform == "proxmox"
|
||||||
|
block:
|
||||||
|
- name: Update cloud-init file
|
||||||
|
community.proxmox.proxmox_kvm:
|
||||||
|
api_user: "{{ proxmox_user }}"
|
||||||
|
api_password: "{{ proxmox_password }}"
|
||||||
|
api_host: "{{ proxmox_host }}"
|
||||||
|
node: "{{ proxmox_clone_node }}"
|
||||||
|
vmid: "{{ vm_id }}"
|
||||||
|
ipconfig:
|
||||||
|
ipconfig0: "ip=dhcp"
|
||||||
|
update: true
|
||||||
|
|
||||||
|
# - name: Add VM to HA group
|
||||||
|
# community.proxmox.proxmox_cluster_ha_resources:
|
||||||
|
# api_user: "{{ proxmox_user }}"
|
||||||
|
# api_password: "{{ proxmox_password }}"
|
||||||
|
# api_host: "{{ proxmox_host }}"
|
||||||
|
# name: vm:"{{ vm_id }}"
|
||||||
|
# state: "present"
|
||||||
|
# group: "{{ ha_group }}"
|
||||||
|
# max_relocate: 2
|
||||||
|
# max_restart: 2
|
||||||
143
ansible/playbooks/prometheus_grafana_server.yml
Executable file
143
ansible/playbooks/prometheus_grafana_server.yml
Executable file
@@ -0,0 +1,143 @@
|
|||||||
|
---
|
||||||
|
- name: Install Prometheus and Grafana on control node
|
||||||
|
hosts: prometheus_server
|
||||||
|
become: true
|
||||||
|
# vars_files:
|
||||||
|
# - vars.yml
|
||||||
|
tasks:
|
||||||
|
- name: Install prerequisite software
|
||||||
|
ansible.builtin.dnf:
|
||||||
|
name:
|
||||||
|
- tar
|
||||||
|
- wget
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Download Prometheus
|
||||||
|
ansible.builtin.get_url:
|
||||||
|
url: "{{ prometheus_installer_download_url }}"
|
||||||
|
dest: "/tmp/{{ prometheus_installer_file }}"
|
||||||
|
|
||||||
|
- name: Extract Prometheus
|
||||||
|
ansible.builtin.unarchive:
|
||||||
|
src: "/tmp/{{ prometheus_installer_file }}"
|
||||||
|
dest: "/usr/local/bin/"
|
||||||
|
remote_src: true
|
||||||
|
|
||||||
|
- name: Create Prometheus user
|
||||||
|
user:
|
||||||
|
name: prometheus
|
||||||
|
shell: /bin/false
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Create Prometheus directories
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "{{ item }}"
|
||||||
|
state: directory
|
||||||
|
owner: prometheus
|
||||||
|
group: prometheus
|
||||||
|
with_items:
|
||||||
|
- /etc/prometheus
|
||||||
|
- /var/lib/prometheus
|
||||||
|
|
||||||
|
- name: Move Prometheus binaries
|
||||||
|
ansible.builtin.command: "mv /usr/local/bin/prometheus-{{ prometheus_version }}.linux-amd64/prometheus /usr/local/bin/prometheus"
|
||||||
|
|
||||||
|
- name: Move Prometheus tool
|
||||||
|
ansible.builtin.command: "mv /usr/local/bin/prometheus-{{ prometheus_version }}.linux-amd64/promtool /usr/local/bin/promtool"
|
||||||
|
|
||||||
|
- name: Create Prometheus configuration file
|
||||||
|
ansible.builtin.copy:
|
||||||
|
dest: "/etc/prometheus/prometheus.yml"
|
||||||
|
content: |
|
||||||
|
global:
|
||||||
|
scrape_interval: 15s
|
||||||
|
evaluation_interval: 15s
|
||||||
|
|
||||||
|
scrape_configs:
|
||||||
|
- job_name: 'prometheus'
|
||||||
|
static_configs:
|
||||||
|
- targets: ['localhost:9090']
|
||||||
|
|
||||||
|
- job_name: 'nodes'
|
||||||
|
static_configs:
|
||||||
|
- targets:
|
||||||
|
{% for ip in prometheus_nodes %}
|
||||||
|
- '{{ ip }}:9100'
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
- name: Create Prometheus service file
|
||||||
|
ansible.builtin.copy:
|
||||||
|
dest: "/etc/systemd/system/prometheus.service"
|
||||||
|
content: |
|
||||||
|
[Unit]
|
||||||
|
Description=Prometheus
|
||||||
|
Wants=network-online.target
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
User=prometheus
|
||||||
|
Group=prometheus
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/usr/local/bin/prometheus \
|
||||||
|
--config.file=/etc/prometheus/prometheus.yml \
|
||||||
|
--storage.tsdb.path=/var/lib/prometheus/ \
|
||||||
|
--web.console.templates=/etc/prometheus/consoles \
|
||||||
|
--web.console.libraries=/etc/prometheus/console_libraries
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
|
||||||
|
register: prometheus_service_status
|
||||||
|
ignore_errors: true
|
||||||
|
|
||||||
|
- name: Check if Prometheus service is running
|
||||||
|
ansible.builtin.command: systemctl is-active prometheus
|
||||||
|
register: prometheus_status
|
||||||
|
changed_when: false
|
||||||
|
ignore_errors: true
|
||||||
|
|
||||||
|
- name: Permit prometheus endpoint in default zone for dns service
|
||||||
|
firewalld:
|
||||||
|
port: 9090/tcp
|
||||||
|
permanent: true
|
||||||
|
immediate: true
|
||||||
|
state: enabled
|
||||||
|
|
||||||
|
- name: Permit prometheus metrics in default zone for dns service
|
||||||
|
firewalld:
|
||||||
|
port: 9100/tcp
|
||||||
|
permanent: true
|
||||||
|
immediate: true
|
||||||
|
state: enabled
|
||||||
|
|
||||||
|
- name: Permit grafana traffic in default zone for dns service
|
||||||
|
firewalld:
|
||||||
|
port: 3000/tcp
|
||||||
|
permanent: true
|
||||||
|
immediate: true
|
||||||
|
state: enabled
|
||||||
|
|
||||||
|
- name: Manage Prometheus service state
|
||||||
|
systemd:
|
||||||
|
name: prometheus
|
||||||
|
state: "{{ 'restarted' if prometheus_status.rc == 0 else 'started' }}"
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
- name: Add repository
|
||||||
|
ansible.builtin.yum_repository:
|
||||||
|
name: grafana
|
||||||
|
description: Grafana OSS repo
|
||||||
|
baseurl: https://rpm.grafana.com
|
||||||
|
gpgkey: https://rpm.grafana.com/gpg.key
|
||||||
|
|
||||||
|
- name: Install Grafana
|
||||||
|
ansible.builtin.dnf:
|
||||||
|
name:
|
||||||
|
- grafana
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Start Grafana service
|
||||||
|
systemd:
|
||||||
|
name: grafana-server
|
||||||
|
state: started
|
||||||
|
enabled: true
|
||||||
3
infra-config/playbooks/proxmox_clone_vm.yml → ansible/playbooks/proxmox_clone_vm.yml
Normal file → Executable file
3
infra-config/playbooks/proxmox_clone_vm.yml → ansible/playbooks/proxmox_clone_vm.yml
Normal file → Executable file
@@ -22,7 +22,8 @@
|
|||||||
name: "{{ inventory_hostname }}"
|
name: "{{ inventory_hostname }}"
|
||||||
node: "{{ proxmox_clone_node }}"
|
node: "{{ proxmox_clone_node }}"
|
||||||
storage: "{{ vm_storage }}"
|
storage: "{{ vm_storage }}"
|
||||||
format: raw
|
format: qcow2 # raw
|
||||||
|
timeout: 600
|
||||||
|
|
||||||
# - name: Add VM to HA group
|
# - name: Add VM to HA group
|
||||||
# community.proxmox.proxmox_cluster_ha_resources:
|
# community.proxmox.proxmox_cluster_ha_resources:
|
||||||
50
ansible/playbooks/proxmox_create_vm.yml
Executable file
50
ansible/playbooks/proxmox_create_vm.yml
Executable file
@@ -0,0 +1,50 @@
|
|||||||
|
---
|
||||||
|
- name: Create VM ID from IP address for Proxmox hosts
|
||||||
|
hosts: all
|
||||||
|
gather_facts: false
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: Create Proxmox VMs
|
||||||
|
delegate_to: "localhost"
|
||||||
|
when: platform is defined and platform == "proxmox"
|
||||||
|
block:
|
||||||
|
- name: Create VM ID from IP address
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
vm_id: "{{ ip_address.split('.')[-2] }}{{ '%03d' % (ip_address.split('.')[-1] | int) }}"
|
||||||
|
|
||||||
|
- name: Create VM with an EFI disk, with Secure Boot disabled by default
|
||||||
|
community.proxmox.proxmox_kvm:
|
||||||
|
api_user: "{{ proxmox_user }}"
|
||||||
|
api_password: "{{ proxmox_password }}"
|
||||||
|
api_host: "{{ proxmox_host }}"
|
||||||
|
name: "{{ inventory_hostname }}"
|
||||||
|
node: "{{ proxmox_clone_node }}"
|
||||||
|
vmid: "{{ vm_id }}"
|
||||||
|
net:
|
||||||
|
net0: "virtio,bridge=vmbr0"
|
||||||
|
ide:
|
||||||
|
ide0: "{{ vm_iso_storage }}:iso/{{ vm_iso }},media=cdrom"
|
||||||
|
scsihw: "virtio-scsi-single"
|
||||||
|
scsi:
|
||||||
|
scsi0: "{{ vm_storage }}:{{ vm_definitions[vm_size]['disk'] }},format=qcow2"
|
||||||
|
bios: "ovmf"
|
||||||
|
cpu: "x86-64-v2"
|
||||||
|
cores: "{{ vm_definitions[vm_size]['cores'] }}"
|
||||||
|
memory: "{{ vm_definitions[vm_size]['memory'] }}"
|
||||||
|
efidisk0:
|
||||||
|
storage: "{{ vm_storage }}"
|
||||||
|
format: raw
|
||||||
|
efitype: 4m
|
||||||
|
pre_enrolled_keys: false
|
||||||
|
timeout: 600
|
||||||
|
|
||||||
|
# - name: Add VM to HA group
|
||||||
|
# community.proxmox.proxmox_cluster_ha_resources:
|
||||||
|
# api_user: "{{ proxmox_user }}"
|
||||||
|
# api_password: "{{ proxmox_password }}"
|
||||||
|
# api_host: "{{ proxmox_host }}"
|
||||||
|
# name: vm:"{{ vm_id }}"
|
||||||
|
# state: "present"
|
||||||
|
# group: "{{ ha_group }}"
|
||||||
|
# max_relocate: 2
|
||||||
|
# max_restart: 2
|
||||||
40
ansible/playbooks/proxmox_start_vm.yml
Executable file
40
ansible/playbooks/proxmox_start_vm.yml
Executable file
@@ -0,0 +1,40 @@
|
|||||||
|
---
|
||||||
|
- name: Create VM ID from IP address for Proxmox hosts
|
||||||
|
hosts: all
|
||||||
|
gather_facts: false
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: Start Proxmox VM
|
||||||
|
delegate_to: "localhost"
|
||||||
|
when: platform is defined and platform == "proxmox"
|
||||||
|
community.proxmox.proxmox_kvm:
|
||||||
|
api_user: "{{ proxmox_user }}"
|
||||||
|
api_password: "{{ proxmox_password }}"
|
||||||
|
api_host: "{{ proxmox_host }}"
|
||||||
|
name: "{{ inventory_hostname }}"
|
||||||
|
node: "{{ proxmox_clone_node }}"
|
||||||
|
state: started
|
||||||
|
|
||||||
|
- name: Wait for SSH service to be ready
|
||||||
|
delegate_to: "localhost"
|
||||||
|
when: platform is defined and platform == "proxmox"
|
||||||
|
ansible.builtin.wait_for:
|
||||||
|
port: 22
|
||||||
|
host: "{{ inventory_hostname }}"
|
||||||
|
search_regex: OpenSSH
|
||||||
|
timeout: 300
|
||||||
|
msg: "Waiting for SSH service to be ready on {{ inventory_hostname }}"
|
||||||
|
|
||||||
|
- name: Wait for VM to be fully booted and responsive
|
||||||
|
delegate_to: "localhost"
|
||||||
|
when: platform is defined and platform == "proxmox"
|
||||||
|
ansible.builtin.wait_for_connection:
|
||||||
|
connect_timeout: 10
|
||||||
|
sleep: 5
|
||||||
|
timeout: 300
|
||||||
|
|
||||||
|
- name: Display VM startup completion
|
||||||
|
delegate_to: "localhost"
|
||||||
|
when: platform is defined and platform == "proxmox"
|
||||||
|
ansible.builtin.debug:
|
||||||
|
msg: "✅ {{ inventory_hostname }} is now running and accessible via SSH"
|
||||||
6
infra-config/playbooks/set_hostname.yml → ansible/playbooks/set_hostname.yml
Normal file → Executable file
6
infra-config/playbooks/set_hostname.yml → ansible/playbooks/set_hostname.yml
Normal file → Executable file
@@ -9,4 +9,8 @@
|
|||||||
delegate_to: "{{ inventory_hostname }}"
|
delegate_to: "{{ inventory_hostname }}"
|
||||||
ansible.builtin.hostname:
|
ansible.builtin.hostname:
|
||||||
name: "{{ hostname }}"
|
name: "{{ hostname }}"
|
||||||
#delay: 20
|
|
||||||
|
- name: Set timezone to US/Central
|
||||||
|
become: true
|
||||||
|
community.general.timezone:
|
||||||
|
name: US/Central
|
||||||
42
ansible/playbooks/templates/agent-config.yaml.j2
Normal file
42
ansible/playbooks/templates/agent-config.yaml.j2
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
apiVersion: v1alpha1
|
||||||
|
kind: AgentConfig
|
||||||
|
metadata:
|
||||||
|
name: {{ hostvars[groups[cluster_group][0]].cluster_name }}
|
||||||
|
rendezvousIP: {{ hostvars[groups[cluster_group][0]].ip_address }}
|
||||||
|
bootArtifactsBaseURL: {{ hostvars[groups['matchbox_server'][0]].http_endpoint }}/assets/hub/
|
||||||
|
hosts:
|
||||||
|
{% for host in groups[cluster_group] %}
|
||||||
|
- hostname: {{ host }}
|
||||||
|
role: {{ hostvars[host].node_role | default('master') }}
|
||||||
|
interfaces:
|
||||||
|
- name: {{ hostvars[host].primary_interface }}
|
||||||
|
macAddress: {{ hostvars[host].install_mac_address }}
|
||||||
|
networkConfig:
|
||||||
|
interfaces:
|
||||||
|
- name: {{ hostvars[host].primary_interface }}
|
||||||
|
type: ethernet
|
||||||
|
state: up
|
||||||
|
identifier: mac-address
|
||||||
|
mac-address: {{ hostvars[host].install_mac_address }}
|
||||||
|
ipv4:
|
||||||
|
enabled: true
|
||||||
|
dhcp: true
|
||||||
|
{% if hostvars[host].boot_mac_address != hostvars[host].install_mac_address %}
|
||||||
|
- name: {{ hostvars[host].boot_interface }}
|
||||||
|
type: ethernet
|
||||||
|
state: down
|
||||||
|
identifier: mac-address
|
||||||
|
mac-address: {{ hostvars[host].boot_mac_address }}
|
||||||
|
{% endif %}
|
||||||
|
dns-resolver:
|
||||||
|
config:
|
||||||
|
server:
|
||||||
|
- 10.1.71.251
|
||||||
|
- 10.1.71.252
|
||||||
|
routes:
|
||||||
|
config:
|
||||||
|
- destination: 0.0.0.0/0
|
||||||
|
next-hop-address: 10.1.71.1
|
||||||
|
next-hop-interface: {{ hostvars[host].primary_interface }}
|
||||||
|
table-id: 254
|
||||||
|
{% endfor %}
|
||||||
14
ansible/playbooks/templates/groups.tf.j2
Normal file
14
ansible/playbooks/templates/groups.tf.j2
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
// Matcher group for OCP Internal machines
|
||||||
|
{% for host in groups[cluster_group] %}
|
||||||
|
resource "matchbox_group" "{{ host }}" {
|
||||||
|
name = "{{ host }}" # Physical Server
|
||||||
|
profile = matchbox_profile.openshift-agent-install.name
|
||||||
|
selector = {
|
||||||
|
{% if hostvars[host].boot_mac_address == hostvars[host].install_mac_address %}
|
||||||
|
mac = "{{ hostvars[host].boot_mac_address }}" # PXE boots and installs to same NIC
|
||||||
|
{% else %}
|
||||||
|
mac = "{{ hostvars[host].boot_mac_address }}" # PXE boots to 1GbE NIC, installs to 10GbE NIC
|
||||||
|
{% endif %}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{% endfor %}
|
||||||
33
ansible/playbooks/templates/install-config.yaml.j2
Normal file
33
ansible/playbooks/templates/install-config.yaml.j2
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
baseDomain: {{ hostvars[groups[cluster_group][0]].base_domain }}
|
||||||
|
compute:
|
||||||
|
- name: worker
|
||||||
|
hyperthreading: Enabled
|
||||||
|
replicas: {{ hostvars[groups[cluster_group][0]].worker_node_count }}
|
||||||
|
controlPlane:
|
||||||
|
hyperthreading: Enabled
|
||||||
|
name: master
|
||||||
|
replicas: {{ hostvars[groups[cluster_group][0]].master_node_count }}
|
||||||
|
metadata:
|
||||||
|
name: {{ hostvars[groups[cluster_group][0]].cluster_name }}
|
||||||
|
networking:
|
||||||
|
clusterNetwork:
|
||||||
|
- cidr: {{ hostvars[groups[cluster_group][0]].cluster_network }}
|
||||||
|
hostPrefix: {{ hostvars[groups[cluster_group][0]].cluster_network_host_prefix }}
|
||||||
|
machineNetwork:
|
||||||
|
- cidr: {{ hostvars[groups[cluster_group][0]].machine_network }}
|
||||||
|
networkType: OVNKubernetes
|
||||||
|
serviceNetwork:
|
||||||
|
- {{ hostvars[groups[cluster_group][0]].service_network }}
|
||||||
|
platform:
|
||||||
|
{% if hostvars[groups[cluster_group][0]].platform_type == 'none' %}
|
||||||
|
{{ hostvars[groups['hub_cluster'][0]].platform_type }}: {}
|
||||||
|
{% endif %}
|
||||||
|
{% if hostvars[groups[cluster_group][0]].platform_type == 'baremetal' %}
|
||||||
|
{{ hostvars[groups[cluster_group][0]].platform_type }}:
|
||||||
|
apiVIP: {{ hostvars[groups[cluster_group][0]].api_address }}
|
||||||
|
ingressVIP: {{ hostvars[groups[cluster_group][0]].app_address }}
|
||||||
|
{% endif %}
|
||||||
|
fips: false
|
||||||
|
pullSecret: '{{ vault_pull_secret }}'
|
||||||
|
sshKey: '{{ vault_ssh_key }}'
|
||||||
28
ansible/playbooks/templates/kubeadm-config.yaml.j2
Normal file
28
ansible/playbooks/templates/kubeadm-config.yaml.j2
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: kubeadm-config
|
||||||
|
namespace: kube-system
|
||||||
|
data:
|
||||||
|
ClusterConfiguration: |
|
||||||
|
apiServer: {}
|
||||||
|
apiVersion: kubeadm.k8s.io/v1beta4
|
||||||
|
caCertificateValidityPeriod: 87600h0m0s
|
||||||
|
certificateValidityPeriod: 8760h0m0s
|
||||||
|
certificatesDir: /etc/kubernetes/pki
|
||||||
|
clusterName: kubernetes
|
||||||
|
controllerManager: {}
|
||||||
|
dns: {}
|
||||||
|
encryptionAlgorithm: RSA-2048
|
||||||
|
etcd:
|
||||||
|
local:
|
||||||
|
dataDir: /var/lib/etcd
|
||||||
|
imageRepository: registry.k8s.io
|
||||||
|
kind: ClusterConfiguration
|
||||||
|
kubernetesVersion: {{ kubernetes_version | default('v1.33.4') }}
|
||||||
|
networking:
|
||||||
|
dnsDomain: cluster.local
|
||||||
|
serviceSubnet: {{ service_cidr | default('10.96.0.0/12') }}
|
||||||
|
proxy: {}
|
||||||
|
scheduler: {}
|
||||||
|
controlPlaneEndpoint: {{ control_plane_endpoint | default('fastpass.local.mk-labs.cloud') }}:{{ control_plane_port | default('6443') }}
|
||||||
16
ansible/playbooks/templates/profiles.tf.j2
Normal file
16
ansible/playbooks/templates/profiles.tf.j2
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
// Fedora CoreOS profile
|
||||||
|
resource "matchbox_profile" "openshift-agent-install" {
|
||||||
|
name = "{{ hostvars[groups[cluster_group][0]].cluster_name }}"
|
||||||
|
kernel = "/assets/{{ hostvars[groups[cluster_group][0]].cluster_name }}/agent.x86_64-vmlinuz"
|
||||||
|
initrd = [
|
||||||
|
"--name initrd /assets/{{ hostvars[groups[cluster_group][0]].cluster_name }}/agent.x86_64-initrd.img"
|
||||||
|
]
|
||||||
|
|
||||||
|
args = [
|
||||||
|
"initrd=initrd",
|
||||||
|
"coreos.live.rootfs_url={{ hostvars[groups['matchbox_server'][0]].http_endpoint }}/assets/{{ hostvars[groups[cluster_group][0]].cluster_name }}/agent.x86_64-rootfs.img",
|
||||||
|
"rw",
|
||||||
|
"ignition.firstboot",
|
||||||
|
"ignition.platform.id=metal",
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
// Configure the matchbox provider
|
// Configure the matchbox provider
|
||||||
provider "matchbox" {
|
provider "matchbox" {
|
||||||
endpoint = "{{ hostvars[groups['matchbox'][0]].rpc_endpoint }}"
|
endpoint = "{{ hostvars[groups['matchbox_server'][0]].rpc_endpoint }}"
|
||||||
client_cert = file("/etc/matchbox/client.crt")
|
client_cert = file("/etc/matchbox/client.crt")
|
||||||
client_key = file("/etc/matchbox/client.key")
|
client_key = file("/etc/matchbox/client.key")
|
||||||
ca = file("/etc/matchbox/ca.crt")
|
ca = file("/etc/matchbox/ca.crt")
|
||||||
8
ansible/playbooks/templates/unifi-user.tf.j2
Normal file
8
ansible/playbooks/templates/unifi-user.tf.j2
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
resource "unifi_user" "{{ inventory_hostname }}" {
|
||||||
|
mac = "{{ vm_mac_address }}"
|
||||||
|
name = "{{ inventory_hostname }}"
|
||||||
|
# note = "my note"
|
||||||
|
|
||||||
|
fixed_ip = "{{ ip_address }}"
|
||||||
|
allow_existing = true
|
||||||
|
}
|
||||||
22
ansible/playbooks/templates/unifi_provider.tf.j2
Normal file
22
ansible/playbooks/templates/unifi_provider.tf.j2
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
// Configure the unifi provider
|
||||||
|
terraform {
|
||||||
|
required_providers {
|
||||||
|
unifi = {
|
||||||
|
source = "paultyng/unifi"
|
||||||
|
version = "0.41.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
provider "unifi" {
|
||||||
|
username = "terraform" # optionally use UNIFI_USERNAME env var
|
||||||
|
password = "{{ vault_unifi_password }}" # optionally use UNIFI_PASSWORD env var
|
||||||
|
api_url = "https://192.168.1.1" # optionally use UNIFI_API env var
|
||||||
|
|
||||||
|
# you may need to allow insecure TLS communications unless you have configured
|
||||||
|
# certificates for your controller
|
||||||
|
allow_insecure = "true" # optionally use UNIFI_INSECURE env var
|
||||||
|
|
||||||
|
# if you are not configuring the default site, you can change the site
|
||||||
|
# site = "world-drive" # or optionally use UNIFI_SITE env var
|
||||||
|
}
|
||||||
11
ansible/playbooks/test-dns-cname.yml
Executable file
11
ansible/playbooks/test-dns-cname.yml
Executable file
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
- name: Test DNS CNAME Creation
|
||||||
|
hosts: fastpass_control_plane[0]
|
||||||
|
gather_facts: false
|
||||||
|
tasks:
|
||||||
|
- name: Test DNS CNAME entry creation
|
||||||
|
ansible.builtin.include_role:
|
||||||
|
name: dns-manager
|
||||||
|
vars:
|
||||||
|
cluster_endpoint: "{{ control_plane_endpoint }}"
|
||||||
|
cluster_cname_target: "{{ traefik_server }}.{{ base_domain }}"
|
||||||
25
ansible/playbooks/test.yml
Executable file
25
ansible/playbooks/test.yml
Executable file
@@ -0,0 +1,25 @@
|
|||||||
|
---
|
||||||
|
- name: Test Ansible Playbook
|
||||||
|
hosts: all
|
||||||
|
gather_facts: yes
|
||||||
|
become: false
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: Ping all hosts
|
||||||
|
ansible.builtin.ping:
|
||||||
|
|
||||||
|
- name: Display hostname
|
||||||
|
ansible.builtin.debug:
|
||||||
|
msg: "The hostname of this system is {{ inventory_hostname }}"
|
||||||
|
|
||||||
|
- name: Show OS distribution
|
||||||
|
ansible.builtin.debug:
|
||||||
|
msg: "This host is running {{ ansible_distribution }} {{ ansible_distribution_version }}"
|
||||||
|
|
||||||
|
- name: Run uptime command
|
||||||
|
ansible.builtin.command: uptime
|
||||||
|
register: uptime_result
|
||||||
|
|
||||||
|
- name: Display uptime result
|
||||||
|
ansible.builtin.debug:
|
||||||
|
var: uptime_result.stdout
|
||||||
16
ansible/playbooks/test_connectivity.yml
Normal file
16
ansible/playbooks/test_connectivity.yml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
---
|
||||||
|
# FILE: playbooks/test_connectivity.yml
|
||||||
|
# Simple test playbook to validate Semaphore can connect and run tasks
|
||||||
|
|
||||||
|
- name: Test connectivity
|
||||||
|
hosts: all
|
||||||
|
gather_facts: true
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: Print hostname
|
||||||
|
ansible.builtin.debug:
|
||||||
|
msg: "Connected to {{ inventory_hostname }} ({{ ansible_hostname }})"
|
||||||
|
|
||||||
|
- name: Print OS info
|
||||||
|
ansible.builtin.debug:
|
||||||
|
msg: "{{ ansible_distribution }} {{ ansible_distribution_version }}"
|
||||||
11
ansible/playbooks/test_step_ca.yml
Normal file
11
ansible/playbooks/test_step_ca.yml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
- name: Test step-ca SSH enrollment
|
||||||
|
hosts: guest-relations
|
||||||
|
become: true
|
||||||
|
handlers:
|
||||||
|
- name: restart sshd
|
||||||
|
systemd:
|
||||||
|
name: sshd
|
||||||
|
state: restarted
|
||||||
|
tasks:
|
||||||
|
- include_tasks: roles/common/tasks/step_ca_client.yml
|
||||||
1
infra-config/playbooks/update-linux-os.yml → ansible/playbooks/update-linux-os.yml
Normal file → Executable file
1
infra-config/playbooks/update-linux-os.yml → ansible/playbooks/update-linux-os.yml
Normal file → Executable file
@@ -39,7 +39,6 @@
|
|||||||
Upgrade Result: {{ upgrade_result }}
|
Upgrade Result: {{ upgrade_result }}
|
||||||
Autoremove Result: {{ autoremove_result }}
|
Autoremove Result: {{ autoremove_result }}
|
||||||
|
|
||||||
|
|
||||||
- name: Upgrade RHEL systems with DNF
|
- name: Upgrade RHEL systems with DNF
|
||||||
when: ansible_os_family == "RedHat" and not (ansible_distribution_major_version == "7")
|
when: ansible_os_family == "RedHat" and not (ansible_distribution_major_version == "7")
|
||||||
block:
|
block:
|
||||||
22
ansible/playbooks/update_traefik_routes.yml
Normal file
22
ansible/playbooks/update_traefik_routes.yml
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
---
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# FILE: playbooks/update_traefik_routes.yml
|
||||||
|
# DESCRIPTION: Syncs Traefik dynamic configuration files to lightning-lane.
|
||||||
|
# No restart needed — Traefik watches the directory for changes.
|
||||||
|
#
|
||||||
|
# USAGE:
|
||||||
|
# ansible-playbook -i inventory.yml playbooks/update_traefik_routes.yml
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
- name: Update Traefik dynamic configuration
|
||||||
|
hosts: load_balancers
|
||||||
|
become: true
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: Sync dynamic configuration from boilerplate
|
||||||
|
copy:
|
||||||
|
src: "{{ playbook_dir }}/../../boilerplates/traefik/dynamic/"
|
||||||
|
dest: /opt/docker/traefik/dynamic/
|
||||||
|
owner: wed
|
||||||
|
group: docker
|
||||||
|
mode: '0644'
|
||||||
6
ansible/requirements.yml
Executable file
6
ansible/requirements.yml
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
collections:
|
||||||
|
- name: containers.podman
|
||||||
|
version: ">=1.10.0"
|
||||||
|
- name: effectivelywild.technitium_dns
|
||||||
|
version: ">=1.1.0"
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user