@ -103,16 +103,22 @@ func TranslateNodeToContainer(node *k3d.Node) (*NodeInDocker, error) {
containerConfig . ExposedPorts = exposedPorts
containerConfig . ExposedPorts = exposedPorts
hostConfig . PortBindings = node . Ports
hostConfig . PortBindings = node . Ports
/* Network */
/* Network */
networkingConfig . EndpointsConfig = map [ string ] * network . EndpointSettings {
endpointsConfig := map [ string ] * network . EndpointSettings { }
node . Network : { } ,
for _ , net := range node . Networks {
endpointsConfig [ net ] = & network . EndpointSettings { }
}
}
netInfo , err := GetNetwork ( context . Background ( ) , node . Network )
networkingConfig . EndpointsConfig = endpointsConfig
if len ( node . Networks ) > 0 {
netInfo , err := GetNetwork ( context . Background ( ) , node . Networks [ 0 ] ) // FIXME: only considering first network here, as that's the one k3d creates for a cluster
if err != nil {
if err != nil {
log . Warnln ( "Failed to get network information" )
log . Warnln ( "Failed to get network information" )
log . Warnln ( err )
log . Warnln ( err )
} else if netInfo . Driver == "host" {
} else if netInfo . Driver == "host" {
hostConfig . NetworkMode = "host"
hostConfig . NetworkMode = "host"
}
}
}
return & NodeInDocker {
return & NodeInDocker {
ContainerConfig : containerConfig ,
ContainerConfig : containerConfig ,
@ -158,13 +164,16 @@ func TranslateContainerDetailsToNode(containerDetails types.ContainerJSON) (*k3d
restart = true
restart = true
}
}
// get the clusterNetwork
// get networks and ensure that the cluster network is first in list
clusterNetwork := ""
orderedNetworks := [ ] string { }
otherNetworks := [ ] string { }
for networkName := range containerDetails . NetworkSettings . Networks {
for networkName := range containerDetails . NetworkSettings . Networks {
if strings . HasPrefix ( networkName , fmt . Sprintf ( "%s-%s" , k3d . DefaultObjectNamePrefix , containerDetails . Config . Labels [ k3d . LabelClusterName ] ) ) { // FIXME: catch error if label 'k3d.cluster' does not exist, but this should also never be the case
if strings . HasPrefix ( networkName , fmt . Sprintf ( "%s-%s" , k3d . DefaultObjectNamePrefix , containerDetails . Config . Labels [ k3d . LabelClusterName ] ) ) { // FIXME: catch error if label 'k3d.cluster' does not exist, but this should also never be the case
clusterNetwork = networkName
orderedNetworks = append ( orderedNetworks , networkName )
}
}
otherNetworks = append ( otherNetworks , networkName )
}
}
orderedNetworks = append ( orderedNetworks , otherNetworks ... )
// serverOpts
// serverOpts
serverOpts := k3d . ServerOpts { IsInit : false }
serverOpts := k3d . ServerOpts { IsInit : false }
@ -213,7 +222,7 @@ func TranslateContainerDetailsToNode(containerDetails types.ContainerJSON) (*k3d
Restart : restart ,
Restart : restart ,
Created : containerDetails . Created ,
Created : containerDetails . Created ,
Labels : labels ,
Labels : labels ,
Network : clusterNetwork ,
Networks : orderedNetworks ,
ServerOpts : serverOpts ,
ServerOpts : serverOpts ,
AgentOpts : k3d . AgentOpts { } ,
AgentOpts : k3d . AgentOpts { } ,
State : nodeState ,
State : nodeState ,