build - prozess optimiert mit push nach zot

nginx-kill - > maint. site...
This commit is contained in:
br committed 2026-10-03 12:44:45 +02:00
1 parent 665135f87e
commit 64417d8353
19 files changed
+447 -61

No files matched your search

+40 -3
View File
@@ -5,6 +5,7 @@ import (
"crypto/ed25519"
"encoding/json"
"errors"
"fmt"
"io"
"log/slog"
"net"
@@ -152,10 +153,36 @@ func newFakeDocker(t *testing.T, containers ...docker.Container) *fakeDocker {
t.Fatal(err)
}
mux := http.NewServeMux()
// Wie Docker: gestoppte Container ohne Ports in der Liste; die Zuordnung
// gibt es nur über /containers/{id}/json.
mux.HandleFunc("/containers/json", func(w http.ResponseWriter, r *http.Request) {
f.mu.Lock()
defer f.mu.Unlock()
json.NewEncoder(w).Encode(f.containers)
list := []docker.Container{}
for _, c := range f.containers {
if c.State != "running" {
c.Ports = nil
}
list = append(list, c)
}
json.NewEncoder(w).Encode(list)
})
mux.HandleFunc("/containers/{id}/json", func(w http.ResponseWriter, r *http.Request) {
f.mu.Lock()
defer f.mu.Unlock()
for _, c := range f.containers {
if c.ID != r.PathValue("id") {
continue
}
bindings := map[string][]map[string]string{}
for _, p := range c.Ports {
key := fmt.Sprintf("%d/%s", p.PrivatePort, p.Type)
bindings[key] = append(bindings[key], map[string]string{"HostIp": p.IP, "HostPort": fmt.Sprint(p.PublicPort)})
}
json.NewEncoder(w).Encode(map[string]any{"Id": c.ID, "HostConfig": map[string]any{"PortBindings": bindings}})
return
}
http.Error(w, `{"message":"No such container"}`, http.StatusNotFound)
})
mux.HandleFunc("/events", func(w http.ResponseWriter, r *http.Request) {
ch := make(chan docker.Event, 8)
@@ -256,8 +283,18 @@ func TestRun_EndToEnd(t *testing.T) {
t.Errorf("Knotenstatus %q", st)
}
dock.set("die") // Container gestoppt
eventually(t, "Route nach Containerstopp entfernt", func() bool { return s.traefikConfig(t) == "{}" })
// Gestoppt (docker stop, Absturz): Wartungsseite statt 404.
down := wordpress()
down.State = "exited"
dock.set("die", down)
eventually(t, "Wartungsseite nach Containerstopp", func() bool {
c := s.traefikConfig(t)
return strings.Contains(c, "kunde__node-1__wp") && strings.Contains(c, "sultan__interceptor") &&
strings.Contains(c, `"maintenance"`) && strings.Contains(c, "http://100.64.0.42:8081")
})
dock.set("destroy") // entfernt (docker compose down): Route weg
eventually(t, "Route nach Entfernen des Containers weg", func() bool { return s.traefikConfig(t) == "{}" })
dock.set("start", wordpress())
eventually(t, "Route nach Containerstart zurück", func() bool {