mirror of https://github.com/linkerd/linkerd2.git
41 lines
1.1 KiB
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)
|
|
}
|
|
}
|