github.com/telepresenceio/telepresence/v2@v2.20.0-pro.6.0.20240517030216-236ea954e789/pkg/client/userd/session.go (about) 1 package userd 2 3 import ( 4 "context" 5 6 "github.com/blang/semver/v4" 7 "google.golang.org/grpc" 8 core "k8s.io/api/core/v1" 9 typed "k8s.io/client-go/kubernetes/typed/core/v1" 10 "k8s.io/client-go/rest" 11 12 "github.com/datawire/dlib/dgroup" 13 "github.com/telepresenceio/telepresence/rpc/v2/common" 14 "github.com/telepresenceio/telepresence/rpc/v2/connector" 15 rpc "github.com/telepresenceio/telepresence/rpc/v2/connector" 16 rootdRpc "github.com/telepresenceio/telepresence/rpc/v2/daemon" 17 "github.com/telepresenceio/telepresence/rpc/v2/manager" 18 "github.com/telepresenceio/telepresence/v2/pkg/agentconfig" 19 "github.com/telepresenceio/telepresence/v2/pkg/client" 20 "github.com/telepresenceio/telepresence/v2/pkg/restapi" 21 ) 22 23 type WatchWorkloadsStream interface { 24 Send(*rpc.WorkloadInfoSnapshot) error 25 Context() context.Context 26 } 27 28 type InterceptInfo interface { 29 InterceptResult() *rpc.InterceptResult 30 PreparedIntercept() *manager.PreparedIntercept 31 PortIdentifier() (agentconfig.PortIdentifier, error) 32 } 33 34 type KubeConfig interface { 35 GetContext() string 36 GetRestConfig() *rest.Config 37 GetManagerNamespace() string 38 } 39 40 type NamespaceListener func(context.Context) 41 42 type Session interface { 43 restapi.AgentState 44 KubeConfig 45 46 AddIntercept(context.Context, *rpc.CreateInterceptRequest) *rpc.InterceptResult 47 CanIntercept(context.Context, *rpc.CreateInterceptRequest) (InterceptInfo, *rpc.InterceptResult) 48 InterceptProlog(context.Context, *manager.CreateInterceptRequest) *rpc.InterceptResult 49 InterceptEpilog(context.Context, *rpc.CreateInterceptRequest, *rpc.InterceptResult) *rpc.InterceptResult 50 RemoveIntercept(context.Context, string) error 51 NewCreateInterceptRequest(*manager.InterceptSpec) *manager.CreateInterceptRequest 52 53 AddInterceptor(string, *rpc.Interceptor) error 54 RemoveInterceptor(string) error 55 ClearIntercepts(context.Context) error 56 57 GetInterceptInfo(string) *manager.InterceptInfo 58 GetInterceptSpec(string) *manager.InterceptSpec 59 InterceptsForWorkload(string, string) []*manager.InterceptSpec 60 61 ManagerClient() manager.ManagerClient 62 ManagerConn() *grpc.ClientConn 63 ManagerName() string 64 ManagerVersion() semver.Version 65 NewRemainRequest() *manager.RemainRequest 66 67 Status(context.Context) *rpc.ConnectInfo 68 UpdateStatus(context.Context, *rpc.ConnectRequest) *rpc.ConnectInfo 69 70 Uninstall(context.Context, *rpc.UninstallRequest) (*common.Result, error) 71 72 WatchWorkloads(context.Context, *rpc.WatchWorkloadsRequest, WatchWorkloadsStream) error 73 WorkloadInfoSnapshot(context.Context, []string, rpc.ListRequest_Filter) (*rpc.WorkloadInfoSnapshot, error) 74 75 GetCurrentNamespaces(forClientAccess bool) []string 76 ActualNamespace(string) string 77 AddNamespaceListener(context.Context, NamespaceListener) 78 79 WithK8sInterface(context.Context) context.Context 80 ForeachAgentPod(ctx context.Context, fn func(context.Context, typed.PodInterface, *core.Pod), filter func(*core.Pod) bool) error 81 82 GatherLogs(context.Context, *connector.LogsRequest) (*connector.LogsResponse, error) 83 GatherTraces(ctx context.Context, tr *connector.TracesRequest) *common.Result 84 85 SessionInfo() *manager.SessionInfo 86 RootDaemon() rootdRpc.DaemonClient 87 88 ApplyConfig(context.Context) error 89 GetConfig(context.Context) (*client.SessionConfig, error) 90 RunSession(c context.Context) error 91 StartServices(g *dgroup.Group) 92 Remain(ctx context.Context) error 93 Epilog(ctx context.Context) 94 Done() <-chan struct{} 95 } 96 97 type NewSessionFunc func(context.Context, *rpc.ConnectRequest, *client.Kubeconfig) (context.Context, Session, *connector.ConnectInfo) 98 99 type newSessionKey struct{} 100 101 func WithNewSessionFunc(ctx context.Context, f NewSessionFunc) context.Context { 102 return context.WithValue(ctx, newSessionKey{}, f) 103 } 104 105 func GetNewSessionFunc(ctx context.Context) NewSessionFunc { 106 if f, ok := ctx.Value(newSessionKey{}).(NewSessionFunc); ok { 107 return f 108 } 109 panic("No User daemon Session creator has been registered") 110 }