build - prozess optimiert mit push nach zot
nginx-kill - > maint. site...
This commit is contained in:
1 parent
665135f87e
commit
64417d8353
19 files changed
+447
-61
No files matched your search
+71
-7
@@ -17,7 +17,7 @@ const servicesPrefix = "traefik.http.services."
|
||||
|
||||
var unsafeName = regexp.MustCompile(`[^A-Za-z0-9_-]`)
|
||||
|
||||
// Workloads übersetzt laufende Container in Workloads für service_state.
|
||||
// Workloads übersetzt Container in Workloads für service_state.
|
||||
//
|
||||
// Berücksichtigt werden nur Container mit traefik.enable=true. Weil der
|
||||
// Ingress auf einem anderen Host sitzt, wird loadbalancer.server.port (Port
|
||||
@@ -27,9 +27,20 @@ var unsafeName = regexp.MustCompile(`[^A-Za-z0-9_-]`)
|
||||
// Containernamen. Container, deren Ports von außen nicht erreichbar sind
|
||||
// (nicht veröffentlicht, nur Loopback, nur UDP), werden mit Warnung
|
||||
// weggelassen.
|
||||
func Workloads(containers []docker.Container, host string) ([]registry.Workload, []string) {
|
||||
var out []registry.Workload
|
||||
var warnings []string
|
||||
//
|
||||
// Gestoppte Container (State != "running", Ports aus PortBindings) bleiben
|
||||
// drin; ihre Services stehen in down, damit die Policy zur Wartungsseite
|
||||
// umleitet statt die Route zu entfernen. Überschneiden sich ihre Router-
|
||||
// oder Service-Namen mit einem laufenden Container, entfallen sie.
|
||||
func Workloads(containers []docker.Container, host string) (workloads []registry.Workload, down []string, warnings []string) {
|
||||
type candidate struct {
|
||||
workload registry.Workload
|
||||
running bool
|
||||
routers []string
|
||||
services []string
|
||||
}
|
||||
var candidates []candidate
|
||||
taken := map[string]bool{} // Namen laufender Container, "r:"/"s:" + klein
|
||||
for _, c := range containers {
|
||||
if !enabled(c.Labels) {
|
||||
continue
|
||||
@@ -39,10 +50,63 @@ func Workloads(containers []docker.Container, host string) ([]registry.Workload,
|
||||
warnings = append(warnings, warning)
|
||||
continue
|
||||
}
|
||||
out = append(out, registry.Workload{Name: c.Name(), Host: host, Labels: labels})
|
||||
cand := candidate{
|
||||
workload: registry.Workload{Name: c.Name(), Host: host, Labels: labels},
|
||||
running: c.State == "running",
|
||||
routers: labelNames(labels, "traefik.http.routers."),
|
||||
services: labelNames(labels, servicesPrefix),
|
||||
}
|
||||
if cand.running {
|
||||
for _, r := range cand.routers {
|
||||
taken["r:"+strings.ToLower(r)] = true
|
||||
}
|
||||
for _, s := range cand.services {
|
||||
taken["s:"+strings.ToLower(s)] = true
|
||||
}
|
||||
}
|
||||
candidates = append(candidates, cand)
|
||||
}
|
||||
slices.SortFunc(out, func(a, b registry.Workload) int { return strings.Compare(a.Name, b.Name) })
|
||||
return out, warnings
|
||||
collides := func(c candidate) bool {
|
||||
for _, r := range c.routers {
|
||||
if taken["r:"+strings.ToLower(r)] {
|
||||
return true
|
||||
}
|
||||
}
|
||||
for _, s := range c.services {
|
||||
if taken["s:"+strings.ToLower(s)] {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
for _, c := range candidates {
|
||||
if !c.running {
|
||||
if collides(c) {
|
||||
continue
|
||||
}
|
||||
down = append(down, c.services...)
|
||||
}
|
||||
workloads = append(workloads, c.workload)
|
||||
}
|
||||
slices.SortFunc(workloads, func(a, b registry.Workload) int { return strings.Compare(a.Name, b.Name) })
|
||||
slices.Sort(down)
|
||||
return workloads, slices.Compact(down), warnings
|
||||
}
|
||||
|
||||
// labelNames liefert die Namen (Schreibweise aus dem Label) unter prefix,
|
||||
// z. B. die Router aus traefik.http.routers.<name>.…
|
||||
func labelNames(labels map[string]string, prefix string) []string {
|
||||
var out []string
|
||||
for k := range labels {
|
||||
if len(k) <= len(prefix) || !strings.EqualFold(k[:len(prefix)], prefix) {
|
||||
continue
|
||||
}
|
||||
if name, _, ok := strings.Cut(k[len(prefix):], "."); ok && !slices.Contains(out, name) {
|
||||
out = append(out, name)
|
||||
}
|
||||
}
|
||||
slices.Sort(out)
|
||||
return out
|
||||
}
|
||||
|
||||
func enabled(labels map[string]string) bool {
|
||||
|
||||
Reference in new issue
Block a user