Manchmal gelangt man an einen Punkt, an dem eine IAC Umgebung mit Hilfe von Terraform einfach ganz gut funktioniert und es niemanden mehr gibt, der sich damit befassen will. Dann passiert es, dass der Code ein wenig altert und keine Updates mehr erfährt.
Will man dann mal alles auf den neuesten Stand bringen, wird sich Terraform eventuell beklagen, dass der Provider eine "Invalid legacy provider address" hat. Will man diesen Fehler beheben, so findet man zunächst die zu ersetzenden Einträge im State mit dem Kommando:
terraform providers
Anschließend macht man sich auf, diese mit den neuen Adressen zu ersetzen:
terraform state replace-provider "registry.terraform.io/-/random" "hashicorp/random"
Manchmal ist eine Lösung einfacher als man denkt. Ich habe zuletzt terragrunt evaluiert, weil ich nach einer Möglichkeit gesucht habe um einen ganzen Hintern von Umgebungen möglichst elegant zu beschreiben und Code von Konfiguration zu trennen.
Terragrunt jedoch zeigte mir relativ schnell den Mittelfinger, als ich eine größere Umgebung damit aufziehen wollte und diverse Module etc einzubinden versuchte:
│ fatal: '$GIT_DIR' too big
Klingt nach einem einfach zu lösenden Problem - dachte ich - und stelle gleich mal das olle Windows Git auf Long-Filenames um:
git config --system core.longpaths true
War aber nicht des Rätzels Lösung. Ich dachte mir: "das kann doch nicht euer ernst sein." und macht einen Github Issue auf. Es war ihr ernst. Durch die interne Struktur von Terragrunt bildet es ellenlange Dateipfade und unter Windows ist das immer doof. Daher gibt es sogar einen entsprechenden Paramter/Variable dazu.
Naja, es geht jedenfalls, wenn man seine Umgebungsvariable so umbiegt.
$env:TERRAGRUNT_DOWNLOAD="C:\Temp"
Manchmal will man sein Git einfach woanders hinlegen. Man kann da eine riesen Sache draus, machen. Oder aber, man befasst sich damit, was wie git funktioniert und schon hat man schnell eine Lösung gefunden.
In meinem Fall wollte ich von einem olllen alten internen git Server weg zu Github und dabei auch gleich deren Vorstellung (main anstelle von master - zum Beispiel) folgen.
Es ergibt sich also folgender CLI Schnipsel um das Ziel zu erreichen
git clone $ALTESREPO
cd $ALTESREPO
git remote set-url origin $NEUESREPO
git branch -M main
git push -u origin main
git push --all origin
git push --tags origin
Zack - alles umgezogen.