//Cloudogu EcoSystem Docs

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

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

  1. zusätzliche gRPC-Tools installieren

    • make install-grpc-tools
  2. 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/Package generated/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 Datei cesappd in das root-Verzeichnis des lokalem CES kopieren.
  • Innerhalb der Vagrant-Maschnine mit Hilfe von dpkg -i cesappd.deb installieren (hierbei wird der postinstSkript ausgeführt).

Zum testen der prerm und postrm Skripte kann cesappd mit Hilfe des Befehls dpkg -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"
    ]
  }
}