mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +00:00 
			
		
		
		
	Move the ServicePort/BaseServicePortInfo types to serviceport.go. Move the Endpoint/BaseEndpointInfo types to endpoint.go. To avoid confusion with the new filenames, rename service.go to servicechangetracker.go and endpoints.go to endpointschangetracker.go. (No code changes; this just moves some code from types.go and services.go to serviceport.go, and some code from types.go and endpoints.go to endpoint.go.)
		
			
				
	
	
		
			139 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			139 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
/*
 | 
						|
Copyright 2017 The Kubernetes Authors.
 | 
						|
 | 
						|
Licensed under the Apache License, Version 2.0 (the "License");
 | 
						|
you may not use this file except in compliance with the License.
 | 
						|
You may obtain a copy of the License at
 | 
						|
 | 
						|
    http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
 | 
						|
Unless required by applicable law or agreed to in writing, software
 | 
						|
distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
See the License for the specific language governing permissions and
 | 
						|
limitations under the License.
 | 
						|
*/
 | 
						|
 | 
						|
package proxy
 | 
						|
 | 
						|
import (
 | 
						|
	"net"
 | 
						|
	"strconv"
 | 
						|
 | 
						|
	"k8s.io/apimachinery/pkg/util/sets"
 | 
						|
)
 | 
						|
 | 
						|
// Endpoint in an interface which abstracts information about an endpoint.
 | 
						|
type Endpoint interface {
 | 
						|
	// String returns endpoint string.  An example format can be: `IP:Port`.
 | 
						|
	// We take the returned value as ServiceEndpoint.Endpoint.
 | 
						|
	String() string
 | 
						|
	// IP returns IP part of the endpoint.
 | 
						|
	IP() string
 | 
						|
	// Port returns the Port part of the endpoint.
 | 
						|
	Port() int
 | 
						|
 | 
						|
	// IsLocal returns true if the endpoint is running on the same host as kube-proxy.
 | 
						|
	IsLocal() bool
 | 
						|
	// IsReady returns true if an endpoint is ready and not terminating, or
 | 
						|
	// if PublishNotReadyAddresses is set on the service.
 | 
						|
	IsReady() bool
 | 
						|
	// IsServing returns true if an endpoint is ready. It does not account
 | 
						|
	// for terminating state.
 | 
						|
	IsServing() bool
 | 
						|
	// IsTerminating returns true if an endpoint is terminating. For pods,
 | 
						|
	// that is any pod with a deletion timestamp.
 | 
						|
	IsTerminating() bool
 | 
						|
 | 
						|
	// ZoneHints returns the zone hint for the endpoint. This is based on
 | 
						|
	// endpoint.hints.forZones[0].name in the EndpointSlice API.
 | 
						|
	ZoneHints() sets.Set[string]
 | 
						|
}
 | 
						|
 | 
						|
// BaseEndpointInfo contains base information that defines an endpoint.
 | 
						|
// This could be used directly by proxier while processing endpoints,
 | 
						|
// or can be used for constructing a more specific EndpointInfo struct
 | 
						|
// defined by the proxier if needed.
 | 
						|
type BaseEndpointInfo struct {
 | 
						|
	// Cache this values to improve performance
 | 
						|
	ip   string
 | 
						|
	port int
 | 
						|
	// endpoint is the same as net.JoinHostPort(ip,port)
 | 
						|
	endpoint string
 | 
						|
 | 
						|
	// isLocal indicates whether the endpoint is running on same host as kube-proxy.
 | 
						|
	isLocal bool
 | 
						|
 | 
						|
	// ready indicates whether this endpoint is ready and NOT terminating, unless
 | 
						|
	// PublishNotReadyAddresses is set on the service, in which case it will just
 | 
						|
	// always be true.
 | 
						|
	ready bool
 | 
						|
	// serving indicates whether this endpoint is ready regardless of its terminating state.
 | 
						|
	// For pods this is true if it has a ready status regardless of its deletion timestamp.
 | 
						|
	serving bool
 | 
						|
	// terminating indicates whether this endpoint is terminating.
 | 
						|
	// For pods this is true if it has a non-nil deletion timestamp.
 | 
						|
	terminating bool
 | 
						|
 | 
						|
	// zoneHints represent the zone hints for the endpoint. This is based on
 | 
						|
	// endpoint.hints.forZones[*].name in the EndpointSlice API.
 | 
						|
	zoneHints sets.Set[string]
 | 
						|
}
 | 
						|
 | 
						|
var _ Endpoint = &BaseEndpointInfo{}
 | 
						|
 | 
						|
// String is part of proxy.Endpoint interface.
 | 
						|
func (info *BaseEndpointInfo) String() string {
 | 
						|
	return info.endpoint
 | 
						|
}
 | 
						|
 | 
						|
// IP returns just the IP part of the endpoint, it's a part of proxy.Endpoint interface.
 | 
						|
func (info *BaseEndpointInfo) IP() string {
 | 
						|
	return info.ip
 | 
						|
}
 | 
						|
 | 
						|
// Port returns just the Port part of the endpoint.
 | 
						|
func (info *BaseEndpointInfo) Port() int {
 | 
						|
	return info.port
 | 
						|
}
 | 
						|
 | 
						|
// IsLocal is part of proxy.Endpoint interface.
 | 
						|
func (info *BaseEndpointInfo) IsLocal() bool {
 | 
						|
	return info.isLocal
 | 
						|
}
 | 
						|
 | 
						|
// IsReady returns true if an endpoint is ready and not terminating.
 | 
						|
func (info *BaseEndpointInfo) IsReady() bool {
 | 
						|
	return info.ready
 | 
						|
}
 | 
						|
 | 
						|
// IsServing returns true if an endpoint is ready, regardless of if the
 | 
						|
// endpoint is terminating.
 | 
						|
func (info *BaseEndpointInfo) IsServing() bool {
 | 
						|
	return info.serving
 | 
						|
}
 | 
						|
 | 
						|
// IsTerminating retruns true if an endpoint is terminating. For pods,
 | 
						|
// that is any pod with a deletion timestamp.
 | 
						|
func (info *BaseEndpointInfo) IsTerminating() bool {
 | 
						|
	return info.terminating
 | 
						|
}
 | 
						|
 | 
						|
// ZoneHints returns the zone hint for the endpoint.
 | 
						|
func (info *BaseEndpointInfo) ZoneHints() sets.Set[string] {
 | 
						|
	return info.zoneHints
 | 
						|
}
 | 
						|
 | 
						|
func newBaseEndpointInfo(ip string, port int, isLocal, ready, serving, terminating bool, zoneHints sets.Set[string]) *BaseEndpointInfo {
 | 
						|
	return &BaseEndpointInfo{
 | 
						|
		ip:          ip,
 | 
						|
		port:        port,
 | 
						|
		endpoint:    net.JoinHostPort(ip, strconv.Itoa(port)),
 | 
						|
		isLocal:     isLocal,
 | 
						|
		ready:       ready,
 | 
						|
		serving:     serving,
 | 
						|
		terminating: terminating,
 | 
						|
		zoneHints:   zoneHints,
 | 
						|
	}
 | 
						|
}
 |