mirror of
https://github.com/moby/moby.git
synced 2026-01-11 18:51:37 +00:00
Add an OTel span processor copying the 'trigger' baggage member propagated through contexts to all children spans. It's used to identify what triggered a trace / span (API call, libnet init, etc...) All code paths that call libnet's `NewNetwork` set this baggage member with a unique value. For instance, this can be used to distinguish bridge's `createNetwork` spans triggered by daemon / libnet initialization from custom network creation triggerd by an API call. Two util functions are added to wrap `baggage.New` and `baggage.NewMemberRaw` to make it easier to deal with baggage and members by panicking on error. These should not be used with dynamic values. Signed-off-by: Albin Kerouanton <albinker@gmail.com>
38 lines
983 B
Go
38 lines
983 B
Go
package libnetwork
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"strconv"
|
|
|
|
"github.com/docker/docker/internal/otelutil"
|
|
"github.com/docker/docker/libnetwork/drivers/bridge"
|
|
"go.opentelemetry.io/otel/baggage"
|
|
)
|
|
|
|
const libnGWNetwork = "docker_gwbridge"
|
|
|
|
func getPlatformOption() EndpointOption {
|
|
return nil
|
|
}
|
|
|
|
func (c *Controller) createGWNetwork() (*Network, error) {
|
|
ctx := baggage.ContextWithBaggage(context.TODO(), otelutil.MustNewBaggage(
|
|
otelutil.MustNewMemberRaw(otelutil.TriggerKey, "libnetwork.Controller.createGWNetwork"),
|
|
))
|
|
|
|
n, err := c.NewNetwork(ctx, "bridge", libnGWNetwork, "",
|
|
NetworkOptionDriverOpts(map[string]string{
|
|
bridge.BridgeName: libnGWNetwork,
|
|
bridge.EnableICC: strconv.FormatBool(false),
|
|
bridge.EnableIPMasquerade: strconv.FormatBool(true),
|
|
}),
|
|
NetworkOptionEnableIPv4(true),
|
|
NetworkOptionEnableIPv6(false),
|
|
)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error creating external connectivity network: %v", err)
|
|
}
|
|
return n, err
|
|
}
|