Entwicklung von cesappd
Entwicklung
Um zu überprüfen, ob cesappd läuft, führen Sie systemctl status cesappd
aus. Um cesappd zu starten,
führen Sie systemctl start cesappd
aus.
Benötige Werkzeuge
- go 1.16
-
makefile
- per Paketmanager
-
Protocol Buffer Compiler
- per Paketmanager z. B. v3.6.1
apt install -y protobuf-compiler
- per Binary-Download, z. B. 3.17
- per Paketmanager z. B. v3.6.1
Test
Hinweis: IP-Adresse für gRPC-Ansprache verwenden (z. B. 192.168.56.1
), nicht jedoch localhost
u. dgl.
Damit Clients, wie beispielsweise grpcox
die Service-Discovery-Funktion des Server nutzen können, muss cesappd
mit
dem Parameter --env development
gestartet werden. Im Produktionsbetrieb werden die Endpunktinformation nicht nach außen
weitergegeben und müssen dem Client entsprechend bekannt sein.
Beispielaufrufe mit grpcurl
:
# verfügbare Services auflisten
./grpcurl -plaintext localhost:50051 list
# Anfrage an den Logging-Service
./grpcurl -plaintext -d '{"doguName": "nginx", "lineCount": 10}' localhost:50051 logging.DoguLogMessages/GetByLineNumber
Um eine Anfrage aus einem Dogu heraus durchführen zu können, muss eine zusätzliche Firewall-Regel für den vom Service verwendeten Port eingerichtet werden.
ufw allow from "$(docker network inspect "cesnet1" -f '{{(index .IPAM.Config 0).Subnet}}')" to any port 50051
Sollte ein eigener Docker-Container verwendet werden, muss dieser mit dem cesnet1
Docker-Netzwerk verbunden werden.
docker run -it --net cesnet1 alpine bash
Ausführen von bats Tests
Es wurde ein make target angelegt mit dem alle bats Tests ausgeführt werden können:
make unit-test-shell
Generierung von gRPC-Code
-
zusätzliche gRPC-Tools installieren
make install-grpc-tools
-
gRPC-Code erzeugen
make generate-grpc
Aus neuer Protobuf-Datei Code erzeugen
-
Package für neue Funktionalität festlegen, z. B.
newpackage
- Package wird u. a. für die strukturierte Ablage von generiertem Code verwendet
- Der Modul-Pfad muss enthalten sein, damit die Imports richtig generiert werden.
- neue Datei in
grpc-protobuf/
anlegen, z. B.grpc-protobuf/newfunction.proto
syntax = "proto3";
package newpackage;
option go_package = "github.com/cloudogu/cesappd/generated/newpackage";
-
make generate-grpc
aufrufen*.pb*.go
-Dateien werden in Verzeichnis/Packagegenerated/newpackage
angelegt- eigene Funktionalität müssen hingegen in Verzeichnis/Package
newpackage
abgelegt werden
Lokale Ausführung
Der Dienst cesappd
liest Log-Dateien aus dem fest hinterlegten Verzeichnis /var/log/docker
. Es muss sichergestellt
werden, dass dieses Verzeichnis existiert und die gewünschten Log-Dateien darin enthalten sind. Abhängig vom Ausführungskontext
müssen ggf. noch die Berechtigungen angepasst werden.
Ausführung im CES Kontext
- Bauen des cesappd mit
make
(gpg Key muss hierfür konfiguriert sein). - Aus
cesappd/target
Verzeichnis die Dateicesappd
in das root-Verzeichnis des lokalem CES kopieren. - Innerhalb der Vagrant-Maschnine mit Hilfe von
dpkg -i cesappd.deb
installieren (hierbei wird derpostinst
Skript ausgeführt).
Zum testen der
prerm
undpostrm
Skripte kann cesappd mit Hilfe des Befehlsdpkg -r cesappd
gelöscht werden. Die Skripte werden dann ausgeführt werden.
Kommunikation mit etcd in lokalem CES
Um direkt mit dem etcd
aus einem lokalen CES kommunizieren zu können, muss eine zusätzliche Firewall-Regel im CES
eingerichtet werden.
ufw allow from 192.168.56.1 to any port 4001
Dies erlaubt die Kommunikation von der Entwicklungsumgebung mit dem etcd
. Außerdem muss eine minimale
cesapp
-Konfiguration erstellt werden, die die richtige Adresse zum etcd
enthält und unter
/etc/cesapp/configuration.json
abgelegt ist.
{
"registry": {
"type": "etcd",
"endpoints": [
"http://192.168.56.1:4001"
]
}
}