====== nix-infra ======
Neben einem [[https://gitlab.hamburg.ccc.de/ccchh/thinkcccentre-ansible|Ansible Repo]] durch welches manche Hosts konfiguriert werden, haben wir auch ein [[https://gitlab.hamburg.ccc.de/ccchh/nix-infra|nix-infra Repo]] durch welches andere Hosts konfiguriert werden.
In diesem Repo ist Nix Konfiguration zu finden, um sowohl VM Templates für Proxmox zu erstellen, als auch um Hosts mit Hilfe von [[https://github.com/zhaofengli/colmena|Colmena]] zu konfigurieren.
===== Hosts Deployment =====
Wir deployen Nix Hosts mit Hilfe von Colmena.
Jeder Host ist zu erst einmal in der ''flake.nix'' definiert, was dann für einen Host zum Beispiel so aussieht:
public-reverse-proxy = {
deployment = {
targetHost = "public-reverse-proxy.z9.ccchh.net";
targetPort = 22;
targetUser = "colmena-deploy";
tags = [ "thinkcccluster" ];
};
imports = [
./config/common
./config/proxmox-vm
./config/hosts/public-reverse-proxy
];
};
Die ''deployment'' Optionen hier sind für Colmena direkt relevant. Sie beschreiben, wie sich zum Host connected werden soll und zu welchen Tags dieser zugehörig ist.
Das ''imports'' Statement ist das eigentlich für die System-Konfiguration relevante Statement. Es gibt an, welche Konfigurations-Dateien für die Konfiguration des Hosts genutzt werden sollen.
Um einen bzw. mehrere Hosts dann zu deployen, kann ''colmena apply'' genutzt werden:
* ''colmena apply'' baut die Konfiguration aller Hosts und deployt dann auch alle.
* ''colmena apply --on public-reverese-proxy'' baut nur die Konfiguration des Public-Reverse-Proxy und deployt dann auch nur diesen.
* ''colmena apply --on @thinkcccluster'' baut nur die Konfiguration aller Hosts, welche den ''thinkcccluster'' Tag haben und deployt dann auch nur diese.
==== Secrets ====
Für manche Hosts werden auch Secrets benötigt. Diese können wir nicht einfach in die Konfiguration mit inkludieren, da diese dann im Nix Store landen würden, welcher publicly readable ist.
Zum Glück bietet Colmena an dieser Stelle eine Lösung mit ''deployment.keys'' (siehe auch [[https://colmena.cli.rs/unstable/features/keys.html|die Colmena Doku zu Secrets]]). Dies ist auch eine Option, welche wir direkt in unserer Konfiguration mit inkludieren, allerdings kümmert sich dann Colmena um das Secret Deployment und die Secrets landen nicht im Nix Store.
''deployment.keys'' braucht auch wiederum eine Quelle für die Secrets. Hier nutzen wir dann wiederum unser [[infrastructure:passworter|Passwörter-Repository]].
Eine Konfiguration für ein Secret sieht dann z.B. so aus:
deployment.keys."netbox-secret-key.secret" = {
keyCommand = [ "pass" "noc/vm-secrets/z9/netbox/netbox_secret_key" ];
destDir = "/secrets";
user = "netbox";
group = "netbox";
permissions = "0440";
uploadAt = "pre-activation";
};
Das Secret ist dann auf dem Host unter ''/secrets/netbox-secret-key.secret'' verfügbar, gehört dem ''netbox'' User und der ''netbox'' Group mit ''0440'' Permissions.
Nix Services haben für Optionen, die Secrets entgegennehmen, dann oft eine Möglichkeit ein Pfad anzugeben. So sieht das dann für das Beispiel-Secret und Netbox wie folgt aus:
services.netbox = {
enable = true;
secretKeyFile = "/secrets/netbox-secret-key.secret";
# Weitere Konfiguration.
};
===== Hosts =====
Folgende Hosts werden via ''nix-infra'' gemanaged:
---- datatable ----
headers : Service, Service-URLs, Host-FQND, Server
cols : %pageid%, service-urls_urls, host-fqdn, server_page
filter : %class%=service
and : %pageid%!=infrastructure:services:template
and : config-management==nix-infra
----