slu: Tool, ktery mi zjednodusuje praci

#tooling #go #devops #slu

Kazdy resime nejake rutijni tasky, ktere si chceme nejak zjednodusit. Kazdy to dela jinak, nekdo pouziva aliasy, nekdo si pise tooling v bash scriptech a nekdo treba Python. Nech utilitek je vetsinou hodne a jsou hodne ruznorode. Ja jsem se po nejakem case michani bash aliasu, Bash a Python skriptu jsem se rozhodl pro prepsani do jednoho Go toolu a nelituji.

Kdyz jsem se rozhodoval ze napisu tool, bylo jasne ze to bude open source a ze chci aby to mohlo pouzivat vice lidi a abych si mohl zjednodusovat praci na klientskych projektech. Uz me nebavilo porad vytvaret a mazat databaze v CI pomoci bash scriptu, nebo zjistovat token s ServiceAccountu v Kubernetes pomoci 2 sub shellu a nekolik pipes.

Proc v Go

Kdyz jsem se rozhodoval pro technologii, mel jsem tyto pozadavky:

  • Multiplatformni
  • Jednoduchy na vyvoj
  • Malo zavislosti

Mam na vyber asi mezi bashem (je vsude), Pythonem (muzu ho nainstalovat vsude) a Go (staticke binarky). Pokud ale vezmu druhy pozadavek, psani v Bashi je peklo, pokud se nejedna o sadu prikazu, ktere je potreba vykonat po sobe.

Rozhodoval jsem se mezi Go a Pythonem. S Pythonem mam mnohem vetsi zkusenosti nez s Go, ale oproti Go ma 2 nevyhody. Za prve, potrebuju mit nainstalovany Python a za druhe, potrebuju mit nainstalovane knihovny. Neni to tak hrozne, ale porad stahnout jednu binarku, ktera umi vsechno je mnohem jednodussi.

Navice existuje skvely tool GoReleaser, ktery se stara o build a distribuci aplikace. A to uplne skvele, vcetne vytvareni brew balicku.

CLI pomoci knihovny Cobra

V Go je jeste jedna skvela vec, a to je knihovna Cobra. Pomoci ni se daji delat CLI tooly velmi jednoduse, vcetne autocomplete a generovani dokumentace.

slu: SikaLabs Utils

Tooling jsem pojmenoval slu, at je to hezky kratke. V jeho subcommandech je potom pestra smes nastroju, ktere mi zjednodusuji vyvoj i praci s infrastrukturou.

Instalace slu

Diky GoReleaseru je distribuce a instalace jednoducha.

Instalace na Macu

Na Macu je instalace jednoducha, staci:

brew install sikalabs/tap/slu

Instalace na Linux AMD64 (pomoci install-slu)

Na Linuxu staci stahnout binarku, rozbalit ji a dat ji do path. Udelal jsem ale i install-slu tool, ktery jednou nainstaluju a pak jim muzu jednoduse upgradovat verze slu.

VERSION=v0.1.0 && \
OS=linux && \
ARCH=amd64 && \
BIN=install-slu && \
curl -L https://github.com/sikalabs/${BIN}/releases/download/${VERSION}/${BIN}_${VERSION}_${OS}_${ARCH}.tar.gz -o ${BIN}_${VERSION}_${OS}_${ARCH}.tar.gz && \
tar -xvzf ${BIN}_${VERSION}_${OS}_${ARCH}.tar.gz && \
rm ${BIN}_${VERSION}_${OS}_${ARCH}.tar.gz && \
mv ${BIN} /usr/local/bin/

Pak uz staci jen

install-slu i

a je to.

Instalace na Linux AMD64 (na primo)

Samozrejme muzeme slu nainstalovat primo pomoci:

VERSION=v0.13.0 && \
OS=linux && \
ARCH=amd64 && \
BIN=slu && \
curl -L https://github.com/sikalabs/${BIN}/releases/download/${VERSION}/${BIN}_${VERSION}_${OS}_${ARCH}.tar.gz -o ${BIN}_${VERSION}_${OS}_${ARCH}.tar.gz && \
tar -xvzf ${BIN}_${VERSION}_${OS}_${ARCH}.tar.gz && \
rm ${BIN}_${VERSION}_${OS}_${ARCH}.tar.gz && \
mv ${BIN} /usr/local/bin/

Ukazka pouziti

Kdyz si dnes vypisu help, jsou tam tyto subcommandy:

ondrej@sika-mac:~$ slu --help
SikaLabs Utils, v0.13.0

Usage:
  slu [command]

Available Commands:
  completion       generate the autocompletion script for the specified shell
  expand           Expand environment variables in files and strings
  file-templates   Create common files from templates
  generate-docs    Generate Markdown docs
  gitlab-ci        Utils for Gitlab CI
  go-code          Utils for writing Go code
  help             Help about any command
  install-bin      Install Binary
  install-bin-tool Install preconfigured binary tool like Terraform, Vault, ...
  ip               Get my current IP address (using checkip.amazonaws.com)
  k8s              Utils for Kubernetes
  mysql            MySQL Utils
  postgres         Postgres Utils
  proxy            Proxy Utils
  tls              TLS Utils
  version          Prints version

Flags:
  -h, --help   help for slu
      --json   Formatu output to JSON

Use "slu [command] --help" for more information about a command.

K dnesnimu dni slu obsahuje tooling pro variable expansion, praci s TLS certifikaty, ziskani IP, proxy, ...

Pojdme si ukazat alespon nejake ukazky, vice urcite bude v nasledujicich poskytovatelích.

Get public IP address

docs

ondrej@sika-mac:~$ slu ip
111.44.56.39
ondrej@sika-mac:~$

Create Postgres Database

docs

ondrej@sika-mac:~$ slu postgres -H localhost -P 5432 -u postgres -p pg create -n foo
ondrej@sika-mac:~$

Version bump in Go code

docs

ondrej@sika-mac:~$ slu go-code version-bump -v 0.33.1 -t
ondrej@sika-mac:~$

Install Terraform

docs

ondrej@sika-mac:~$ slu install-bin-tool terraform
ondrej@sika-mac:~$

Zaver

Zdrojove kody jsou samozrejme na Githubu:

Dokumentace je take na Githubu v repozitari sikalabs/slu-cli-docs.

Budu rad, kdyz Vam tool ulehci praci, dejte mi vedet na Twitteru @ondrejsika jak se Vam slu libi. Pokud budete chtit neco pridat, poslete issue nebo pull request.

Školení Kubernetes

Zaujal Vás Kubernetes? Chcete se dozvědět více? Přijďte na mé Školení Kubernetes!

Případně si můžete vybrat z nabídky otevřených kurzů.

Ondřej Šika

Jsem freelance DevOps konzultant a lektor. Zlepšuji práci vývojářských týmu zaváděním efektivních procesů ve vývoji. Naučím Vás používat prověřené nástroje a technologie, které povedou k rychlejšímu vývoji a bezpečnějšímu provozu vašeho software.

Ondrej Sika

ondrej@sika.io 📋
skoleni@sika.io 📋
+420 773 452 376 📋

Company ID
88114163 📋

VAT ID
CZ9302252102 📋

Zajímají Vás novinky?

Odebírejte můj newsletter a budete v obraze!

Website by Zuzana Jeschke