Il mio primo contributo open source: kubectl-ack-conditions

Ho chiuso da poco la mia prima contribution a un progetto open source pubblico. Era una cosa che volevo fare da tempo, rimandata per un motivo o per l’altro, finché non mi sono trovato davanti a un problema abbastanza fastidioso da meritare uno strumento dedicato.

Il problema

Gestisco risorse AWS con ACK, AWS Controllers for Kubernetes: un controller diverso per ogni servizio, DynamoDB, S3, e così via. Per sapere se una risorsa è davvero sincronizzata con AWS, o se è finita in uno stato terminale che nessun retry risolverà, l’unico modo nativo è kubectl get <kind> -o yaml e leggere status.conditions a mano. Per ogni kind, per ogni namespace. Con più controller installati su un cluster reale, diventa un rituale che ripeti più volte al giorno solo per farti un’idea dello stato generale.

Cosa ho costruito

kubectl-ack-conditions scopre automaticamente le risorse ACK nel cluster interrogando la discovery API di Kubernetes e filtrando sugli API group che finiscono in .services.k8s.aws, la convenzione che ogni controller ACK segue. Il risultato è una tabella unica, colorata, con ACK.ResourceSynced e ACK.Terminal per tutte le risorse trovate, ordinate per priorità. C’è anche un flag, --fail-on-terminal, che lo trasforma da dashboard interattiva a controllo per pipeline CI/CD.

Quello che ho imparato

La parte più facile è stata scrivere il codice Go. Il resto è stato molto più lungo: una pipeline di release rimasta scaffolding mai eseguito davvero, con action ferme a versioni di anni fa e un flag di GoReleaser che non esisteva più; una documentazione lasciata a metà da un template mai riempito; e il processo di review di krew-index, che per una prima sottomissione richiede una PR manuale, la firma della CLA della CNCF, e un giro di feedback umano su come descrivere correttamente il plugin.

Se dovessi riassumere in una frase quello che porto a casa: la parte difficile di un contributo open source raramente è il codice. È tutto quello che sta intorno, ed è anche la parte che nessun tutorial ti prepara ad affrontare.

kubectl-ack-conditions è ora nell’indice ufficiale di krew. Repository: github.com/steamedeo/kubectl-ack-conditions