Dieses Repository enthält eine Integration von Vault mit chezmoi, einem "dotfile manager".
Die Idee ist, für alle Entwickler:innen einheitliche Credentials und Konfigurationen zu erzeugen, um so zum Beispiel den Zugriff auf unsere Datenbanken oder GKE-Cluster zu ermöglichen.
Dazu werden zum einen in Vault gespeicherte Credentials automatisiert ausgelesen und/oder Skripte wie gcloud ausgeführt.
Darüber hinaus werden einige (wenige) Konfigurationen vorgenommen, die Konventionen und best practices abbilden. Dabei wird aber nur so wenig wie möglich konfiguriert, um nicht die Vorlieben der Mitarbeiter:innen unnötig zu überschreiben. Hier gilt: weniger ist mehr :)
brew install chezmoi mise
mise install vaultNach Installation von mise, activate mise beachten.
Pfad entsprechend der Pfad zum brew-Verzeichnis /opt/homebrew/bin/.
mise ist ein tool version manager.
Es kann tools wie asdf, nvm, pyenv, rbenv, etc. ersetzen.
Leider nur als snaps allgemein verfügbar:
sudo snap install vault chezmoiDamit das vault command bekannt ist, muss mise einmal mitgeteilt werden dass dieses command benutzt werden soll:
mise use vaultJetzt kann Vault initialisiert werden:
export VAULT_ADDR="https://vault.ops.zeit.de/"
vault login -method=oidcNicht erschrecken: der Vault-Login läuft über den Browser. Im Anmeldeformular dann mit den eigenen AD-Credentials anmelden (nachname und nicht vnachname).
Das Fenster kann anschließend geschlossen werden und es geht weiter im Terminal:
chezmoi init [email protected]:ZeitOnline/dotfiles.git
chezmoi apply
mise installNOTE:
chezmoi applyggf. 2x ausführen, falls die Fehlermeldungkv list -format=json cloudsql/databases: fork/exec : no such file or directoryerscheint.
Um Updates aufzuspielen reicht dann künftig folgendes:
vault login -method=oidc
chezmoi update
mise installFalls chezmoi nicht nur für die ZON dotfiles, sondern auch für seperate (private) dotfiles genutzt werden soll, empfiehlt es sich sowohl die config als auch das die dotfiles selbst in einen non-default Ordner zu legen.
Am einfachsten ist dies mit den folgenden beiden Aliasen umzusetzen:
alias chezzon='chezmoi --source ~/.chezzon/repo --config ~/.chezzon/chezmoi.toml'
alias chezzon_init='chezmoi init [email protected]:ZeitOnline/dotfiles.git --source ~/.chezzon/repo --config-path ~/.chezzon/chezmoi.toml'NOTE: Die beiden Aliase lassen sich nicht kombinieren, da
chezmoi initdas Flag--config-pathbenötigt, das nicht identisch mit--configist, welches von allen anderenchezmoiKommandos genutzt wird.
Die Initialisierung erfolgt dann mit chezzon_init, für alles weitere kann chezzon wie sonst chezmoi genutzt werden:
chezzon_init
chezzon apply
mise installDamit wird das zon-dotfiles repo in ~/.chezzon/repo initialisiert, das config file landet in ~/.chezzon/chezmoi.toml.
Aktuell wird vor allem folgendes verwaltet: Postgres-Zugriff, GKE-Cluster-Zugriff, Tools durch mise, sowie ein paar sinnvolle, allgemeingültige Einstellungen für die fish-Shell.
Die Service-Definitionen für unsere CloudSQL-Datenbanken erlauben den SSL-verschlüsselten Zugriff auf alle Datenbanken (Obacht! Inklusive Production!).
Welche Datenbanken konfiguriert sind, läßt sich so herausfinden:
grep '^\[' .pg_service.confDeren Namen kann man dann bei gängigen Postgres-Clients verwenden, bei psql z.B.:
$ psql service=quiz-production
Null display is "(null)".
Line style is unicode.
Border style is 2.
psql (12.4, server 12.1)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.
quiz=> \qEs werden lediglich die notwendigen gcloud-Befehle ausgefuehrt (gcloud muss installiert sein).
In Kurzform:
gcloud init
gcloud auth loginDer Effekt ist, dass in den diversen k8s/(staging|production) Verzeichnissen kubectl und k9s funktionieren, sowie die bin/deploy Skripte, die k8s verwenden.
Für fish-Nutzer:innen wird zudem die notwendige Einstellung der VAULT_ADDR- und KUBECONFIG-Umgebungsvariablen vorgenommen.
Diese werden in einer dedizierten conf.d/zon.fish-Datei verwaltet, um nicht die komplette fish-Config zu "kapern".