in internal/workload/podspec_updates.go [351:405]
func (s *updateState) useInstancePort(p *cloudsqlapi.AuthProxyWorkload, is *cloudsqlapi.InstanceSpec) int32 {
n := types.NamespacedName{
Namespace: p.Namespace,
Name: p.Name,
}
// Does a managedPort already exist for this workload+instance?
var proxyPort *managedPort
for _, mp := range s.mods.Ports {
if mp.Instance.AuthProxyWorkload == n && mp.Instance.ConnectionString == is.ConnectionString {
proxyPort = mp
break
}
}
// Update the managedPort for this workload+instance
if proxyPort != nil {
if is.Port != nil && proxyPort.Port != *is.Port {
if s.isPortInUse(*is.Port) {
s.addError(cloudsqlapi.ErrorCodePortConflict,
fmt.Sprintf("proxy port %d for instance %s is already in use",
*is.Port, is.ConnectionString), p)
}
proxyPort.Port = *is.Port
}
return proxyPort.Port
}
// Since this is a new workload+instance, figure out the port number
var port int32
if is.Port != nil {
port = *is.Port
} else {
for s.isPortInUse(s.nextDBPort) {
s.nextDBPort++
}
port = s.nextDBPort
}
if s.isPortInUse(port) {
s.addError(cloudsqlapi.ErrorCodePortConflict,
fmt.Sprintf("proxy port %d for instance %s is already in use",
port, is.ConnectionString), p)
}
s.addPort(port, proxyInstanceID{
AuthProxyWorkload: types.NamespacedName{
Name: p.Name,
Namespace: p.Namespace,
},
ConnectionString: is.ConnectionString,
})
return port
}