Ich benötige oftmals mal schnell einen Host, um diverse Dinge zu testen. Aktuell möchte ich Ansible-Playbooks testen und auf die eigenen Ansprüche anpassen. Natürlich soll dabei der grundsätzliche Aufwand, eine entsprechende Maschine zu starten, so klein wie möglich gehalten werden.
Eine recht einfache und schnelle Methode ist die Nutzung von Vagrant. Man benötigt lediglich eine Vagrantfile-Datei, in welcher beschrieben steht, wie die zu erstellende VM (in meinem Fall Virtualbox) aussehen soll. Für Ansible ist es günstig, eine minimale, aktuelle Ubuntu-Box aufzusetzen, die man dann ähnlich der üblichen Cloud-VServer via Ansible konfigurieren kann.
Ein paar kleinere Anpassungen sind allerdings im Gegensatz zu den üblichen Vagrantfiles notwendig, um die VM einfach mit Ansible zu nutzen, bzw. einen „in etwa“-Betrieb mit einem tatsächlichen Cloud-Host zu simulieren:
- IP-Adresse im eigenen Netzwerk, also keine NAT
- SSH-Login als root via Key
Da sonst nichts großartig auf der Maschine installiert sein soll, genügen also auch minimale Angaben im Vagrantfile:
1
2
3
4
5
6
7
8
9 Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/bionic64"
config.vm.network :public_network
config.vm.provider :virtualbox do |vb, override|
# Fix docker not being able to resolve private registry in VirtualBox
vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
end
end
In diesem Fall wird eine Ubuntu Bionic x64-Box hochgefahren und das Netzwerk auf Public/local gesetzt. In einer gängigen Umgebung zieht sich die Box via DHCP eine IP-Adresse im LAN. Anstelle Ubuntu kann auch jedes andere minimale Grund-System/-Image gewählt werden. Wichtig ist nur: Falls man via Ansible das APT-Modul nutzt, sollte es eben auch eine Debian-basierte Distribution sein.
Mit dem Kommando vagrant up
wird die VM gestartet.
Grundsätzlich kann man sich nun vagrant-üblich via vagrant ssh
via SSH auf die VM verbinden. Dies ist zunächst auch mal notwendig, um die IP-Adresse der VM zu ermitteln und gleich den eigenen Public-Key unter /root abzulegen.
Daher wird zunächst der eigene Public-Key kopiert (cat ~/.ssh/id_rsa.pub
-> Ausgabe in die Zwischenablage kopieren. Dann via vagrant ssh
auf die VM verbinden und den eigenen Pub-Key in authorized_keys von root ablegen – in etwa so: sudo vim /root/.ssh/authorized_keys
<- Zwischenablage einfügen & VIM mit [ESC]:wq
verlassen.
Via ip addr
erfährt man zudem dann gleich die IP-Adresse aus dem eigenen LAN, die sich die VM gezogen hat. Diese IP-Adresse am besten gleich merken oder kopieren.
Vom Host sollte jetzt ein Login ohne Passwort via ssh root@[IP-DER-VM]
möglich sein. Um das ganze noch etwas lesbarer zu machen und für die Verwendung mit Ansible zu vereinfachen, editiert man zudem noch die Datei /etc/hosts
und setzt hier die IP-Adresse und den gewünschten „Fake-DNS“-Namen für die VM ein (beispielsweise 192.168.22.16 UbuntuVM1
. Ab sofort ist dann der Login auch via ssh root@UbuntuVM1
möglich, was die Arbeit mit Ansible dann auch etwas vereinfacht.