in internal/components/setup/kind.go [364:424]
func buildKindPort(port string, ro runtime.Object, pod *v1.Pod) (*kindPort, error) {
var needExpose, remotePort string
if strings.Contains(port, ":") {
needExpose = port
remotePort = strings.Split(port, ":")[1]
} else {
needExpose = fmt.Sprintf(":%s", port)
remotePort = port
}
service, isService := ro.(*v1.Service)
if !isService {
remotePortInt, err := strconv.Atoi(remotePort)
if err != nil {
containerPort, err := ctlutil.LookupContainerPortNumberByName(*pod, remotePort)
if err != nil {
return nil, err
}
remotePortInt = int(containerPort)
}
return &kindPort{
inputPort: remotePort,
realPort: remotePortInt,
waitExpose: needExpose,
}, nil
}
portnum64, err := strconv.ParseInt(remotePort, 10, 32)
var portnum int32
if err != nil {
svcPort, err1 := ctlutil.LookupServicePortNumberByName(*service, remotePort)
if err1 != nil {
return nil, err1
}
portnum = svcPort
} else {
portnum = int32(portnum64)
}
containerPort, err := ctlutil.LookupContainerPortNumberByServicePort(*service, *pod, portnum)
if err != nil {
// can't resolve a named port, or Service did not declare this port, return an error
return nil, err
}
// convert the resolved target port back to a string
realPort := int(containerPort)
if strconv.Itoa(realPort) != remotePort {
var localPort string
if strings.Contains(port, ":") {
localPort = strings.Split(port, ":")[0]
}
needExpose = fmt.Sprintf("%s:%d", localPort, realPort)
}
return &kindPort{
inputPort: remotePort,
realPort: realPort,
waitExpose: needExpose,
}, nil
}