linkerd2/controller/api/destination/opaque_ports_adaptor.go

41 lines
1.1 KiB
Go

package destination
import (
"github.com/linkerd/linkerd2/controller/api/destination/watcher"
sp "github.com/linkerd/linkerd2/controller/gen/apis/serviceprofile/v1alpha2"
)
// opaquePortsAdaptor holds an underlying ProfileUpdateListener and updates
// that listener with changes to a service's opaque ports annotation. It
// implements OpaquePortsUpdateListener and should be passed to a source of
// profile updates and opaque ports updates.
type opaquePortsAdaptor struct {
listener watcher.ProfileUpdateListener
profile *sp.ServiceProfile
opaquePorts map[uint32]struct{}
}
func newOpaquePortsAdaptor(listener watcher.ProfileUpdateListener) *opaquePortsAdaptor {
return &opaquePortsAdaptor{
listener: listener,
}
}
func (opa *opaquePortsAdaptor) Update(profile *sp.ServiceProfile) {
opa.profile = profile
opa.publish()
}
func (opa *opaquePortsAdaptor) UpdateService(ports map[uint32]struct{}) {
opa.opaquePorts = ports
opa.publish()
}
func (opa *opaquePortsAdaptor) publish() {
if opa.profile != nil {
p := *opa.profile
p.Spec.OpaquePorts = opa.opaquePorts
opa.listener.Update(&p)
}
}