pixel
Select Page

Orchestration mit Puppet Bolt

by | Jun 9, 2022 | Automation

Viele von den SysAdmins kennen das Tool mit dem A und deswegen möchte einen kleinen Einstieg zu Puppet Bolt geben.
Um Bolt nutzen zu können muss auf der Distribution seiner Wahl das Repository https://yum.puppet.com eingebunden sein und das Paket puppet-tools installiert sein. Zusätzlich brauchen wir für unseren kleinen Test das Paket docker und docker-compose, das auf dem System zu Verfügung stehen muss, da wir das die Aktionen auf Docker Containern deployen wollen.

Zuerst werden wir ein Bolt-Projekt Verzeichnis erstellen, wo dann das Modul-Verzeichnis darin erstellt wird:
mkdir my_infra && cd my_infra

Verzeichnis als bolt Arbeitsverzeichnis verifizieren:
bolt project init my_infra
In dem Verzeichnis befindet sich eine bolt-project.yaml womit Einstellungen für das Projekt vorgenommen werden können und eine inventory.yaml für zukünftige Hosts / Hostgruppen

Modul-Verzeichnis anlegen:
mkdir -p apache/plans && mkdir -p apache/files

So sollte die Struktur jetzt aussehen:
|── bolt-project.yaml
├── inventory.yaml
└── apache
├── files
└── plans

Jetzt erstellen wir den Container via Dockerfile, wo bolt später die Pakete installiert:
vim Dockerfile
FROM rastasheep/ubuntu-sshd
RUN apt-get update && apt-get -y install libssl-dev
EXPOSE 80
CMD ["/usr/sbin/sshd", "-D"]

kurze Erklärung: Hier wird ein Docker Container mit einem lauschenden SSH-Service unter Ubuntu erstellt, da Bolt auch über SSH kommuniziert

Dann erstellen wir die docker-compose.yaml, in dieser Datei wird festgelegt, wie viele Container erstellt werden und mit welchen Port diese von Außen erreichbar sind.
vim docker-compose.yaml
version: '3'
services:
target1:
build: .
ports:
- '3000:80'
- '2000:22'
container_name: webserver1
target2:
build: .
ports:
- '3001:80'
- '2001:22'
container_name: webserver2

Hier werden zwei Container erstellt auf dem der Port 22 auf 2000 und 2001 gebunden ist sowie der Port 80 auf 3000/3001.

Um die Container jetzt bauen zu lassen brauchen wir folgenden Befehl:
docker-compose up -d --build
Es werden jetzt Container-Images heruntergeladen und die beiden Container gebaut

Damit Bolt weiß wo das ganze dann angewendet werden soll, vervollständigen wir das inventory.yaml
vim inventory.yaml
groups:
- name: containers
targets:
- uri: 127.0.0.1:2000
name: webserver1
- uri: 127.0.0.1:2001
name: webserver2
config:
transport: ssh
ssh:
user: root
password: root
host-key-check: false

Um jetzt zu testen ob das Inventory File passt, prüft man mit folgendem Kommando:
bolt command run whoami -t all

Damit jetzt auf den Container Pakete installiert werden, müssen wir einen Task anlegen:
vim module/apache/plans/install.yaml
parameters:
targets:
type: TargetSpec

steps:
- name: install_apache
task: package
targets: $targets
parameters:
action: install
name: apache2
description: "Install Apache using the packages task"

Ich denke viel Erklärung braucht es hier nicht sollte selbsterklärend sein

Mit folgendem Kommando kann man den Plan ausführen um Apache auf dem Containern zu installieren:
bolt plan run apache::install -t containers

Das Ergebnis kann man sehen, wenn man im Browser http://127.0.0.1:3000 eingibt

Als keine Einführung in Puppet Bolt sollte das vorerst genügen, weiteres kann noch modifiziert und erweitert werden, siehe Quelle.

Quelle des Artikels: https://puppet.com/docs/bolt/latest/getting_started_with_bolt.html

Johannes Carraro
Johannes Carraro
Senior Systems Engineer

Bevor Johannes bei NETWAYS anheuerte war er knapp drei Jahre als Systemadministrator in Ansbach tätig. Seit Februar 2016 verstärkt er nun unser Team Operations als Senior Systems Engineer. In seiner Freizeit spielt Johannes E-Gitarre, bastelt an Linux Systemen zuhause herum und ertüchtigt sich beim Tischtennisspielen im Verein, bzw. Mountainbiken, Inlinern und nicht zuletzt Skifahren.
More posts on the topicAutomation

Neues vom Icinga-Installer

Mein letzter Blog Icinga Installation mit Director in 10 Minuten zeigte wie man mit dem Icinga-Installer und etwas Nacharbeit per Hand zu einem arbeitsfähigen Icinga-Server mit Director bekam. Inzwischen ist eine neue Version 0.5.0 vom Icinga-Installer veröffentlicht,...

Adblocker und Pi-Hole

Pi-Hole ist ein netzwerkweiter Adblocker, aber was ist eigentlich Adblocker? Ein Werbeblocker bzw. Adblocker ist ein Programm, mit dem verschiedene Arten von Werbung aus der Webanfragen eines Webbenutzers entfernt werden. Diese Programme zielen auf bestimmte Arten von...

Ansible – Loop over multiple tasks

The last time I wrote about Ansible and the possibility to use blocks to group multiple tasks. Which you can read here. Sadly this feature does not work with loop, so there is no clean way to loop over multiple tasks in a play without writing the same loop statement...

Ansible Host-Gruppen: Wer gehört zu wem?

Immer wieder kommt es vor, dass ich in größeren Ansible-Umgebungen arbeite. Diese enthalten eine Vielzahl von verschiedenen Gruppen im Inventory, die sich auch mal aus anderen Host-Gruppen zusammen setzen. Da ist es nicht immer leicht den Überblick zu behalten. Da...