diff --git a/pkg/clustersserver/adapters.go b/pkg/clustersserver/adapters.go new file mode 100644 index 0000000..24ddc2f --- /dev/null +++ b/pkg/clustersserver/adapters.go @@ -0,0 +1,88 @@ +package clustersserver + +import ( + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" +) + +type reconcilable interface { + runtime.Object + GetAnnotations() map[string]string + SetAnnotations(map[string]string) + GetStatusConditions() *[]metav1.Condition + GetLastHandledReconcileRequest() string + DeepCopyObject() runtime.Object + + asRuntimeObject() runtime.Object +} + +type apiType struct { + kind, humanKind string +} + +type reconcileWrapper struct { + apiType + object reconcilable +} + +type gitRepositoryAdapter struct { + *sourcev1.GitRepository +} + +func (o gitRepositoryAdapter) GetLastHandledReconcileRequest() string { + return o.Status.GetLastHandledReconcileRequest() +} + +func (o gitRepositoryAdapter) asRuntimeObject() runtime.Object { + return o.GitRepository +} + +type bucketAdapter struct { + *sourcev1.Bucket +} + +func (obj bucketAdapter) GetLastHandledReconcileRequest() string { + return obj.Status.GetLastHandledReconcileRequest() +} + +func (obj bucketAdapter) asRuntimeObject() runtime.Object { + return obj +} + +type helmRepoAdapter struct { + *sourcev1.HelmRepository +} + +func (obj helmRepoAdapter) GetLastHandledReconcileRequest() string { + return obj.Status.GetLastHandledReconcileRequest() +} + +func (obj helmRepoAdapter) asRuntimeObject() runtime.Object { + return obj.HelmRepository +} + +type helmChartAdapter struct { + *sourcev1.HelmChart +} + +func (obj helmChartAdapter) GetLastHandledReconcileRequest() string { + return obj.Status.GetLastHandledReconcileRequest() +} + +func (obj helmChartAdapter) asRuntimeObject() runtime.Object { + return obj.HelmChart +} + +type kustomizationAdapter struct { + *kustomizev1.Kustomization +} + +func (o kustomizationAdapter) GetLastHandledReconcileRequest() string { + return o.Status.GetLastHandledReconcileRequest() +} + +func (o kustomizationAdapter) asRuntimeObject() runtime.Object { + return o.Kustomization +} diff --git a/pkg/clustersserver/clustersserver.go b/pkg/clustersserver/clustersserver.go index a179f66..30edb13 100644 --- a/pkg/clustersserver/clustersserver.go +++ b/pkg/clustersserver/clustersserver.go @@ -15,7 +15,7 @@ import ( pb "github.com/fluxcd/webui/pkg/rpc/clusters" "github.com/fluxcd/webui/pkg/util" appsv1 "k8s.io/api/apps/v1" - apimetav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" @@ -100,9 +100,12 @@ func (s *Server) ListNamespacesForContext(ctx context.Context, msg *pb.ListNames } for _, ns := range result.Items { + res.Namespaces = append(res.Namespaces, ns.Name) } + fmt.Println(len(res.Namespaces)) + return &res, nil } @@ -124,7 +127,7 @@ func getSourceTypeEnum(kind string) pb.Source_Type { return pb.Source_Git } -func mapConditions(conditions []apimetav1.Condition) []*pb.Condition { +func mapConditions(conditions []metav1.Condition) []*pb.Condition { out := []*pb.Condition{} for _, c := range conditions { @@ -190,22 +193,31 @@ func (s *Server) ListKustomizations(ctx context.Context, msg *pb.ListKustomizati } -func getSourceType(sourceType pb.Source_Type) (runtime.Object, error) { +func kindToSourceType(kind string) pb.Source_Type { + switch kind { + case pb.Source_Git.String(): + return pb.Source_Git + } + + return -1 +} + +func getSourceType(sourceType pb.Source_Type) (runtime.Object, *reconcileWrapper, error) { switch sourceType { case pb.Source_Git: - return &sourcev1.GitRepositoryList{}, nil + return &sourcev1.GitRepositoryList{}, &reconcileWrapper{object: gitRepositoryAdapter{&sourcev1.GitRepository{}}}, nil case pb.Source_Bucket: - return &sourcev1.BucketList{}, nil + return &sourcev1.BucketList{}, &reconcileWrapper{object: bucketAdapter{&sourcev1.Bucket{}}}, nil case pb.Source_Helm: - return &sourcev1.HelmRepositoryList{}, nil + return &sourcev1.HelmRepositoryList{}, &reconcileWrapper{object: helmRepoAdapter{&sourcev1.HelmRepository{}}}, nil case pb.Source_Chart: - return &sourcev1.HelmChartList{}, nil + return &sourcev1.HelmChartList{}, &reconcileWrapper{object: helmChartAdapter{&sourcev1.HelmChart{}}}, nil } - return nil, errors.New("could not find source type") + return nil, nil, errors.New("could not find source type") } func appendSources(k8sObj runtime.Object, res *pb.ListSourcesRes) error { @@ -217,6 +229,7 @@ func appendSources(k8sObj runtime.Object, res *pb.ListSourcesRes) error { src := pb.Source{ Name: i.Name, + Namespace: i.Namespace, Type: pb.Source_Git, Url: i.Spec.URL, Artifact: &pb.Artifact{}, @@ -291,7 +304,7 @@ func (s *Server) ListSources(ctx context.Context, msg *pb.ListSourcesReq) (*pb.L res := &pb.ListSourcesRes{Sources: []*pb.Source{}} - k8sList, err := getSourceType(msg.SourceType) + k8sList, _, err := getSourceType(msg.SourceType) if err != nil { return nil, fmt.Errorf("could not get source type: %w", err) @@ -311,19 +324,13 @@ func (s *Server) ListSources(ctx context.Context, msg *pb.ListSourcesReq) (*pb.L return res, nil } -type reconcilable interface { - runtime.Object - GetAnnotations() map[string]string - SetAnnotations(map[string]string) -} - -func reconcileSource(ctx context.Context, c client.Client, spec kustomizev1.KustomizationSpec, obj reconcilable) error { +func reconcileSource(ctx context.Context, c client.Client, sourceName, namespace string, obj reconcilable) error { name := types.NamespacedName{ - Name: spec.SourceRef.Name, - Namespace: spec.SourceRef.Namespace, + Name: sourceName, + Namespace: namespace, } - if err := c.Get(ctx, name, obj); err != nil { + if err := c.Get(ctx, name, obj.asRuntimeObject()); err != nil { return err } @@ -337,17 +344,17 @@ func reconcileSource(ctx context.Context, c client.Client, spec kustomizev1.Kust obj.SetAnnotations(annotations) } - return c.Update(ctx, obj) + return c.Update(ctx, obj.asRuntimeObject()) } -func checkKustomizationSync(ctx context.Context, c client.Client, name types.NamespacedName, lastReconcile string) func() (bool, error) { +func checkResourceSync(ctx context.Context, c client.Client, name types.NamespacedName, obj reconcilable, lastReconcile string) func() (bool, error) { return func() (bool, error) { - kustomization := kustomizev1.Kustomization{} - err := c.Get(ctx, name, &kustomization) + err := c.Get(ctx, name, obj.asRuntimeObject()) if err != nil { return false, err } - return kustomization.Status.LastHandledReconcileAt != lastReconcile, nil + + return obj.GetLastHandledReconcileRequest() != lastReconcile, nil } } @@ -369,12 +376,16 @@ func (s *Server) SyncKustomization(ctx context.Context, msg *pb.SyncKustomizatio } if msg.WithSource { - switch kustomization.Spec.SourceRef.Kind { - case sourcev1.GitRepositoryKind: - err = reconcileSource(ctx, client, kustomization.Spec, &sourcev1.GitRepository{}) - case sourcev1.BucketKind: - err = reconcileSource(ctx, client, kustomization.Spec, &sourcev1.Bucket{}) + sourceRef := kustomization.Spec.SourceRef + + _, sourceObj, err := getSourceType(kindToSourceType(sourceRef.Kind)) + + if err != nil { + return nil, fmt.Errorf("could not get reconcileable source object: %w", err) } + + err = reconcileSource(ctx, client, sourceRef.Name, sourceRef.Namespace, sourceObj.object) + if err != nil { return nil, fmt.Errorf("could not reconcile source: %w", err) } @@ -395,7 +406,7 @@ func (s *Server) SyncKustomization(ctx context.Context, msg *pb.SyncKustomizatio if err := wait.PollImmediate( k8sPollInterval, k8sTimeout, - checkKustomizationSync(ctx, client, name, kustomization.Status.LastHandledReconcileAt), + checkResourceSync(ctx, client, name, kustomizationAdapter{&kustomizev1.Kustomization{}}, kustomization.Status.LastHandledReconcileAt), ); err != nil { return nil, err } @@ -409,6 +420,39 @@ func (s *Server) SyncKustomization(ctx context.Context, msg *pb.SyncKustomizatio } +func (s *Server) SyncSource(ctx context.Context, msg *pb.SyncSourceReq) (*pb.SyncSourceRes, error) { + c, err := s.getClient(msg.ContextName) + + if err != nil { + return nil, fmt.Errorf("could not create client: %w", err) + } + + _, sourceObj, err := getSourceType(msg.SourceType) + + if err != nil { + return nil, fmt.Errorf("could not get source type: %w", err) + } + + if err := reconcileSource(ctx, c, msg.SourceName, msg.Namespace, sourceObj.object); err != nil { + return nil, fmt.Errorf("could not reconcile source: %w", err) + } + + name := types.NamespacedName{ + Name: msg.SourceName, + Namespace: msg.Namespace, + } + + if err := wait.PollImmediate( + k8sPollInterval, + k8sTimeout, + checkResourceSync(ctx, c, name, sourceObj.object, sourceObj.object.GetLastHandledReconcileRequest()), + ); err != nil { + return nil, err + } + + return &pb.SyncSourceRes{}, nil +} + func (s *Server) ListHelmReleases(ctx context.Context, msg *pb.ListHelmReleasesReq) (*pb.ListHelmReleasesRes, error) { c, err := s.getClient(msg.ContextName) diff --git a/pkg/rpc/clusters/clusters.pb.go b/pkg/rpc/clusters/clusters.pb.go index 28d7ec6..52a6be6 100644 --- a/pkg/rpc/clusters/clusters.pb.go +++ b/pkg/rpc/clusters/clusters.pb.go @@ -1017,6 +1017,124 @@ func (x *ListSourcesRes) GetSources() []*Source { return nil } +type SyncSourceReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ContextName string `protobuf:"bytes,1,opt,name=contextName,proto3" json:"contextName,omitempty"` + Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` + SourceName string `protobuf:"bytes,3,opt,name=sourceName,proto3" json:"sourceName,omitempty"` + SourceType Source_Type `protobuf:"varint,4,opt,name=sourceType,proto3,enum=clusters.Source_Type" json:"sourceType,omitempty"` +} + +func (x *SyncSourceReq) Reset() { + *x = SyncSourceReq{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SyncSourceReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncSourceReq) ProtoMessage() {} + +func (x *SyncSourceReq) ProtoReflect() protoreflect.Message { + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SyncSourceReq.ProtoReflect.Descriptor instead. +func (*SyncSourceReq) Descriptor() ([]byte, []int) { + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{14} +} + +func (x *SyncSourceReq) GetContextName() string { + if x != nil { + return x.ContextName + } + return "" +} + +func (x *SyncSourceReq) GetNamespace() string { + if x != nil { + return x.Namespace + } + return "" +} + +func (x *SyncSourceReq) GetSourceName() string { + if x != nil { + return x.SourceName + } + return "" +} + +func (x *SyncSourceReq) GetSourceType() Source_Type { + if x != nil { + return x.SourceType + } + return Source_Git +} + +type SyncSourceRes struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Ok string `protobuf:"bytes,1,opt,name=ok,proto3" json:"ok,omitempty"` +} + +func (x *SyncSourceRes) Reset() { + *x = SyncSourceRes{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SyncSourceRes) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncSourceRes) ProtoMessage() {} + +func (x *SyncSourceRes) ProtoReflect() protoreflect.Message { + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SyncSourceRes.ProtoReflect.Descriptor instead. +func (*SyncSourceRes) Descriptor() ([]byte, []int) { + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{15} +} + +func (x *SyncSourceRes) GetOk() string { + if x != nil { + return x.Ok + } + return "" +} + type SyncKustomizationReq struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1031,7 +1149,7 @@ type SyncKustomizationReq struct { func (x *SyncKustomizationReq) Reset() { *x = SyncKustomizationReq{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[14] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1044,7 +1162,7 @@ func (x *SyncKustomizationReq) String() string { func (*SyncKustomizationReq) ProtoMessage() {} func (x *SyncKustomizationReq) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[14] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1057,7 +1175,7 @@ func (x *SyncKustomizationReq) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncKustomizationReq.ProtoReflect.Descriptor instead. func (*SyncKustomizationReq) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{14} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{16} } func (x *SyncKustomizationReq) GetContextName() string { @@ -1099,7 +1217,7 @@ type SyncKustomizationRes struct { func (x *SyncKustomizationRes) Reset() { *x = SyncKustomizationRes{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[15] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1112,7 +1230,7 @@ func (x *SyncKustomizationRes) String() string { func (*SyncKustomizationRes) ProtoMessage() {} func (x *SyncKustomizationRes) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[15] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1125,7 +1243,7 @@ func (x *SyncKustomizationRes) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncKustomizationRes.ProtoReflect.Descriptor instead. func (*SyncKustomizationRes) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{15} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{17} } func (x *SyncKustomizationRes) GetKustomization() *Kustomization { @@ -1154,7 +1272,7 @@ type HelmRelease struct { func (x *HelmRelease) Reset() { *x = HelmRelease{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[16] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1167,7 +1285,7 @@ func (x *HelmRelease) String() string { func (*HelmRelease) ProtoMessage() {} func (x *HelmRelease) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[16] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1180,7 +1298,7 @@ func (x *HelmRelease) ProtoReflect() protoreflect.Message { // Deprecated: Use HelmRelease.ProtoReflect.Descriptor instead. func (*HelmRelease) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{16} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{18} } func (x *HelmRelease) GetName() string { @@ -1258,7 +1376,7 @@ type ListHelmReleasesReq struct { func (x *ListHelmReleasesReq) Reset() { *x = ListHelmReleasesReq{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[17] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1271,7 +1389,7 @@ func (x *ListHelmReleasesReq) String() string { func (*ListHelmReleasesReq) ProtoMessage() {} func (x *ListHelmReleasesReq) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[17] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1284,7 +1402,7 @@ func (x *ListHelmReleasesReq) ProtoReflect() protoreflect.Message { // Deprecated: Use ListHelmReleasesReq.ProtoReflect.Descriptor instead. func (*ListHelmReleasesReq) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{17} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{19} } func (x *ListHelmReleasesReq) GetContextName() string { @@ -1312,7 +1430,7 @@ type ListHelmReleasesRes struct { func (x *ListHelmReleasesRes) Reset() { *x = ListHelmReleasesRes{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[18] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1325,7 +1443,7 @@ func (x *ListHelmReleasesRes) String() string { func (*ListHelmReleasesRes) ProtoMessage() {} func (x *ListHelmReleasesRes) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[18] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1338,7 +1456,7 @@ func (x *ListHelmReleasesRes) ProtoReflect() protoreflect.Message { // Deprecated: Use ListHelmReleasesRes.ProtoReflect.Descriptor instead. func (*ListHelmReleasesRes) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{18} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{20} } func (x *ListHelmReleasesRes) GetHelmReleases() []*HelmRelease { @@ -1360,7 +1478,7 @@ type Container struct { func (x *Container) Reset() { *x = Container{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[19] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1373,7 +1491,7 @@ func (x *Container) String() string { func (*Container) ProtoMessage() {} func (x *Container) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[19] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1386,7 +1504,7 @@ func (x *Container) ProtoReflect() protoreflect.Message { // Deprecated: Use Container.ProtoReflect.Descriptor instead. func (*Container) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{19} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{21} } func (x *Container) GetName() string { @@ -1414,7 +1532,7 @@ type PodTemplate struct { func (x *PodTemplate) Reset() { *x = PodTemplate{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[20] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1427,7 +1545,7 @@ func (x *PodTemplate) String() string { func (*PodTemplate) ProtoMessage() {} func (x *PodTemplate) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[20] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1440,7 +1558,7 @@ func (x *PodTemplate) ProtoReflect() protoreflect.Message { // Deprecated: Use PodTemplate.ProtoReflect.Descriptor instead. func (*PodTemplate) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{20} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{22} } func (x *PodTemplate) GetContainers() []*Container { @@ -1465,7 +1583,7 @@ type Workload struct { func (x *Workload) Reset() { *x = Workload{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[21] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1478,7 +1596,7 @@ func (x *Workload) String() string { func (*Workload) ProtoMessage() {} func (x *Workload) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[21] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1491,7 +1609,7 @@ func (x *Workload) ProtoReflect() protoreflect.Message { // Deprecated: Use Workload.ProtoReflect.Descriptor instead. func (*Workload) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{21} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{23} } func (x *Workload) GetName() string { @@ -1541,7 +1659,7 @@ type ListWorkloadsReq struct { func (x *ListWorkloadsReq) Reset() { *x = ListWorkloadsReq{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[22] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1554,7 +1672,7 @@ func (x *ListWorkloadsReq) String() string { func (*ListWorkloadsReq) ProtoMessage() {} func (x *ListWorkloadsReq) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[22] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1567,7 +1685,7 @@ func (x *ListWorkloadsReq) ProtoReflect() protoreflect.Message { // Deprecated: Use ListWorkloadsReq.ProtoReflect.Descriptor instead. func (*ListWorkloadsReq) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{22} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{24} } func (x *ListWorkloadsReq) GetContextName() string { @@ -1595,7 +1713,7 @@ type ListWorkloadsRes struct { func (x *ListWorkloadsRes) Reset() { *x = ListWorkloadsRes{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[23] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1608,7 +1726,7 @@ func (x *ListWorkloadsRes) String() string { func (*ListWorkloadsRes) ProtoMessage() {} func (x *ListWorkloadsRes) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[23] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1621,7 +1739,7 @@ func (x *ListWorkloadsRes) ProtoReflect() protoreflect.Message { // Deprecated: Use ListWorkloadsRes.ProtoReflect.Descriptor instead. func (*ListWorkloadsRes) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{23} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{25} } func (x *ListWorkloadsRes) GetWorkloads() []*Workload { @@ -1644,7 +1762,7 @@ type ListKustomizationChildrenReq struct { func (x *ListKustomizationChildrenReq) Reset() { *x = ListKustomizationChildrenReq{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[24] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1657,7 +1775,7 @@ func (x *ListKustomizationChildrenReq) String() string { func (*ListKustomizationChildrenReq) ProtoMessage() {} func (x *ListKustomizationChildrenReq) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[24] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1670,7 +1788,7 @@ func (x *ListKustomizationChildrenReq) ProtoReflect() protoreflect.Message { // Deprecated: Use ListKustomizationChildrenReq.ProtoReflect.Descriptor instead. func (*ListKustomizationChildrenReq) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{24} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{26} } func (x *ListKustomizationChildrenReq) GetContextName() string { @@ -1705,7 +1823,7 @@ type ListKustomizationChildrenRes struct { func (x *ListKustomizationChildrenRes) Reset() { *x = ListKustomizationChildrenRes{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[25] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1718,7 +1836,7 @@ func (x *ListKustomizationChildrenRes) String() string { func (*ListKustomizationChildrenRes) ProtoMessage() {} func (x *ListKustomizationChildrenRes) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[25] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1731,7 +1849,7 @@ func (x *ListKustomizationChildrenRes) ProtoReflect() protoreflect.Message { // Deprecated: Use ListKustomizationChildrenRes.ProtoReflect.Descriptor instead. func (*ListKustomizationChildrenRes) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{25} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{27} } func (x *ListKustomizationChildrenRes) GetWorkloads() []*Workload { @@ -1756,7 +1874,7 @@ type Event struct { func (x *Event) Reset() { *x = Event{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[26] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1769,7 +1887,7 @@ func (x *Event) String() string { func (*Event) ProtoMessage() {} func (x *Event) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[26] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1782,7 +1900,7 @@ func (x *Event) ProtoReflect() protoreflect.Message { // Deprecated: Use Event.ProtoReflect.Descriptor instead. func (*Event) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{26} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{28} } func (x *Event) GetType() string { @@ -1832,7 +1950,7 @@ type ListEventsReq struct { func (x *ListEventsReq) Reset() { *x = ListEventsReq{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[27] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1845,7 +1963,7 @@ func (x *ListEventsReq) String() string { func (*ListEventsReq) ProtoMessage() {} func (x *ListEventsReq) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[27] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1858,7 +1976,7 @@ func (x *ListEventsReq) ProtoReflect() protoreflect.Message { // Deprecated: Use ListEventsReq.ProtoReflect.Descriptor instead. func (*ListEventsReq) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{27} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{29} } func (x *ListEventsReq) GetContextName() string { @@ -1886,7 +2004,7 @@ type ListEventsRes struct { func (x *ListEventsRes) Reset() { *x = ListEventsRes{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[28] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1899,7 +2017,7 @@ func (x *ListEventsRes) String() string { func (*ListEventsRes) ProtoMessage() {} func (x *ListEventsRes) ProtoReflect() protoreflect.Message { - mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[28] + mi := &file_pkg_rpc_clusters_clusters_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1912,7 +2030,7 @@ func (x *ListEventsRes) ProtoReflect() protoreflect.Message { // Deprecated: Use ListEventsRes.ProtoReflect.Descriptor instead. func (*ListEventsRes) Descriptor() ([]byte, []int) { - return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{28} + return file_pkg_rpc_clusters_clusters_proto_rawDescGZIP(), []int{30} } func (x *ListEventsRes) GetEvents() []*Event { @@ -2051,160 +2169,177 @@ var file_pkg_rpc_clusters_clusters_proto_rawDesc = []byte{ 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x07, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x52, 0x07, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0xa4, 0x01, 0x0a, + 0x72, 0x63, 0x65, 0x52, 0x07, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0xa6, 0x01, 0x0a, + 0x0d, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x12, 0x20, + 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1e, + 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x35, + 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x1f, 0x0a, 0x0d, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0xa4, 0x01, 0x0a, 0x14, 0x53, 0x79, 0x6e, 0x63, 0x4b, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, + 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, + 0x2c, 0x0a, 0x11, 0x6b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6b, 0x75, 0x73, 0x74, + 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, + 0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x55, 0x0a, 0x14, 0x53, 0x79, 0x6e, 0x63, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, - 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x6b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x11, 0x6b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x22, 0x55, 0x0a, 0x14, 0x53, 0x79, 0x6e, 0x63, 0x4b, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x12, 0x3d, 0x0a, 0x0d, 0x6b, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4b, 0x75, - 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x6b, 0x75, 0x73, - 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb2, 0x02, 0x0a, 0x0b, 0x48, - 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, - 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x72, - 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, - 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b, 0x69, 0x6e, 0x64, - 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x33, 0x0a, 0x0a, 0x63, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, - 0x55, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, - 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x12, 0x3d, 0x0a, 0x0d, 0x6b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x6b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb2, 0x02, 0x0a, 0x0b, 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x51, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x65, - 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x12, 0x3a, 0x0a, - 0x0d, 0x68, 0x65, 0x6c, 0x6d, 0x5f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, - 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x0c, 0x68, 0x65, 0x6c, - 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x22, 0x35, 0x0a, 0x09, 0x43, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, - 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, - 0x22, 0x42, 0x0a, 0x0b, 0x50, 0x6f, 0x64, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, - 0x33, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x43, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x73, 0x22, 0xe7, 0x01, 0x0a, 0x08, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x32, 0x0a, 0x14, 0x6b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x14, 0x6b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x19, 0x6b, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x19, 0x6b, 0x75, 0x73, 0x74, - 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x70, 0x6f, 0x64, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x50, 0x6f, 0x64, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x52, 0x0b, 0x70, 0x6f, 0x64, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0x52, - 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x52, - 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x22, 0x44, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, - 0x61, 0x64, 0x73, 0x52, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, - 0x61, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x73, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x09, 0x77, - 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x22, 0xa6, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, - 0x74, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, - 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x6b, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x4b, 0x75, 0x73, - 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x4b, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x22, 0x50, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x52, 0x65, - 0x73, 0x12, 0x30, 0x0a, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, - 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, - 0x61, 0x64, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x4f, 0x0a, 0x0d, 0x4c, 0x69, 0x73, - 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x38, 0x0a, 0x0d, 0x4c, 0x69, - 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x06, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x32, 0x85, 0x05, 0x0a, 0x08, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x73, 0x12, 0x44, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, - 0x73, 0x12, 0x19, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x73, 0x52, 0x65, 0x73, 0x12, 0x68, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x12, 0x25, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x46, 0x6f, 0x72, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x65, - 0x73, 0x12, 0x56, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x12, 0x41, 0x0a, 0x0b, 0x4c, 0x69, 0x73, - 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x18, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x12, 0x53, 0x0a, 0x11, - 0x53, 0x79, 0x6e, 0x63, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x53, 0x79, 0x6e, - 0x63, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x1a, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x53, 0x79, 0x6e, - 0x63, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x12, 0x50, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x6c, - 0x6f, 0x61, 0x64, 0x73, 0x12, 0x1a, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x52, 0x65, 0x71, - 0x1a, 0x1a, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x52, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x0a, - 0x4c, 0x69, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x17, 0x2e, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x42, 0x12, 0x5a, 0x10, - 0x70, 0x6b, 0x67, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, + 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, + 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x12, 0x33, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, + 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x55, 0x0a, 0x13, 0x4c, 0x69, 0x73, + 0x74, 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x22, 0x51, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x0d, 0x68, 0x65, 0x6c, 0x6d, 0x5f, + 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x0c, 0x68, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x73, 0x22, 0x35, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x22, 0x42, 0x0a, 0x0b, 0x50, 0x6f, + 0x64, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x33, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x22, 0xe7, + 0x01, 0x0a, 0x08, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x32, 0x0a, + 0x14, 0x6b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x6b, 0x75, 0x73, + 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x3c, 0x0a, 0x19, 0x6b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x19, 0x6b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, + 0x37, 0x0a, 0x0b, 0x70, 0x6f, 0x64, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, + 0x50, 0x6f, 0x64, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x70, 0x6f, 0x64, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0x52, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, + 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, + 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x44, 0x0a, 0x10, + 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x52, 0x65, 0x73, + 0x12, 0x30, 0x0a, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x57, + 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, + 0x64, 0x73, 0x22, 0xa6, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x75, 0x73, 0x74, 0x6f, + 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, + 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, + 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x6b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x11, 0x6b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x16, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x50, 0x0a, 0x1c, 0x4c, + 0x69, 0x73, 0x74, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x43, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x09, 0x77, + 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, + 0x61, 0x64, 0x52, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x22, 0x83, 0x01, + 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, + 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, + 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, + 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x22, 0x4f, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x78, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x22, 0x38, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, + 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x32, 0xc5, + 0x05, 0x0a, 0x08, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x44, 0x0a, 0x0c, 0x4c, + 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x73, 0x12, 0x19, 0x2e, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x78, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x73, 0x52, 0x65, + 0x73, 0x12, 0x68, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x25, 0x2e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, + 0x74, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x46, 0x6f, + 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x65, 0x73, 0x12, 0x56, 0x0a, 0x12, 0x4c, + 0x69, 0x73, 0x74, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x1f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x73, 0x12, 0x41, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x12, 0x18, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x12, 0x53, 0x0a, 0x11, 0x53, 0x79, 0x6e, 0x63, 0x4b, 0x75, + 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x4b, 0x75, 0x73, 0x74, 0x6f, + 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1e, 0x2e, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x4b, 0x75, 0x73, 0x74, 0x6f, + 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x12, 0x50, 0x0a, 0x10, 0x4c, + 0x69, 0x73, 0x74, 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x12, + 0x1d, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, + 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1d, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x65, + 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x12, 0x47, 0x0a, + 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x12, 0x1a, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, + 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, + 0x61, 0x64, 0x73, 0x52, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x12, 0x17, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x12, 0x17, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, + 0x53, 0x79, 0x6e, 0x63, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x42, 0x12, 0x5a, 0x10, 0x70, 0x6b, 0x67, 0x2f, 0x72, 0x70, + 0x63, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -2220,7 +2355,7 @@ func file_pkg_rpc_clusters_clusters_proto_rawDescGZIP() []byte { } var file_pkg_rpc_clusters_clusters_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_pkg_rpc_clusters_clusters_proto_msgTypes = make([]protoimpl.MessageInfo, 29) +var file_pkg_rpc_clusters_clusters_proto_msgTypes = make([]protoimpl.MessageInfo, 31) var file_pkg_rpc_clusters_clusters_proto_goTypes = []interface{}{ (Source_Type)(0), // 0: clusters.Source.Type (*Context)(nil), // 1: clusters.Context @@ -2237,21 +2372,23 @@ var file_pkg_rpc_clusters_clusters_proto_goTypes = []interface{}{ (*Source)(nil), // 12: clusters.Source (*ListSourcesReq)(nil), // 13: clusters.ListSourcesReq (*ListSourcesRes)(nil), // 14: clusters.ListSourcesRes - (*SyncKustomizationReq)(nil), // 15: clusters.SyncKustomizationReq - (*SyncKustomizationRes)(nil), // 16: clusters.SyncKustomizationRes - (*HelmRelease)(nil), // 17: clusters.HelmRelease - (*ListHelmReleasesReq)(nil), // 18: clusters.ListHelmReleasesReq - (*ListHelmReleasesRes)(nil), // 19: clusters.ListHelmReleasesRes - (*Container)(nil), // 20: clusters.Container - (*PodTemplate)(nil), // 21: clusters.PodTemplate - (*Workload)(nil), // 22: clusters.Workload - (*ListWorkloadsReq)(nil), // 23: clusters.ListWorkloadsReq - (*ListWorkloadsRes)(nil), // 24: clusters.ListWorkloadsRes - (*ListKustomizationChildrenReq)(nil), // 25: clusters.ListKustomizationChildrenReq - (*ListKustomizationChildrenRes)(nil), // 26: clusters.ListKustomizationChildrenRes - (*Event)(nil), // 27: clusters.Event - (*ListEventsReq)(nil), // 28: clusters.ListEventsReq - (*ListEventsRes)(nil), // 29: clusters.ListEventsRes + (*SyncSourceReq)(nil), // 15: clusters.SyncSourceReq + (*SyncSourceRes)(nil), // 16: clusters.SyncSourceRes + (*SyncKustomizationReq)(nil), // 17: clusters.SyncKustomizationReq + (*SyncKustomizationRes)(nil), // 18: clusters.SyncKustomizationRes + (*HelmRelease)(nil), // 19: clusters.HelmRelease + (*ListHelmReleasesReq)(nil), // 20: clusters.ListHelmReleasesReq + (*ListHelmReleasesRes)(nil), // 21: clusters.ListHelmReleasesRes + (*Container)(nil), // 22: clusters.Container + (*PodTemplate)(nil), // 23: clusters.PodTemplate + (*Workload)(nil), // 24: clusters.Workload + (*ListWorkloadsReq)(nil), // 25: clusters.ListWorkloadsReq + (*ListWorkloadsRes)(nil), // 26: clusters.ListWorkloadsRes + (*ListKustomizationChildrenReq)(nil), // 27: clusters.ListKustomizationChildrenReq + (*ListKustomizationChildrenRes)(nil), // 28: clusters.ListKustomizationChildrenRes + (*Event)(nil), // 29: clusters.Event + (*ListEventsReq)(nil), // 30: clusters.ListEventsReq + (*ListEventsRes)(nil), // 31: clusters.ListEventsRes } var file_pkg_rpc_clusters_clusters_proto_depIdxs = []int32{ 1, // 0: clusters.ListContextsRes.contexts:type_name -> clusters.Context @@ -2264,35 +2401,38 @@ var file_pkg_rpc_clusters_clusters_proto_depIdxs = []int32{ 11, // 7: clusters.Source.artifact:type_name -> clusters.Artifact 0, // 8: clusters.ListSourcesReq.sourceType:type_name -> clusters.Source.Type 12, // 9: clusters.ListSourcesRes.sources:type_name -> clusters.Source - 7, // 10: clusters.SyncKustomizationRes.kustomization:type_name -> clusters.Kustomization - 6, // 11: clusters.HelmRelease.conditions:type_name -> clusters.Condition - 17, // 12: clusters.ListHelmReleasesRes.helm_releases:type_name -> clusters.HelmRelease - 20, // 13: clusters.PodTemplate.containers:type_name -> clusters.Container - 21, // 14: clusters.Workload.podTemplate:type_name -> clusters.PodTemplate - 22, // 15: clusters.ListWorkloadsRes.workloads:type_name -> clusters.Workload - 22, // 16: clusters.ListKustomizationChildrenRes.workloads:type_name -> clusters.Workload - 27, // 17: clusters.ListEventsRes.events:type_name -> clusters.Event - 2, // 18: clusters.Clusters.ListContexts:input_type -> clusters.ListContextsReq - 4, // 19: clusters.Clusters.ListNamespacesForContext:input_type -> clusters.ListNamespacesForContextReq - 8, // 20: clusters.Clusters.ListKustomizations:input_type -> clusters.ListKustomizationsReq - 13, // 21: clusters.Clusters.ListSources:input_type -> clusters.ListSourcesReq - 15, // 22: clusters.Clusters.SyncKustomization:input_type -> clusters.SyncKustomizationReq - 18, // 23: clusters.Clusters.ListHelmReleases:input_type -> clusters.ListHelmReleasesReq - 23, // 24: clusters.Clusters.ListWorkloads:input_type -> clusters.ListWorkloadsReq - 28, // 25: clusters.Clusters.ListEvents:input_type -> clusters.ListEventsReq - 3, // 26: clusters.Clusters.ListContexts:output_type -> clusters.ListContextsRes - 5, // 27: clusters.Clusters.ListNamespacesForContext:output_type -> clusters.ListNamespacesForContextRes - 9, // 28: clusters.Clusters.ListKustomizations:output_type -> clusters.ListKustomizationsRes - 14, // 29: clusters.Clusters.ListSources:output_type -> clusters.ListSourcesRes - 16, // 30: clusters.Clusters.SyncKustomization:output_type -> clusters.SyncKustomizationRes - 19, // 31: clusters.Clusters.ListHelmReleases:output_type -> clusters.ListHelmReleasesRes - 24, // 32: clusters.Clusters.ListWorkloads:output_type -> clusters.ListWorkloadsRes - 29, // 33: clusters.Clusters.ListEvents:output_type -> clusters.ListEventsRes - 26, // [26:34] is the sub-list for method output_type - 18, // [18:26] is the sub-list for method input_type - 18, // [18:18] is the sub-list for extension type_name - 18, // [18:18] is the sub-list for extension extendee - 0, // [0:18] is the sub-list for field type_name + 0, // 10: clusters.SyncSourceReq.sourceType:type_name -> clusters.Source.Type + 7, // 11: clusters.SyncKustomizationRes.kustomization:type_name -> clusters.Kustomization + 6, // 12: clusters.HelmRelease.conditions:type_name -> clusters.Condition + 19, // 13: clusters.ListHelmReleasesRes.helm_releases:type_name -> clusters.HelmRelease + 22, // 14: clusters.PodTemplate.containers:type_name -> clusters.Container + 23, // 15: clusters.Workload.podTemplate:type_name -> clusters.PodTemplate + 24, // 16: clusters.ListWorkloadsRes.workloads:type_name -> clusters.Workload + 24, // 17: clusters.ListKustomizationChildrenRes.workloads:type_name -> clusters.Workload + 29, // 18: clusters.ListEventsRes.events:type_name -> clusters.Event + 2, // 19: clusters.Clusters.ListContexts:input_type -> clusters.ListContextsReq + 4, // 20: clusters.Clusters.ListNamespacesForContext:input_type -> clusters.ListNamespacesForContextReq + 8, // 21: clusters.Clusters.ListKustomizations:input_type -> clusters.ListKustomizationsReq + 13, // 22: clusters.Clusters.ListSources:input_type -> clusters.ListSourcesReq + 17, // 23: clusters.Clusters.SyncKustomization:input_type -> clusters.SyncKustomizationReq + 20, // 24: clusters.Clusters.ListHelmReleases:input_type -> clusters.ListHelmReleasesReq + 25, // 25: clusters.Clusters.ListWorkloads:input_type -> clusters.ListWorkloadsReq + 30, // 26: clusters.Clusters.ListEvents:input_type -> clusters.ListEventsReq + 15, // 27: clusters.Clusters.SyncSource:input_type -> clusters.SyncSourceReq + 3, // 28: clusters.Clusters.ListContexts:output_type -> clusters.ListContextsRes + 5, // 29: clusters.Clusters.ListNamespacesForContext:output_type -> clusters.ListNamespacesForContextRes + 9, // 30: clusters.Clusters.ListKustomizations:output_type -> clusters.ListKustomizationsRes + 14, // 31: clusters.Clusters.ListSources:output_type -> clusters.ListSourcesRes + 18, // 32: clusters.Clusters.SyncKustomization:output_type -> clusters.SyncKustomizationRes + 21, // 33: clusters.Clusters.ListHelmReleases:output_type -> clusters.ListHelmReleasesRes + 26, // 34: clusters.Clusters.ListWorkloads:output_type -> clusters.ListWorkloadsRes + 31, // 35: clusters.Clusters.ListEvents:output_type -> clusters.ListEventsRes + 16, // 36: clusters.Clusters.SyncSource:output_type -> clusters.SyncSourceRes + 28, // [28:37] is the sub-list for method output_type + 19, // [19:28] is the sub-list for method input_type + 19, // [19:19] is the sub-list for extension type_name + 19, // [19:19] is the sub-list for extension extendee + 0, // [0:19] is the sub-list for field type_name } func init() { file_pkg_rpc_clusters_clusters_proto_init() } @@ -2470,7 +2610,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncKustomizationReq); i { + switch v := v.(*SyncSourceReq); i { case 0: return &v.state case 1: @@ -2482,7 +2622,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncKustomizationRes); i { + switch v := v.(*SyncSourceRes); i { case 0: return &v.state case 1: @@ -2494,7 +2634,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HelmRelease); i { + switch v := v.(*SyncKustomizationReq); i { case 0: return &v.state case 1: @@ -2506,7 +2646,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListHelmReleasesReq); i { + switch v := v.(*SyncKustomizationRes); i { case 0: return &v.state case 1: @@ -2518,7 +2658,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListHelmReleasesRes); i { + switch v := v.(*HelmRelease); i { case 0: return &v.state case 1: @@ -2530,7 +2670,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Container); i { + switch v := v.(*ListHelmReleasesReq); i { case 0: return &v.state case 1: @@ -2542,7 +2682,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PodTemplate); i { + switch v := v.(*ListHelmReleasesRes); i { case 0: return &v.state case 1: @@ -2554,7 +2694,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Workload); i { + switch v := v.(*Container); i { case 0: return &v.state case 1: @@ -2566,7 +2706,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListWorkloadsReq); i { + switch v := v.(*PodTemplate); i { case 0: return &v.state case 1: @@ -2578,7 +2718,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListWorkloadsRes); i { + switch v := v.(*Workload); i { case 0: return &v.state case 1: @@ -2590,7 +2730,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListKustomizationChildrenReq); i { + switch v := v.(*ListWorkloadsReq); i { case 0: return &v.state case 1: @@ -2602,7 +2742,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListKustomizationChildrenRes); i { + switch v := v.(*ListWorkloadsRes); i { case 0: return &v.state case 1: @@ -2614,7 +2754,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Event); i { + switch v := v.(*ListKustomizationChildrenReq); i { case 0: return &v.state case 1: @@ -2626,7 +2766,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListEventsReq); i { + switch v := v.(*ListKustomizationChildrenRes); i { case 0: return &v.state case 1: @@ -2638,6 +2778,30 @@ func file_pkg_rpc_clusters_clusters_proto_init() { } } file_pkg_rpc_clusters_clusters_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Event); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_rpc_clusters_clusters_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListEventsReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_rpc_clusters_clusters_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListEventsRes); i { case 0: return &v.state @@ -2656,7 +2820,7 @@ func file_pkg_rpc_clusters_clusters_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_pkg_rpc_clusters_clusters_proto_rawDesc, NumEnums: 1, - NumMessages: 29, + NumMessages: 31, NumExtensions: 0, NumServices: 1, }, diff --git a/pkg/rpc/clusters/clusters.proto b/pkg/rpc/clusters/clusters.proto index 685480d..46b6fd0 100644 --- a/pkg/rpc/clusters/clusters.proto +++ b/pkg/rpc/clusters/clusters.proto @@ -12,6 +12,7 @@ service Clusters { rpc ListHelmReleases (ListHelmReleasesReq) returns (ListHelmReleasesRes); rpc ListWorkloads (ListWorkloadsReq) returns (ListWorkloadsRes); rpc ListEvents (ListEventsReq) returns (ListEventsRes); + rpc SyncSource (SyncSourceReq) returns (SyncSourceRes); } message Context { @@ -114,6 +115,17 @@ message ListSourcesRes { repeated Source sources = 1; } +message SyncSourceReq { + string contextName = 1; + string namespace = 2; + string sourceName = 3; + Source.Type sourceType = 4; +} + +message SyncSourceRes { + string ok = 1; +} + message SyncKustomizationReq { string contextName = 1; string namespace = 2; diff --git a/pkg/rpc/clusters/clusters.twirp.go b/pkg/rpc/clusters/clusters.twirp.go index 44feb4f..93c71d1 100644 --- a/pkg/rpc/clusters/clusters.twirp.go +++ b/pkg/rpc/clusters/clusters.twirp.go @@ -55,6 +55,8 @@ type Clusters interface { ListWorkloads(context.Context, *ListWorkloadsReq) (*ListWorkloadsRes, error) ListEvents(context.Context, *ListEventsReq) (*ListEventsRes, error) + + SyncSource(context.Context, *SyncSourceReq) (*SyncSourceRes, error) } // ======================== @@ -63,7 +65,7 @@ type Clusters interface { type clustersProtobufClient struct { client HTTPClient - urls [8]string + urls [9]string interceptor twirp.Interceptor opts twirp.ClientOptions } @@ -83,7 +85,7 @@ func NewClustersProtobufClient(baseURL string, client HTTPClient, opts ...twirp. // Build method URLs: []/./ serviceURL := sanitizeBaseURL(baseURL) serviceURL += baseServicePath(clientOpts.PathPrefix(), "clusters", "Clusters") - urls := [8]string{ + urls := [9]string{ serviceURL + "ListContexts", serviceURL + "ListNamespacesForContext", serviceURL + "ListKustomizations", @@ -92,6 +94,7 @@ func NewClustersProtobufClient(baseURL string, client HTTPClient, opts ...twirp. serviceURL + "ListHelmReleases", serviceURL + "ListWorkloads", serviceURL + "ListEvents", + serviceURL + "SyncSource", } return &clustersProtobufClient{ @@ -470,13 +473,59 @@ func (c *clustersProtobufClient) callListEvents(ctx context.Context, in *ListEve return out, nil } +func (c *clustersProtobufClient) SyncSource(ctx context.Context, in *SyncSourceReq) (*SyncSourceRes, error) { + ctx = ctxsetters.WithPackageName(ctx, "clusters") + ctx = ctxsetters.WithServiceName(ctx, "Clusters") + ctx = ctxsetters.WithMethodName(ctx, "SyncSource") + caller := c.callSyncSource + if c.interceptor != nil { + caller = func(ctx context.Context, req *SyncSourceReq) (*SyncSourceRes, error) { + resp, err := c.interceptor( + func(ctx context.Context, req interface{}) (interface{}, error) { + typedReq, ok := req.(*SyncSourceReq) + if !ok { + return nil, twirp.InternalError("failed type assertion req.(*SyncSourceReq) when calling interceptor") + } + return c.callSyncSource(ctx, typedReq) + }, + )(ctx, req) + if resp != nil { + typedResp, ok := resp.(*SyncSourceRes) + if !ok { + return nil, twirp.InternalError("failed type assertion resp.(*SyncSourceRes) when calling interceptor") + } + return typedResp, err + } + return nil, err + } + } + return caller(ctx, in) +} + +func (c *clustersProtobufClient) callSyncSource(ctx context.Context, in *SyncSourceReq) (*SyncSourceRes, error) { + out := new(SyncSourceRes) + ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[8], in, out) + if err != nil { + twerr, ok := err.(twirp.Error) + if !ok { + twerr = twirp.InternalErrorWith(err) + } + callClientError(ctx, c.opts.Hooks, twerr) + return nil, err + } + + callClientResponseReceived(ctx, c.opts.Hooks) + + return out, nil +} + // ==================== // Clusters JSON Client // ==================== type clustersJSONClient struct { client HTTPClient - urls [8]string + urls [9]string interceptor twirp.Interceptor opts twirp.ClientOptions } @@ -496,7 +545,7 @@ func NewClustersJSONClient(baseURL string, client HTTPClient, opts ...twirp.Clie // Build method URLs: []/./ serviceURL := sanitizeBaseURL(baseURL) serviceURL += baseServicePath(clientOpts.PathPrefix(), "clusters", "Clusters") - urls := [8]string{ + urls := [9]string{ serviceURL + "ListContexts", serviceURL + "ListNamespacesForContext", serviceURL + "ListKustomizations", @@ -505,6 +554,7 @@ func NewClustersJSONClient(baseURL string, client HTTPClient, opts ...twirp.Clie serviceURL + "ListHelmReleases", serviceURL + "ListWorkloads", serviceURL + "ListEvents", + serviceURL + "SyncSource", } return &clustersJSONClient{ @@ -883,6 +933,52 @@ func (c *clustersJSONClient) callListEvents(ctx context.Context, in *ListEventsR return out, nil } +func (c *clustersJSONClient) SyncSource(ctx context.Context, in *SyncSourceReq) (*SyncSourceRes, error) { + ctx = ctxsetters.WithPackageName(ctx, "clusters") + ctx = ctxsetters.WithServiceName(ctx, "Clusters") + ctx = ctxsetters.WithMethodName(ctx, "SyncSource") + caller := c.callSyncSource + if c.interceptor != nil { + caller = func(ctx context.Context, req *SyncSourceReq) (*SyncSourceRes, error) { + resp, err := c.interceptor( + func(ctx context.Context, req interface{}) (interface{}, error) { + typedReq, ok := req.(*SyncSourceReq) + if !ok { + return nil, twirp.InternalError("failed type assertion req.(*SyncSourceReq) when calling interceptor") + } + return c.callSyncSource(ctx, typedReq) + }, + )(ctx, req) + if resp != nil { + typedResp, ok := resp.(*SyncSourceRes) + if !ok { + return nil, twirp.InternalError("failed type assertion resp.(*SyncSourceRes) when calling interceptor") + } + return typedResp, err + } + return nil, err + } + } + return caller(ctx, in) +} + +func (c *clustersJSONClient) callSyncSource(ctx context.Context, in *SyncSourceReq) (*SyncSourceRes, error) { + out := new(SyncSourceRes) + ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[8], in, out) + if err != nil { + twerr, ok := err.(twirp.Error) + if !ok { + twerr = twirp.InternalErrorWith(err) + } + callClientError(ctx, c.opts.Hooks, twerr) + return nil, err + } + + callClientResponseReceived(ctx, c.opts.Hooks) + + return out, nil +} + // ======================= // Clusters Server Handler // ======================= @@ -991,6 +1087,9 @@ func (s *clustersServer) ServeHTTP(resp http.ResponseWriter, req *http.Request) case "ListEvents": s.serveListEvents(ctx, resp, req) return + case "SyncSource": + s.serveSyncSource(ctx, resp, req) + return default: msg := fmt.Sprintf("no handler for path %q", req.URL.Path) s.writeError(ctx, resp, badRouteError(msg, req.Method, req.URL.Path)) @@ -2398,6 +2497,181 @@ func (s *clustersServer) serveListEventsProtobuf(ctx context.Context, resp http. callResponseSent(ctx, s.hooks) } +func (s *clustersServer) serveSyncSource(ctx context.Context, resp http.ResponseWriter, req *http.Request) { + header := req.Header.Get("Content-Type") + i := strings.Index(header, ";") + if i == -1 { + i = len(header) + } + switch strings.TrimSpace(strings.ToLower(header[:i])) { + case "application/json": + s.serveSyncSourceJSON(ctx, resp, req) + case "application/protobuf": + s.serveSyncSourceProtobuf(ctx, resp, req) + default: + msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) + twerr := badRouteError(msg, req.Method, req.URL.Path) + s.writeError(ctx, resp, twerr) + } +} + +func (s *clustersServer) serveSyncSourceJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { + var err error + ctx = ctxsetters.WithMethodName(ctx, "SyncSource") + ctx, err = callRequestRouted(ctx, s.hooks) + if err != nil { + s.writeError(ctx, resp, err) + return + } + + reqContent := new(SyncSourceReq) + unmarshaler := jsonpb.Unmarshaler{AllowUnknownFields: true} + if err = unmarshaler.Unmarshal(req.Body, reqContent); err != nil { + s.writeError(ctx, resp, malformedRequestError("the json request could not be decoded")) + return + } + + handler := s.Clusters.SyncSource + if s.interceptor != nil { + handler = func(ctx context.Context, req *SyncSourceReq) (*SyncSourceRes, error) { + resp, err := s.interceptor( + func(ctx context.Context, req interface{}) (interface{}, error) { + typedReq, ok := req.(*SyncSourceReq) + if !ok { + return nil, twirp.InternalError("failed type assertion req.(*SyncSourceReq) when calling interceptor") + } + return s.Clusters.SyncSource(ctx, typedReq) + }, + )(ctx, req) + if resp != nil { + typedResp, ok := resp.(*SyncSourceRes) + if !ok { + return nil, twirp.InternalError("failed type assertion resp.(*SyncSourceRes) when calling interceptor") + } + return typedResp, err + } + return nil, err + } + } + + // Call service method + var respContent *SyncSourceRes + func() { + defer ensurePanicResponses(ctx, resp, s.hooks) + respContent, err = handler(ctx, reqContent) + }() + + if err != nil { + s.writeError(ctx, resp, err) + return + } + if respContent == nil { + s.writeError(ctx, resp, twirp.InternalError("received a nil *SyncSourceRes and nil error while calling SyncSource. nil responses are not supported")) + return + } + + ctx = callResponsePrepared(ctx, s.hooks) + + var buf bytes.Buffer + marshaler := &jsonpb.Marshaler{OrigName: true, EmitDefaults: !s.jsonSkipDefaults} + if err = marshaler.Marshal(&buf, respContent); err != nil { + s.writeError(ctx, resp, wrapInternal(err, "failed to marshal json response")) + return + } + + ctx = ctxsetters.WithStatusCode(ctx, http.StatusOK) + respBytes := buf.Bytes() + resp.Header().Set("Content-Type", "application/json") + resp.Header().Set("Content-Length", strconv.Itoa(len(respBytes))) + resp.WriteHeader(http.StatusOK) + + if n, err := resp.Write(respBytes); err != nil { + msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) + twerr := twirp.NewError(twirp.Unknown, msg) + ctx = callError(ctx, s.hooks, twerr) + } + callResponseSent(ctx, s.hooks) +} + +func (s *clustersServer) serveSyncSourceProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { + var err error + ctx = ctxsetters.WithMethodName(ctx, "SyncSource") + ctx, err = callRequestRouted(ctx, s.hooks) + if err != nil { + s.writeError(ctx, resp, err) + return + } + + buf, err := ioutil.ReadAll(req.Body) + if err != nil { + s.writeError(ctx, resp, wrapInternal(err, "failed to read request body")) + return + } + reqContent := new(SyncSourceReq) + if err = proto.Unmarshal(buf, reqContent); err != nil { + s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) + return + } + + handler := s.Clusters.SyncSource + if s.interceptor != nil { + handler = func(ctx context.Context, req *SyncSourceReq) (*SyncSourceRes, error) { + resp, err := s.interceptor( + func(ctx context.Context, req interface{}) (interface{}, error) { + typedReq, ok := req.(*SyncSourceReq) + if !ok { + return nil, twirp.InternalError("failed type assertion req.(*SyncSourceReq) when calling interceptor") + } + return s.Clusters.SyncSource(ctx, typedReq) + }, + )(ctx, req) + if resp != nil { + typedResp, ok := resp.(*SyncSourceRes) + if !ok { + return nil, twirp.InternalError("failed type assertion resp.(*SyncSourceRes) when calling interceptor") + } + return typedResp, err + } + return nil, err + } + } + + // Call service method + var respContent *SyncSourceRes + func() { + defer ensurePanicResponses(ctx, resp, s.hooks) + respContent, err = handler(ctx, reqContent) + }() + + if err != nil { + s.writeError(ctx, resp, err) + return + } + if respContent == nil { + s.writeError(ctx, resp, twirp.InternalError("received a nil *SyncSourceRes and nil error while calling SyncSource. nil responses are not supported")) + return + } + + ctx = callResponsePrepared(ctx, s.hooks) + + respBytes, err := proto.Marshal(respContent) + if err != nil { + s.writeError(ctx, resp, wrapInternal(err, "failed to marshal proto response")) + return + } + + ctx = ctxsetters.WithStatusCode(ctx, http.StatusOK) + resp.Header().Set("Content-Type", "application/protobuf") + resp.Header().Set("Content-Length", strconv.Itoa(len(respBytes))) + resp.WriteHeader(http.StatusOK) + if n, err := resp.Write(respBytes); err != nil { + msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) + twerr := twirp.NewError(twirp.Unknown, msg) + ctx = callError(ctx, s.hooks, twerr) + } + callResponseSent(ctx, s.hooks) +} + func (s *clustersServer) ServiceDescriptor() ([]byte, int) { return twirpFileDescriptor0, 0 } @@ -2960,91 +3234,94 @@ func callClientError(ctx context.Context, h *twirp.ClientHooks, err twirp.Error) } var twirpFileDescriptor0 = []byte{ - // 1375 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0xe9, 0x6e, 0x1c, 0x45, - 0x10, 0x66, 0xbd, 0x87, 0x67, 0x6b, 0xbd, 0xf6, 0xba, 0xe2, 0x24, 0x93, 0x21, 0x87, 0x35, 0xe2, - 0x58, 0x50, 0x70, 0x22, 0x47, 0x81, 0x08, 0x12, 0x22, 0xc7, 0x81, 0x20, 0x05, 0x85, 0x30, 0x49, - 0x08, 0xe2, 0x0f, 0x9a, 0xcc, 0xb6, 0xbd, 0x23, 0xcf, 0x95, 0xee, 0xde, 0x0d, 0xe6, 0x2f, 0x42, - 0x48, 0x88, 0x7f, 0xbc, 0x02, 0xe2, 0x01, 0x78, 0x29, 0x5e, 0x03, 0xf5, 0x31, 0x33, 0x3d, 0xb3, - 0x07, 0x96, 0xe5, 0x7f, 0x5b, 0x5f, 0x55, 0xd7, 0x54, 0x57, 0x7d, 0x55, 0xdd, 0xbd, 0x70, 0x2d, - 0x3b, 0x3a, 0xbc, 0x41, 0xb3, 0xe0, 0x46, 0x10, 0x4d, 0x18, 0x27, 0x94, 0x15, 0x3f, 0x76, 0x32, - 0x9a, 0xf2, 0x14, 0xad, 0x5c, 0x76, 0xaf, 0xc0, 0xea, 0x7e, 0x9a, 0x70, 0xf2, 0x13, 0x47, 0x84, - 0x56, 0xe2, 0xc7, 0xc4, 0x6e, 0x6c, 0x37, 0x86, 0x5d, 0x4f, 0xfe, 0x76, 0x37, 0x61, 0xe3, 0xeb, - 0x90, 0x71, 0x6d, 0xc2, 0x3c, 0xf2, 0xda, 0x1d, 0xd7, 0x21, 0x86, 0xef, 0xc1, 0x7a, 0x30, 0xa1, - 0x94, 0x24, 0x39, 0xaa, 0x7d, 0xd4, 0x50, 0xfc, 0x08, 0xac, 0x40, 0x2f, 0xb3, 0x57, 0xb6, 0x9b, - 0xc3, 0xde, 0xee, 0xe6, 0x4e, 0x11, 0x99, 0x36, 0xf2, 0x0a, 0x13, 0xf7, 0x3e, 0xbc, 0x2d, 0xbe, - 0xf4, 0xc4, 0x8f, 0x09, 0xcb, 0xfc, 0x80, 0xb0, 0x2f, 0x53, 0x9a, 0x5b, 0x91, 0xd7, 0xb8, 0x0d, - 0x3d, 0x6d, 0xfa, 0xa4, 0x0c, 0xdb, 0x84, 0xdc, 0x7b, 0xcb, 0x1c, 0x30, 0xbc, 0x0a, 0x90, 0x14, - 0x2a, 0xbb, 0xb1, 0xdd, 0x1c, 0x76, 0x3d, 0x03, 0x71, 0x7f, 0x6b, 0x40, 0x77, 0x3f, 0x4d, 0x46, - 0x21, 0x0f, 0xd3, 0x44, 0xa4, 0x87, 0x1f, 0x67, 0x45, 0x7a, 0xc4, 0x6f, 0xbc, 0x00, 0x1d, 0xc6, - 0x7d, 0x3e, 0x11, 0xdb, 0x11, 0xa8, 0x96, 0x04, 0x4e, 0x89, 0xcf, 0xd2, 0xc4, 0x6e, 0x2a, 0x5c, - 0x49, 0x68, 0xc3, 0x6a, 0x4c, 0x18, 0xf3, 0x0f, 0x89, 0xdd, 0x92, 0x8a, 0x5c, 0xc4, 0xcb, 0xd0, - 0xe5, 0x61, 0x4c, 0x18, 0xf7, 0xe3, 0xcc, 0x6e, 0x4b, 0x5d, 0x09, 0xb8, 0x7f, 0x36, 0xa1, 0xff, - 0x78, 0xc2, 0x78, 0x1a, 0x87, 0x3f, 0xfb, 0x79, 0x34, 0xf5, 0x62, 0x09, 0x1f, 0x45, 0xf4, 0x3a, - 0xa0, 0x12, 0xc0, 0x21, 0x6c, 0x70, 0x9f, 0x1e, 0x92, 0x32, 0x1d, 0x3a, 0xb8, 0x3a, 0x2c, 0x7c, - 0x67, 0x3e, 0x1f, 0xeb, 0x10, 0xe5, 0x6f, 0xe1, 0x9b, 0xa5, 0x13, 0x1a, 0x10, 0x8f, 0x1c, 0xe4, - 0xf1, 0x15, 0x00, 0xde, 0x02, 0x08, 0xf2, 0x44, 0x31, 0xbb, 0x23, 0x4b, 0x7b, 0xae, 0x52, 0x5a, - 0xa5, 0xf3, 0x0c, 0x33, 0x74, 0xc0, 0x0a, 0x13, 0x4e, 0xe8, 0xd4, 0x8f, 0xec, 0x55, 0xe9, 0xb1, - 0x90, 0x71, 0x0b, 0xda, 0x19, 0x9d, 0x24, 0xc4, 0xb6, 0xb6, 0x1b, 0x43, 0xcb, 0x53, 0x02, 0xee, - 0x00, 0x52, 0x12, 0xa4, 0x49, 0x10, 0x46, 0xc4, 0x23, 0xaf, 0x27, 0x84, 0xf1, 0x3d, 0x6e, 0x77, - 0xe5, 0xda, 0x39, 0x1a, 0xc1, 0x90, 0x02, 0xdd, 0xe3, 0x36, 0x28, 0x86, 0x18, 0x10, 0x7e, 0x06, - 0xfd, 0x62, 0x17, 0x8f, 0xc3, 0x64, 0x64, 0xf7, 0xb6, 0x1b, 0xc3, 0xf5, 0xdd, 0xf3, 0x65, 0xec, - 0xcf, 0xa4, 0x7a, 0xe7, 0xf9, 0x71, 0x46, 0xbc, 0xaa, 0xad, 0xfb, 0x12, 0xce, 0x0b, 0x7a, 0x55, - 0x0a, 0xc3, 0x4e, 0xc4, 0xcc, 0xe5, 0xa5, 0x72, 0xbf, 0x9f, 0xef, 0x98, 0xe1, 0x7d, 0x58, 0x3f, - 0xaa, 0x80, 0x92, 0xb5, 0xbd, 0xdd, 0x8b, 0x65, 0xbc, 0x95, 0x45, 0x5e, 0xcd, 0xdc, 0x8d, 0x60, - 0xf0, 0x28, 0xe4, 0x1e, 0xc9, 0x52, 0x16, 0xf2, 0x94, 0x1e, 0x8b, 0xe2, 0x5d, 0x80, 0xce, 0x2b, - 0xea, 0x27, 0xc1, 0x58, 0x07, 0xaa, 0x25, 0x1c, 0x40, 0x93, 0xfb, 0x87, 0x3a, 0x3a, 0xf1, 0x53, - 0xd2, 0x9d, 0xc4, 0x53, 0x42, 0x73, 0x5a, 0x2b, 0x49, 0xe0, 0x41, 0x1a, 0xc7, 0x21, 0xd7, 0x94, - 0xd1, 0x92, 0xfb, 0x47, 0x03, 0xac, 0x3d, 0xca, 0xc3, 0x03, 0x3f, 0xe0, 0xa2, 0xdc, 0xc1, 0x98, - 0x04, 0x47, 0x6c, 0x12, 0xeb, 0x0f, 0x15, 0x32, 0xba, 0xb0, 0x16, 0xf9, 0x8c, 0x4f, 0xb2, 0x91, - 0xcf, 0x89, 0xcf, 0xe5, 0x37, 0xdb, 0x5e, 0x05, 0x2b, 0x58, 0xd9, 0x34, 0x58, 0xe9, 0x80, 0x45, - 0xc9, 0x34, 0x64, 0x61, 0x9a, 0xe8, 0x4f, 0x17, 0xb2, 0x08, 0x7f, 0x42, 0x23, 0xcd, 0x55, 0xf1, - 0xd3, 0xfd, 0xbd, 0x05, 0x1d, 0x55, 0xce, 0xb9, 0xed, 0xa3, 0x17, 0xac, 0x14, 0x0b, 0xf0, 0x0e, - 0x74, 0x29, 0x39, 0x20, 0x94, 0x24, 0xba, 0x59, 0x7a, 0xbb, 0x4e, 0x99, 0xe9, 0x7a, 0x22, 0xbd, - 0xd2, 0x18, 0x3f, 0xd0, 0xc3, 0xa2, 0xb5, 0x8c, 0x4e, 0x6a, 0x86, 0x38, 0x60, 0x65, 0x34, 0x9d, - 0x86, 0x23, 0x42, 0x75, 0xb0, 0x85, 0x2c, 0x26, 0xd4, 0xab, 0x49, 0x70, 0x44, 0xb8, 0x0c, 0xb6, - 0x23, 0xb5, 0x06, 0xa2, 0xe6, 0xcc, 0xa1, 0xd8, 0xfd, 0x6a, 0x3e, 0x67, 0x84, 0x54, 0xa5, 0x97, - 0x55, 0x9f, 0x04, 0xd7, 0x61, 0xf3, 0x30, 0xe4, 0x61, 0x9c, 0x45, 0x24, 0x26, 0x09, 0x97, 0xd4, - 0xd0, 0x5d, 0x34, 0xab, 0x10, 0x33, 0x4b, 0x0c, 0xa2, 0x74, 0x92, 0x37, 0x50, 0x2e, 0xe2, 0x3b, - 0xd0, 0x67, 0x24, 0xa0, 0x84, 0x7b, 0xe4, 0x40, 0x12, 0xbd, 0x27, 0xf5, 0x55, 0xb0, 0x36, 0x1b, - 0xd6, 0x4e, 0x36, 0x1b, 0x76, 0xc0, 0xf2, 0x35, 0x71, 0xec, 0xbe, 0x4c, 0x3c, 0x96, 0x4b, 0x72, - 0x4a, 0x79, 0x85, 0x8d, 0x7b, 0x13, 0x5a, 0x22, 0xa5, 0xb8, 0x0a, 0xcd, 0x47, 0x21, 0x1f, 0xbc, - 0x85, 0x00, 0x9d, 0x07, 0x32, 0x4f, 0x83, 0x06, 0x5a, 0xd0, 0xfa, 0x8a, 0x44, 0xf1, 0x60, 0x05, - 0xbb, 0xd0, 0xde, 0x1f, 0xfb, 0x94, 0x0f, 0x9a, 0x62, 0xb8, 0xaf, 0x8b, 0x26, 0x53, 0x05, 0x39, - 0x8b, 0xb6, 0xc5, 0xdb, 0x00, 0x6a, 0x40, 0x88, 0x50, 0x24, 0x5f, 0x16, 0x96, 0xde, 0x30, 0x74, - 0xef, 0xd6, 0x02, 0x61, 0xf8, 0x21, 0xac, 0x2a, 0x7d, 0xde, 0xdf, 0x83, 0xba, 0x17, 0x2f, 0x37, - 0x70, 0xff, 0x6a, 0xc0, 0xd6, 0xb3, 0xe3, 0x24, 0xa8, 0xf6, 0xfd, 0x19, 0xec, 0xe6, 0x3a, 0x6c, - 0x56, 0x86, 0x87, 0xf4, 0xa2, 0x9a, 0x6f, 0x56, 0x21, 0x98, 0xfa, 0x26, 0xe4, 0x63, 0x15, 0x9d, - 0xa4, 0xbd, 0xe5, 0x19, 0x88, 0xfb, 0x62, 0x6e, 0x94, 0x0c, 0xef, 0x41, 0xbf, 0xe2, 0x4c, 0xc6, - 0xb9, 0x64, 0xa0, 0x55, 0xad, 0xdd, 0x7f, 0x56, 0xa0, 0x27, 0x6a, 0xeb, 0x91, 0x88, 0xf8, 0x8c, - 0x9c, 0xe2, 0x58, 0x34, 0x4f, 0xa1, 0x66, 0xed, 0x14, 0xba, 0x0c, 0xdd, 0x40, 0xd0, 0x45, 0x6e, - 0x5d, 0x1f, 0x7a, 0x05, 0x20, 0x1a, 0x63, 0x4a, 0xa8, 0x9c, 0x3d, 0xaa, 0x33, 0x73, 0x51, 0x24, - 0x43, 0x95, 0x47, 0x1e, 0x29, 0xaa, 0x35, 0x0d, 0xa4, 0xd4, 0x4b, 0xc7, 0x96, 0xa9, 0x97, 0x9e, - 0x87, 0xb0, 0x51, 0x4a, 0x2a, 0x6e, 0xd5, 0x9e, 0x75, 0xf8, 0x54, 0xcd, 0xe5, 0xbe, 0x80, 0x73, - 0x82, 0x70, 0x46, 0xde, 0xce, 0xe4, 0xd4, 0xfa, 0x76, 0x9e, 0x5b, 0x86, 0x9f, 0x42, 0x7f, 0x4c, - 0xa2, 0xf8, 0x47, 0xaa, 0x31, 0x4d, 0x69, 0xa3, 0x31, 0x8c, 0x15, 0xde, 0xda, 0xd8, 0x58, 0xee, - 0xde, 0x96, 0x17, 0x30, 0xee, 0x87, 0x09, 0xa1, 0x73, 0x6b, 0xbb, 0x05, 0xed, 0x30, 0x16, 0xd7, - 0x29, 0x15, 0x8d, 0x12, 0xdc, 0x07, 0xd0, 0x7b, 0x9a, 0x8e, 0x9e, 0x93, 0x38, 0x8b, 0x7c, 0x9e, - 0x27, 0x49, 0x79, 0xc9, 0x3f, 0x5f, 0x4d, 0x92, 0xd2, 0x79, 0x86, 0x99, 0xfb, 0x6f, 0x03, 0xac, - 0x97, 0x29, 0x3d, 0x8a, 0x52, 0x7f, 0x74, 0x0a, 0x5a, 0xed, 0xc2, 0xd6, 0x51, 0x95, 0xeb, 0x07, - 0x46, 0x03, 0xcd, 0xd5, 0xe1, 0x5d, 0xb8, 0x34, 0x0f, 0x57, 0x5f, 0x50, 0xc7, 0xdb, 0x62, 0x03, - 0xfc, 0x04, 0x7a, 0x59, 0xb9, 0x69, 0x49, 0xd7, 0x4a, 0x96, 0x8d, 0x8c, 0x78, 0xa6, 0xa5, 0xeb, - 0xc1, 0x40, 0xd4, 0x2d, 0xdf, 0xec, 0x99, 0x70, 0xe1, 0xe1, 0x8c, 0x4f, 0x86, 0x37, 0xa1, 0xfb, - 0x26, 0x97, 0x75, 0x15, 0x8c, 0xa1, 0x9e, 0x9b, 0x7a, 0xa5, 0x91, 0xfb, 0x77, 0x03, 0x2e, 0xcf, - 0x5c, 0x84, 0xf6, 0xc7, 0x61, 0x34, 0xa2, 0xe4, 0x84, 0x33, 0x6e, 0xee, 0x14, 0x5b, 0x59, 0x34, - 0xc5, 0x3e, 0x86, 0x0b, 0x8f, 0xeb, 0xa0, 0x79, 0x55, 0x5e, 0xa0, 0x75, 0x9f, 0x2e, 0x8d, 0xf3, - 0x34, 0x5b, 0xff, 0xa5, 0x01, 0xed, 0x2f, 0xa6, 0x24, 0xe1, 0x8b, 0xde, 0x1d, 0xfa, 0x7d, 0xb1, - 0xb2, 0xe8, 0x7d, 0xd1, 0x5c, 0xf2, 0xbe, 0x68, 0xc9, 0xeb, 0x55, 0x09, 0xc8, 0x8b, 0x9d, 0x9a, - 0xdc, 0x6d, 0x7d, 0xb1, 0x53, 0x53, 0xfb, 0x1b, 0xe8, 0x8b, 0x7d, 0xc9, 0x40, 0xce, 0x84, 0x17, - 0x77, 0xaa, 0x0e, 0x19, 0xbe, 0x0f, 0x1d, 0x22, 0x05, 0x9d, 0x96, 0x8d, 0x32, 0x2d, 0xd2, 0xc8, - 0xd3, 0xea, 0xdd, 0x5f, 0xdb, 0x60, 0xed, 0x6b, 0x15, 0x3e, 0x84, 0x35, 0xf3, 0x0d, 0x8a, 0x97, - 0xca, 0x55, 0xb5, 0xe7, 0xaa, 0xb3, 0x50, 0xc5, 0x70, 0x0c, 0xf6, 0xa2, 0xe7, 0x21, 0xbe, 0x5b, - 0x5d, 0xb6, 0xe0, 0x0d, 0xea, 0x9c, 0xc8, 0x8c, 0xe1, 0x77, 0x80, 0xb3, 0x17, 0x7a, 0xbc, 0x56, - 0x5d, 0x3c, 0xf3, 0x8e, 0x70, 0xfe, 0xc7, 0x80, 0xe1, 0x1e, 0xf4, 0x8c, 0xab, 0x03, 0xda, 0x55, - 0xfb, 0xf2, 0x6a, 0xe3, 0x2c, 0xd2, 0x30, 0x7c, 0x06, 0x9b, 0x33, 0x07, 0x33, 0x5e, 0x35, 0xee, - 0x1b, 0x73, 0xee, 0x16, 0xce, 0x72, 0x3d, 0xc3, 0xa7, 0xaa, 0xfd, 0xcd, 0xa3, 0x00, 0xaf, 0x54, - 0x43, 0xa8, 0x9d, 0x3e, 0xce, 0x52, 0x35, 0xc3, 0x47, 0x8a, 0x38, 0xc5, 0x40, 0x41, 0xa7, 0x6a, - 0x6f, 0x4e, 0x2f, 0x67, 0xb1, 0x8e, 0xe1, 0xe7, 0x00, 0x25, 0x03, 0xf1, 0x62, 0xd5, 0xb2, 0x20, - 0xba, 0xb3, 0x40, 0xc1, 0x1e, 0xe0, 0x0f, 0x83, 0xfa, 0xbf, 0x2b, 0xaf, 0x3a, 0xf2, 0x5f, 0x95, - 0x5b, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0xab, 0x52, 0x92, 0xe0, 0x78, 0x11, 0x00, 0x00, + // 1419 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0xdb, 0x6e, 0x1c, 0x45, + 0x10, 0x65, 0xef, 0xb3, 0xb5, 0x5e, 0x7b, 0x5d, 0x71, 0x92, 0xc9, 0x90, 0x8b, 0x35, 0xe2, 0xb2, + 0xa0, 0xe0, 0x44, 0x8e, 0x02, 0x11, 0x24, 0x44, 0x8e, 0x03, 0x41, 0x0a, 0x0a, 0x61, 0x92, 0x10, + 0xc4, 0x0b, 0x9a, 0xcc, 0xb6, 0xbd, 0xa3, 0xdd, 0xb9, 0xa4, 0xbb, 0xd7, 0xc1, 0xbc, 0xf2, 0x80, + 0x84, 0x78, 0xe3, 0x17, 0x10, 0x1f, 0xc0, 0x3f, 0xf0, 0x2d, 0xfc, 0x06, 0xea, 0xcb, 0xcc, 0xf4, + 0xcc, 0x5e, 0xb0, 0x2c, 0xbf, 0x4d, 0x9d, 0xaa, 0xea, 0xae, 0xaa, 0x3e, 0x5d, 0xdd, 0x3d, 0x70, + 0x2d, 0x9d, 0x1c, 0xde, 0xa0, 0x69, 0x70, 0x23, 0x98, 0xce, 0x18, 0x27, 0x94, 0xe5, 0x1f, 0x3b, + 0x29, 0x4d, 0x78, 0x82, 0x56, 0x26, 0xbb, 0x57, 0xa0, 0xb3, 0x9f, 0xc4, 0x9c, 0xfc, 0xc4, 0x11, + 0xa1, 0x19, 0xfb, 0x11, 0xb1, 0x6b, 0xdb, 0xb5, 0x61, 0xd7, 0x93, 0xdf, 0xee, 0x26, 0x6c, 0x7c, + 0x1d, 0x32, 0xae, 0x4d, 0x98, 0x47, 0x5e, 0xbb, 0xe3, 0x2a, 0xc4, 0xf0, 0x3d, 0x58, 0x0f, 0x66, + 0x94, 0x92, 0x38, 0x43, 0xf5, 0x18, 0x15, 0x14, 0x3f, 0x02, 0x2b, 0xd0, 0x6e, 0x76, 0x7d, 0xbb, + 0x31, 0xec, 0xed, 0x6e, 0xee, 0xe4, 0x91, 0x69, 0x23, 0x2f, 0x37, 0x71, 0xef, 0xc3, 0xdb, 0x62, + 0xa6, 0x27, 0x7e, 0x44, 0x58, 0xea, 0x07, 0x84, 0x7d, 0x99, 0xd0, 0xcc, 0x8a, 0xbc, 0xc6, 0x6d, + 0xe8, 0x69, 0xd3, 0x27, 0x45, 0xd8, 0x26, 0xe4, 0xde, 0x5b, 0x35, 0x00, 0xc3, 0xab, 0x00, 0x71, + 0xae, 0xb2, 0x6b, 0xdb, 0x8d, 0x61, 0xd7, 0x33, 0x10, 0xf7, 0xd7, 0x1a, 0x74, 0xf7, 0x93, 0x78, + 0x14, 0xf2, 0x30, 0x89, 0x45, 0x79, 0xf8, 0x71, 0x9a, 0x97, 0x47, 0x7c, 0xe3, 0x05, 0x68, 0x33, + 0xee, 0xf3, 0x99, 0x48, 0x47, 0xa0, 0x5a, 0x12, 0x38, 0x25, 0x3e, 0x4b, 0x62, 0xbb, 0xa1, 0x70, + 0x25, 0xa1, 0x0d, 0x9d, 0x88, 0x30, 0xe6, 0x1f, 0x12, 0xbb, 0x29, 0x15, 0x99, 0x88, 0x97, 0xa1, + 0xcb, 0xc3, 0x88, 0x30, 0xee, 0x47, 0xa9, 0xdd, 0x92, 0xba, 0x02, 0x70, 0xff, 0x68, 0x40, 0xff, + 0xf1, 0x8c, 0xf1, 0x24, 0x0a, 0x7f, 0xf6, 0xb3, 0x68, 0xaa, 0x8b, 0x25, 0xc6, 0xc8, 0xa3, 0xd7, + 0x01, 0x15, 0x00, 0x0e, 0x61, 0x83, 0xfb, 0xf4, 0x90, 0x14, 0xe5, 0xd0, 0xc1, 0x55, 0x61, 0x31, + 0x76, 0xea, 0xf3, 0xb1, 0x0e, 0x51, 0x7e, 0x8b, 0xb1, 0x59, 0x32, 0xa3, 0x01, 0xf1, 0xc8, 0x41, + 0x16, 0x5f, 0x0e, 0xe0, 0x2d, 0x80, 0x20, 0x2b, 0x14, 0xb3, 0xdb, 0x72, 0x69, 0xcf, 0x95, 0x96, + 0x56, 0xe9, 0x3c, 0xc3, 0x0c, 0x1d, 0xb0, 0xc2, 0x98, 0x13, 0x7a, 0xe4, 0x4f, 0xed, 0x8e, 0x1c, + 0x31, 0x97, 0x71, 0x0b, 0x5a, 0x29, 0x9d, 0xc5, 0xc4, 0xb6, 0xb6, 0x6b, 0x43, 0xcb, 0x53, 0x02, + 0xee, 0x00, 0x52, 0x12, 0x24, 0x71, 0x10, 0x4e, 0x89, 0x47, 0x5e, 0xcf, 0x08, 0xe3, 0x7b, 0xdc, + 0xee, 0x4a, 0xdf, 0x05, 0x1a, 0xc1, 0x90, 0x1c, 0xdd, 0xe3, 0x36, 0x28, 0x86, 0x18, 0x10, 0x7e, + 0x06, 0xfd, 0x3c, 0x8b, 0xc7, 0x61, 0x3c, 0xb2, 0x7b, 0xdb, 0xb5, 0xe1, 0xfa, 0xee, 0xf9, 0x22, + 0xf6, 0x67, 0x52, 0xbd, 0xf3, 0xfc, 0x38, 0x25, 0x5e, 0xd9, 0xd6, 0x7d, 0x09, 0xe7, 0x05, 0xbd, + 0x4a, 0x0b, 0xc3, 0x4e, 0xc4, 0xcc, 0xd5, 0x4b, 0xe5, 0x7e, 0xbf, 0x78, 0x60, 0x86, 0xf7, 0x61, + 0x7d, 0x52, 0x02, 0x25, 0x6b, 0x7b, 0xbb, 0x17, 0x8b, 0x78, 0x4b, 0x4e, 0x5e, 0xc5, 0xdc, 0x9d, + 0xc2, 0xe0, 0x51, 0xc8, 0x3d, 0x92, 0x26, 0x2c, 0xe4, 0x09, 0x3d, 0x16, 0x8b, 0x77, 0x01, 0xda, + 0xaf, 0xa8, 0x1f, 0x07, 0x63, 0x1d, 0xa8, 0x96, 0x70, 0x00, 0x0d, 0xee, 0x1f, 0xea, 0xe8, 0xc4, + 0xa7, 0xa4, 0x3b, 0x89, 0x8e, 0x08, 0xcd, 0x68, 0xad, 0x24, 0x81, 0x07, 0x49, 0x14, 0x85, 0x5c, + 0x53, 0x46, 0x4b, 0xee, 0xef, 0x35, 0xb0, 0xf6, 0x28, 0x0f, 0x0f, 0xfc, 0x80, 0x8b, 0xe5, 0x0e, + 0xc6, 0x24, 0x98, 0xb0, 0x59, 0xa4, 0x27, 0xca, 0x65, 0x74, 0x61, 0x6d, 0xea, 0x33, 0x3e, 0x4b, + 0x47, 0x3e, 0x27, 0x3e, 0x97, 0x73, 0xb6, 0xbc, 0x12, 0x96, 0xb3, 0xb2, 0x61, 0xb0, 0xd2, 0x01, + 0x8b, 0x92, 0xa3, 0x90, 0x85, 0x49, 0xac, 0xa7, 0xce, 0x65, 0x11, 0xfe, 0x8c, 0x4e, 0x35, 0x57, + 0xc5, 0xa7, 0xfb, 0x5b, 0x13, 0xda, 0x6a, 0x39, 0x17, 0x6e, 0x1f, 0xed, 0x50, 0xcf, 0x1d, 0xf0, + 0x0e, 0x74, 0x29, 0x39, 0x20, 0x94, 0xc4, 0x7a, 0xb3, 0xf4, 0x76, 0x9d, 0xa2, 0xd2, 0xd5, 0x42, + 0x7a, 0x85, 0x31, 0x7e, 0xa0, 0x9b, 0x45, 0x73, 0x15, 0x9d, 0x54, 0x0f, 0x71, 0xc0, 0x4a, 0x69, + 0x72, 0x14, 0x8e, 0x08, 0xd5, 0xc1, 0xe6, 0xb2, 0xe8, 0x50, 0xaf, 0x66, 0xc1, 0x84, 0x70, 0x19, + 0x6c, 0x5b, 0x6a, 0x0d, 0x44, 0xf5, 0x99, 0x43, 0x91, 0x7d, 0x27, 0xeb, 0x33, 0x42, 0x2a, 0xd3, + 0xcb, 0xaa, 0x76, 0x82, 0xeb, 0xb0, 0x79, 0x18, 0xf2, 0x30, 0x4a, 0xa7, 0x24, 0x22, 0x31, 0x97, + 0xd4, 0xd0, 0xbb, 0x68, 0x5e, 0x21, 0x7a, 0x96, 0x68, 0x44, 0xc9, 0x2c, 0xdb, 0x40, 0x99, 0x88, + 0xef, 0x40, 0x9f, 0x91, 0x80, 0x12, 0xee, 0x91, 0x03, 0x49, 0xf4, 0x9e, 0xd4, 0x97, 0xc1, 0x4a, + 0x6f, 0x58, 0x3b, 0x59, 0x6f, 0xd8, 0x01, 0xcb, 0xd7, 0xc4, 0xb1, 0xfb, 0xb2, 0xf0, 0x58, 0xb8, + 0x64, 0x94, 0xf2, 0x72, 0x1b, 0xf7, 0x26, 0x34, 0x45, 0x49, 0xb1, 0x03, 0x8d, 0x47, 0x21, 0x1f, + 0xbc, 0x85, 0x00, 0xed, 0x07, 0xb2, 0x4e, 0x83, 0x1a, 0x5a, 0xd0, 0xfc, 0x8a, 0x4c, 0xa3, 0x41, + 0x1d, 0xbb, 0xd0, 0xda, 0x1f, 0xfb, 0x94, 0x0f, 0x1a, 0xa2, 0xb9, 0xaf, 0x8b, 0x4d, 0xa6, 0x16, + 0xe4, 0x2c, 0xb6, 0x2d, 0xde, 0x06, 0x50, 0x0d, 0x42, 0x84, 0x22, 0xf9, 0xb2, 0x74, 0xe9, 0x0d, + 0x43, 0xf7, 0x6e, 0x25, 0x10, 0x86, 0x1f, 0x42, 0x47, 0xe9, 0xb3, 0xfd, 0x3d, 0xa8, 0x8e, 0xe2, + 0x65, 0x06, 0xee, 0x5f, 0x35, 0xe8, 0x3f, 0x3b, 0x8e, 0x03, 0x8d, 0x9f, 0x41, 0x1a, 0x57, 0xb3, + 0x34, 0xa4, 0xbb, 0xda, 0x6e, 0x06, 0x52, 0x49, 0xb3, 0x79, 0xd2, 0x34, 0xaf, 0x95, 0xe3, 0x64, + 0xb8, 0x0e, 0xf5, 0x64, 0xa2, 0xc3, 0xab, 0x27, 0x13, 0xf7, 0xcf, 0x1a, 0x6c, 0x09, 0x8b, 0x72, + 0x07, 0x3b, 0x83, 0x84, 0xae, 0xc3, 0x66, 0xa9, 0x0d, 0x1a, 0x79, 0xcd, 0x2b, 0x44, 0xfa, 0x6f, + 0x42, 0x3e, 0x56, 0x71, 0xca, 0xf4, 0x2c, 0xcf, 0x40, 0xdc, 0x17, 0x0b, 0xa3, 0x64, 0x78, 0x0f, + 0xfa, 0xa5, 0xc1, 0x64, 0x9c, 0x2b, 0x5a, 0x73, 0xd9, 0xda, 0xfd, 0xbb, 0x0e, 0x3d, 0xc1, 0x52, + 0x8f, 0x4c, 0x89, 0xcf, 0xc8, 0x29, 0x0e, 0x78, 0xf3, 0x3c, 0x6d, 0x54, 0xce, 0xd3, 0xcb, 0xd0, + 0x0d, 0x04, 0xf1, 0x65, 0xea, 0xfa, 0xf8, 0xce, 0x01, 0xb1, 0xc5, 0x8f, 0x08, 0x95, 0x5d, 0x54, + 0xf5, 0x98, 0x4c, 0x2c, 0xb8, 0x20, 0x0f, 0xc7, 0x8e, 0xc9, 0x05, 0x81, 0x54, 0xb8, 0x62, 0xcd, + 0x71, 0x65, 0x08, 0x1b, 0x85, 0xa4, 0xe2, 0x56, 0x8d, 0xa6, 0x0a, 0x9f, 0xaa, 0x4d, 0xb8, 0x2f, + 0xe0, 0x9c, 0xd8, 0x3a, 0x46, 0xdd, 0xce, 0xe4, 0xfc, 0xfd, 0x76, 0xd1, 0xb0, 0x0c, 0x3f, 0x85, + 0xfe, 0x98, 0x4c, 0xa3, 0x1f, 0xa9, 0xc6, 0xf4, 0xe6, 0x34, 0xb8, 0x6f, 0x78, 0x78, 0x6b, 0x63, + 0xc3, 0xdd, 0xbd, 0x2d, 0xaf, 0x92, 0xdc, 0x0f, 0x63, 0x42, 0x17, 0xae, 0xed, 0x16, 0xb4, 0xc2, + 0x48, 0x5c, 0x0c, 0x55, 0x34, 0x4a, 0x70, 0x1f, 0x40, 0xef, 0x69, 0x32, 0x7a, 0x4e, 0xa2, 0x74, + 0xea, 0xf3, 0xac, 0x48, 0x6a, 0x94, 0x6c, 0xfa, 0x72, 0x91, 0x94, 0xce, 0x33, 0xcc, 0xdc, 0x7f, + 0x6b, 0x60, 0xbd, 0x4c, 0xe8, 0x64, 0x9a, 0xf8, 0xa3, 0x53, 0xd0, 0x6a, 0x17, 0xb6, 0x26, 0x65, + 0xae, 0x1f, 0x18, 0x1b, 0x68, 0xa1, 0x0e, 0xef, 0xc2, 0xa5, 0x45, 0xb8, 0x9a, 0x41, 0x1d, 0xd4, + 0xcb, 0x0d, 0xf0, 0x13, 0xe8, 0xa5, 0x45, 0xd2, 0x92, 0xae, 0xa5, 0x2a, 0x1b, 0x15, 0xf1, 0x4c, + 0x4b, 0xd7, 0x83, 0x81, 0x58, 0xb7, 0x2c, 0xd9, 0x33, 0xe1, 0xc2, 0xc3, 0xb9, 0x31, 0x19, 0xde, + 0x84, 0xee, 0x9b, 0x4c, 0xd6, 0xab, 0x60, 0x1c, 0x4f, 0x99, 0xa9, 0x57, 0x18, 0x89, 0x2e, 0x7d, + 0x79, 0xee, 0x4a, 0xb7, 0x3f, 0x0e, 0xa7, 0x23, 0x4a, 0x4e, 0xd8, 0xe3, 0x16, 0x76, 0xb1, 0xfa, + 0xb2, 0x2e, 0xf6, 0x31, 0x5c, 0x78, 0x5c, 0x05, 0xcd, 0x4b, 0xff, 0x12, 0xad, 0xfb, 0x74, 0x65, + 0x9c, 0xa7, 0x49, 0xfd, 0x97, 0x1a, 0xb4, 0xbe, 0x38, 0x22, 0x31, 0x5f, 0xf6, 0x82, 0xd2, 0x2f, + 0xa5, 0xfa, 0xb2, 0x97, 0x52, 0x63, 0xc5, 0x4b, 0xa9, 0x29, 0x2f, 0x8a, 0x05, 0x20, 0xaf, 0xa8, + 0xaa, 0x73, 0xb7, 0xf4, 0x15, 0x55, 0x75, 0xed, 0x6f, 0xa0, 0x2f, 0xf2, 0x92, 0x81, 0x9c, 0x09, + 0x2f, 0xee, 0x94, 0x07, 0x64, 0xf8, 0x3e, 0xb4, 0x89, 0x14, 0x74, 0x59, 0x36, 0x8a, 0xb2, 0x48, + 0x23, 0x4f, 0xab, 0x77, 0xff, 0x69, 0x81, 0xb5, 0xaf, 0x55, 0xf8, 0x10, 0xd6, 0xcc, 0xd7, 0x34, + 0x5e, 0x2a, 0xbc, 0x2a, 0x0f, 0x6f, 0x67, 0xa9, 0x8a, 0xe1, 0x18, 0xec, 0x65, 0x0f, 0x5d, 0x7c, + 0xb7, 0xec, 0xb6, 0xe4, 0x35, 0xed, 0x9c, 0xc8, 0x8c, 0xe1, 0x77, 0x80, 0xf3, 0x4f, 0x13, 0xbc, + 0x56, 0x76, 0x9e, 0x7b, 0x11, 0x39, 0xff, 0x63, 0xc0, 0x70, 0x0f, 0x7a, 0xc6, 0x25, 0x08, 0xed, + 0xb2, 0x7d, 0x71, 0x49, 0x73, 0x96, 0x69, 0x18, 0x3e, 0x83, 0xcd, 0xb9, 0x83, 0x19, 0xaf, 0x1a, + 0x17, 0x93, 0x05, 0x77, 0x0b, 0x67, 0xb5, 0x9e, 0xe1, 0x53, 0xb5, 0xfd, 0xcd, 0xa3, 0x00, 0xaf, + 0x94, 0x43, 0xa8, 0x9c, 0x3e, 0xce, 0x4a, 0x35, 0xc3, 0x47, 0x8a, 0x38, 0x79, 0x43, 0x41, 0xa7, + 0x6c, 0x6f, 0x76, 0x2f, 0x67, 0xb9, 0x8e, 0xe1, 0xe7, 0x00, 0x05, 0x03, 0xf1, 0x62, 0xd9, 0x32, + 0x27, 0xba, 0xb3, 0x44, 0x21, 0xfd, 0x8b, 0x0b, 0x99, 0xe9, 0x5f, 0xba, 0x4e, 0x3a, 0x4b, 0x14, + 0xec, 0x01, 0xfe, 0x30, 0xa8, 0xfe, 0x67, 0x7a, 0xd5, 0x96, 0xff, 0x97, 0x6e, 0xfd, 0x17, 0x00, + 0x00, 0xff, 0xff, 0x43, 0x14, 0x96, 0x9d, 0x82, 0x12, 0x00, 0x00, } diff --git a/ui/lib/hooks.ts b/ui/lib/hooks.ts index c0d1eb3..0a1eea6 100644 --- a/ui/lib/hooks.ts +++ b/ui/lib/hooks.ts @@ -124,7 +124,7 @@ type SourceData = { export function useSources( currentContext: string, currentNamespace: string -): SourceData { +): { sources: SourceData; syncSource: (Source) => Promise } { const { doError } = useContext(AppContext); const [sources, setSources] = useState({ [SourceType.Git]: [], @@ -166,7 +166,21 @@ export function useSources( }); }, [currentContext, currentNamespace]); - return sources; + const syncSource = (s: Source) => + clustersClient + .syncSource({ + contextname: currentContext, + namespace: s.namespace, + sourcename: s.name, + }) + .then(() => { + setSources({ + ...sources, + [s.name]: s, + }); + }); + + return { sources, syncSource }; } export function useHelmReleases( diff --git a/ui/lib/rpc/clusters.ts b/ui/lib/rpc/clusters.ts index 6477b33..4f4e2b4 100644 --- a/ui/lib/rpc/clusters.ts +++ b/ui/lib/rpc/clusters.ts @@ -388,6 +388,56 @@ const JSONToListSourcesRes = (m: ListSourcesRes | ListSourcesResJSON): ListSourc }; +export interface SyncSourceReq { + contextname?: string; + namespace?: string; + sourcename?: string; + sourcetype?: string; +} + +interface SyncSourceReqJSON { + contextName?: string; + namespace?: string; + sourceName?: string; + sourceType?: string; +} + + + +const SyncSourceReqToJSON = (m: SyncSourceReq): SyncSourceReqJSON => { + if (m === null) { + return null; + } + + return { + contextName: m.contextname, + namespace: m.namespace, + sourceName: m.sourcename, + sourceType: m.sourcetype, + }; +}; + + +export interface SyncSourceRes { + ok?: string; +} + +interface SyncSourceResJSON { + ok?: string; +} + + + +const JSONToSyncSourceRes = (m: SyncSourceRes | SyncSourceResJSON): SyncSourceRes => { + if (m === null) { + return null; + } + return { + ok: m.ok, + }; +}; + + export interface SyncKustomizationReq { contextname?: string; namespace?: string; @@ -760,6 +810,8 @@ export interface Clusters { listEvents: (listEventsReq: ListEventsReq) => Promise; + syncSource: (syncSourceReq: SyncSourceReq) => Promise; + } export class DefaultClusters implements Clusters { @@ -895,5 +947,20 @@ export class DefaultClusters implements Clusters { }); } + syncSource(syncSourceReq: SyncSourceReq): Promise { + const url = this.hostname + this.pathPrefix + "SyncSource"; + let body: SyncSourceReq | SyncSourceReqJSON = syncSourceReq; + if (!this.writeCamelCase) { + body = SyncSourceReqToJSON(syncSourceReq); + } + return this.fetch(createTwirpRequest(url, body, this.headersOverride)).then((resp) => { + if (!resp.ok) { + return throwTwirpError(resp); + } + + return resp.json().then(JSONToSyncSourceRes); + }); + } + } diff --git a/ui/pages/SourceDetail.tsx b/ui/pages/SourceDetail.tsx index 1fadd2c..387291b 100644 --- a/ui/pages/SourceDetail.tsx +++ b/ui/pages/SourceDetail.tsx @@ -1,4 +1,4 @@ -import { Box, Breadcrumbs } from "@material-ui/core"; +import { Box, Breadcrumbs, Button, CircularProgress } from "@material-ui/core"; import _ from "lodash"; import * as React from "react"; import styled from "styled-components"; @@ -41,10 +41,11 @@ const LayoutBox = styled(Box)` const Styled = (c) => styled(c)``; function SourceDetail({ className }: Props) { + const [syncing, setSyncing] = React.useState(false); const { query } = useNavigation(); const { sourceType, sourceId } = query; const { currentContext, currentNamespace } = useKubernetesContexts(); - const sources = useSources(currentContext, currentNamespace); + const { sources, syncSource } = useSources(currentContext, currentNamespace); const sourceDetail: Source = _.find(sources[sourceType as string], { name: sourceId, @@ -62,18 +63,39 @@ function SourceDetail({ className }: Props) { sourceDetail.url ); + console.log(sourceDetail); + + const handleSyncClicked = () => { + setSyncing(true); + + syncSource(sourceDetail).then(() => { + setSyncing(false); + }); + }; + return ( - - + + +

Sources

+ + +

{sourceDetail.name}

+
+
+ + +