daemon: Daemon.buildSandboxOptions: move vars to where they're used

Move variables closer to where they're used instead of defining them all
at the start of the function.

Also removing some intermediate variables, unwrapped some lines, and combined
some checks to a single check.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
Sebastiaan van Stijn 2023-07-24 11:30:02 +02:00
parent 91cab53a3e
commit 27a27db73f
No known key found for this signature in database
GPG key ID: 76698F39D527CE8C

View file

@ -29,17 +29,8 @@ import (
)
func (daemon *Daemon) buildSandboxOptions(cfg *config.Config, container *container.Container) ([]libnetwork.SandboxOption, error) {
var (
sboxOptions []libnetwork.SandboxOption
err error
bindings = make(nat.PortMap)
pbList []types.PortBinding
exposeList []types.TransportPort
)
defaultNetName := runconfig.DefaultDaemonNetworkMode().NetworkName()
sboxOptions = append(sboxOptions, libnetwork.OptionHostname(container.Config.Hostname),
libnetwork.OptionDomainname(container.Config.Domainname))
var sboxOptions []libnetwork.SandboxOption
sboxOptions = append(sboxOptions, libnetwork.OptionHostname(container.Config.Hostname), libnetwork.OptionDomainname(container.Config.Domainname))
if container.HostConfig.NetworkMode.IsHost() {
sboxOptions = append(sboxOptions, libnetwork.OptionUseDefaultSandbox())
@ -49,7 +40,7 @@ func (daemon *Daemon) buildSandboxOptions(cfg *config.Config, container *contain
sboxOptions = append(sboxOptions, libnetwork.OptionUseExternalKey())
}
if err = setupPathsAndSandboxOptions(container, cfg, &sboxOptions); err != nil {
if err := setupPathsAndSandboxOptions(container, cfg, &sboxOptions); err != nil {
return nil, err
}
@ -74,7 +65,6 @@ func (daemon *Daemon) buildSandboxOptions(cfg *config.Config, container *contain
if container.Config.Domainname != "" {
name = name + "." + container.Config.Domainname
}
for _, a := range container.NetworkSettings.SecondaryIPAddresses {
sboxOptions = append(sboxOptions, libnetwork.OptionExtraHost(name, a.Addr))
}
@ -99,6 +89,7 @@ func (daemon *Daemon) buildSandboxOptions(cfg *config.Config, container *contain
sboxOptions = append(sboxOptions, libnetwork.OptionExtraHost(host, ip))
}
bindings := make(nat.PortMap)
if container.HostConfig.PortBindings != nil {
for p, b := range container.HostConfig.PortBindings {
bindings[p] = []nat.PortBinding{}
@ -119,11 +110,16 @@ func (daemon *Daemon) buildSandboxOptions(cfg *config.Config, container *contain
i++
}
nat.SortPortMap(ports, bindings)
var (
publishedPorts []types.PortBinding
exposedPorts []types.TransportPort
)
for _, port := range ports {
expose := types.TransportPort{}
expose.Proto = types.ParseProtocol(port.Proto())
expose.Port = uint16(port.Int())
exposeList = append(exposeList, expose)
exposedPorts = append(exposedPorts, expose)
pb := types.PortBinding{Port: expose.Port, Proto: expose.Proto}
binding := bindings[port]
@ -140,37 +136,30 @@ func (daemon *Daemon) buildSandboxOptions(cfg *config.Config, container *contain
pbCopy.HostPort = uint16(portStart)
pbCopy.HostPortEnd = uint16(portEnd)
pbCopy.HostIP = net.ParseIP(binding[i].HostIP)
pbList = append(pbList, pbCopy)
publishedPorts = append(publishedPorts, pbCopy)
}
if container.HostConfig.PublishAllPorts && len(binding) == 0 {
pbList = append(pbList, pb)
publishedPorts = append(publishedPorts, pb)
}
}
sboxOptions = append(sboxOptions,
libnetwork.OptionPortMapping(pbList),
libnetwork.OptionExposedPorts(exposeList))
sboxOptions = append(sboxOptions, libnetwork.OptionPortMapping(publishedPorts), libnetwork.OptionExposedPorts(exposedPorts))
// Legacy Link feature is supported only for the default bridge network.
// return if this call to build join options is not for default bridge network
// Legacy Link is only supported by docker run --link
defaultNetName := runconfig.DefaultDaemonNetworkMode().NetworkName()
bridgeSettings, ok := container.NetworkSettings.Networks[defaultNetName]
if !ok || bridgeSettings.EndpointSettings == nil {
return sboxOptions, nil
}
if bridgeSettings.EndpointID == "" {
if !ok || bridgeSettings.EndpointSettings == nil || bridgeSettings.EndpointID == "" {
return sboxOptions, nil
}
var (
childEndpoints, parentEndpoints []string
cEndpointID string
childEndpoints []string
cEndpointID string
)
children := daemon.children(container)
for linkAlias, child := range children {
for linkAlias, child := range daemon.children(container) {
if !isLinkable(child) {
return nil, fmt.Errorf("Cannot link to %s, as it does not belong to the default network", child.Name)
}
@ -181,20 +170,20 @@ func (daemon *Daemon) buildSandboxOptions(cfg *config.Config, container *contain
if alias != child.Name[1:] {
aliasList = aliasList + " " + child.Name[1:]
}
ipv4 := child.NetworkSettings.Networks[defaultNetName].IPAddress
ipv6 := child.NetworkSettings.Networks[defaultNetName].GlobalIPv6Address
if ipv4 != "" {
sboxOptions = append(sboxOptions, libnetwork.OptionExtraHost(aliasList, ipv4))
defaultNW := child.NetworkSettings.Networks[defaultNetName]
if defaultNW.IPAddress != "" {
sboxOptions = append(sboxOptions, libnetwork.OptionExtraHost(aliasList, defaultNW.IPAddress))
}
if ipv6 != "" {
sboxOptions = append(sboxOptions, libnetwork.OptionExtraHost(aliasList, ipv6))
if defaultNW.GlobalIPv6Address != "" {
sboxOptions = append(sboxOptions, libnetwork.OptionExtraHost(aliasList, defaultNW.GlobalIPv6Address))
}
cEndpointID = child.NetworkSettings.Networks[defaultNetName].EndpointID
cEndpointID = defaultNW.EndpointID
if cEndpointID != "" {
childEndpoints = append(childEndpoints, cEndpointID)
}
}
var parentEndpoints []string
for alias, parent := range daemon.parents(container) {
if cfg.DisableBridge || !container.HostConfig.NetworkMode.IsPrivate() {
continue
@ -202,11 +191,7 @@ func (daemon *Daemon) buildSandboxOptions(cfg *config.Config, container *contain
_, alias = path.Split(alias)
log.G(context.TODO()).Debugf("Update /etc/hosts of %s for alias %s with ip %s", parent.ID, alias, bridgeSettings.IPAddress)
sboxOptions = append(sboxOptions, libnetwork.OptionParentUpdate(
parent.ID,
alias,
bridgeSettings.IPAddress,
))
sboxOptions = append(sboxOptions, libnetwork.OptionParentUpdate(parent.ID, alias, bridgeSettings.IPAddress))
if cEndpointID != "" {
parentEndpoints = append(parentEndpoints, cEndpointID)
}