feat: custom label shorthands
This commit is contained in:
parent
c826cc97e6
commit
b4ef1baf65
8 changed files with 144 additions and 16 deletions
|
@ -1,6 +1,7 @@
|
|||
package docker
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
|
@ -28,15 +29,50 @@ func NewDynConfBuilder(configuration Shared, apiClient client.APIClient, swarm b
|
|||
return &DynConfBuilder{Shared: configuration, apiClient: apiClient, swarm: swarm}
|
||||
}
|
||||
|
||||
func (p *DynConfBuilder) applyLabels(container *dockerData, model interface{}) {
|
||||
for _, item := range p.LabelMap {
|
||||
value, ok := container.Labels[item.From]
|
||||
if !ok { // label doesn't exist
|
||||
continue
|
||||
}
|
||||
|
||||
writer := &bytes.Buffer{}
|
||||
if err := item.toTpl.Execute(writer, model); err != nil {
|
||||
continue // should never happen?
|
||||
}
|
||||
|
||||
to := writer.String()
|
||||
if item.Value != nil {
|
||||
container.Labels[to] = *item.Value
|
||||
} else {
|
||||
container.Labels[to] = value
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (p *DynConfBuilder) build(ctx context.Context, containersInspected []dockerData) *dynamic.Configuration {
|
||||
configurations := make(map[string]*dynamic.Configuration)
|
||||
|
||||
for _, container := range containersInspected {
|
||||
serviceName := getServiceName(container)
|
||||
|
||||
model := struct {
|
||||
Name string
|
||||
ContainerName string
|
||||
Labels *map[string]string
|
||||
}{
|
||||
Name: serviceName,
|
||||
ContainerName: strings.TrimPrefix(container.Name, "/"),
|
||||
Labels: &container.Labels,
|
||||
}
|
||||
|
||||
containerName := getServiceName(container) + "-" + container.ID
|
||||
|
||||
logger := log.Ctx(ctx).With().Str("container", containerName).Logger()
|
||||
ctxContainer := logger.WithContext(ctx)
|
||||
|
||||
p.applyLabels(&container, model)
|
||||
|
||||
if !p.keepContainer(ctxContainer, container) {
|
||||
continue
|
||||
}
|
||||
|
@ -83,18 +119,6 @@ func (p *DynConfBuilder) build(ctx context.Context, containersInspected []docker
|
|||
continue
|
||||
}
|
||||
|
||||
serviceName := getServiceName(container)
|
||||
|
||||
model := struct {
|
||||
Name string
|
||||
ContainerName string
|
||||
Labels map[string]string
|
||||
}{
|
||||
Name: serviceName,
|
||||
ContainerName: strings.TrimPrefix(container.Name, "/"),
|
||||
Labels: container.Labels,
|
||||
}
|
||||
|
||||
provider.BuildRouterConfiguration(ctx, confFromLabel.HTTP, serviceName, p.defaultRuleTpl, model)
|
||||
|
||||
configurations[containerName] = confFromLabel
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue