Türchen #22: Kleiner Blick hinter die Kulissen
Von Michael Krieg am 22. Dezember 2019
Ein Blick in unseren Werkzeugkasten
Die Kommandozeile (auch “cli - command line interface” genannt) benötigen wir ständig: Hier sind alle wichtigen Werkzeuge installiert und konfiguriert. Neben Klassikern wie Git
, make
oder Docker
benötigen wir aber noch jede Menge andere Programme und Helferlein. Unter Mac OSX hat sich Homebrew bewährt - der fehlende Paketmanager, wenn man zuvor viel mit Linux zu tun hatte.
Wie können wir nun sicherstellen, dass alle im Team und gerade neue Kollegen auch mit den gleichen Tools arbeiten können? Sicherlich: eine gute Wiki Seite mit Anleitungen und Programmlisten ist schon mal ein guter Anfang. Unser Ansatz ist darüberhinaus programmatisch und findet sich in einem Ansible Playbook wieder.
Was wir benötigen
Unsere Macbooks sind mit Homebrew, RubyGems, NodeJS/npm und Python/PIP ausgestattet. Damit können wir Software und Tools unterschiedlicher Quellen beziehen und bereitstellen. Die Bandbreite reicht da von Serverless (via: NPM) über aws-cli (Python/PIP) bis hin zu InSpec (Ruby/Gems). So sieht z. B. eine Ansible Tasks Datei aus:
---
- import_tasks: pip3.yml
tags: [pip]
- include_tasks: npm.yml
tags: [npm]
- include_tasks: zsh.yml
tags: [zsh]
- include_tasks: gem.yml
tags: [gem]
- include_tasks: local-fs.yml
tags: [local-fs]
Ihr seht auch, dass wir uns um die zshell und einige lokale Dinge im Dateisystem kümmern. Die Liste von benötigten PIP Packages etwa hinterlegen wir in der Ansible Rolle unterhalb von vars/main.yml
:
---
pip3_packages:
- aws-shell
- awscli
- awslimitchecker
- PyYAML
- requests
- virtualenv
- virtualenvwrapper
- yamllint
Direkt im Ansible Playbook selbst pflegen wir unsere Liste an zu installierenden Homebrew Packages und rufen dann die nötigen Ansible Rollen auf:
---
- hosts: localhost
vars:
MY_HOME_DIR: "{{ lookup('env','HOME') }}"
homebrew_taps:
- homebrew/cask
- homebrew/cask-drivers
- homebrew/cask-fonts
- homebrew/cask-versions
- homebrew/core
- liamg/tfsec
- wata727/tflint
- weaveworks/tap
homebrew_installed_packages:
- bats-core
- duck
- git-crypt
- gnu-tar
- graphviz
- hugo
- jenv
- jq
- kubernetes-cli
- kubernetes-helm
- liamg/tfsec/tfsec
- { name: make, install_options: "with-default-names" }
- node
- packer
- pcre2
- pre-commit
- python
- rbenv
- remind101/formulae/assume-role
- serverless
- shellcheck
- terraform
- tflint
- weaveworks/tap/eksctl
- wget
- yadm
- yq
- zlib
- zsh
homebrew_uninstalled_packages:
- terraform_landscape
homebrew_cask_apps:
- 1password-cli
- aws-vault
- gpg-suite
roles:
- ansible-cc-macbook
- geerlingguy.homebrew
Zusammenfassung
Ansible ist nicht nur für Linux-Server sinnvoll, wir nutzen es auch zum Betanken unserer Macbooks. Dabei greifen wir auf Standard-Ansible-Rollen wie etwa Homebrew zurück und legen einfach in Listen und Hashes fest, was wir installieren wollen. Darüberhinaus konfigurieren wir auch unsere Standard-Shell. Alles, was man braucht, ist im Grunde Python 3 und Ansible!