Skip to main content

Mein IaC-Workflow mit Tmux (für OpenTofu und Terraform)

· 2 min read
Janno Tjarks
DevOps Engineer

Screenshot des Neovim Tabs in TMUX

2021 begann für mich eine Reise in ein Rabbit Hole, dass bisher immer noch nicht sein Ende erreicht hat: Ich bin Terminal Enthusiasts geworden.

Von Mutt (Mails) über newsboat (RSS Feed Reader) bis hin zum spotify-player nutze ich in meinem Alltag nahezu immer Tools im Terminal. Spezifisch für meinen Arbeitsalltag oder Software-Entwicklung im Privaten setze ich auf Neovim als Code Editor und das Git CLI für Softwareversionierung. Terraform/OpenTofu sowie kubectl sind per se auch CLI Tools.

(Die einzige Aufnahme ist der Browser - Ich weiß auch nicht wieso, aber w3m oder Lynx ist mir dann doch zu abstract)

Diese exzessive Nutzung des Terminals vereinfacht mir tmux. tmux ist ein sogenannter Terminal Multiplexer. Es ermöglicht, mehre Terminal Sessions zu erstellen und zu verwalten. Somit lassen sich quasi Tabs von Terminal Sessions erstellen.

Wie es sich für eine Unix-Anwendung gehört: Man kann wundbar mit der tmux CLI Skripten:

tmux-iac-setup
#!/bin/bash

DIRECTORY=$(pwd)
BASENAME=$(basename $(pwd))

tmux rename-session $BASENAME
tmux rename-window nvim
tmux send-keys 'nvim' Enter
tmux new-window -c $DIRECTORY -n tofu
tmux new-window -c $DIRECTORY -n git
tmux send-keys 'git status' Enter
tmux new-window -c $DIRECTORY -n terminal
tmux select-window -t 1

Das vorhergehende Skript baut mir meine IaC spezifische Arbeitsumgebung aus vier Tabs:

  1. Neovim zum Bearbeiten des IaC Codes.
  2. Eine Terminal Session spezifisch zum Ausführen der IaC Tools, z.B. für tofu init oder terraform apply.
  3. Eine weitere Terminal Session für die Arbeit mit git. Es wird bei Aufbau der Arbeitsumgebung automatisch ein git status ausgeführt.
  4. Schlussendlich eine weitere Terminal Session für Experimente oder Spielereien, wie das Ausführen von Befehlen in der Azure CLI oder zum Ausführen von Lintern wie tflint.

Screenshot des Git Tabs in TMUX

All diese Tabs nutzen als Working Directory das Directory, indem das Skript initial ausgeführt wurde.

In tmux lassen sich mehrere Terminals als eine Session zusammenfassen. Jedes Projekt bekommt seine eigene Session, somit stelle ich einerseits sicher, dass der Index der Tabs bei jedem Projekt identisch sind (Neovim im Tab 1, Git im Tab 3, ... ). Andererseits wird so aus meiner Sicht dem Extraneous cognitive load entgegen gewirkt, da man nur die relevanten und bekannten Elemente einer anstehenden Tätigkeit geöffnet hat/angezeigt bekommt.

Das war mal ein kleiner Überblick über meinen IaC Workflow mit tmux. Anregungen und Fragen gerne bei mir adressieren. Unter Kontakt findet man genug Möglichkeiten, um ins Gespräch zu kommen!