package buildkit import ( "context" "encoding/json" "path/filepath" ctd "github.com/containerd/containerd/v2/client" "github.com/containerd/log" "github.com/moby/buildkit/executor" "github.com/moby/buildkit/executor/containerdexecutor" "github.com/moby/buildkit/solver/pb" "github.com/moby/buildkit/util/network" "github.com/opencontainers/runtime-spec/specs-go" ) const networkName = "nat" func newExecutor(opts executorOpts) (executor.Executor, network.ProxyProvider, error) { netRoot := filepath.Join(opts.root, "net") np := map[pb.NetMode]network.Provider{ pb.NetMode_UNSET: &bridgeProvider{Controller: opts.networkController, Root: netRoot}, pb.NetMode_NONE: network.NewNoneProvider(), } opt := ctd.WithDefaultNamespace(opts.containerdNamespace) client, err := ctd.New(opts.containerdAddr, opt) if err != nil { return nil, nil, err } return containerdexecutor.New(containerdexecutor.ExecutorOptions{ Client: client, Root: opts.root, DNSConfig: opts.dnsConfig, CDIManager: opts.cdiManager, NetworkProviders: np, ProxyProvider: opts.proxyProvider, HyperVIsolation: opts.hypervIsolation, }), opts.proxyProvider, nil } func (iface *lnInterface) Set(s *specs.Spec) error { <-iface.ready if iface.err != nil { log.G(context.TODO()).WithError(iface.err).Error("failed to set networking spec") return iface.err } allowUnqualifiedDNSQuery := false var epList []string for _, ep := range iface.sbx.Endpoints() { data, err := ep.DriverInfo() if err != nil { continue } if data["hnsid"] != nil { epList = append(epList, data["hnsid"].(string)) } if data["AllowUnqualifiedDNSQuery"] != nil { allowUnqualifiedDNSQuery = true } } if s.Windows == nil { s.Windows = &specs.Windows{} } if s.Windows.Network == nil { s.Windows.Network = &specs.WindowsNetwork{} } s.Windows.Network.EndpointList = epList s.Windows.Network.AllowUnqualifiedDNSQuery = allowUnqualifiedDNSQuery if b, err := json.Marshal(s); err == nil { log.G(context.TODO()).Debugf("Generated spec: %s", string(b)) } return nil }