diff --git a/doc/index.html b/doc/index.html
index d56b3155..87181b76 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -1408,6 +1408,14 @@
Table of Contents
MTenantServiceInvitesListResponse
+
+ MTenantServiceLeaveRequest
+
+
+
+ MTenantServiceLeaveResponse
+
+
MTenantServiceListRequest
@@ -1778,6 +1786,14 @@ Table of Contents
MProjectServiceInvitesListResponse
+
+ MProjectServiceLeaveRequest
+
+
+
+ MProjectServiceLeaveResponse
+
+
MProjectServiceListRequest
@@ -11850,6 +11866,37 @@ TenantServiceLeaveTenantRequest is used to leave a tenant
+
+
+
+
+ | Field | Type | Label | Description |
+
+
+
+
+ | login |
+ string |
+ |
+ Login of the tenant |
+
+
+
+
+
+
+
+
+
+ TenantServiceLeaveResponse
+ TenantServiceLeaveTenantResponse is the response payload to a leave tenant request
+
+
+
+
+
TenantServiceListRequest
TenantServiceListRequest is the request payload of the tenant list request
@@ -12151,6 +12198,13 @@ TenantService
Delete a tenant |
+
+ | Leave |
+ TenantServiceLeaveRequest |
+ TenantServiceLeaveResponse |
+ Leave remove a member of a tenant |
+
+
| RemoveMember |
TenantServiceRemoveMemberRequest |
@@ -14355,6 +14409,37 @@ ProjectServiceInvit
+ ProjectServiceLeaveRequest
+
ProjectServiceLeaveRequest is used to leave a project
+
+
+
+
+ | Field | Type | Label | Description |
+
+
+
+
+ | project |
+ string |
+ |
+ Project is the uuid of the project |
+
+
+
+
+
+
+
+
+
+ ProjectServiceLeaveResponse
+ ProjectServiceLeaveResponse is the response payload to a leave project request
+
+
+
+
+
ProjectServiceListRequest
ProjectServiceListRequest is the request payload to list all projects
@@ -14656,6 +14741,13 @@ ProjectService
Update a project |
+
+ | Leave |
+ ProjectServiceLeaveRequest |
+ ProjectServiceLeaveResponse |
+ Leave project |
+
+
| RemoveMember |
ProjectServiceRemoveMemberRequest |
diff --git a/go/metalstack/api/v2/apiv2connect/project.connect.go b/go/metalstack/api/v2/apiv2connect/project.connect.go
index 4a899420..b76c92c6 100644
--- a/go/metalstack/api/v2/apiv2connect/project.connect.go
+++ b/go/metalstack/api/v2/apiv2connect/project.connect.go
@@ -43,6 +43,8 @@ const (
ProjectServiceDeleteProcedure = "/metalstack.api.v2.ProjectService/Delete"
// ProjectServiceUpdateProcedure is the fully-qualified name of the ProjectService's Update RPC.
ProjectServiceUpdateProcedure = "/metalstack.api.v2.ProjectService/Update"
+ // ProjectServiceLeaveProcedure is the fully-qualified name of the ProjectService's Leave RPC.
+ ProjectServiceLeaveProcedure = "/metalstack.api.v2.ProjectService/Leave"
// ProjectServiceRemoveMemberProcedure is the fully-qualified name of the ProjectService's
// RemoveMember RPC.
ProjectServiceRemoveMemberProcedure = "/metalstack.api.v2.ProjectService/RemoveMember"
@@ -77,6 +79,8 @@ type ProjectServiceClient interface {
Delete(context.Context, *v2.ProjectServiceDeleteRequest) (*v2.ProjectServiceDeleteResponse, error)
// Update a project
Update(context.Context, *v2.ProjectServiceUpdateRequest) (*v2.ProjectServiceUpdateResponse, error)
+ // Leave project
+ Leave(context.Context, *v2.ProjectServiceLeaveRequest) (*v2.ProjectServiceLeaveResponse, error)
// RemoveMember remove a user from a project
RemoveMember(context.Context, *v2.ProjectServiceRemoveMemberRequest) (*v2.ProjectServiceRemoveMemberResponse, error)
// UpdateMember update a user for a project
@@ -134,6 +138,12 @@ func NewProjectServiceClient(httpClient connect.HTTPClient, baseURL string, opts
connect.WithSchema(projectServiceMethods.ByName("Update")),
connect.WithClientOptions(opts...),
),
+ leave: connect.NewClient[v2.ProjectServiceLeaveRequest, v2.ProjectServiceLeaveResponse](
+ httpClient,
+ baseURL+ProjectServiceLeaveProcedure,
+ connect.WithSchema(projectServiceMethods.ByName("Leave")),
+ connect.WithClientOptions(opts...),
+ ),
removeMember: connect.NewClient[v2.ProjectServiceRemoveMemberRequest, v2.ProjectServiceRemoveMemberResponse](
httpClient,
baseURL+ProjectServiceRemoveMemberProcedure,
@@ -186,6 +196,7 @@ type projectServiceClient struct {
create *connect.Client[v2.ProjectServiceCreateRequest, v2.ProjectServiceCreateResponse]
delete *connect.Client[v2.ProjectServiceDeleteRequest, v2.ProjectServiceDeleteResponse]
update *connect.Client[v2.ProjectServiceUpdateRequest, v2.ProjectServiceUpdateResponse]
+ leave *connect.Client[v2.ProjectServiceLeaveRequest, v2.ProjectServiceLeaveResponse]
removeMember *connect.Client[v2.ProjectServiceRemoveMemberRequest, v2.ProjectServiceRemoveMemberResponse]
updateMember *connect.Client[v2.ProjectServiceUpdateMemberRequest, v2.ProjectServiceUpdateMemberResponse]
invite *connect.Client[v2.ProjectServiceInviteRequest, v2.ProjectServiceInviteResponse]
@@ -240,6 +251,15 @@ func (c *projectServiceClient) Update(ctx context.Context, req *v2.ProjectServic
return nil, err
}
+// Leave calls metalstack.api.v2.ProjectService.Leave.
+func (c *projectServiceClient) Leave(ctx context.Context, req *v2.ProjectServiceLeaveRequest) (*v2.ProjectServiceLeaveResponse, error) {
+ response, err := c.leave.CallUnary(ctx, connect.NewRequest(req))
+ if response != nil {
+ return response.Msg, err
+ }
+ return nil, err
+}
+
// RemoveMember calls metalstack.api.v2.ProjectService.RemoveMember.
func (c *projectServiceClient) RemoveMember(ctx context.Context, req *v2.ProjectServiceRemoveMemberRequest) (*v2.ProjectServiceRemoveMemberResponse, error) {
response, err := c.removeMember.CallUnary(ctx, connect.NewRequest(req))
@@ -315,6 +335,8 @@ type ProjectServiceHandler interface {
Delete(context.Context, *v2.ProjectServiceDeleteRequest) (*v2.ProjectServiceDeleteResponse, error)
// Update a project
Update(context.Context, *v2.ProjectServiceUpdateRequest) (*v2.ProjectServiceUpdateResponse, error)
+ // Leave project
+ Leave(context.Context, *v2.ProjectServiceLeaveRequest) (*v2.ProjectServiceLeaveResponse, error)
// RemoveMember remove a user from a project
RemoveMember(context.Context, *v2.ProjectServiceRemoveMemberRequest) (*v2.ProjectServiceRemoveMemberResponse, error)
// UpdateMember update a user for a project
@@ -368,6 +390,12 @@ func NewProjectServiceHandler(svc ProjectServiceHandler, opts ...connect.Handler
connect.WithSchema(projectServiceMethods.ByName("Update")),
connect.WithHandlerOptions(opts...),
)
+ projectServiceLeaveHandler := connect.NewUnaryHandlerSimple(
+ ProjectServiceLeaveProcedure,
+ svc.Leave,
+ connect.WithSchema(projectServiceMethods.ByName("Leave")),
+ connect.WithHandlerOptions(opts...),
+ )
projectServiceRemoveMemberHandler := connect.NewUnaryHandlerSimple(
ProjectServiceRemoveMemberProcedure,
svc.RemoveMember,
@@ -422,6 +450,8 @@ func NewProjectServiceHandler(svc ProjectServiceHandler, opts ...connect.Handler
projectServiceDeleteHandler.ServeHTTP(w, r)
case ProjectServiceUpdateProcedure:
projectServiceUpdateHandler.ServeHTTP(w, r)
+ case ProjectServiceLeaveProcedure:
+ projectServiceLeaveHandler.ServeHTTP(w, r)
case ProjectServiceRemoveMemberProcedure:
projectServiceRemoveMemberHandler.ServeHTTP(w, r)
case ProjectServiceUpdateMemberProcedure:
@@ -465,6 +495,10 @@ func (UnimplementedProjectServiceHandler) Update(context.Context, *v2.ProjectSer
return nil, connect.NewError(connect.CodeUnimplemented, errors.New("metalstack.api.v2.ProjectService.Update is not implemented"))
}
+func (UnimplementedProjectServiceHandler) Leave(context.Context, *v2.ProjectServiceLeaveRequest) (*v2.ProjectServiceLeaveResponse, error) {
+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("metalstack.api.v2.ProjectService.Leave is not implemented"))
+}
+
func (UnimplementedProjectServiceHandler) RemoveMember(context.Context, *v2.ProjectServiceRemoveMemberRequest) (*v2.ProjectServiceRemoveMemberResponse, error) {
return nil, connect.NewError(connect.CodeUnimplemented, errors.New("metalstack.api.v2.ProjectService.RemoveMember is not implemented"))
}
diff --git a/go/metalstack/api/v2/apiv2connect/tenant.connect.go b/go/metalstack/api/v2/apiv2connect/tenant.connect.go
index ab60f945..ba11f8a9 100644
--- a/go/metalstack/api/v2/apiv2connect/tenant.connect.go
+++ b/go/metalstack/api/v2/apiv2connect/tenant.connect.go
@@ -43,6 +43,8 @@ const (
TenantServiceUpdateProcedure = "/metalstack.api.v2.TenantService/Update"
// TenantServiceDeleteProcedure is the fully-qualified name of the TenantService's Delete RPC.
TenantServiceDeleteProcedure = "/metalstack.api.v2.TenantService/Delete"
+ // TenantServiceLeaveProcedure is the fully-qualified name of the TenantService's Leave RPC.
+ TenantServiceLeaveProcedure = "/metalstack.api.v2.TenantService/Leave"
// TenantServiceRemoveMemberProcedure is the fully-qualified name of the TenantService's
// RemoveMember RPC.
TenantServiceRemoveMemberProcedure = "/metalstack.api.v2.TenantService/RemoveMember"
@@ -76,6 +78,8 @@ type TenantServiceClient interface {
Update(context.Context, *v2.TenantServiceUpdateRequest) (*v2.TenantServiceUpdateResponse, error)
// Delete a tenant
Delete(context.Context, *v2.TenantServiceDeleteRequest) (*v2.TenantServiceDeleteResponse, error)
+ // Leave remove a member of a tenant
+ Leave(context.Context, *v2.TenantServiceLeaveRequest) (*v2.TenantServiceLeaveResponse, error)
// RemoveMember remove a member of a tenant
RemoveMember(context.Context, *v2.TenantServiceRemoveMemberRequest) (*v2.TenantServiceRemoveMemberResponse, error)
// UpdateMember update a member of a tenant
@@ -133,6 +137,12 @@ func NewTenantServiceClient(httpClient connect.HTTPClient, baseURL string, opts
connect.WithSchema(tenantServiceMethods.ByName("Delete")),
connect.WithClientOptions(opts...),
),
+ leave: connect.NewClient[v2.TenantServiceLeaveRequest, v2.TenantServiceLeaveResponse](
+ httpClient,
+ baseURL+TenantServiceLeaveProcedure,
+ connect.WithSchema(tenantServiceMethods.ByName("Leave")),
+ connect.WithClientOptions(opts...),
+ ),
removeMember: connect.NewClient[v2.TenantServiceRemoveMemberRequest, v2.TenantServiceRemoveMemberResponse](
httpClient,
baseURL+TenantServiceRemoveMemberProcedure,
@@ -185,6 +195,7 @@ type tenantServiceClient struct {
get *connect.Client[v2.TenantServiceGetRequest, v2.TenantServiceGetResponse]
update *connect.Client[v2.TenantServiceUpdateRequest, v2.TenantServiceUpdateResponse]
delete *connect.Client[v2.TenantServiceDeleteRequest, v2.TenantServiceDeleteResponse]
+ leave *connect.Client[v2.TenantServiceLeaveRequest, v2.TenantServiceLeaveResponse]
removeMember *connect.Client[v2.TenantServiceRemoveMemberRequest, v2.TenantServiceRemoveMemberResponse]
updateMember *connect.Client[v2.TenantServiceUpdateMemberRequest, v2.TenantServiceUpdateMemberResponse]
invite *connect.Client[v2.TenantServiceInviteRequest, v2.TenantServiceInviteResponse]
@@ -239,6 +250,15 @@ func (c *tenantServiceClient) Delete(ctx context.Context, req *v2.TenantServiceD
return nil, err
}
+// Leave calls metalstack.api.v2.TenantService.Leave.
+func (c *tenantServiceClient) Leave(ctx context.Context, req *v2.TenantServiceLeaveRequest) (*v2.TenantServiceLeaveResponse, error) {
+ response, err := c.leave.CallUnary(ctx, connect.NewRequest(req))
+ if response != nil {
+ return response.Msg, err
+ }
+ return nil, err
+}
+
// RemoveMember calls metalstack.api.v2.TenantService.RemoveMember.
func (c *tenantServiceClient) RemoveMember(ctx context.Context, req *v2.TenantServiceRemoveMemberRequest) (*v2.TenantServiceRemoveMemberResponse, error) {
response, err := c.removeMember.CallUnary(ctx, connect.NewRequest(req))
@@ -314,6 +334,8 @@ type TenantServiceHandler interface {
Update(context.Context, *v2.TenantServiceUpdateRequest) (*v2.TenantServiceUpdateResponse, error)
// Delete a tenant
Delete(context.Context, *v2.TenantServiceDeleteRequest) (*v2.TenantServiceDeleteResponse, error)
+ // Leave remove a member of a tenant
+ Leave(context.Context, *v2.TenantServiceLeaveRequest) (*v2.TenantServiceLeaveResponse, error)
// RemoveMember remove a member of a tenant
RemoveMember(context.Context, *v2.TenantServiceRemoveMemberRequest) (*v2.TenantServiceRemoveMemberResponse, error)
// UpdateMember update a member of a tenant
@@ -367,6 +389,12 @@ func NewTenantServiceHandler(svc TenantServiceHandler, opts ...connect.HandlerOp
connect.WithSchema(tenantServiceMethods.ByName("Delete")),
connect.WithHandlerOptions(opts...),
)
+ tenantServiceLeaveHandler := connect.NewUnaryHandlerSimple(
+ TenantServiceLeaveProcedure,
+ svc.Leave,
+ connect.WithSchema(tenantServiceMethods.ByName("Leave")),
+ connect.WithHandlerOptions(opts...),
+ )
tenantServiceRemoveMemberHandler := connect.NewUnaryHandlerSimple(
TenantServiceRemoveMemberProcedure,
svc.RemoveMember,
@@ -421,6 +449,8 @@ func NewTenantServiceHandler(svc TenantServiceHandler, opts ...connect.HandlerOp
tenantServiceUpdateHandler.ServeHTTP(w, r)
case TenantServiceDeleteProcedure:
tenantServiceDeleteHandler.ServeHTTP(w, r)
+ case TenantServiceLeaveProcedure:
+ tenantServiceLeaveHandler.ServeHTTP(w, r)
case TenantServiceRemoveMemberProcedure:
tenantServiceRemoveMemberHandler.ServeHTTP(w, r)
case TenantServiceUpdateMemberProcedure:
@@ -464,6 +494,10 @@ func (UnimplementedTenantServiceHandler) Delete(context.Context, *v2.TenantServi
return nil, connect.NewError(connect.CodeUnimplemented, errors.New("metalstack.api.v2.TenantService.Delete is not implemented"))
}
+func (UnimplementedTenantServiceHandler) Leave(context.Context, *v2.TenantServiceLeaveRequest) (*v2.TenantServiceLeaveResponse, error) {
+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("metalstack.api.v2.TenantService.Leave is not implemented"))
+}
+
func (UnimplementedTenantServiceHandler) RemoveMember(context.Context, *v2.TenantServiceRemoveMemberRequest) (*v2.TenantServiceRemoveMemberResponse, error) {
return nil, connect.NewError(connect.CodeUnimplemented, errors.New("metalstack.api.v2.TenantService.RemoveMember is not implemented"))
}
diff --git a/go/metalstack/api/v2/project.pb.go b/go/metalstack/api/v2/project.pb.go
index a39d9858..50d7a4d4 100644
--- a/go/metalstack/api/v2/project.pb.go
+++ b/go/metalstack/api/v2/project.pb.go
@@ -1173,6 +1173,89 @@ func (x *ProjectServiceInviteGetResponse) GetInvite() *ProjectInvite {
return nil
}
+// ProjectServiceLeaveRequest is used to leave a project
+type ProjectServiceLeaveRequest struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Project is the uuid of the project
+ Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ProjectServiceLeaveRequest) Reset() {
+ *x = ProjectServiceLeaveRequest{}
+ mi := &file_metalstack_api_v2_project_proto_msgTypes[19]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ProjectServiceLeaveRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ProjectServiceLeaveRequest) ProtoMessage() {}
+
+func (x *ProjectServiceLeaveRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_metalstack_api_v2_project_proto_msgTypes[19]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ProjectServiceLeaveRequest.ProtoReflect.Descriptor instead.
+func (*ProjectServiceLeaveRequest) Descriptor() ([]byte, []int) {
+ return file_metalstack_api_v2_project_proto_rawDescGZIP(), []int{19}
+}
+
+func (x *ProjectServiceLeaveRequest) GetProject() string {
+ if x != nil {
+ return x.Project
+ }
+ return ""
+}
+
+// ProjectServiceLeaveResponse is the response payload to a leave project request
+type ProjectServiceLeaveResponse struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ProjectServiceLeaveResponse) Reset() {
+ *x = ProjectServiceLeaveResponse{}
+ mi := &file_metalstack_api_v2_project_proto_msgTypes[20]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ProjectServiceLeaveResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ProjectServiceLeaveResponse) ProtoMessage() {}
+
+func (x *ProjectServiceLeaveResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_metalstack_api_v2_project_proto_msgTypes[20]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ProjectServiceLeaveResponse.ProtoReflect.Descriptor instead.
+func (*ProjectServiceLeaveResponse) Descriptor() ([]byte, []int) {
+ return file_metalstack_api_v2_project_proto_rawDescGZIP(), []int{20}
+}
+
// ProjectServiceRemoveMemberRequest is used to remove a member from a project
type ProjectServiceRemoveMemberRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
@@ -1186,7 +1269,7 @@ type ProjectServiceRemoveMemberRequest struct {
func (x *ProjectServiceRemoveMemberRequest) Reset() {
*x = ProjectServiceRemoveMemberRequest{}
- mi := &file_metalstack_api_v2_project_proto_msgTypes[19]
+ mi := &file_metalstack_api_v2_project_proto_msgTypes[21]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1198,7 +1281,7 @@ func (x *ProjectServiceRemoveMemberRequest) String() string {
func (*ProjectServiceRemoveMemberRequest) ProtoMessage() {}
func (x *ProjectServiceRemoveMemberRequest) ProtoReflect() protoreflect.Message {
- mi := &file_metalstack_api_v2_project_proto_msgTypes[19]
+ mi := &file_metalstack_api_v2_project_proto_msgTypes[21]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1211,7 +1294,7 @@ func (x *ProjectServiceRemoveMemberRequest) ProtoReflect() protoreflect.Message
// Deprecated: Use ProjectServiceRemoveMemberRequest.ProtoReflect.Descriptor instead.
func (*ProjectServiceRemoveMemberRequest) Descriptor() ([]byte, []int) {
- return file_metalstack_api_v2_project_proto_rawDescGZIP(), []int{19}
+ return file_metalstack_api_v2_project_proto_rawDescGZIP(), []int{21}
}
func (x *ProjectServiceRemoveMemberRequest) GetProject() string {
@@ -1237,7 +1320,7 @@ type ProjectServiceRemoveMemberResponse struct {
func (x *ProjectServiceRemoveMemberResponse) Reset() {
*x = ProjectServiceRemoveMemberResponse{}
- mi := &file_metalstack_api_v2_project_proto_msgTypes[20]
+ mi := &file_metalstack_api_v2_project_proto_msgTypes[22]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1249,7 +1332,7 @@ func (x *ProjectServiceRemoveMemberResponse) String() string {
func (*ProjectServiceRemoveMemberResponse) ProtoMessage() {}
func (x *ProjectServiceRemoveMemberResponse) ProtoReflect() protoreflect.Message {
- mi := &file_metalstack_api_v2_project_proto_msgTypes[20]
+ mi := &file_metalstack_api_v2_project_proto_msgTypes[22]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1262,7 +1345,7 @@ func (x *ProjectServiceRemoveMemberResponse) ProtoReflect() protoreflect.Message
// Deprecated: Use ProjectServiceRemoveMemberResponse.ProtoReflect.Descriptor instead.
func (*ProjectServiceRemoveMemberResponse) Descriptor() ([]byte, []int) {
- return file_metalstack_api_v2_project_proto_rawDescGZIP(), []int{20}
+ return file_metalstack_api_v2_project_proto_rawDescGZIP(), []int{22}
}
// ProjectServiceUpdateMemberRequest is used to update a member of a project
@@ -1280,7 +1363,7 @@ type ProjectServiceUpdateMemberRequest struct {
func (x *ProjectServiceUpdateMemberRequest) Reset() {
*x = ProjectServiceUpdateMemberRequest{}
- mi := &file_metalstack_api_v2_project_proto_msgTypes[21]
+ mi := &file_metalstack_api_v2_project_proto_msgTypes[23]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1292,7 +1375,7 @@ func (x *ProjectServiceUpdateMemberRequest) String() string {
func (*ProjectServiceUpdateMemberRequest) ProtoMessage() {}
func (x *ProjectServiceUpdateMemberRequest) ProtoReflect() protoreflect.Message {
- mi := &file_metalstack_api_v2_project_proto_msgTypes[21]
+ mi := &file_metalstack_api_v2_project_proto_msgTypes[23]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1305,7 +1388,7 @@ func (x *ProjectServiceUpdateMemberRequest) ProtoReflect() protoreflect.Message
// Deprecated: Use ProjectServiceUpdateMemberRequest.ProtoReflect.Descriptor instead.
func (*ProjectServiceUpdateMemberRequest) Descriptor() ([]byte, []int) {
- return file_metalstack_api_v2_project_proto_rawDescGZIP(), []int{21}
+ return file_metalstack_api_v2_project_proto_rawDescGZIP(), []int{23}
}
func (x *ProjectServiceUpdateMemberRequest) GetProject() string {
@@ -1340,7 +1423,7 @@ type ProjectServiceUpdateMemberResponse struct {
func (x *ProjectServiceUpdateMemberResponse) Reset() {
*x = ProjectServiceUpdateMemberResponse{}
- mi := &file_metalstack_api_v2_project_proto_msgTypes[22]
+ mi := &file_metalstack_api_v2_project_proto_msgTypes[24]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1352,7 +1435,7 @@ func (x *ProjectServiceUpdateMemberResponse) String() string {
func (*ProjectServiceUpdateMemberResponse) ProtoMessage() {}
func (x *ProjectServiceUpdateMemberResponse) ProtoReflect() protoreflect.Message {
- mi := &file_metalstack_api_v2_project_proto_msgTypes[22]
+ mi := &file_metalstack_api_v2_project_proto_msgTypes[24]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1365,7 +1448,7 @@ func (x *ProjectServiceUpdateMemberResponse) ProtoReflect() protoreflect.Message
// Deprecated: Use ProjectServiceUpdateMemberResponse.ProtoReflect.Descriptor instead.
func (*ProjectServiceUpdateMemberResponse) Descriptor() ([]byte, []int) {
- return file_metalstack_api_v2_project_proto_rawDescGZIP(), []int{22}
+ return file_metalstack_api_v2_project_proto_rawDescGZIP(), []int{24}
}
func (x *ProjectServiceUpdateMemberResponse) GetProjectMember() *ProjectMember {
@@ -1386,7 +1469,7 @@ type ProjectServiceInviteAcceptRequest struct {
func (x *ProjectServiceInviteAcceptRequest) Reset() {
*x = ProjectServiceInviteAcceptRequest{}
- mi := &file_metalstack_api_v2_project_proto_msgTypes[23]
+ mi := &file_metalstack_api_v2_project_proto_msgTypes[25]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1398,7 +1481,7 @@ func (x *ProjectServiceInviteAcceptRequest) String() string {
func (*ProjectServiceInviteAcceptRequest) ProtoMessage() {}
func (x *ProjectServiceInviteAcceptRequest) ProtoReflect() protoreflect.Message {
- mi := &file_metalstack_api_v2_project_proto_msgTypes[23]
+ mi := &file_metalstack_api_v2_project_proto_msgTypes[25]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1411,7 +1494,7 @@ func (x *ProjectServiceInviteAcceptRequest) ProtoReflect() protoreflect.Message
// Deprecated: Use ProjectServiceInviteAcceptRequest.ProtoReflect.Descriptor instead.
func (*ProjectServiceInviteAcceptRequest) Descriptor() ([]byte, []int) {
- return file_metalstack_api_v2_project_proto_rawDescGZIP(), []int{23}
+ return file_metalstack_api_v2_project_proto_rawDescGZIP(), []int{25}
}
func (x *ProjectServiceInviteAcceptRequest) GetSecret() string {
@@ -1434,7 +1517,7 @@ type ProjectServiceInviteAcceptResponse struct {
func (x *ProjectServiceInviteAcceptResponse) Reset() {
*x = ProjectServiceInviteAcceptResponse{}
- mi := &file_metalstack_api_v2_project_proto_msgTypes[24]
+ mi := &file_metalstack_api_v2_project_proto_msgTypes[26]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1446,7 +1529,7 @@ func (x *ProjectServiceInviteAcceptResponse) String() string {
func (*ProjectServiceInviteAcceptResponse) ProtoMessage() {}
func (x *ProjectServiceInviteAcceptResponse) ProtoReflect() protoreflect.Message {
- mi := &file_metalstack_api_v2_project_proto_msgTypes[24]
+ mi := &file_metalstack_api_v2_project_proto_msgTypes[26]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1459,7 +1542,7 @@ func (x *ProjectServiceInviteAcceptResponse) ProtoReflect() protoreflect.Message
// Deprecated: Use ProjectServiceInviteAcceptResponse.ProtoReflect.Descriptor instead.
func (*ProjectServiceInviteAcceptResponse) Descriptor() ([]byte, []int) {
- return file_metalstack_api_v2_project_proto_rawDescGZIP(), []int{24}
+ return file_metalstack_api_v2_project_proto_rawDescGZIP(), []int{26}
}
func (x *ProjectServiceInviteAcceptResponse) GetProject() string {
@@ -1489,7 +1572,7 @@ type ProjectServiceInviteDeleteRequest struct {
func (x *ProjectServiceInviteDeleteRequest) Reset() {
*x = ProjectServiceInviteDeleteRequest{}
- mi := &file_metalstack_api_v2_project_proto_msgTypes[25]
+ mi := &file_metalstack_api_v2_project_proto_msgTypes[27]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1501,7 +1584,7 @@ func (x *ProjectServiceInviteDeleteRequest) String() string {
func (*ProjectServiceInviteDeleteRequest) ProtoMessage() {}
func (x *ProjectServiceInviteDeleteRequest) ProtoReflect() protoreflect.Message {
- mi := &file_metalstack_api_v2_project_proto_msgTypes[25]
+ mi := &file_metalstack_api_v2_project_proto_msgTypes[27]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1514,7 +1597,7 @@ func (x *ProjectServiceInviteDeleteRequest) ProtoReflect() protoreflect.Message
// Deprecated: Use ProjectServiceInviteDeleteRequest.ProtoReflect.Descriptor instead.
func (*ProjectServiceInviteDeleteRequest) Descriptor() ([]byte, []int) {
- return file_metalstack_api_v2_project_proto_rawDescGZIP(), []int{25}
+ return file_metalstack_api_v2_project_proto_rawDescGZIP(), []int{27}
}
func (x *ProjectServiceInviteDeleteRequest) GetProject() string {
@@ -1540,7 +1623,7 @@ type ProjectServiceInviteDeleteResponse struct {
func (x *ProjectServiceInviteDeleteResponse) Reset() {
*x = ProjectServiceInviteDeleteResponse{}
- mi := &file_metalstack_api_v2_project_proto_msgTypes[26]
+ mi := &file_metalstack_api_v2_project_proto_msgTypes[28]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1552,7 +1635,7 @@ func (x *ProjectServiceInviteDeleteResponse) String() string {
func (*ProjectServiceInviteDeleteResponse) ProtoMessage() {}
func (x *ProjectServiceInviteDeleteResponse) ProtoReflect() protoreflect.Message {
- mi := &file_metalstack_api_v2_project_proto_msgTypes[26]
+ mi := &file_metalstack_api_v2_project_proto_msgTypes[28]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1565,7 +1648,7 @@ func (x *ProjectServiceInviteDeleteResponse) ProtoReflect() protoreflect.Message
// Deprecated: Use ProjectServiceInviteDeleteResponse.ProtoReflect.Descriptor instead.
func (*ProjectServiceInviteDeleteResponse) Descriptor() ([]byte, []int) {
- return file_metalstack_api_v2_project_proto_rawDescGZIP(), []int{26}
+ return file_metalstack_api_v2_project_proto_rawDescGZIP(), []int{28}
}
var File_metalstack_api_v2_project_proto protoreflect.FileDescriptor
@@ -1661,7 +1744,10 @@ const file_metalstack_api_v2_project_proto_rawDesc = "" +
"\x1eProjectServiceInviteGetRequest\x12\x16\n" +
"\x06secret\x18\x01 \x01(\tR\x06secret\"[\n" +
"\x1fProjectServiceInviteGetResponse\x128\n" +
- "\x06invite\x18\x01 \x01(\v2 .metalstack.api.v2.ProjectInviteR\x06invite\"_\n" +
+ "\x06invite\x18\x01 \x01(\v2 .metalstack.api.v2.ProjectInviteR\x06invite\"@\n" +
+ "\x1aProjectServiceLeaveRequest\x12\"\n" +
+ "\aproject\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\"\x1d\n" +
+ "\x1bProjectServiceLeaveResponse\"_\n" +
"!ProjectServiceRemoveMemberRequest\x12\"\n" +
"\aproject\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12\x16\n" +
"\x06member\x18\x02 \x01(\tR\x06member\"$\n" +
@@ -1680,7 +1766,7 @@ const file_metalstack_api_v2_project_proto_rawDesc = "" +
"!ProjectServiceInviteDeleteRequest\x12\"\n" +
"\aproject\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12\x16\n" +
"\x06secret\x18\x02 \x01(\tR\x06secret\"$\n" +
- "\"ProjectServiceInviteDeleteResponse2\xef\v\n" +
+ "\"ProjectServiceInviteDeleteResponse2\xe2\f\n" +
"\x0eProjectService\x12m\n" +
"\x04List\x12,.metalstack.api.v2.ProjectServiceListRequest\x1a-.metalstack.api.v2.ProjectServiceListResponse\"\b\xd8\xf3\x18\x03\xe0\xf3\x18\x02\x12m\n" +
"\x03Get\x12+.metalstack.api.v2.ProjectServiceGetRequest\x1a,.metalstack.api.v2.ProjectServiceGetResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12u\n" +
@@ -1688,7 +1774,8 @@ const file_metalstack_api_v2_project_proto_rawDesc = "" +
"\xc2\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12t\n" +
"\x06Delete\x12..metalstack.api.v2.ProjectServiceDeleteRequest\x1a/.metalstack.api.v2.ProjectServiceDeleteResponse\"\t\xca\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12u\n" +
"\x06Update\x12..metalstack.api.v2.ProjectServiceUpdateRequest\x1a/.metalstack.api.v2.ProjectServiceUpdateResponse\"\n" +
- "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x86\x01\n" +
+ "\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12q\n" +
+ "\x05Leave\x12-.metalstack.api.v2.ProjectServiceLeaveRequest\x1a..metalstack.api.v2.ProjectServiceLeaveResponse\"\t\xca\xf3\x18\x01\x03\xe0\xf3\x18\x01\x12\x86\x01\n" +
"\fRemoveMember\x124.metalstack.api.v2.ProjectServiceRemoveMemberRequest\x1a5.metalstack.api.v2.ProjectServiceRemoveMemberResponse\"\t\xca\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12\x86\x01\n" +
"\fUpdateMember\x124.metalstack.api.v2.ProjectServiceUpdateMemberRequest\x1a5.metalstack.api.v2.ProjectServiceUpdateMemberResponse\"\t\xca\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12t\n" +
"\x06Invite\x12..metalstack.api.v2.ProjectServiceInviteRequest\x1a/.metalstack.api.v2.ProjectServiceInviteResponse\"\t\xca\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12\x85\x01\n" +
@@ -1710,7 +1797,7 @@ func file_metalstack_api_v2_project_proto_rawDescGZIP() []byte {
return file_metalstack_api_v2_project_proto_rawDescData
}
-var file_metalstack_api_v2_project_proto_msgTypes = make([]protoimpl.MessageInfo, 27)
+var file_metalstack_api_v2_project_proto_msgTypes = make([]protoimpl.MessageInfo, 29)
var file_metalstack_api_v2_project_proto_goTypes = []any{
(*Project)(nil), // 0: metalstack.api.v2.Project
(*ProjectMember)(nil), // 1: metalstack.api.v2.ProjectMember
@@ -1731,70 +1818,74 @@ var file_metalstack_api_v2_project_proto_goTypes = []any{
(*ProjectServiceInvitesListResponse)(nil), // 16: metalstack.api.v2.ProjectServiceInvitesListResponse
(*ProjectServiceInviteGetRequest)(nil), // 17: metalstack.api.v2.ProjectServiceInviteGetRequest
(*ProjectServiceInviteGetResponse)(nil), // 18: metalstack.api.v2.ProjectServiceInviteGetResponse
- (*ProjectServiceRemoveMemberRequest)(nil), // 19: metalstack.api.v2.ProjectServiceRemoveMemberRequest
- (*ProjectServiceRemoveMemberResponse)(nil), // 20: metalstack.api.v2.ProjectServiceRemoveMemberResponse
- (*ProjectServiceUpdateMemberRequest)(nil), // 21: metalstack.api.v2.ProjectServiceUpdateMemberRequest
- (*ProjectServiceUpdateMemberResponse)(nil), // 22: metalstack.api.v2.ProjectServiceUpdateMemberResponse
- (*ProjectServiceInviteAcceptRequest)(nil), // 23: metalstack.api.v2.ProjectServiceInviteAcceptRequest
- (*ProjectServiceInviteAcceptResponse)(nil), // 24: metalstack.api.v2.ProjectServiceInviteAcceptResponse
- (*ProjectServiceInviteDeleteRequest)(nil), // 25: metalstack.api.v2.ProjectServiceInviteDeleteRequest
- (*ProjectServiceInviteDeleteResponse)(nil), // 26: metalstack.api.v2.ProjectServiceInviteDeleteResponse
- (*Meta)(nil), // 27: metalstack.api.v2.Meta
- (ProjectRole)(0), // 28: metalstack.api.v2.ProjectRole
- (*timestamppb.Timestamp)(nil), // 29: google.protobuf.Timestamp
- (*Labels)(nil), // 30: metalstack.api.v2.Labels
- (*UpdateMeta)(nil), // 31: metalstack.api.v2.UpdateMeta
- (*UpdateLabels)(nil), // 32: metalstack.api.v2.UpdateLabels
+ (*ProjectServiceLeaveRequest)(nil), // 19: metalstack.api.v2.ProjectServiceLeaveRequest
+ (*ProjectServiceLeaveResponse)(nil), // 20: metalstack.api.v2.ProjectServiceLeaveResponse
+ (*ProjectServiceRemoveMemberRequest)(nil), // 21: metalstack.api.v2.ProjectServiceRemoveMemberRequest
+ (*ProjectServiceRemoveMemberResponse)(nil), // 22: metalstack.api.v2.ProjectServiceRemoveMemberResponse
+ (*ProjectServiceUpdateMemberRequest)(nil), // 23: metalstack.api.v2.ProjectServiceUpdateMemberRequest
+ (*ProjectServiceUpdateMemberResponse)(nil), // 24: metalstack.api.v2.ProjectServiceUpdateMemberResponse
+ (*ProjectServiceInviteAcceptRequest)(nil), // 25: metalstack.api.v2.ProjectServiceInviteAcceptRequest
+ (*ProjectServiceInviteAcceptResponse)(nil), // 26: metalstack.api.v2.ProjectServiceInviteAcceptResponse
+ (*ProjectServiceInviteDeleteRequest)(nil), // 27: metalstack.api.v2.ProjectServiceInviteDeleteRequest
+ (*ProjectServiceInviteDeleteResponse)(nil), // 28: metalstack.api.v2.ProjectServiceInviteDeleteResponse
+ (*Meta)(nil), // 29: metalstack.api.v2.Meta
+ (ProjectRole)(0), // 30: metalstack.api.v2.ProjectRole
+ (*timestamppb.Timestamp)(nil), // 31: google.protobuf.Timestamp
+ (*Labels)(nil), // 32: metalstack.api.v2.Labels
+ (*UpdateMeta)(nil), // 33: metalstack.api.v2.UpdateMeta
+ (*UpdateLabels)(nil), // 34: metalstack.api.v2.UpdateLabels
}
var file_metalstack_api_v2_project_proto_depIdxs = []int32{
- 27, // 0: metalstack.api.v2.Project.meta:type_name -> metalstack.api.v2.Meta
- 28, // 1: metalstack.api.v2.ProjectMember.role:type_name -> metalstack.api.v2.ProjectRole
- 29, // 2: metalstack.api.v2.ProjectMember.created_at:type_name -> google.protobuf.Timestamp
- 28, // 3: metalstack.api.v2.ProjectInvite.role:type_name -> metalstack.api.v2.ProjectRole
- 29, // 4: metalstack.api.v2.ProjectInvite.expires_at:type_name -> google.protobuf.Timestamp
- 29, // 5: metalstack.api.v2.ProjectInvite.joined_at:type_name -> google.protobuf.Timestamp
- 30, // 6: metalstack.api.v2.ProjectServiceListRequest.labels:type_name -> metalstack.api.v2.Labels
+ 29, // 0: metalstack.api.v2.Project.meta:type_name -> metalstack.api.v2.Meta
+ 30, // 1: metalstack.api.v2.ProjectMember.role:type_name -> metalstack.api.v2.ProjectRole
+ 31, // 2: metalstack.api.v2.ProjectMember.created_at:type_name -> google.protobuf.Timestamp
+ 30, // 3: metalstack.api.v2.ProjectInvite.role:type_name -> metalstack.api.v2.ProjectRole
+ 31, // 4: metalstack.api.v2.ProjectInvite.expires_at:type_name -> google.protobuf.Timestamp
+ 31, // 5: metalstack.api.v2.ProjectInvite.joined_at:type_name -> google.protobuf.Timestamp
+ 32, // 6: metalstack.api.v2.ProjectServiceListRequest.labels:type_name -> metalstack.api.v2.Labels
0, // 7: metalstack.api.v2.ProjectServiceListResponse.projects:type_name -> metalstack.api.v2.Project
0, // 8: metalstack.api.v2.ProjectServiceGetResponse.project:type_name -> metalstack.api.v2.Project
1, // 9: metalstack.api.v2.ProjectServiceGetResponse.project_members:type_name -> metalstack.api.v2.ProjectMember
- 30, // 10: metalstack.api.v2.ProjectServiceCreateRequest.labels:type_name -> metalstack.api.v2.Labels
+ 32, // 10: metalstack.api.v2.ProjectServiceCreateRequest.labels:type_name -> metalstack.api.v2.Labels
0, // 11: metalstack.api.v2.ProjectServiceCreateResponse.project:type_name -> metalstack.api.v2.Project
0, // 12: metalstack.api.v2.ProjectServiceDeleteResponse.project:type_name -> metalstack.api.v2.Project
- 31, // 13: metalstack.api.v2.ProjectServiceUpdateRequest.update_meta:type_name -> metalstack.api.v2.UpdateMeta
- 32, // 14: metalstack.api.v2.ProjectServiceUpdateRequest.labels:type_name -> metalstack.api.v2.UpdateLabels
+ 33, // 13: metalstack.api.v2.ProjectServiceUpdateRequest.update_meta:type_name -> metalstack.api.v2.UpdateMeta
+ 34, // 14: metalstack.api.v2.ProjectServiceUpdateRequest.labels:type_name -> metalstack.api.v2.UpdateLabels
0, // 15: metalstack.api.v2.ProjectServiceUpdateResponse.project:type_name -> metalstack.api.v2.Project
- 28, // 16: metalstack.api.v2.ProjectServiceInviteRequest.role:type_name -> metalstack.api.v2.ProjectRole
+ 30, // 16: metalstack.api.v2.ProjectServiceInviteRequest.role:type_name -> metalstack.api.v2.ProjectRole
2, // 17: metalstack.api.v2.ProjectServiceInviteResponse.invite:type_name -> metalstack.api.v2.ProjectInvite
2, // 18: metalstack.api.v2.ProjectServiceInvitesListResponse.invites:type_name -> metalstack.api.v2.ProjectInvite
2, // 19: metalstack.api.v2.ProjectServiceInviteGetResponse.invite:type_name -> metalstack.api.v2.ProjectInvite
- 28, // 20: metalstack.api.v2.ProjectServiceUpdateMemberRequest.role:type_name -> metalstack.api.v2.ProjectRole
+ 30, // 20: metalstack.api.v2.ProjectServiceUpdateMemberRequest.role:type_name -> metalstack.api.v2.ProjectRole
1, // 21: metalstack.api.v2.ProjectServiceUpdateMemberResponse.project_member:type_name -> metalstack.api.v2.ProjectMember
3, // 22: metalstack.api.v2.ProjectService.List:input_type -> metalstack.api.v2.ProjectServiceListRequest
5, // 23: metalstack.api.v2.ProjectService.Get:input_type -> metalstack.api.v2.ProjectServiceGetRequest
7, // 24: metalstack.api.v2.ProjectService.Create:input_type -> metalstack.api.v2.ProjectServiceCreateRequest
9, // 25: metalstack.api.v2.ProjectService.Delete:input_type -> metalstack.api.v2.ProjectServiceDeleteRequest
11, // 26: metalstack.api.v2.ProjectService.Update:input_type -> metalstack.api.v2.ProjectServiceUpdateRequest
- 19, // 27: metalstack.api.v2.ProjectService.RemoveMember:input_type -> metalstack.api.v2.ProjectServiceRemoveMemberRequest
- 21, // 28: metalstack.api.v2.ProjectService.UpdateMember:input_type -> metalstack.api.v2.ProjectServiceUpdateMemberRequest
- 13, // 29: metalstack.api.v2.ProjectService.Invite:input_type -> metalstack.api.v2.ProjectServiceInviteRequest
- 23, // 30: metalstack.api.v2.ProjectService.InviteAccept:input_type -> metalstack.api.v2.ProjectServiceInviteAcceptRequest
- 25, // 31: metalstack.api.v2.ProjectService.InviteDelete:input_type -> metalstack.api.v2.ProjectServiceInviteDeleteRequest
- 15, // 32: metalstack.api.v2.ProjectService.InvitesList:input_type -> metalstack.api.v2.ProjectServiceInvitesListRequest
- 17, // 33: metalstack.api.v2.ProjectService.InviteGet:input_type -> metalstack.api.v2.ProjectServiceInviteGetRequest
- 4, // 34: metalstack.api.v2.ProjectService.List:output_type -> metalstack.api.v2.ProjectServiceListResponse
- 6, // 35: metalstack.api.v2.ProjectService.Get:output_type -> metalstack.api.v2.ProjectServiceGetResponse
- 8, // 36: metalstack.api.v2.ProjectService.Create:output_type -> metalstack.api.v2.ProjectServiceCreateResponse
- 10, // 37: metalstack.api.v2.ProjectService.Delete:output_type -> metalstack.api.v2.ProjectServiceDeleteResponse
- 12, // 38: metalstack.api.v2.ProjectService.Update:output_type -> metalstack.api.v2.ProjectServiceUpdateResponse
- 20, // 39: metalstack.api.v2.ProjectService.RemoveMember:output_type -> metalstack.api.v2.ProjectServiceRemoveMemberResponse
- 22, // 40: metalstack.api.v2.ProjectService.UpdateMember:output_type -> metalstack.api.v2.ProjectServiceUpdateMemberResponse
- 14, // 41: metalstack.api.v2.ProjectService.Invite:output_type -> metalstack.api.v2.ProjectServiceInviteResponse
- 24, // 42: metalstack.api.v2.ProjectService.InviteAccept:output_type -> metalstack.api.v2.ProjectServiceInviteAcceptResponse
- 26, // 43: metalstack.api.v2.ProjectService.InviteDelete:output_type -> metalstack.api.v2.ProjectServiceInviteDeleteResponse
- 16, // 44: metalstack.api.v2.ProjectService.InvitesList:output_type -> metalstack.api.v2.ProjectServiceInvitesListResponse
- 18, // 45: metalstack.api.v2.ProjectService.InviteGet:output_type -> metalstack.api.v2.ProjectServiceInviteGetResponse
- 34, // [34:46] is the sub-list for method output_type
- 22, // [22:34] is the sub-list for method input_type
+ 19, // 27: metalstack.api.v2.ProjectService.Leave:input_type -> metalstack.api.v2.ProjectServiceLeaveRequest
+ 21, // 28: metalstack.api.v2.ProjectService.RemoveMember:input_type -> metalstack.api.v2.ProjectServiceRemoveMemberRequest
+ 23, // 29: metalstack.api.v2.ProjectService.UpdateMember:input_type -> metalstack.api.v2.ProjectServiceUpdateMemberRequest
+ 13, // 30: metalstack.api.v2.ProjectService.Invite:input_type -> metalstack.api.v2.ProjectServiceInviteRequest
+ 25, // 31: metalstack.api.v2.ProjectService.InviteAccept:input_type -> metalstack.api.v2.ProjectServiceInviteAcceptRequest
+ 27, // 32: metalstack.api.v2.ProjectService.InviteDelete:input_type -> metalstack.api.v2.ProjectServiceInviteDeleteRequest
+ 15, // 33: metalstack.api.v2.ProjectService.InvitesList:input_type -> metalstack.api.v2.ProjectServiceInvitesListRequest
+ 17, // 34: metalstack.api.v2.ProjectService.InviteGet:input_type -> metalstack.api.v2.ProjectServiceInviteGetRequest
+ 4, // 35: metalstack.api.v2.ProjectService.List:output_type -> metalstack.api.v2.ProjectServiceListResponse
+ 6, // 36: metalstack.api.v2.ProjectService.Get:output_type -> metalstack.api.v2.ProjectServiceGetResponse
+ 8, // 37: metalstack.api.v2.ProjectService.Create:output_type -> metalstack.api.v2.ProjectServiceCreateResponse
+ 10, // 38: metalstack.api.v2.ProjectService.Delete:output_type -> metalstack.api.v2.ProjectServiceDeleteResponse
+ 12, // 39: metalstack.api.v2.ProjectService.Update:output_type -> metalstack.api.v2.ProjectServiceUpdateResponse
+ 20, // 40: metalstack.api.v2.ProjectService.Leave:output_type -> metalstack.api.v2.ProjectServiceLeaveResponse
+ 22, // 41: metalstack.api.v2.ProjectService.RemoveMember:output_type -> metalstack.api.v2.ProjectServiceRemoveMemberResponse
+ 24, // 42: metalstack.api.v2.ProjectService.UpdateMember:output_type -> metalstack.api.v2.ProjectServiceUpdateMemberResponse
+ 14, // 43: metalstack.api.v2.ProjectService.Invite:output_type -> metalstack.api.v2.ProjectServiceInviteResponse
+ 26, // 44: metalstack.api.v2.ProjectService.InviteAccept:output_type -> metalstack.api.v2.ProjectServiceInviteAcceptResponse
+ 28, // 45: metalstack.api.v2.ProjectService.InviteDelete:output_type -> metalstack.api.v2.ProjectServiceInviteDeleteResponse
+ 16, // 46: metalstack.api.v2.ProjectService.InvitesList:output_type -> metalstack.api.v2.ProjectServiceInvitesListResponse
+ 18, // 47: metalstack.api.v2.ProjectService.InviteGet:output_type -> metalstack.api.v2.ProjectServiceInviteGetResponse
+ 35, // [35:48] is the sub-list for method output_type
+ 22, // [22:35] is the sub-list for method input_type
22, // [22:22] is the sub-list for extension type_name
22, // [22:22] is the sub-list for extension extendee
0, // [0:22] is the sub-list for field type_name
@@ -1817,7 +1908,7 @@ func file_metalstack_api_v2_project_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_metalstack_api_v2_project_proto_rawDesc), len(file_metalstack_api_v2_project_proto_rawDesc)),
NumEnums: 0,
- NumMessages: 27,
+ NumMessages: 29,
NumExtensions: 0,
NumServices: 1,
},
diff --git a/go/metalstack/api/v2/tenant.pb.go b/go/metalstack/api/v2/tenant.pb.go
index 89c856be..087f13b0 100644
--- a/go/metalstack/api/v2/tenant.pb.go
+++ b/go/metalstack/api/v2/tenant.pb.go
@@ -1233,6 +1233,89 @@ func (x *TenantServiceRemoveMemberRequest) GetMember() string {
return ""
}
+// TenantServiceLeaveTenantRequest is used to leave a tenant
+type TenantServiceLeaveRequest struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Login of the tenant
+ Login string `protobuf:"bytes,1,opt,name=login,proto3" json:"login,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *TenantServiceLeaveRequest) Reset() {
+ *x = TenantServiceLeaveRequest{}
+ mi := &file_metalstack_api_v2_tenant_proto_msgTypes[20]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *TenantServiceLeaveRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*TenantServiceLeaveRequest) ProtoMessage() {}
+
+func (x *TenantServiceLeaveRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_metalstack_api_v2_tenant_proto_msgTypes[20]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use TenantServiceLeaveRequest.ProtoReflect.Descriptor instead.
+func (*TenantServiceLeaveRequest) Descriptor() ([]byte, []int) {
+ return file_metalstack_api_v2_tenant_proto_rawDescGZIP(), []int{20}
+}
+
+func (x *TenantServiceLeaveRequest) GetLogin() string {
+ if x != nil {
+ return x.Login
+ }
+ return ""
+}
+
+// TenantServiceLeaveTenantResponse is the response payload to a leave tenant request
+type TenantServiceLeaveResponse struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *TenantServiceLeaveResponse) Reset() {
+ *x = TenantServiceLeaveResponse{}
+ mi := &file_metalstack_api_v2_tenant_proto_msgTypes[21]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *TenantServiceLeaveResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*TenantServiceLeaveResponse) ProtoMessage() {}
+
+func (x *TenantServiceLeaveResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_metalstack_api_v2_tenant_proto_msgTypes[21]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use TenantServiceLeaveResponse.ProtoReflect.Descriptor instead.
+func (*TenantServiceLeaveResponse) Descriptor() ([]byte, []int) {
+ return file_metalstack_api_v2_tenant_proto_rawDescGZIP(), []int{21}
+}
+
// TenantServiceRemoveMemberResponse is the response payload to a remove member request
type TenantServiceRemoveMemberResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
@@ -1242,7 +1325,7 @@ type TenantServiceRemoveMemberResponse struct {
func (x *TenantServiceRemoveMemberResponse) Reset() {
*x = TenantServiceRemoveMemberResponse{}
- mi := &file_metalstack_api_v2_tenant_proto_msgTypes[20]
+ mi := &file_metalstack_api_v2_tenant_proto_msgTypes[22]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1254,7 +1337,7 @@ func (x *TenantServiceRemoveMemberResponse) String() string {
func (*TenantServiceRemoveMemberResponse) ProtoMessage() {}
func (x *TenantServiceRemoveMemberResponse) ProtoReflect() protoreflect.Message {
- mi := &file_metalstack_api_v2_tenant_proto_msgTypes[20]
+ mi := &file_metalstack_api_v2_tenant_proto_msgTypes[22]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1267,7 +1350,7 @@ func (x *TenantServiceRemoveMemberResponse) ProtoReflect() protoreflect.Message
// Deprecated: Use TenantServiceRemoveMemberResponse.ProtoReflect.Descriptor instead.
func (*TenantServiceRemoveMemberResponse) Descriptor() ([]byte, []int) {
- return file_metalstack_api_v2_tenant_proto_rawDescGZIP(), []int{20}
+ return file_metalstack_api_v2_tenant_proto_rawDescGZIP(), []int{22}
}
// TenantServiceInviteAcceptRequest is the request payload to a accept invite request
@@ -1281,7 +1364,7 @@ type TenantServiceInviteAcceptRequest struct {
func (x *TenantServiceInviteAcceptRequest) Reset() {
*x = TenantServiceInviteAcceptRequest{}
- mi := &file_metalstack_api_v2_tenant_proto_msgTypes[21]
+ mi := &file_metalstack_api_v2_tenant_proto_msgTypes[23]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1293,7 +1376,7 @@ func (x *TenantServiceInviteAcceptRequest) String() string {
func (*TenantServiceInviteAcceptRequest) ProtoMessage() {}
func (x *TenantServiceInviteAcceptRequest) ProtoReflect() protoreflect.Message {
- mi := &file_metalstack_api_v2_tenant_proto_msgTypes[21]
+ mi := &file_metalstack_api_v2_tenant_proto_msgTypes[23]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1306,7 +1389,7 @@ func (x *TenantServiceInviteAcceptRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use TenantServiceInviteAcceptRequest.ProtoReflect.Descriptor instead.
func (*TenantServiceInviteAcceptRequest) Descriptor() ([]byte, []int) {
- return file_metalstack_api_v2_tenant_proto_rawDescGZIP(), []int{21}
+ return file_metalstack_api_v2_tenant_proto_rawDescGZIP(), []int{23}
}
func (x *TenantServiceInviteAcceptRequest) GetSecret() string {
@@ -1329,7 +1412,7 @@ type TenantServiceInviteAcceptResponse struct {
func (x *TenantServiceInviteAcceptResponse) Reset() {
*x = TenantServiceInviteAcceptResponse{}
- mi := &file_metalstack_api_v2_tenant_proto_msgTypes[22]
+ mi := &file_metalstack_api_v2_tenant_proto_msgTypes[24]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1341,7 +1424,7 @@ func (x *TenantServiceInviteAcceptResponse) String() string {
func (*TenantServiceInviteAcceptResponse) ProtoMessage() {}
func (x *TenantServiceInviteAcceptResponse) ProtoReflect() protoreflect.Message {
- mi := &file_metalstack_api_v2_tenant_proto_msgTypes[22]
+ mi := &file_metalstack_api_v2_tenant_proto_msgTypes[24]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1354,7 +1437,7 @@ func (x *TenantServiceInviteAcceptResponse) ProtoReflect() protoreflect.Message
// Deprecated: Use TenantServiceInviteAcceptResponse.ProtoReflect.Descriptor instead.
func (*TenantServiceInviteAcceptResponse) Descriptor() ([]byte, []int) {
- return file_metalstack_api_v2_tenant_proto_rawDescGZIP(), []int{22}
+ return file_metalstack_api_v2_tenant_proto_rawDescGZIP(), []int{24}
}
func (x *TenantServiceInviteAcceptResponse) GetTenant() string {
@@ -1384,7 +1467,7 @@ type TenantServiceInviteDeleteRequest struct {
func (x *TenantServiceInviteDeleteRequest) Reset() {
*x = TenantServiceInviteDeleteRequest{}
- mi := &file_metalstack_api_v2_tenant_proto_msgTypes[23]
+ mi := &file_metalstack_api_v2_tenant_proto_msgTypes[25]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1396,7 +1479,7 @@ func (x *TenantServiceInviteDeleteRequest) String() string {
func (*TenantServiceInviteDeleteRequest) ProtoMessage() {}
func (x *TenantServiceInviteDeleteRequest) ProtoReflect() protoreflect.Message {
- mi := &file_metalstack_api_v2_tenant_proto_msgTypes[23]
+ mi := &file_metalstack_api_v2_tenant_proto_msgTypes[25]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1409,7 +1492,7 @@ func (x *TenantServiceInviteDeleteRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use TenantServiceInviteDeleteRequest.ProtoReflect.Descriptor instead.
func (*TenantServiceInviteDeleteRequest) Descriptor() ([]byte, []int) {
- return file_metalstack_api_v2_tenant_proto_rawDescGZIP(), []int{23}
+ return file_metalstack_api_v2_tenant_proto_rawDescGZIP(), []int{25}
}
func (x *TenantServiceInviteDeleteRequest) GetLogin() string {
@@ -1435,7 +1518,7 @@ type TenantServiceInviteDeleteResponse struct {
func (x *TenantServiceInviteDeleteResponse) Reset() {
*x = TenantServiceInviteDeleteResponse{}
- mi := &file_metalstack_api_v2_tenant_proto_msgTypes[24]
+ mi := &file_metalstack_api_v2_tenant_proto_msgTypes[26]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1447,7 +1530,7 @@ func (x *TenantServiceInviteDeleteResponse) String() string {
func (*TenantServiceInviteDeleteResponse) ProtoMessage() {}
func (x *TenantServiceInviteDeleteResponse) ProtoReflect() protoreflect.Message {
- mi := &file_metalstack_api_v2_tenant_proto_msgTypes[24]
+ mi := &file_metalstack_api_v2_tenant_proto_msgTypes[26]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1460,7 +1543,7 @@ func (x *TenantServiceInviteDeleteResponse) ProtoReflect() protoreflect.Message
// Deprecated: Use TenantServiceInviteDeleteResponse.ProtoReflect.Descriptor instead.
func (*TenantServiceInviteDeleteResponse) Descriptor() ([]byte, []int) {
- return file_metalstack_api_v2_tenant_proto_rawDescGZIP(), []int{24}
+ return file_metalstack_api_v2_tenant_proto_rawDescGZIP(), []int{26}
}
// TenantServiceUpdateMemberRequest is used to update a member from a tenant
@@ -1478,7 +1561,7 @@ type TenantServiceUpdateMemberRequest struct {
func (x *TenantServiceUpdateMemberRequest) Reset() {
*x = TenantServiceUpdateMemberRequest{}
- mi := &file_metalstack_api_v2_tenant_proto_msgTypes[25]
+ mi := &file_metalstack_api_v2_tenant_proto_msgTypes[27]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1490,7 +1573,7 @@ func (x *TenantServiceUpdateMemberRequest) String() string {
func (*TenantServiceUpdateMemberRequest) ProtoMessage() {}
func (x *TenantServiceUpdateMemberRequest) ProtoReflect() protoreflect.Message {
- mi := &file_metalstack_api_v2_tenant_proto_msgTypes[25]
+ mi := &file_metalstack_api_v2_tenant_proto_msgTypes[27]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1503,7 +1586,7 @@ func (x *TenantServiceUpdateMemberRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use TenantServiceUpdateMemberRequest.ProtoReflect.Descriptor instead.
func (*TenantServiceUpdateMemberRequest) Descriptor() ([]byte, []int) {
- return file_metalstack_api_v2_tenant_proto_rawDescGZIP(), []int{25}
+ return file_metalstack_api_v2_tenant_proto_rawDescGZIP(), []int{27}
}
func (x *TenantServiceUpdateMemberRequest) GetLogin() string {
@@ -1538,7 +1621,7 @@ type TenantServiceUpdateMemberResponse struct {
func (x *TenantServiceUpdateMemberResponse) Reset() {
*x = TenantServiceUpdateMemberResponse{}
- mi := &file_metalstack_api_v2_tenant_proto_msgTypes[26]
+ mi := &file_metalstack_api_v2_tenant_proto_msgTypes[28]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1550,7 +1633,7 @@ func (x *TenantServiceUpdateMemberResponse) String() string {
func (*TenantServiceUpdateMemberResponse) ProtoMessage() {}
func (x *TenantServiceUpdateMemberResponse) ProtoReflect() protoreflect.Message {
- mi := &file_metalstack_api_v2_tenant_proto_msgTypes[26]
+ mi := &file_metalstack_api_v2_tenant_proto_msgTypes[28]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1563,7 +1646,7 @@ func (x *TenantServiceUpdateMemberResponse) ProtoReflect() protoreflect.Message
// Deprecated: Use TenantServiceUpdateMemberResponse.ProtoReflect.Descriptor instead.
func (*TenantServiceUpdateMemberResponse) Descriptor() ([]byte, []int) {
- return file_metalstack_api_v2_tenant_proto_rawDescGZIP(), []int{26}
+ return file_metalstack_api_v2_tenant_proto_rawDescGZIP(), []int{28}
}
func (x *TenantServiceUpdateMemberResponse) GetTenantMember() *TenantMember {
@@ -1670,7 +1753,10 @@ const file_metalstack_api_v2_tenant_proto_rawDesc = "" +
"\x06invite\x18\x01 \x01(\v2\x1f.metalstack.api.v2.TenantInviteR\x06invite\"P\n" +
" TenantServiceRemoveMemberRequest\x12\x14\n" +
"\x05login\x18\x01 \x01(\tR\x05login\x12\x16\n" +
- "\x06member\x18\x02 \x01(\tR\x06member\"#\n" +
+ "\x06member\x18\x02 \x01(\tR\x06member\"1\n" +
+ "\x19TenantServiceLeaveRequest\x12\x14\n" +
+ "\x05login\x18\x01 \x01(\tR\x05login\"\x1c\n" +
+ "\x1aTenantServiceLeaveResponse\"#\n" +
"!TenantServiceRemoveMemberResponse\":\n" +
" TenantServiceInviteAcceptRequest\x12\x16\n" +
"\x06secret\x18\x01 \x01(\tR\x06secret\"\\\n" +
@@ -1687,7 +1773,7 @@ const file_metalstack_api_v2_tenant_proto_rawDesc = "" +
"\x06member\x18\x02 \x01(\tR\x06member\x12;\n" +
"\x04role\x18\x03 \x01(\x0e2\x1d.metalstack.api.v2.TenantRoleB\b\xbaH\x05\x82\x01\x02\x10\x01R\x04role\"i\n" +
"!TenantServiceUpdateMemberResponse\x12D\n" +
- "\rtenant_member\x18\x01 \x01(\v2\x1f.metalstack.api.v2.TenantMemberR\ftenantMember2\xd6\v\n" +
+ "\rtenant_member\x18\x01 \x01(\v2\x1f.metalstack.api.v2.TenantMemberR\ftenantMember2\xc7\f\n" +
"\rTenantService\x12q\n" +
"\x06Create\x12-.metalstack.api.v2.TenantServiceCreateRequest\x1a..metalstack.api.v2.TenantServiceCreateResponse\"\b\xd8\xf3\x18\x03\xe0\xf3\x18\x01\x12k\n" +
"\x04List\x12+.metalstack.api.v2.TenantServiceListRequest\x1a,.metalstack.api.v2.TenantServiceListResponse\"\b\xd8\xf3\x18\x03\xe0\xf3\x18\x02\x12l\n" +
@@ -1695,7 +1781,8 @@ const file_metalstack_api_v2_tenant_proto_rawDesc = "" +
"\x06Update\x12-.metalstack.api.v2.TenantServiceUpdateRequest\x1a..metalstack.api.v2.TenantServiceUpdateResponse\"\n" +
"\xc2\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12s\n" +
"\x06Delete\x12-.metalstack.api.v2.TenantServiceDeleteRequest\x1a..metalstack.api.v2.TenantServiceDeleteResponse\"\n" +
- "\xc2\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x84\x01\n" +
+ "\xc2\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12o\n" +
+ "\x05Leave\x12,.metalstack.api.v2.TenantServiceLeaveRequest\x1a-.metalstack.api.v2.TenantServiceLeaveResponse\"\t\xc2\xf3\x18\x01\x03\xe0\xf3\x18\x01\x12\x84\x01\n" +
"\fRemoveMember\x123.metalstack.api.v2.TenantServiceRemoveMemberRequest\x1a4.metalstack.api.v2.TenantServiceRemoveMemberResponse\"\t\xc2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12\x84\x01\n" +
"\fUpdateMember\x123.metalstack.api.v2.TenantServiceUpdateMemberRequest\x1a4.metalstack.api.v2.TenantServiceUpdateMemberResponse\"\t\xc2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12r\n" +
"\x06Invite\x12-.metalstack.api.v2.TenantServiceInviteRequest\x1a..metalstack.api.v2.TenantServiceInviteResponse\"\t\xc2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12\x83\x01\n" +
@@ -1717,7 +1804,7 @@ func file_metalstack_api_v2_tenant_proto_rawDescGZIP() []byte {
return file_metalstack_api_v2_tenant_proto_rawDescData
}
-var file_metalstack_api_v2_tenant_proto_msgTypes = make([]protoimpl.MessageInfo, 27)
+var file_metalstack_api_v2_tenant_proto_msgTypes = make([]protoimpl.MessageInfo, 29)
var file_metalstack_api_v2_tenant_proto_goTypes = []any{
(*Tenant)(nil), // 0: metalstack.api.v2.Tenant
(*TenantMember)(nil), // 1: metalstack.api.v2.TenantMember
@@ -1739,69 +1826,73 @@ var file_metalstack_api_v2_tenant_proto_goTypes = []any{
(*TenantServiceInviteGetRequest)(nil), // 17: metalstack.api.v2.TenantServiceInviteGetRequest
(*TenantServiceInviteGetResponse)(nil), // 18: metalstack.api.v2.TenantServiceInviteGetResponse
(*TenantServiceRemoveMemberRequest)(nil), // 19: metalstack.api.v2.TenantServiceRemoveMemberRequest
- (*TenantServiceRemoveMemberResponse)(nil), // 20: metalstack.api.v2.TenantServiceRemoveMemberResponse
- (*TenantServiceInviteAcceptRequest)(nil), // 21: metalstack.api.v2.TenantServiceInviteAcceptRequest
- (*TenantServiceInviteAcceptResponse)(nil), // 22: metalstack.api.v2.TenantServiceInviteAcceptResponse
- (*TenantServiceInviteDeleteRequest)(nil), // 23: metalstack.api.v2.TenantServiceInviteDeleteRequest
- (*TenantServiceInviteDeleteResponse)(nil), // 24: metalstack.api.v2.TenantServiceInviteDeleteResponse
- (*TenantServiceUpdateMemberRequest)(nil), // 25: metalstack.api.v2.TenantServiceUpdateMemberRequest
- (*TenantServiceUpdateMemberResponse)(nil), // 26: metalstack.api.v2.TenantServiceUpdateMemberResponse
- (*Meta)(nil), // 27: metalstack.api.v2.Meta
- (TenantRole)(0), // 28: metalstack.api.v2.TenantRole
- (*timestamppb.Timestamp)(nil), // 29: google.protobuf.Timestamp
- (*Labels)(nil), // 30: metalstack.api.v2.Labels
- (*UpdateMeta)(nil), // 31: metalstack.api.v2.UpdateMeta
- (*UpdateLabels)(nil), // 32: metalstack.api.v2.UpdateLabels
+ (*TenantServiceLeaveRequest)(nil), // 20: metalstack.api.v2.TenantServiceLeaveRequest
+ (*TenantServiceLeaveResponse)(nil), // 21: metalstack.api.v2.TenantServiceLeaveResponse
+ (*TenantServiceRemoveMemberResponse)(nil), // 22: metalstack.api.v2.TenantServiceRemoveMemberResponse
+ (*TenantServiceInviteAcceptRequest)(nil), // 23: metalstack.api.v2.TenantServiceInviteAcceptRequest
+ (*TenantServiceInviteAcceptResponse)(nil), // 24: metalstack.api.v2.TenantServiceInviteAcceptResponse
+ (*TenantServiceInviteDeleteRequest)(nil), // 25: metalstack.api.v2.TenantServiceInviteDeleteRequest
+ (*TenantServiceInviteDeleteResponse)(nil), // 26: metalstack.api.v2.TenantServiceInviteDeleteResponse
+ (*TenantServiceUpdateMemberRequest)(nil), // 27: metalstack.api.v2.TenantServiceUpdateMemberRequest
+ (*TenantServiceUpdateMemberResponse)(nil), // 28: metalstack.api.v2.TenantServiceUpdateMemberResponse
+ (*Meta)(nil), // 29: metalstack.api.v2.Meta
+ (TenantRole)(0), // 30: metalstack.api.v2.TenantRole
+ (*timestamppb.Timestamp)(nil), // 31: google.protobuf.Timestamp
+ (*Labels)(nil), // 32: metalstack.api.v2.Labels
+ (*UpdateMeta)(nil), // 33: metalstack.api.v2.UpdateMeta
+ (*UpdateLabels)(nil), // 34: metalstack.api.v2.UpdateLabels
}
var file_metalstack_api_v2_tenant_proto_depIdxs = []int32{
- 27, // 0: metalstack.api.v2.Tenant.meta:type_name -> metalstack.api.v2.Meta
- 28, // 1: metalstack.api.v2.TenantMember.role:type_name -> metalstack.api.v2.TenantRole
- 29, // 2: metalstack.api.v2.TenantMember.created_at:type_name -> google.protobuf.Timestamp
- 28, // 3: metalstack.api.v2.TenantInvite.role:type_name -> metalstack.api.v2.TenantRole
- 29, // 4: metalstack.api.v2.TenantInvite.expires_at:type_name -> google.protobuf.Timestamp
- 29, // 5: metalstack.api.v2.TenantInvite.joined_at:type_name -> google.protobuf.Timestamp
- 30, // 6: metalstack.api.v2.TenantServiceListRequest.labels:type_name -> metalstack.api.v2.Labels
- 30, // 7: metalstack.api.v2.TenantServiceCreateRequest.labels:type_name -> metalstack.api.v2.Labels
- 31, // 8: metalstack.api.v2.TenantServiceUpdateRequest.update_meta:type_name -> metalstack.api.v2.UpdateMeta
- 32, // 9: metalstack.api.v2.TenantServiceUpdateRequest.labels:type_name -> metalstack.api.v2.UpdateLabels
+ 29, // 0: metalstack.api.v2.Tenant.meta:type_name -> metalstack.api.v2.Meta
+ 30, // 1: metalstack.api.v2.TenantMember.role:type_name -> metalstack.api.v2.TenantRole
+ 31, // 2: metalstack.api.v2.TenantMember.created_at:type_name -> google.protobuf.Timestamp
+ 30, // 3: metalstack.api.v2.TenantInvite.role:type_name -> metalstack.api.v2.TenantRole
+ 31, // 4: metalstack.api.v2.TenantInvite.expires_at:type_name -> google.protobuf.Timestamp
+ 31, // 5: metalstack.api.v2.TenantInvite.joined_at:type_name -> google.protobuf.Timestamp
+ 32, // 6: metalstack.api.v2.TenantServiceListRequest.labels:type_name -> metalstack.api.v2.Labels
+ 32, // 7: metalstack.api.v2.TenantServiceCreateRequest.labels:type_name -> metalstack.api.v2.Labels
+ 33, // 8: metalstack.api.v2.TenantServiceUpdateRequest.update_meta:type_name -> metalstack.api.v2.UpdateMeta
+ 34, // 9: metalstack.api.v2.TenantServiceUpdateRequest.labels:type_name -> metalstack.api.v2.UpdateLabels
0, // 10: metalstack.api.v2.TenantServiceGetResponse.tenant:type_name -> metalstack.api.v2.Tenant
1, // 11: metalstack.api.v2.TenantServiceGetResponse.tenant_members:type_name -> metalstack.api.v2.TenantMember
0, // 12: metalstack.api.v2.TenantServiceListResponse.tenants:type_name -> metalstack.api.v2.Tenant
0, // 13: metalstack.api.v2.TenantServiceCreateResponse.tenant:type_name -> metalstack.api.v2.Tenant
0, // 14: metalstack.api.v2.TenantServiceUpdateResponse.tenant:type_name -> metalstack.api.v2.Tenant
0, // 15: metalstack.api.v2.TenantServiceDeleteResponse.tenant:type_name -> metalstack.api.v2.Tenant
- 28, // 16: metalstack.api.v2.TenantServiceInviteRequest.role:type_name -> metalstack.api.v2.TenantRole
+ 30, // 16: metalstack.api.v2.TenantServiceInviteRequest.role:type_name -> metalstack.api.v2.TenantRole
2, // 17: metalstack.api.v2.TenantServiceInviteResponse.invite:type_name -> metalstack.api.v2.TenantInvite
2, // 18: metalstack.api.v2.TenantServiceInvitesListResponse.invites:type_name -> metalstack.api.v2.TenantInvite
2, // 19: metalstack.api.v2.TenantServiceInviteGetResponse.invite:type_name -> metalstack.api.v2.TenantInvite
- 28, // 20: metalstack.api.v2.TenantServiceUpdateMemberRequest.role:type_name -> metalstack.api.v2.TenantRole
+ 30, // 20: metalstack.api.v2.TenantServiceUpdateMemberRequest.role:type_name -> metalstack.api.v2.TenantRole
1, // 21: metalstack.api.v2.TenantServiceUpdateMemberResponse.tenant_member:type_name -> metalstack.api.v2.TenantMember
5, // 22: metalstack.api.v2.TenantService.Create:input_type -> metalstack.api.v2.TenantServiceCreateRequest
3, // 23: metalstack.api.v2.TenantService.List:input_type -> metalstack.api.v2.TenantServiceListRequest
4, // 24: metalstack.api.v2.TenantService.Get:input_type -> metalstack.api.v2.TenantServiceGetRequest
6, // 25: metalstack.api.v2.TenantService.Update:input_type -> metalstack.api.v2.TenantServiceUpdateRequest
7, // 26: metalstack.api.v2.TenantService.Delete:input_type -> metalstack.api.v2.TenantServiceDeleteRequest
- 19, // 27: metalstack.api.v2.TenantService.RemoveMember:input_type -> metalstack.api.v2.TenantServiceRemoveMemberRequest
- 25, // 28: metalstack.api.v2.TenantService.UpdateMember:input_type -> metalstack.api.v2.TenantServiceUpdateMemberRequest
- 13, // 29: metalstack.api.v2.TenantService.Invite:input_type -> metalstack.api.v2.TenantServiceInviteRequest
- 21, // 30: metalstack.api.v2.TenantService.InviteAccept:input_type -> metalstack.api.v2.TenantServiceInviteAcceptRequest
- 23, // 31: metalstack.api.v2.TenantService.InviteDelete:input_type -> metalstack.api.v2.TenantServiceInviteDeleteRequest
- 15, // 32: metalstack.api.v2.TenantService.InvitesList:input_type -> metalstack.api.v2.TenantServiceInvitesListRequest
- 17, // 33: metalstack.api.v2.TenantService.InviteGet:input_type -> metalstack.api.v2.TenantServiceInviteGetRequest
- 10, // 34: metalstack.api.v2.TenantService.Create:output_type -> metalstack.api.v2.TenantServiceCreateResponse
- 9, // 35: metalstack.api.v2.TenantService.List:output_type -> metalstack.api.v2.TenantServiceListResponse
- 8, // 36: metalstack.api.v2.TenantService.Get:output_type -> metalstack.api.v2.TenantServiceGetResponse
- 11, // 37: metalstack.api.v2.TenantService.Update:output_type -> metalstack.api.v2.TenantServiceUpdateResponse
- 12, // 38: metalstack.api.v2.TenantService.Delete:output_type -> metalstack.api.v2.TenantServiceDeleteResponse
- 20, // 39: metalstack.api.v2.TenantService.RemoveMember:output_type -> metalstack.api.v2.TenantServiceRemoveMemberResponse
- 26, // 40: metalstack.api.v2.TenantService.UpdateMember:output_type -> metalstack.api.v2.TenantServiceUpdateMemberResponse
- 14, // 41: metalstack.api.v2.TenantService.Invite:output_type -> metalstack.api.v2.TenantServiceInviteResponse
- 22, // 42: metalstack.api.v2.TenantService.InviteAccept:output_type -> metalstack.api.v2.TenantServiceInviteAcceptResponse
- 24, // 43: metalstack.api.v2.TenantService.InviteDelete:output_type -> metalstack.api.v2.TenantServiceInviteDeleteResponse
- 16, // 44: metalstack.api.v2.TenantService.InvitesList:output_type -> metalstack.api.v2.TenantServiceInvitesListResponse
- 18, // 45: metalstack.api.v2.TenantService.InviteGet:output_type -> metalstack.api.v2.TenantServiceInviteGetResponse
- 34, // [34:46] is the sub-list for method output_type
- 22, // [22:34] is the sub-list for method input_type
+ 20, // 27: metalstack.api.v2.TenantService.Leave:input_type -> metalstack.api.v2.TenantServiceLeaveRequest
+ 19, // 28: metalstack.api.v2.TenantService.RemoveMember:input_type -> metalstack.api.v2.TenantServiceRemoveMemberRequest
+ 27, // 29: metalstack.api.v2.TenantService.UpdateMember:input_type -> metalstack.api.v2.TenantServiceUpdateMemberRequest
+ 13, // 30: metalstack.api.v2.TenantService.Invite:input_type -> metalstack.api.v2.TenantServiceInviteRequest
+ 23, // 31: metalstack.api.v2.TenantService.InviteAccept:input_type -> metalstack.api.v2.TenantServiceInviteAcceptRequest
+ 25, // 32: metalstack.api.v2.TenantService.InviteDelete:input_type -> metalstack.api.v2.TenantServiceInviteDeleteRequest
+ 15, // 33: metalstack.api.v2.TenantService.InvitesList:input_type -> metalstack.api.v2.TenantServiceInvitesListRequest
+ 17, // 34: metalstack.api.v2.TenantService.InviteGet:input_type -> metalstack.api.v2.TenantServiceInviteGetRequest
+ 10, // 35: metalstack.api.v2.TenantService.Create:output_type -> metalstack.api.v2.TenantServiceCreateResponse
+ 9, // 36: metalstack.api.v2.TenantService.List:output_type -> metalstack.api.v2.TenantServiceListResponse
+ 8, // 37: metalstack.api.v2.TenantService.Get:output_type -> metalstack.api.v2.TenantServiceGetResponse
+ 11, // 38: metalstack.api.v2.TenantService.Update:output_type -> metalstack.api.v2.TenantServiceUpdateResponse
+ 12, // 39: metalstack.api.v2.TenantService.Delete:output_type -> metalstack.api.v2.TenantServiceDeleteResponse
+ 21, // 40: metalstack.api.v2.TenantService.Leave:output_type -> metalstack.api.v2.TenantServiceLeaveResponse
+ 22, // 41: metalstack.api.v2.TenantService.RemoveMember:output_type -> metalstack.api.v2.TenantServiceRemoveMemberResponse
+ 28, // 42: metalstack.api.v2.TenantService.UpdateMember:output_type -> metalstack.api.v2.TenantServiceUpdateMemberResponse
+ 14, // 43: metalstack.api.v2.TenantService.Invite:output_type -> metalstack.api.v2.TenantServiceInviteResponse
+ 24, // 44: metalstack.api.v2.TenantService.InviteAccept:output_type -> metalstack.api.v2.TenantServiceInviteAcceptResponse
+ 26, // 45: metalstack.api.v2.TenantService.InviteDelete:output_type -> metalstack.api.v2.TenantServiceInviteDeleteResponse
+ 16, // 46: metalstack.api.v2.TenantService.InvitesList:output_type -> metalstack.api.v2.TenantServiceInvitesListResponse
+ 18, // 47: metalstack.api.v2.TenantService.InviteGet:output_type -> metalstack.api.v2.TenantServiceInviteGetResponse
+ 35, // [35:48] is the sub-list for method output_type
+ 22, // [22:35] is the sub-list for method input_type
22, // [22:22] is the sub-list for extension type_name
22, // [22:22] is the sub-list for extension extendee
0, // [0:22] is the sub-list for field type_name
@@ -1823,7 +1914,7 @@ func file_metalstack_api_v2_tenant_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_metalstack_api_v2_tenant_proto_rawDesc), len(file_metalstack_api_v2_tenant_proto_rawDesc)),
NumEnums: 0,
- NumMessages: 27,
+ NumMessages: 29,
NumExtensions: 0,
NumServices: 1,
},
diff --git a/go/permissions/servicepermissions.go b/go/permissions/servicepermissions.go
index 3def2b90..b132fa84 100755
--- a/go/permissions/servicepermissions.go
+++ b/go/permissions/servicepermissions.go
@@ -122,6 +122,7 @@ func GetServicePermissions() *ServicePermissions {
},
"TENANT_ROLE_VIEWER": []string{
"/metalstack.api.v2.TenantService/Get",
+ "/metalstack.api.v2.TenantService/Leave",
},
},
Project: Project{
@@ -180,6 +181,7 @@ func GetServicePermissions() *ServicePermissions {
"/metalstack.api.v2.NetworkService/List",
"/metalstack.api.v2.NetworkService/ListBaseNetworks",
"/metalstack.api.v2.ProjectService/Get",
+ "/metalstack.api.v2.ProjectService/Leave",
},
},
},
@@ -251,6 +253,7 @@ func GetServicePermissions() *ServicePermissions {
"/metalstack.api.v2.ProjectService/InviteDelete": true,
"/metalstack.api.v2.ProjectService/InviteGet": true,
"/metalstack.api.v2.ProjectService/InvitesList": true,
+ "/metalstack.api.v2.ProjectService/Leave": true,
"/metalstack.api.v2.ProjectService/List": true,
"/metalstack.api.v2.ProjectService/RemoveMember": true,
"/metalstack.api.v2.ProjectService/Update": true,
@@ -265,6 +268,7 @@ func GetServicePermissions() *ServicePermissions {
"/metalstack.api.v2.TenantService/InviteDelete": true,
"/metalstack.api.v2.TenantService/InviteGet": true,
"/metalstack.api.v2.TenantService/InvitesList": true,
+ "/metalstack.api.v2.TenantService/Leave": true,
"/metalstack.api.v2.TenantService/List": true,
"/metalstack.api.v2.TenantService/RemoveMember": true,
"/metalstack.api.v2.TenantService/Update": true,
@@ -364,6 +368,7 @@ func GetServicePermissions() *ServicePermissions {
"/metalstack.api.v2.TenantService/Invite": true,
"/metalstack.api.v2.TenantService/InviteDelete": true,
"/metalstack.api.v2.TenantService/InvitesList": true,
+ "/metalstack.api.v2.TenantService/Leave": true,
"/metalstack.api.v2.TenantService/RemoveMember": true,
"/metalstack.api.v2.TenantService/Update": true,
"/metalstack.api.v2.TenantService/UpdateMember": true,
@@ -390,6 +395,7 @@ func GetServicePermissions() *ServicePermissions {
"/metalstack.api.v2.ProjectService/Invite": true,
"/metalstack.api.v2.ProjectService/InviteDelete": true,
"/metalstack.api.v2.ProjectService/InvitesList": true,
+ "/metalstack.api.v2.ProjectService/Leave": true,
"/metalstack.api.v2.ProjectService/RemoveMember": true,
"/metalstack.api.v2.ProjectService/Update": true,
"/metalstack.api.v2.ProjectService/UpdateMember": true,
@@ -463,6 +469,7 @@ func GetServicePermissions() *ServicePermissions {
"/metalstack.api.v2.ProjectService/InviteDelete": true,
"/metalstack.api.v2.ProjectService/InviteGet": false,
"/metalstack.api.v2.ProjectService/InvitesList": false,
+ "/metalstack.api.v2.ProjectService/Leave": true,
"/metalstack.api.v2.ProjectService/List": false,
"/metalstack.api.v2.ProjectService/RemoveMember": true,
"/metalstack.api.v2.ProjectService/Update": true,
@@ -477,6 +484,7 @@ func GetServicePermissions() *ServicePermissions {
"/metalstack.api.v2.TenantService/InviteDelete": true,
"/metalstack.api.v2.TenantService/InviteGet": false,
"/metalstack.api.v2.TenantService/InvitesList": false,
+ "/metalstack.api.v2.TenantService/Leave": true,
"/metalstack.api.v2.TenantService/List": false,
"/metalstack.api.v2.TenantService/RemoveMember": true,
"/metalstack.api.v2.TenantService/Update": true,
diff --git a/go/tests/mocks/metalstack/api/v2/apiv2connect/ProjectServiceClient.go b/go/tests/mocks/metalstack/api/v2/apiv2connect/ProjectServiceClient.go
index 380999bc..cf9a4e64 100644
--- a/go/tests/mocks/metalstack/api/v2/apiv2connect/ProjectServiceClient.go
+++ b/go/tests/mocks/metalstack/api/v2/apiv2connect/ProjectServiceClient.go
@@ -255,6 +255,36 @@ func (_m *ProjectServiceClient) InvitesList(_a0 context.Context, _a1 *apiv2.Proj
return r0, r1
}
+// Leave provides a mock function with given fields: _a0, _a1
+func (_m *ProjectServiceClient) Leave(_a0 context.Context, _a1 *apiv2.ProjectServiceLeaveRequest) (*apiv2.ProjectServiceLeaveResponse, error) {
+ ret := _m.Called(_a0, _a1)
+
+ if len(ret) == 0 {
+ panic("no return value specified for Leave")
+ }
+
+ var r0 *apiv2.ProjectServiceLeaveResponse
+ var r1 error
+ if rf, ok := ret.Get(0).(func(context.Context, *apiv2.ProjectServiceLeaveRequest) (*apiv2.ProjectServiceLeaveResponse, error)); ok {
+ return rf(_a0, _a1)
+ }
+ if rf, ok := ret.Get(0).(func(context.Context, *apiv2.ProjectServiceLeaveRequest) *apiv2.ProjectServiceLeaveResponse); ok {
+ r0 = rf(_a0, _a1)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*apiv2.ProjectServiceLeaveResponse)
+ }
+ }
+
+ if rf, ok := ret.Get(1).(func(context.Context, *apiv2.ProjectServiceLeaveRequest) error); ok {
+ r1 = rf(_a0, _a1)
+ } else {
+ r1 = ret.Error(1)
+ }
+
+ return r0, r1
+}
+
// List provides a mock function with given fields: _a0, _a1
func (_m *ProjectServiceClient) List(_a0 context.Context, _a1 *apiv2.ProjectServiceListRequest) (*apiv2.ProjectServiceListResponse, error) {
ret := _m.Called(_a0, _a1)
diff --git a/go/tests/mocks/metalstack/api/v2/apiv2connect/ProjectServiceHandler.go b/go/tests/mocks/metalstack/api/v2/apiv2connect/ProjectServiceHandler.go
index 1f1ad021..7b6b8472 100644
--- a/go/tests/mocks/metalstack/api/v2/apiv2connect/ProjectServiceHandler.go
+++ b/go/tests/mocks/metalstack/api/v2/apiv2connect/ProjectServiceHandler.go
@@ -255,6 +255,36 @@ func (_m *ProjectServiceHandler) InvitesList(_a0 context.Context, _a1 *apiv2.Pro
return r0, r1
}
+// Leave provides a mock function with given fields: _a0, _a1
+func (_m *ProjectServiceHandler) Leave(_a0 context.Context, _a1 *apiv2.ProjectServiceLeaveRequest) (*apiv2.ProjectServiceLeaveResponse, error) {
+ ret := _m.Called(_a0, _a1)
+
+ if len(ret) == 0 {
+ panic("no return value specified for Leave")
+ }
+
+ var r0 *apiv2.ProjectServiceLeaveResponse
+ var r1 error
+ if rf, ok := ret.Get(0).(func(context.Context, *apiv2.ProjectServiceLeaveRequest) (*apiv2.ProjectServiceLeaveResponse, error)); ok {
+ return rf(_a0, _a1)
+ }
+ if rf, ok := ret.Get(0).(func(context.Context, *apiv2.ProjectServiceLeaveRequest) *apiv2.ProjectServiceLeaveResponse); ok {
+ r0 = rf(_a0, _a1)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*apiv2.ProjectServiceLeaveResponse)
+ }
+ }
+
+ if rf, ok := ret.Get(1).(func(context.Context, *apiv2.ProjectServiceLeaveRequest) error); ok {
+ r1 = rf(_a0, _a1)
+ } else {
+ r1 = ret.Error(1)
+ }
+
+ return r0, r1
+}
+
// List provides a mock function with given fields: _a0, _a1
func (_m *ProjectServiceHandler) List(_a0 context.Context, _a1 *apiv2.ProjectServiceListRequest) (*apiv2.ProjectServiceListResponse, error) {
ret := _m.Called(_a0, _a1)
diff --git a/go/tests/mocks/metalstack/api/v2/apiv2connect/TenantServiceClient.go b/go/tests/mocks/metalstack/api/v2/apiv2connect/TenantServiceClient.go
index 3d45bde6..b78d0137 100644
--- a/go/tests/mocks/metalstack/api/v2/apiv2connect/TenantServiceClient.go
+++ b/go/tests/mocks/metalstack/api/v2/apiv2connect/TenantServiceClient.go
@@ -255,6 +255,36 @@ func (_m *TenantServiceClient) InvitesList(_a0 context.Context, _a1 *apiv2.Tenan
return r0, r1
}
+// Leave provides a mock function with given fields: _a0, _a1
+func (_m *TenantServiceClient) Leave(_a0 context.Context, _a1 *apiv2.TenantServiceLeaveRequest) (*apiv2.TenantServiceLeaveResponse, error) {
+ ret := _m.Called(_a0, _a1)
+
+ if len(ret) == 0 {
+ panic("no return value specified for Leave")
+ }
+
+ var r0 *apiv2.TenantServiceLeaveResponse
+ var r1 error
+ if rf, ok := ret.Get(0).(func(context.Context, *apiv2.TenantServiceLeaveRequest) (*apiv2.TenantServiceLeaveResponse, error)); ok {
+ return rf(_a0, _a1)
+ }
+ if rf, ok := ret.Get(0).(func(context.Context, *apiv2.TenantServiceLeaveRequest) *apiv2.TenantServiceLeaveResponse); ok {
+ r0 = rf(_a0, _a1)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*apiv2.TenantServiceLeaveResponse)
+ }
+ }
+
+ if rf, ok := ret.Get(1).(func(context.Context, *apiv2.TenantServiceLeaveRequest) error); ok {
+ r1 = rf(_a0, _a1)
+ } else {
+ r1 = ret.Error(1)
+ }
+
+ return r0, r1
+}
+
// List provides a mock function with given fields: _a0, _a1
func (_m *TenantServiceClient) List(_a0 context.Context, _a1 *apiv2.TenantServiceListRequest) (*apiv2.TenantServiceListResponse, error) {
ret := _m.Called(_a0, _a1)
diff --git a/go/tests/mocks/metalstack/api/v2/apiv2connect/TenantServiceHandler.go b/go/tests/mocks/metalstack/api/v2/apiv2connect/TenantServiceHandler.go
index 68746aca..68bc9898 100644
--- a/go/tests/mocks/metalstack/api/v2/apiv2connect/TenantServiceHandler.go
+++ b/go/tests/mocks/metalstack/api/v2/apiv2connect/TenantServiceHandler.go
@@ -255,6 +255,36 @@ func (_m *TenantServiceHandler) InvitesList(_a0 context.Context, _a1 *apiv2.Tena
return r0, r1
}
+// Leave provides a mock function with given fields: _a0, _a1
+func (_m *TenantServiceHandler) Leave(_a0 context.Context, _a1 *apiv2.TenantServiceLeaveRequest) (*apiv2.TenantServiceLeaveResponse, error) {
+ ret := _m.Called(_a0, _a1)
+
+ if len(ret) == 0 {
+ panic("no return value specified for Leave")
+ }
+
+ var r0 *apiv2.TenantServiceLeaveResponse
+ var r1 error
+ if rf, ok := ret.Get(0).(func(context.Context, *apiv2.TenantServiceLeaveRequest) (*apiv2.TenantServiceLeaveResponse, error)); ok {
+ return rf(_a0, _a1)
+ }
+ if rf, ok := ret.Get(0).(func(context.Context, *apiv2.TenantServiceLeaveRequest) *apiv2.TenantServiceLeaveResponse); ok {
+ r0 = rf(_a0, _a1)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*apiv2.TenantServiceLeaveResponse)
+ }
+ }
+
+ if rf, ok := ret.Get(1).(func(context.Context, *apiv2.TenantServiceLeaveRequest) error); ok {
+ r1 = rf(_a0, _a1)
+ } else {
+ r1 = ret.Error(1)
+ }
+
+ return r0, r1
+}
+
// List provides a mock function with given fields: _a0, _a1
func (_m *TenantServiceHandler) List(_a0 context.Context, _a1 *apiv2.TenantServiceListRequest) (*apiv2.TenantServiceListResponse, error) {
ret := _m.Called(_a0, _a1)
diff --git a/proto/metalstack/api/v2/project.proto b/proto/metalstack/api/v2/project.proto
index 8b261fab..f44d2f54 100644
--- a/proto/metalstack/api/v2/project.proto
+++ b/proto/metalstack/api/v2/project.proto
@@ -38,6 +38,11 @@ service ProjectService {
option (project_roles) = PROJECT_ROLE_EDITOR;
option (auditing) = AUDITING_INCLUDED;
}
+ // Leave project
+ rpc Leave(ProjectServiceLeaveRequest) returns (ProjectServiceLeaveResponse) {
+ option (project_roles) = PROJECT_ROLE_VIEWER;
+ option (auditing) = AUDITING_INCLUDED;
+ }
// RemoveMember remove a user from a project
rpc RemoveMember(ProjectServiceRemoveMemberRequest) returns (ProjectServiceRemoveMemberResponse) {
option (project_roles) = PROJECT_ROLE_OWNER;
@@ -262,6 +267,15 @@ message ProjectServiceInviteGetResponse {
ProjectInvite invite = 1;
}
+// ProjectServiceLeaveRequest is used to leave a project
+message ProjectServiceLeaveRequest {
+ // Project is the uuid of the project
+ string project = 1 [(buf.validate.field).string.uuid = true];
+}
+
+// ProjectServiceLeaveResponse is the response payload to a leave project request
+message ProjectServiceLeaveResponse {}
+
// ProjectServiceRemoveMemberRequest is used to remove a member from a project
message ProjectServiceRemoveMemberRequest {
// Project is the uuid of the project
diff --git a/proto/metalstack/api/v2/tenant.proto b/proto/metalstack/api/v2/tenant.proto
index 79c5ad19..32d631fa 100644
--- a/proto/metalstack/api/v2/tenant.proto
+++ b/proto/metalstack/api/v2/tenant.proto
@@ -40,6 +40,12 @@ service TenantService {
option (auditing) = AUDITING_INCLUDED;
}
+ // Leave remove a member of a tenant
+ rpc Leave(TenantServiceLeaveRequest) returns (TenantServiceLeaveResponse) {
+ option (tenant_roles) = TENANT_ROLE_VIEWER;
+ option (auditing) = AUDITING_INCLUDED;
+ }
+
// RemoveMember remove a member of a tenant
rpc RemoveMember(TenantServiceRemoveMemberRequest) returns (TenantServiceRemoveMemberResponse) {
option (tenant_roles) = TENANT_ROLE_OWNER;
@@ -265,6 +271,15 @@ message TenantServiceRemoveMemberRequest {
string member = 2;
}
+// TenantServiceLeaveTenantRequest is used to leave a tenant
+message TenantServiceLeaveRequest {
+ // Login of the tenant
+ string login = 1;
+}
+
+// TenantServiceLeaveTenantResponse is the response payload to a leave tenant request
+message TenantServiceLeaveResponse {}
+
// TenantServiceRemoveMemberResponse is the response payload to a remove member request
message TenantServiceRemoveMemberResponse {}
diff --git a/python/metalstack/api/v2/project_connect.py b/python/metalstack/api/v2/project_connect.py
index 351fe264..3bf2a913 100644
--- a/python/metalstack/api/v2/project_connect.py
+++ b/python/metalstack/api/v2/project_connect.py
@@ -31,6 +31,9 @@ async def delete(self, request: metalstack_dot_api_dot_v2_dot_project__pb2.Proje
async def update(self, request: metalstack_dot_api_dot_v2_dot_project__pb2.ProjectServiceUpdateRequest, ctx: RequestContext) -> metalstack_dot_api_dot_v2_dot_project__pb2.ProjectServiceUpdateResponse:
raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
+ async def leave(self, request: metalstack_dot_api_dot_v2_dot_project__pb2.ProjectServiceLeaveRequest, ctx: RequestContext) -> metalstack_dot_api_dot_v2_dot_project__pb2.ProjectServiceLeaveResponse:
+ raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
+
async def remove_member(self, request: metalstack_dot_api_dot_v2_dot_project__pb2.ProjectServiceRemoveMemberRequest, ctx: RequestContext) -> metalstack_dot_api_dot_v2_dot_project__pb2.ProjectServiceRemoveMemberResponse:
raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
@@ -107,6 +110,16 @@ def __init__(self, service: ProjectService, *, interceptors: Iterable[Intercepto
),
function=service.update,
),
+ "/metalstack.api.v2.ProjectService/Leave": Endpoint.unary(
+ method=MethodInfo(
+ name="Leave",
+ service_name="metalstack.api.v2.ProjectService",
+ input=metalstack_dot_api_dot_v2_dot_project__pb2.ProjectServiceLeaveRequest,
+ output=metalstack_dot_api_dot_v2_dot_project__pb2.ProjectServiceLeaveResponse,
+ idempotency_level=IdempotencyLevel.UNKNOWN,
+ ),
+ function=service.leave,
+ ),
"/metalstack.api.v2.ProjectService/RemoveMember": Endpoint.unary(
method=MethodInfo(
name="RemoveMember",
@@ -289,6 +302,26 @@ async def update(
timeout_ms=timeout_ms,
)
+ async def leave(
+ self,
+ request: metalstack_dot_api_dot_v2_dot_project__pb2.ProjectServiceLeaveRequest,
+ *,
+ headers: Headers | Mapping[str, str] | None = None,
+ timeout_ms: int | None = None,
+ ) -> metalstack_dot_api_dot_v2_dot_project__pb2.ProjectServiceLeaveResponse:
+ return await self.execute_unary(
+ request=request,
+ method=MethodInfo(
+ name="Leave",
+ service_name="metalstack.api.v2.ProjectService",
+ input=metalstack_dot_api_dot_v2_dot_project__pb2.ProjectServiceLeaveRequest,
+ output=metalstack_dot_api_dot_v2_dot_project__pb2.ProjectServiceLeaveResponse,
+ idempotency_level=IdempotencyLevel.UNKNOWN,
+ ),
+ headers=headers,
+ timeout_ms=timeout_ms,
+ )
+
async def remove_member(
self,
request: metalstack_dot_api_dot_v2_dot_project__pb2.ProjectServiceRemoveMemberRequest,
@@ -441,6 +474,8 @@ def delete(self, request: metalstack_dot_api_dot_v2_dot_project__pb2.ProjectServ
raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
def update(self, request: metalstack_dot_api_dot_v2_dot_project__pb2.ProjectServiceUpdateRequest, ctx: RequestContext) -> metalstack_dot_api_dot_v2_dot_project__pb2.ProjectServiceUpdateResponse:
raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
+ def leave(self, request: metalstack_dot_api_dot_v2_dot_project__pb2.ProjectServiceLeaveRequest, ctx: RequestContext) -> metalstack_dot_api_dot_v2_dot_project__pb2.ProjectServiceLeaveResponse:
+ raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
def remove_member(self, request: metalstack_dot_api_dot_v2_dot_project__pb2.ProjectServiceRemoveMemberRequest, ctx: RequestContext) -> metalstack_dot_api_dot_v2_dot_project__pb2.ProjectServiceRemoveMemberResponse:
raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
def update_member(self, request: metalstack_dot_api_dot_v2_dot_project__pb2.ProjectServiceUpdateMemberRequest, ctx: RequestContext) -> metalstack_dot_api_dot_v2_dot_project__pb2.ProjectServiceUpdateMemberResponse:
@@ -511,6 +546,16 @@ def __init__(self, service: ProjectServiceSync, interceptors: Iterable[Intercept
),
function=service.update,
),
+ "/metalstack.api.v2.ProjectService/Leave": EndpointSync.unary(
+ method=MethodInfo(
+ name="Leave",
+ service_name="metalstack.api.v2.ProjectService",
+ input=metalstack_dot_api_dot_v2_dot_project__pb2.ProjectServiceLeaveRequest,
+ output=metalstack_dot_api_dot_v2_dot_project__pb2.ProjectServiceLeaveResponse,
+ idempotency_level=IdempotencyLevel.UNKNOWN,
+ ),
+ function=service.leave,
+ ),
"/metalstack.api.v2.ProjectService/RemoveMember": EndpointSync.unary(
method=MethodInfo(
name="RemoveMember",
@@ -693,6 +738,26 @@ def update(
timeout_ms=timeout_ms,
)
+ def leave(
+ self,
+ request: metalstack_dot_api_dot_v2_dot_project__pb2.ProjectServiceLeaveRequest,
+ *,
+ headers: Headers | Mapping[str, str] | None = None,
+ timeout_ms: int | None = None,
+ ) -> metalstack_dot_api_dot_v2_dot_project__pb2.ProjectServiceLeaveResponse:
+ return self.execute_unary(
+ request=request,
+ method=MethodInfo(
+ name="Leave",
+ service_name="metalstack.api.v2.ProjectService",
+ input=metalstack_dot_api_dot_v2_dot_project__pb2.ProjectServiceLeaveRequest,
+ output=metalstack_dot_api_dot_v2_dot_project__pb2.ProjectServiceLeaveResponse,
+ idempotency_level=IdempotencyLevel.UNKNOWN,
+ ),
+ headers=headers,
+ timeout_ms=timeout_ms,
+ )
+
def remove_member(
self,
request: metalstack_dot_api_dot_v2_dot_project__pb2.ProjectServiceRemoveMemberRequest,
diff --git a/python/metalstack/api/v2/project_pb2.py b/python/metalstack/api/v2/project_pb2.py
index 07136004..285e3d78 100644
--- a/python/metalstack/api/v2/project_pb2.py
+++ b/python/metalstack/api/v2/project_pb2.py
@@ -28,7 +28,7 @@
from metalstack.api.v2 import predefined_rules_pb2 as metalstack_dot_api_dot_v2_dot_predefined__rules__pb2
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fmetalstack/api/v2/project.proto\x12\x11metalstack.api.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1emetalstack/api/v2/common.proto\x1a(metalstack/api/v2/predefined_rules.proto\"\xe5\x01\n\x07Project\x12\x12\n\x04uuid\x18\x01 \x01(\tR\x04uuid\x12+\n\x04meta\x18\x02 \x01(\x0b\x32\x17.metalstack.api.v2.MetaR\x04meta\x12\x1f\n\x04name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12-\n\x0b\x64\x65scription\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x0b\x64\x65scription\x12\x16\n\x06tenant\x18\x05 \x01(\tR\x06tenant\x12\"\n\navatar_url\x18\x06 \x01(\tH\x00R\tavatarUrl\x88\x01\x01\x42\r\n\x0b_avatar_url\"\xcb\x01\n\rProjectMember\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12<\n\x04role\x18\x02 \x01(\x0e\x32\x1e.metalstack.api.v2.ProjectRoleB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x04role\x12\x31\n\x14inherited_membership\x18\x03 \x01(\x08R\x13inheritedMembership\x12\x39\n\ncreated_at\x18\n \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\"\xe7\x02\n\rProjectInvite\x12\x16\n\x06secret\x18\x01 \x01(\tR\x06secret\x12\x18\n\x07project\x18\x02 \x01(\tR\x07project\x12<\n\x04role\x18\x03 \x01(\x0e\x32\x1e.metalstack.api.v2.ProjectRoleB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x04role\x12\x16\n\x06joined\x18\x04 \x01(\x08R\x06joined\x12!\n\x0cproject_name\x18\x05 \x01(\tR\x0bprojectName\x12\x16\n\x06tenant\x18\x06 \x01(\tR\x06tenant\x12\x1f\n\x0btenant_name\x18\x07 \x01(\tR\ntenantName\x12\x39\n\nexpires_at\x18\n \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\x12\x37\n\tjoined_at\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x08joinedAt\"\xdd\x01\n\x19ProjectServiceListRequest\x12\x13\n\x02id\x18\x01 \x01(\tH\x00R\x02id\x88\x01\x01\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12\'\n\x06tenant\x18\x03 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01H\x02R\x06tenant\x88\x01\x01\x12\x36\n\x06labels\x18\x06 \x01(\x0b\x32\x19.metalstack.api.v2.LabelsH\x03R\x06labels\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_nameB\t\n\x07_tenantB\t\n\x07_labels\"T\n\x1aProjectServiceListResponse\x12\x36\n\x08projects\x18\x01 \x03(\x0b\x32\x1a.metalstack.api.v2.ProjectR\x08projects\">\n\x18ProjectServiceGetRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"\x9c\x01\n\x19ProjectServiceGetResponse\x12\x34\n\x07project\x18\x01 \x01(\x0b\x32\x1a.metalstack.api.v2.ProjectR\x07project\x12I\n\x0fproject_members\x18\x02 \x03(\x0b\x32 .metalstack.api.v2.ProjectMemberR\x0eprojectMembers\"\xf5\x01\n\x1bProjectServiceCreateRequest\x12 \n\x05login\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01R\x05login\x12\x1f\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12-\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x0b\x64\x65scription\x12\"\n\navatar_url\x18\x04 \x01(\tH\x00R\tavatarUrl\x88\x01\x01\x12\x31\n\x06labels\x18\x05 \x01(\x0b\x32\x19.metalstack.api.v2.LabelsR\x06labelsB\r\n\x0b_avatar_url\"T\n\x1cProjectServiceCreateResponse\x12\x34\n\x07project\x18\x01 \x01(\x0b\x32\x1a.metalstack.api.v2.ProjectR\x07project\"A\n\x1bProjectServiceDeleteRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"T\n\x1cProjectServiceDeleteResponse\x12\x34\n\x07project\x18\x01 \x01(\x0b\x32\x1a.metalstack.api.v2.ProjectR\x07project\"\xf8\x02\n\x1bProjectServiceUpdateRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12\x46\n\x0bupdate_meta\x18\x02 \x01(\x0b\x32\x1d.metalstack.api.v2.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\x12$\n\x04name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x12\x32\n\x0b\x64\x65scription\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x01R\x0b\x64\x65scription\x88\x01\x01\x12\"\n\navatar_url\x18\x05 \x01(\tH\x02R\tavatarUrl\x88\x01\x01\x12<\n\x06labels\x18\x06 \x01(\x0b\x32\x1f.metalstack.api.v2.UpdateLabelsH\x03R\x06labels\x88\x01\x01\x42\x07\n\x05_nameB\x0e\n\x0c_descriptionB\r\n\x0b_avatar_urlB\t\n\x07_labels\"T\n\x1cProjectServiceUpdateResponse\x12\x34\n\x07project\x18\x01 \x01(\x0b\x32\x1a.metalstack.api.v2.ProjectR\x07project\"\x7f\n\x1bProjectServiceInviteRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12<\n\x04role\x18\x03 \x01(\x0e\x32\x1e.metalstack.api.v2.ProjectRoleB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x04role\"X\n\x1cProjectServiceInviteResponse\x12\x38\n\x06invite\x18\x01 \x01(\x0b\x32 .metalstack.api.v2.ProjectInviteR\x06invite\"F\n ProjectServiceInvitesListRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"_\n!ProjectServiceInvitesListResponse\x12:\n\x07invites\x18\x01 \x03(\x0b\x32 .metalstack.api.v2.ProjectInviteR\x07invites\"8\n\x1eProjectServiceInviteGetRequest\x12\x16\n\x06secret\x18\x01 \x01(\tR\x06secret\"[\n\x1fProjectServiceInviteGetResponse\x12\x38\n\x06invite\x18\x01 \x01(\x0b\x32 .metalstack.api.v2.ProjectInviteR\x06invite\"_\n!ProjectServiceRemoveMemberRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12\x16\n\x06member\x18\x02 \x01(\tR\x06member\"$\n\"ProjectServiceRemoveMemberResponse\"\x9d\x01\n!ProjectServiceUpdateMemberRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12\x16\n\x06member\x18\x02 \x01(\tR\x06member\x12<\n\x04role\x18\x03 \x01(\x0e\x32\x1e.metalstack.api.v2.ProjectRoleB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x04role\"m\n\"ProjectServiceUpdateMemberResponse\x12G\n\x0eproject_member\x18\x05 \x01(\x0b\x32 .metalstack.api.v2.ProjectMemberR\rprojectMember\";\n!ProjectServiceInviteAcceptRequest\x12\x16\n\x06secret\x18\x01 \x01(\tR\x06secret\"a\n\"ProjectServiceInviteAcceptResponse\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12!\n\x0cproject_name\x18\x02 \x01(\tR\x0bprojectName\"_\n!ProjectServiceInviteDeleteRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12\x16\n\x06secret\x18\x02 \x01(\tR\x06secret\"$\n\"ProjectServiceInviteDeleteResponse2\xef\x0b\n\x0eProjectService\x12m\n\x04List\x12,.metalstack.api.v2.ProjectServiceListRequest\x1a-.metalstack.api.v2.ProjectServiceListResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x02\x12m\n\x03Get\x12+.metalstack.api.v2.ProjectServiceGetRequest\x1a,.metalstack.api.v2.ProjectServiceGetResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12u\n\x06\x43reate\x12..metalstack.api.v2.ProjectServiceCreateRequest\x1a/.metalstack.api.v2.ProjectServiceCreateResponse\"\n\xc2\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12t\n\x06\x44\x65lete\x12..metalstack.api.v2.ProjectServiceDeleteRequest\x1a/.metalstack.api.v2.ProjectServiceDeleteResponse\"\t\xca\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12u\n\x06Update\x12..metalstack.api.v2.ProjectServiceUpdateRequest\x1a/.metalstack.api.v2.ProjectServiceUpdateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x86\x01\n\x0cRemoveMember\x12\x34.metalstack.api.v2.ProjectServiceRemoveMemberRequest\x1a\x35.metalstack.api.v2.ProjectServiceRemoveMemberResponse\"\t\xca\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12\x86\x01\n\x0cUpdateMember\x12\x34.metalstack.api.v2.ProjectServiceUpdateMemberRequest\x1a\x35.metalstack.api.v2.ProjectServiceUpdateMemberResponse\"\t\xca\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12t\n\x06Invite\x12..metalstack.api.v2.ProjectServiceInviteRequest\x1a/.metalstack.api.v2.ProjectServiceInviteResponse\"\t\xca\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12\x85\x01\n\x0cInviteAccept\x12\x34.metalstack.api.v2.ProjectServiceInviteAcceptRequest\x1a\x35.metalstack.api.v2.ProjectServiceInviteAcceptResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x01\x12\x86\x01\n\x0cInviteDelete\x12\x34.metalstack.api.v2.ProjectServiceInviteDeleteRequest\x1a\x35.metalstack.api.v2.ProjectServiceInviteDeleteResponse\"\t\xca\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12\x83\x01\n\x0bInvitesList\x12\x33.metalstack.api.v2.ProjectServiceInvitesListRequest\x1a\x34.metalstack.api.v2.ProjectServiceInvitesListResponse\"\t\xca\xf3\x18\x01\x01\xe0\xf3\x18\x02\x12|\n\tInviteGet\x12\x31.metalstack.api.v2.ProjectServiceInviteGetRequest\x1a\x32.metalstack.api.v2.ProjectServiceInviteGetResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x02\x42\xc2\x01\n\x15\x63om.metalstack.api.v2B\x0cProjectProtoP\x01Z5github.com/metal-stack/api/go/metalstack/api/v2;apiv2\xa2\x02\x03MAX\xaa\x02\x11Metalstack.Api.V2\xca\x02\x11Metalstack\\Api\\V2\xe2\x02\x1dMetalstack\\Api\\V2\\GPBMetadata\xea\x02\x13Metalstack::Api::V2b\x06proto3')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fmetalstack/api/v2/project.proto\x12\x11metalstack.api.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1emetalstack/api/v2/common.proto\x1a(metalstack/api/v2/predefined_rules.proto\"\xe5\x01\n\x07Project\x12\x12\n\x04uuid\x18\x01 \x01(\tR\x04uuid\x12+\n\x04meta\x18\x02 \x01(\x0b\x32\x17.metalstack.api.v2.MetaR\x04meta\x12\x1f\n\x04name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12-\n\x0b\x64\x65scription\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x0b\x64\x65scription\x12\x16\n\x06tenant\x18\x05 \x01(\tR\x06tenant\x12\"\n\navatar_url\x18\x06 \x01(\tH\x00R\tavatarUrl\x88\x01\x01\x42\r\n\x0b_avatar_url\"\xcb\x01\n\rProjectMember\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12<\n\x04role\x18\x02 \x01(\x0e\x32\x1e.metalstack.api.v2.ProjectRoleB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x04role\x12\x31\n\x14inherited_membership\x18\x03 \x01(\x08R\x13inheritedMembership\x12\x39\n\ncreated_at\x18\n \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\"\xe7\x02\n\rProjectInvite\x12\x16\n\x06secret\x18\x01 \x01(\tR\x06secret\x12\x18\n\x07project\x18\x02 \x01(\tR\x07project\x12<\n\x04role\x18\x03 \x01(\x0e\x32\x1e.metalstack.api.v2.ProjectRoleB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x04role\x12\x16\n\x06joined\x18\x04 \x01(\x08R\x06joined\x12!\n\x0cproject_name\x18\x05 \x01(\tR\x0bprojectName\x12\x16\n\x06tenant\x18\x06 \x01(\tR\x06tenant\x12\x1f\n\x0btenant_name\x18\x07 \x01(\tR\ntenantName\x12\x39\n\nexpires_at\x18\n \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\x12\x37\n\tjoined_at\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x08joinedAt\"\xdd\x01\n\x19ProjectServiceListRequest\x12\x13\n\x02id\x18\x01 \x01(\tH\x00R\x02id\x88\x01\x01\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12\'\n\x06tenant\x18\x03 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01H\x02R\x06tenant\x88\x01\x01\x12\x36\n\x06labels\x18\x06 \x01(\x0b\x32\x19.metalstack.api.v2.LabelsH\x03R\x06labels\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_nameB\t\n\x07_tenantB\t\n\x07_labels\"T\n\x1aProjectServiceListResponse\x12\x36\n\x08projects\x18\x01 \x03(\x0b\x32\x1a.metalstack.api.v2.ProjectR\x08projects\">\n\x18ProjectServiceGetRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"\x9c\x01\n\x19ProjectServiceGetResponse\x12\x34\n\x07project\x18\x01 \x01(\x0b\x32\x1a.metalstack.api.v2.ProjectR\x07project\x12I\n\x0fproject_members\x18\x02 \x03(\x0b\x32 .metalstack.api.v2.ProjectMemberR\x0eprojectMembers\"\xf5\x01\n\x1bProjectServiceCreateRequest\x12 \n\x05login\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01R\x05login\x12\x1f\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12-\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x0b\x64\x65scription\x12\"\n\navatar_url\x18\x04 \x01(\tH\x00R\tavatarUrl\x88\x01\x01\x12\x31\n\x06labels\x18\x05 \x01(\x0b\x32\x19.metalstack.api.v2.LabelsR\x06labelsB\r\n\x0b_avatar_url\"T\n\x1cProjectServiceCreateResponse\x12\x34\n\x07project\x18\x01 \x01(\x0b\x32\x1a.metalstack.api.v2.ProjectR\x07project\"A\n\x1bProjectServiceDeleteRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"T\n\x1cProjectServiceDeleteResponse\x12\x34\n\x07project\x18\x01 \x01(\x0b\x32\x1a.metalstack.api.v2.ProjectR\x07project\"\xf8\x02\n\x1bProjectServiceUpdateRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12\x46\n\x0bupdate_meta\x18\x02 \x01(\x0b\x32\x1d.metalstack.api.v2.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\x12$\n\x04name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x12\x32\n\x0b\x64\x65scription\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x01R\x0b\x64\x65scription\x88\x01\x01\x12\"\n\navatar_url\x18\x05 \x01(\tH\x02R\tavatarUrl\x88\x01\x01\x12<\n\x06labels\x18\x06 \x01(\x0b\x32\x1f.metalstack.api.v2.UpdateLabelsH\x03R\x06labels\x88\x01\x01\x42\x07\n\x05_nameB\x0e\n\x0c_descriptionB\r\n\x0b_avatar_urlB\t\n\x07_labels\"T\n\x1cProjectServiceUpdateResponse\x12\x34\n\x07project\x18\x01 \x01(\x0b\x32\x1a.metalstack.api.v2.ProjectR\x07project\"\x7f\n\x1bProjectServiceInviteRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12<\n\x04role\x18\x03 \x01(\x0e\x32\x1e.metalstack.api.v2.ProjectRoleB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x04role\"X\n\x1cProjectServiceInviteResponse\x12\x38\n\x06invite\x18\x01 \x01(\x0b\x32 .metalstack.api.v2.ProjectInviteR\x06invite\"F\n ProjectServiceInvitesListRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"_\n!ProjectServiceInvitesListResponse\x12:\n\x07invites\x18\x01 \x03(\x0b\x32 .metalstack.api.v2.ProjectInviteR\x07invites\"8\n\x1eProjectServiceInviteGetRequest\x12\x16\n\x06secret\x18\x01 \x01(\tR\x06secret\"[\n\x1fProjectServiceInviteGetResponse\x12\x38\n\x06invite\x18\x01 \x01(\x0b\x32 .metalstack.api.v2.ProjectInviteR\x06invite\"@\n\x1aProjectServiceLeaveRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"\x1d\n\x1bProjectServiceLeaveResponse\"_\n!ProjectServiceRemoveMemberRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12\x16\n\x06member\x18\x02 \x01(\tR\x06member\"$\n\"ProjectServiceRemoveMemberResponse\"\x9d\x01\n!ProjectServiceUpdateMemberRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12\x16\n\x06member\x18\x02 \x01(\tR\x06member\x12<\n\x04role\x18\x03 \x01(\x0e\x32\x1e.metalstack.api.v2.ProjectRoleB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x04role\"m\n\"ProjectServiceUpdateMemberResponse\x12G\n\x0eproject_member\x18\x05 \x01(\x0b\x32 .metalstack.api.v2.ProjectMemberR\rprojectMember\";\n!ProjectServiceInviteAcceptRequest\x12\x16\n\x06secret\x18\x01 \x01(\tR\x06secret\"a\n\"ProjectServiceInviteAcceptResponse\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12!\n\x0cproject_name\x18\x02 \x01(\tR\x0bprojectName\"_\n!ProjectServiceInviteDeleteRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12\x16\n\x06secret\x18\x02 \x01(\tR\x06secret\"$\n\"ProjectServiceInviteDeleteResponse2\xe2\x0c\n\x0eProjectService\x12m\n\x04List\x12,.metalstack.api.v2.ProjectServiceListRequest\x1a-.metalstack.api.v2.ProjectServiceListResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x02\x12m\n\x03Get\x12+.metalstack.api.v2.ProjectServiceGetRequest\x1a,.metalstack.api.v2.ProjectServiceGetResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12u\n\x06\x43reate\x12..metalstack.api.v2.ProjectServiceCreateRequest\x1a/.metalstack.api.v2.ProjectServiceCreateResponse\"\n\xc2\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12t\n\x06\x44\x65lete\x12..metalstack.api.v2.ProjectServiceDeleteRequest\x1a/.metalstack.api.v2.ProjectServiceDeleteResponse\"\t\xca\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12u\n\x06Update\x12..metalstack.api.v2.ProjectServiceUpdateRequest\x1a/.metalstack.api.v2.ProjectServiceUpdateResponse\"\n\xca\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12q\n\x05Leave\x12-.metalstack.api.v2.ProjectServiceLeaveRequest\x1a..metalstack.api.v2.ProjectServiceLeaveResponse\"\t\xca\xf3\x18\x01\x03\xe0\xf3\x18\x01\x12\x86\x01\n\x0cRemoveMember\x12\x34.metalstack.api.v2.ProjectServiceRemoveMemberRequest\x1a\x35.metalstack.api.v2.ProjectServiceRemoveMemberResponse\"\t\xca\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12\x86\x01\n\x0cUpdateMember\x12\x34.metalstack.api.v2.ProjectServiceUpdateMemberRequest\x1a\x35.metalstack.api.v2.ProjectServiceUpdateMemberResponse\"\t\xca\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12t\n\x06Invite\x12..metalstack.api.v2.ProjectServiceInviteRequest\x1a/.metalstack.api.v2.ProjectServiceInviteResponse\"\t\xca\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12\x85\x01\n\x0cInviteAccept\x12\x34.metalstack.api.v2.ProjectServiceInviteAcceptRequest\x1a\x35.metalstack.api.v2.ProjectServiceInviteAcceptResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x01\x12\x86\x01\n\x0cInviteDelete\x12\x34.metalstack.api.v2.ProjectServiceInviteDeleteRequest\x1a\x35.metalstack.api.v2.ProjectServiceInviteDeleteResponse\"\t\xca\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12\x83\x01\n\x0bInvitesList\x12\x33.metalstack.api.v2.ProjectServiceInvitesListRequest\x1a\x34.metalstack.api.v2.ProjectServiceInvitesListResponse\"\t\xca\xf3\x18\x01\x01\xe0\xf3\x18\x02\x12|\n\tInviteGet\x12\x31.metalstack.api.v2.ProjectServiceInviteGetRequest\x1a\x32.metalstack.api.v2.ProjectServiceInviteGetResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x02\x42\xc2\x01\n\x15\x63om.metalstack.api.v2B\x0cProjectProtoP\x01Z5github.com/metal-stack/api/go/metalstack/api/v2;apiv2\xa2\x02\x03MAX\xaa\x02\x11Metalstack.Api.V2\xca\x02\x11Metalstack\\Api\\V2\xe2\x02\x1dMetalstack\\Api\\V2\\GPBMetadata\xea\x02\x13Metalstack::Api::V2b\x06proto3')
_globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -72,6 +72,8 @@
_globals['_PROJECTSERVICEINVITEREQUEST'].fields_by_name['role']._serialized_options = b'\272H\005\202\001\002\020\001'
_globals['_PROJECTSERVICEINVITESLISTREQUEST'].fields_by_name['project']._loaded_options = None
_globals['_PROJECTSERVICEINVITESLISTREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001'
+ _globals['_PROJECTSERVICELEAVEREQUEST'].fields_by_name['project']._loaded_options = None
+ _globals['_PROJECTSERVICELEAVEREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001'
_globals['_PROJECTSERVICEREMOVEMEMBERREQUEST'].fields_by_name['project']._loaded_options = None
_globals['_PROJECTSERVICEREMOVEMEMBERREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001'
_globals['_PROJECTSERVICEUPDATEMEMBERREQUEST'].fields_by_name['project']._loaded_options = None
@@ -90,6 +92,8 @@
_globals['_PROJECTSERVICE'].methods_by_name['Delete']._serialized_options = b'\312\363\030\001\001\340\363\030\001'
_globals['_PROJECTSERVICE'].methods_by_name['Update']._loaded_options = None
_globals['_PROJECTSERVICE'].methods_by_name['Update']._serialized_options = b'\312\363\030\002\001\002\340\363\030\001'
+ _globals['_PROJECTSERVICE'].methods_by_name['Leave']._loaded_options = None
+ _globals['_PROJECTSERVICE'].methods_by_name['Leave']._serialized_options = b'\312\363\030\001\003\340\363\030\001'
_globals['_PROJECTSERVICE'].methods_by_name['RemoveMember']._loaded_options = None
_globals['_PROJECTSERVICE'].methods_by_name['RemoveMember']._serialized_options = b'\312\363\030\001\001\340\363\030\001'
_globals['_PROJECTSERVICE'].methods_by_name['UpdateMember']._loaded_options = None
@@ -142,22 +146,26 @@
_globals['_PROJECTSERVICEINVITEGETREQUEST']._serialized_end=2919
_globals['_PROJECTSERVICEINVITEGETRESPONSE']._serialized_start=2921
_globals['_PROJECTSERVICEINVITEGETRESPONSE']._serialized_end=3012
- _globals['_PROJECTSERVICEREMOVEMEMBERREQUEST']._serialized_start=3014
- _globals['_PROJECTSERVICEREMOVEMEMBERREQUEST']._serialized_end=3109
- _globals['_PROJECTSERVICEREMOVEMEMBERRESPONSE']._serialized_start=3111
- _globals['_PROJECTSERVICEREMOVEMEMBERRESPONSE']._serialized_end=3147
- _globals['_PROJECTSERVICEUPDATEMEMBERREQUEST']._serialized_start=3150
- _globals['_PROJECTSERVICEUPDATEMEMBERREQUEST']._serialized_end=3307
- _globals['_PROJECTSERVICEUPDATEMEMBERRESPONSE']._serialized_start=3309
- _globals['_PROJECTSERVICEUPDATEMEMBERRESPONSE']._serialized_end=3418
- _globals['_PROJECTSERVICEINVITEACCEPTREQUEST']._serialized_start=3420
- _globals['_PROJECTSERVICEINVITEACCEPTREQUEST']._serialized_end=3479
- _globals['_PROJECTSERVICEINVITEACCEPTRESPONSE']._serialized_start=3481
- _globals['_PROJECTSERVICEINVITEACCEPTRESPONSE']._serialized_end=3578
- _globals['_PROJECTSERVICEINVITEDELETEREQUEST']._serialized_start=3580
- _globals['_PROJECTSERVICEINVITEDELETEREQUEST']._serialized_end=3675
- _globals['_PROJECTSERVICEINVITEDELETERESPONSE']._serialized_start=3677
- _globals['_PROJECTSERVICEINVITEDELETERESPONSE']._serialized_end=3713
- _globals['_PROJECTSERVICE']._serialized_start=3716
- _globals['_PROJECTSERVICE']._serialized_end=5235
+ _globals['_PROJECTSERVICELEAVEREQUEST']._serialized_start=3014
+ _globals['_PROJECTSERVICELEAVEREQUEST']._serialized_end=3078
+ _globals['_PROJECTSERVICELEAVERESPONSE']._serialized_start=3080
+ _globals['_PROJECTSERVICELEAVERESPONSE']._serialized_end=3109
+ _globals['_PROJECTSERVICEREMOVEMEMBERREQUEST']._serialized_start=3111
+ _globals['_PROJECTSERVICEREMOVEMEMBERREQUEST']._serialized_end=3206
+ _globals['_PROJECTSERVICEREMOVEMEMBERRESPONSE']._serialized_start=3208
+ _globals['_PROJECTSERVICEREMOVEMEMBERRESPONSE']._serialized_end=3244
+ _globals['_PROJECTSERVICEUPDATEMEMBERREQUEST']._serialized_start=3247
+ _globals['_PROJECTSERVICEUPDATEMEMBERREQUEST']._serialized_end=3404
+ _globals['_PROJECTSERVICEUPDATEMEMBERRESPONSE']._serialized_start=3406
+ _globals['_PROJECTSERVICEUPDATEMEMBERRESPONSE']._serialized_end=3515
+ _globals['_PROJECTSERVICEINVITEACCEPTREQUEST']._serialized_start=3517
+ _globals['_PROJECTSERVICEINVITEACCEPTREQUEST']._serialized_end=3576
+ _globals['_PROJECTSERVICEINVITEACCEPTRESPONSE']._serialized_start=3578
+ _globals['_PROJECTSERVICEINVITEACCEPTRESPONSE']._serialized_end=3675
+ _globals['_PROJECTSERVICEINVITEDELETEREQUEST']._serialized_start=3677
+ _globals['_PROJECTSERVICEINVITEDELETEREQUEST']._serialized_end=3772
+ _globals['_PROJECTSERVICEINVITEDELETERESPONSE']._serialized_start=3774
+ _globals['_PROJECTSERVICEINVITEDELETERESPONSE']._serialized_end=3810
+ _globals['_PROJECTSERVICE']._serialized_start=3813
+ _globals['_PROJECTSERVICE']._serialized_end=5447
# @@protoc_insertion_point(module_scope)
diff --git a/python/metalstack/api/v2/project_pb2.pyi b/python/metalstack/api/v2/project_pb2.pyi
index 7bb7bfc2..4f2f758b 100644
--- a/python/metalstack/api/v2/project_pb2.pyi
+++ b/python/metalstack/api/v2/project_pb2.pyi
@@ -186,6 +186,16 @@ class ProjectServiceInviteGetResponse(_message.Message):
invite: ProjectInvite
def __init__(self, invite: _Optional[_Union[ProjectInvite, _Mapping]] = ...) -> None: ...
+class ProjectServiceLeaveRequest(_message.Message):
+ __slots__ = ("project",)
+ PROJECT_FIELD_NUMBER: _ClassVar[int]
+ project: str
+ def __init__(self, project: _Optional[str] = ...) -> None: ...
+
+class ProjectServiceLeaveResponse(_message.Message):
+ __slots__ = ()
+ def __init__(self) -> None: ...
+
class ProjectServiceRemoveMemberRequest(_message.Message):
__slots__ = ("project", "member")
PROJECT_FIELD_NUMBER: _ClassVar[int]
diff --git a/python/metalstack/api/v2/tenant_connect.py b/python/metalstack/api/v2/tenant_connect.py
index 547b5152..c4a79f87 100644
--- a/python/metalstack/api/v2/tenant_connect.py
+++ b/python/metalstack/api/v2/tenant_connect.py
@@ -31,6 +31,9 @@ async def update(self, request: metalstack_dot_api_dot_v2_dot_tenant__pb2.Tenant
async def delete(self, request: metalstack_dot_api_dot_v2_dot_tenant__pb2.TenantServiceDeleteRequest, ctx: RequestContext) -> metalstack_dot_api_dot_v2_dot_tenant__pb2.TenantServiceDeleteResponse:
raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
+ async def leave(self, request: metalstack_dot_api_dot_v2_dot_tenant__pb2.TenantServiceLeaveRequest, ctx: RequestContext) -> metalstack_dot_api_dot_v2_dot_tenant__pb2.TenantServiceLeaveResponse:
+ raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
+
async def remove_member(self, request: metalstack_dot_api_dot_v2_dot_tenant__pb2.TenantServiceRemoveMemberRequest, ctx: RequestContext) -> metalstack_dot_api_dot_v2_dot_tenant__pb2.TenantServiceRemoveMemberResponse:
raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
@@ -107,6 +110,16 @@ def __init__(self, service: TenantService, *, interceptors: Iterable[Interceptor
),
function=service.delete,
),
+ "/metalstack.api.v2.TenantService/Leave": Endpoint.unary(
+ method=MethodInfo(
+ name="Leave",
+ service_name="metalstack.api.v2.TenantService",
+ input=metalstack_dot_api_dot_v2_dot_tenant__pb2.TenantServiceLeaveRequest,
+ output=metalstack_dot_api_dot_v2_dot_tenant__pb2.TenantServiceLeaveResponse,
+ idempotency_level=IdempotencyLevel.UNKNOWN,
+ ),
+ function=service.leave,
+ ),
"/metalstack.api.v2.TenantService/RemoveMember": Endpoint.unary(
method=MethodInfo(
name="RemoveMember",
@@ -289,6 +302,26 @@ async def delete(
timeout_ms=timeout_ms,
)
+ async def leave(
+ self,
+ request: metalstack_dot_api_dot_v2_dot_tenant__pb2.TenantServiceLeaveRequest,
+ *,
+ headers: Headers | Mapping[str, str] | None = None,
+ timeout_ms: int | None = None,
+ ) -> metalstack_dot_api_dot_v2_dot_tenant__pb2.TenantServiceLeaveResponse:
+ return await self.execute_unary(
+ request=request,
+ method=MethodInfo(
+ name="Leave",
+ service_name="metalstack.api.v2.TenantService",
+ input=metalstack_dot_api_dot_v2_dot_tenant__pb2.TenantServiceLeaveRequest,
+ output=metalstack_dot_api_dot_v2_dot_tenant__pb2.TenantServiceLeaveResponse,
+ idempotency_level=IdempotencyLevel.UNKNOWN,
+ ),
+ headers=headers,
+ timeout_ms=timeout_ms,
+ )
+
async def remove_member(
self,
request: metalstack_dot_api_dot_v2_dot_tenant__pb2.TenantServiceRemoveMemberRequest,
@@ -441,6 +474,8 @@ def update(self, request: metalstack_dot_api_dot_v2_dot_tenant__pb2.TenantServic
raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
def delete(self, request: metalstack_dot_api_dot_v2_dot_tenant__pb2.TenantServiceDeleteRequest, ctx: RequestContext) -> metalstack_dot_api_dot_v2_dot_tenant__pb2.TenantServiceDeleteResponse:
raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
+ def leave(self, request: metalstack_dot_api_dot_v2_dot_tenant__pb2.TenantServiceLeaveRequest, ctx: RequestContext) -> metalstack_dot_api_dot_v2_dot_tenant__pb2.TenantServiceLeaveResponse:
+ raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
def remove_member(self, request: metalstack_dot_api_dot_v2_dot_tenant__pb2.TenantServiceRemoveMemberRequest, ctx: RequestContext) -> metalstack_dot_api_dot_v2_dot_tenant__pb2.TenantServiceRemoveMemberResponse:
raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
def update_member(self, request: metalstack_dot_api_dot_v2_dot_tenant__pb2.TenantServiceUpdateMemberRequest, ctx: RequestContext) -> metalstack_dot_api_dot_v2_dot_tenant__pb2.TenantServiceUpdateMemberResponse:
@@ -511,6 +546,16 @@ def __init__(self, service: TenantServiceSync, interceptors: Iterable[Intercepto
),
function=service.delete,
),
+ "/metalstack.api.v2.TenantService/Leave": EndpointSync.unary(
+ method=MethodInfo(
+ name="Leave",
+ service_name="metalstack.api.v2.TenantService",
+ input=metalstack_dot_api_dot_v2_dot_tenant__pb2.TenantServiceLeaveRequest,
+ output=metalstack_dot_api_dot_v2_dot_tenant__pb2.TenantServiceLeaveResponse,
+ idempotency_level=IdempotencyLevel.UNKNOWN,
+ ),
+ function=service.leave,
+ ),
"/metalstack.api.v2.TenantService/RemoveMember": EndpointSync.unary(
method=MethodInfo(
name="RemoveMember",
@@ -693,6 +738,26 @@ def delete(
timeout_ms=timeout_ms,
)
+ def leave(
+ self,
+ request: metalstack_dot_api_dot_v2_dot_tenant__pb2.TenantServiceLeaveRequest,
+ *,
+ headers: Headers | Mapping[str, str] | None = None,
+ timeout_ms: int | None = None,
+ ) -> metalstack_dot_api_dot_v2_dot_tenant__pb2.TenantServiceLeaveResponse:
+ return self.execute_unary(
+ request=request,
+ method=MethodInfo(
+ name="Leave",
+ service_name="metalstack.api.v2.TenantService",
+ input=metalstack_dot_api_dot_v2_dot_tenant__pb2.TenantServiceLeaveRequest,
+ output=metalstack_dot_api_dot_v2_dot_tenant__pb2.TenantServiceLeaveResponse,
+ idempotency_level=IdempotencyLevel.UNKNOWN,
+ ),
+ headers=headers,
+ timeout_ms=timeout_ms,
+ )
+
def remove_member(
self,
request: metalstack_dot_api_dot_v2_dot_tenant__pb2.TenantServiceRemoveMemberRequest,
diff --git a/python/metalstack/api/v2/tenant_pb2.py b/python/metalstack/api/v2/tenant_pb2.py
index 0ca870a4..148b76e3 100644
--- a/python/metalstack/api/v2/tenant_pb2.py
+++ b/python/metalstack/api/v2/tenant_pb2.py
@@ -28,7 +28,7 @@
from metalstack.api.v2 import predefined_rules_pb2 as metalstack_dot_api_dot_v2_dot_predefined__rules__pb2
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1emetalstack/api/v2/tenant.proto\x12\x11metalstack.api.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1emetalstack/api/v2/common.proto\x1a(metalstack/api/v2/predefined_rules.proto\"\xef\x01\n\x06Tenant\x12\x14\n\x05login\x18\x01 \x01(\tR\x05login\x12+\n\x04meta\x18\x02 \x01(\x0b\x32\x17.metalstack.api.v2.MetaR\x04meta\x12\x1f\n\x04name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12\x14\n\x05\x65mail\x18\x04 \x01(\tR\x05\x65mail\x12-\n\x0b\x64\x65scription\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x0b\x64\x65scription\x12\x1d\n\navatar_url\x18\x06 \x01(\tR\tavatarUrl\x12\x1d\n\ncreated_by\x18\x0f \x01(\tR\tcreatedBy\"\xb2\x01\n\x0cTenantMember\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12;\n\x04role\x18\x02 \x01(\x0e\x32\x1d.metalstack.api.v2.TenantRoleB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x04role\x12\x1a\n\x08projects\x18\x04 \x03(\tR\x08projects\x12\x39\n\ncreated_at\x18\n \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\"\xfb\x02\n\x0cTenantInvite\x12\x16\n\x06secret\x18\x01 \x01(\tR\x06secret\x12#\n\rtarget_tenant\x18\x02 \x01(\tR\x0ctargetTenant\x12;\n\x04role\x18\x03 \x01(\x0e\x32\x1d.metalstack.api.v2.TenantRoleB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x04role\x12\x16\n\x06joined\x18\x04 \x01(\x08R\x06joined\x12,\n\x12target_tenant_name\x18\x05 \x01(\tR\x10targetTenantName\x12\x16\n\x06tenant\x18\x06 \x01(\tR\x06tenant\x12\x1f\n\x0btenant_name\x18\x07 \x01(\tR\ntenantName\x12\x39\n\nexpires_at\x18\n \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\x12\x37\n\tjoined_at\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x08joinedAt\"\xa8\x01\n\x18TenantServiceListRequest\x12\x13\n\x02id\x18\x01 \x01(\tH\x00R\x02id\x88\x01\x01\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12\x36\n\x06labels\x18\x03 \x01(\x0b\x32\x19.metalstack.api.v2.LabelsH\x02R\x06labels\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_nameB\t\n\x07_labels\"/\n\x17TenantServiceGetRequest\x12\x14\n\x05login\x18\x01 \x01(\tR\x05login\"\x95\x02\n\x1aTenantServiceCreateRequest\x12\x1f\n\x04name\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12\x32\n\x0b\x64\x65scription\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x00R\x0b\x64\x65scription\x88\x01\x01\x12\"\n\x05\x65mail\x18\x03 \x01(\tB\x07\xbaH\x04r\x02`\x01H\x01R\x05\x65mail\x88\x01\x01\x12\"\n\navatar_url\x18\x04 \x01(\tH\x02R\tavatarUrl\x88\x01\x01\x12\x31\n\x06labels\x18\x05 \x01(\x0b\x32\x19.metalstack.api.v2.LabelsR\x06labelsB\x0e\n\x0c_descriptionB\x08\n\x06_emailB\r\n\x0b_avatar_url\"\x97\x03\n\x1aTenantServiceUpdateRequest\x12\x14\n\x05login\x18\x01 \x01(\tR\x05login\x12\x46\n\x0bupdate_meta\x18\x02 \x01(\x0b\x32\x1d.metalstack.api.v2.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\x12$\n\x04name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x12\"\n\x05\x65mail\x18\x04 \x01(\tB\x07\xbaH\x04r\x02`\x01H\x01R\x05\x65mail\x88\x01\x01\x12\x32\n\x0b\x64\x65scription\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x02R\x0b\x64\x65scription\x88\x01\x01\x12\"\n\navatar_url\x18\x06 \x01(\tH\x03R\tavatarUrl\x88\x01\x01\x12<\n\x06labels\x18\x07 \x01(\x0b\x32\x1f.metalstack.api.v2.UpdateLabelsH\x04R\x06labels\x88\x01\x01\x42\x07\n\x05_nameB\x08\n\x06_emailB\x0e\n\x0c_descriptionB\r\n\x0b_avatar_urlB\t\n\x07_labels\"2\n\x1aTenantServiceDeleteRequest\x12\x14\n\x05login\x18\x01 \x01(\tR\x05login\"\x95\x01\n\x18TenantServiceGetResponse\x12\x31\n\x06tenant\x18\x01 \x01(\x0b\x32\x19.metalstack.api.v2.TenantR\x06tenant\x12\x46\n\x0etenant_members\x18\x02 \x03(\x0b\x32\x1f.metalstack.api.v2.TenantMemberR\rtenantMembers\"P\n\x19TenantServiceListResponse\x12\x33\n\x07tenants\x18\x01 \x03(\x0b\x32\x19.metalstack.api.v2.TenantR\x07tenants\"P\n\x1bTenantServiceCreateResponse\x12\x31\n\x06tenant\x18\x01 \x01(\x0b\x32\x19.metalstack.api.v2.TenantR\x06tenant\"P\n\x1bTenantServiceUpdateResponse\x12\x31\n\x06tenant\x18\x01 \x01(\x0b\x32\x19.metalstack.api.v2.TenantR\x06tenant\"P\n\x1bTenantServiceDeleteResponse\x12\x31\n\x06tenant\x18\x01 \x01(\x0b\x32\x19.metalstack.api.v2.TenantR\x06tenant\"o\n\x1aTenantServiceInviteRequest\x12\x14\n\x05login\x18\x01 \x01(\tR\x05login\x12;\n\x04role\x18\x02 \x01(\x0e\x32\x1d.metalstack.api.v2.TenantRoleB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x04role\"V\n\x1bTenantServiceInviteResponse\x12\x37\n\x06invite\x18\x01 \x01(\x0b\x32\x1f.metalstack.api.v2.TenantInviteR\x06invite\"7\n\x1fTenantServiceInvitesListRequest\x12\x14\n\x05login\x18\x01 \x01(\tR\x05login\"]\n TenantServiceInvitesListResponse\x12\x39\n\x07invites\x18\x01 \x03(\x0b\x32\x1f.metalstack.api.v2.TenantInviteR\x07invites\"7\n\x1dTenantServiceInviteGetRequest\x12\x16\n\x06secret\x18\x01 \x01(\tR\x06secret\"Y\n\x1eTenantServiceInviteGetResponse\x12\x37\n\x06invite\x18\x01 \x01(\x0b\x32\x1f.metalstack.api.v2.TenantInviteR\x06invite\"P\n TenantServiceRemoveMemberRequest\x12\x14\n\x05login\x18\x01 \x01(\tR\x05login\x12\x16\n\x06member\x18\x02 \x01(\tR\x06member\"#\n!TenantServiceRemoveMemberResponse\":\n TenantServiceInviteAcceptRequest\x12\x16\n\x06secret\x18\x01 \x01(\tR\x06secret\"\\\n!TenantServiceInviteAcceptResponse\x12\x16\n\x06tenant\x18\x01 \x01(\tR\x06tenant\x12\x1f\n\x0btenant_name\x18\x02 \x01(\tR\ntenantName\"P\n TenantServiceInviteDeleteRequest\x12\x14\n\x05login\x18\x01 \x01(\tR\x05login\x12\x16\n\x06secret\x18\x02 \x01(\tR\x06secret\"#\n!TenantServiceInviteDeleteResponse\"\x8d\x01\n TenantServiceUpdateMemberRequest\x12\x14\n\x05login\x18\x01 \x01(\tR\x05login\x12\x16\n\x06member\x18\x02 \x01(\tR\x06member\x12;\n\x04role\x18\x03 \x01(\x0e\x32\x1d.metalstack.api.v2.TenantRoleB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x04role\"i\n!TenantServiceUpdateMemberResponse\x12\x44\n\rtenant_member\x18\x01 \x01(\x0b\x32\x1f.metalstack.api.v2.TenantMemberR\x0ctenantMember2\xd6\x0b\n\rTenantService\x12q\n\x06\x43reate\x12-.metalstack.api.v2.TenantServiceCreateRequest\x1a..metalstack.api.v2.TenantServiceCreateResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x01\x12k\n\x04List\x12+.metalstack.api.v2.TenantServiceListRequest\x1a,.metalstack.api.v2.TenantServiceListResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x02\x12l\n\x03Get\x12*.metalstack.api.v2.TenantServiceGetRequest\x1a+.metalstack.api.v2.TenantServiceGetResponse\"\x0c\xc2\xf3\x18\x04\x01\x02\x03\x04\xe0\xf3\x18\x02\x12s\n\x06Update\x12-.metalstack.api.v2.TenantServiceUpdateRequest\x1a..metalstack.api.v2.TenantServiceUpdateResponse\"\n\xc2\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12s\n\x06\x44\x65lete\x12-.metalstack.api.v2.TenantServiceDeleteRequest\x1a..metalstack.api.v2.TenantServiceDeleteResponse\"\n\xc2\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12\x84\x01\n\x0cRemoveMember\x12\x33.metalstack.api.v2.TenantServiceRemoveMemberRequest\x1a\x34.metalstack.api.v2.TenantServiceRemoveMemberResponse\"\t\xc2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12\x84\x01\n\x0cUpdateMember\x12\x33.metalstack.api.v2.TenantServiceUpdateMemberRequest\x1a\x34.metalstack.api.v2.TenantServiceUpdateMemberResponse\"\t\xc2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12r\n\x06Invite\x12-.metalstack.api.v2.TenantServiceInviteRequest\x1a..metalstack.api.v2.TenantServiceInviteResponse\"\t\xc2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12\x83\x01\n\x0cInviteAccept\x12\x33.metalstack.api.v2.TenantServiceInviteAcceptRequest\x1a\x34.metalstack.api.v2.TenantServiceInviteAcceptResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x01\x12\x84\x01\n\x0cInviteDelete\x12\x33.metalstack.api.v2.TenantServiceInviteDeleteRequest\x1a\x34.metalstack.api.v2.TenantServiceInviteDeleteResponse\"\t\xc2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12\x81\x01\n\x0bInvitesList\x12\x32.metalstack.api.v2.TenantServiceInvitesListRequest\x1a\x33.metalstack.api.v2.TenantServiceInvitesListResponse\"\t\xc2\xf3\x18\x01\x01\xe0\xf3\x18\x02\x12z\n\tInviteGet\x12\x30.metalstack.api.v2.TenantServiceInviteGetRequest\x1a\x31.metalstack.api.v2.TenantServiceInviteGetResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x02\x42\xc1\x01\n\x15\x63om.metalstack.api.v2B\x0bTenantProtoP\x01Z5github.com/metal-stack/api/go/metalstack/api/v2;apiv2\xa2\x02\x03MAX\xaa\x02\x11Metalstack.Api.V2\xca\x02\x11Metalstack\\Api\\V2\xe2\x02\x1dMetalstack\\Api\\V2\\GPBMetadata\xea\x02\x13Metalstack::Api::V2b\x06proto3')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1emetalstack/api/v2/tenant.proto\x12\x11metalstack.api.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1emetalstack/api/v2/common.proto\x1a(metalstack/api/v2/predefined_rules.proto\"\xef\x01\n\x06Tenant\x12\x14\n\x05login\x18\x01 \x01(\tR\x05login\x12+\n\x04meta\x18\x02 \x01(\x0b\x32\x17.metalstack.api.v2.MetaR\x04meta\x12\x1f\n\x04name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12\x14\n\x05\x65mail\x18\x04 \x01(\tR\x05\x65mail\x12-\n\x0b\x64\x65scription\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x0b\x64\x65scription\x12\x1d\n\navatar_url\x18\x06 \x01(\tR\tavatarUrl\x12\x1d\n\ncreated_by\x18\x0f \x01(\tR\tcreatedBy\"\xb2\x01\n\x0cTenantMember\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12;\n\x04role\x18\x02 \x01(\x0e\x32\x1d.metalstack.api.v2.TenantRoleB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x04role\x12\x1a\n\x08projects\x18\x04 \x03(\tR\x08projects\x12\x39\n\ncreated_at\x18\n \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\"\xfb\x02\n\x0cTenantInvite\x12\x16\n\x06secret\x18\x01 \x01(\tR\x06secret\x12#\n\rtarget_tenant\x18\x02 \x01(\tR\x0ctargetTenant\x12;\n\x04role\x18\x03 \x01(\x0e\x32\x1d.metalstack.api.v2.TenantRoleB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x04role\x12\x16\n\x06joined\x18\x04 \x01(\x08R\x06joined\x12,\n\x12target_tenant_name\x18\x05 \x01(\tR\x10targetTenantName\x12\x16\n\x06tenant\x18\x06 \x01(\tR\x06tenant\x12\x1f\n\x0btenant_name\x18\x07 \x01(\tR\ntenantName\x12\x39\n\nexpires_at\x18\n \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\x12\x37\n\tjoined_at\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x08joinedAt\"\xa8\x01\n\x18TenantServiceListRequest\x12\x13\n\x02id\x18\x01 \x01(\tH\x00R\x02id\x88\x01\x01\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12\x36\n\x06labels\x18\x03 \x01(\x0b\x32\x19.metalstack.api.v2.LabelsH\x02R\x06labels\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_nameB\t\n\x07_labels\"/\n\x17TenantServiceGetRequest\x12\x14\n\x05login\x18\x01 \x01(\tR\x05login\"\x95\x02\n\x1aTenantServiceCreateRequest\x12\x1f\n\x04name\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12\x32\n\x0b\x64\x65scription\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x00R\x0b\x64\x65scription\x88\x01\x01\x12\"\n\x05\x65mail\x18\x03 \x01(\tB\x07\xbaH\x04r\x02`\x01H\x01R\x05\x65mail\x88\x01\x01\x12\"\n\navatar_url\x18\x04 \x01(\tH\x02R\tavatarUrl\x88\x01\x01\x12\x31\n\x06labels\x18\x05 \x01(\x0b\x32\x19.metalstack.api.v2.LabelsR\x06labelsB\x0e\n\x0c_descriptionB\x08\n\x06_emailB\r\n\x0b_avatar_url\"\x97\x03\n\x1aTenantServiceUpdateRequest\x12\x14\n\x05login\x18\x01 \x01(\tR\x05login\x12\x46\n\x0bupdate_meta\x18\x02 \x01(\x0b\x32\x1d.metalstack.api.v2.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\x12$\n\x04name\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x12\"\n\x05\x65mail\x18\x04 \x01(\tB\x07\xbaH\x04r\x02`\x01H\x01R\x05\x65mail\x88\x01\x01\x12\x32\n\x0b\x64\x65scription\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x02R\x0b\x64\x65scription\x88\x01\x01\x12\"\n\navatar_url\x18\x06 \x01(\tH\x03R\tavatarUrl\x88\x01\x01\x12<\n\x06labels\x18\x07 \x01(\x0b\x32\x1f.metalstack.api.v2.UpdateLabelsH\x04R\x06labels\x88\x01\x01\x42\x07\n\x05_nameB\x08\n\x06_emailB\x0e\n\x0c_descriptionB\r\n\x0b_avatar_urlB\t\n\x07_labels\"2\n\x1aTenantServiceDeleteRequest\x12\x14\n\x05login\x18\x01 \x01(\tR\x05login\"\x95\x01\n\x18TenantServiceGetResponse\x12\x31\n\x06tenant\x18\x01 \x01(\x0b\x32\x19.metalstack.api.v2.TenantR\x06tenant\x12\x46\n\x0etenant_members\x18\x02 \x03(\x0b\x32\x1f.metalstack.api.v2.TenantMemberR\rtenantMembers\"P\n\x19TenantServiceListResponse\x12\x33\n\x07tenants\x18\x01 \x03(\x0b\x32\x19.metalstack.api.v2.TenantR\x07tenants\"P\n\x1bTenantServiceCreateResponse\x12\x31\n\x06tenant\x18\x01 \x01(\x0b\x32\x19.metalstack.api.v2.TenantR\x06tenant\"P\n\x1bTenantServiceUpdateResponse\x12\x31\n\x06tenant\x18\x01 \x01(\x0b\x32\x19.metalstack.api.v2.TenantR\x06tenant\"P\n\x1bTenantServiceDeleteResponse\x12\x31\n\x06tenant\x18\x01 \x01(\x0b\x32\x19.metalstack.api.v2.TenantR\x06tenant\"o\n\x1aTenantServiceInviteRequest\x12\x14\n\x05login\x18\x01 \x01(\tR\x05login\x12;\n\x04role\x18\x02 \x01(\x0e\x32\x1d.metalstack.api.v2.TenantRoleB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x04role\"V\n\x1bTenantServiceInviteResponse\x12\x37\n\x06invite\x18\x01 \x01(\x0b\x32\x1f.metalstack.api.v2.TenantInviteR\x06invite\"7\n\x1fTenantServiceInvitesListRequest\x12\x14\n\x05login\x18\x01 \x01(\tR\x05login\"]\n TenantServiceInvitesListResponse\x12\x39\n\x07invites\x18\x01 \x03(\x0b\x32\x1f.metalstack.api.v2.TenantInviteR\x07invites\"7\n\x1dTenantServiceInviteGetRequest\x12\x16\n\x06secret\x18\x01 \x01(\tR\x06secret\"Y\n\x1eTenantServiceInviteGetResponse\x12\x37\n\x06invite\x18\x01 \x01(\x0b\x32\x1f.metalstack.api.v2.TenantInviteR\x06invite\"P\n TenantServiceRemoveMemberRequest\x12\x14\n\x05login\x18\x01 \x01(\tR\x05login\x12\x16\n\x06member\x18\x02 \x01(\tR\x06member\"1\n\x19TenantServiceLeaveRequest\x12\x14\n\x05login\x18\x01 \x01(\tR\x05login\"\x1c\n\x1aTenantServiceLeaveResponse\"#\n!TenantServiceRemoveMemberResponse\":\n TenantServiceInviteAcceptRequest\x12\x16\n\x06secret\x18\x01 \x01(\tR\x06secret\"\\\n!TenantServiceInviteAcceptResponse\x12\x16\n\x06tenant\x18\x01 \x01(\tR\x06tenant\x12\x1f\n\x0btenant_name\x18\x02 \x01(\tR\ntenantName\"P\n TenantServiceInviteDeleteRequest\x12\x14\n\x05login\x18\x01 \x01(\tR\x05login\x12\x16\n\x06secret\x18\x02 \x01(\tR\x06secret\"#\n!TenantServiceInviteDeleteResponse\"\x8d\x01\n TenantServiceUpdateMemberRequest\x12\x14\n\x05login\x18\x01 \x01(\tR\x05login\x12\x16\n\x06member\x18\x02 \x01(\tR\x06member\x12;\n\x04role\x18\x03 \x01(\x0e\x32\x1d.metalstack.api.v2.TenantRoleB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x04role\"i\n!TenantServiceUpdateMemberResponse\x12\x44\n\rtenant_member\x18\x01 \x01(\x0b\x32\x1f.metalstack.api.v2.TenantMemberR\x0ctenantMember2\xc7\x0c\n\rTenantService\x12q\n\x06\x43reate\x12-.metalstack.api.v2.TenantServiceCreateRequest\x1a..metalstack.api.v2.TenantServiceCreateResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x01\x12k\n\x04List\x12+.metalstack.api.v2.TenantServiceListRequest\x1a,.metalstack.api.v2.TenantServiceListResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x02\x12l\n\x03Get\x12*.metalstack.api.v2.TenantServiceGetRequest\x1a+.metalstack.api.v2.TenantServiceGetResponse\"\x0c\xc2\xf3\x18\x04\x01\x02\x03\x04\xe0\xf3\x18\x02\x12s\n\x06Update\x12-.metalstack.api.v2.TenantServiceUpdateRequest\x1a..metalstack.api.v2.TenantServiceUpdateResponse\"\n\xc2\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12s\n\x06\x44\x65lete\x12-.metalstack.api.v2.TenantServiceDeleteRequest\x1a..metalstack.api.v2.TenantServiceDeleteResponse\"\n\xc2\xf3\x18\x02\x01\x02\xe0\xf3\x18\x01\x12o\n\x05Leave\x12,.metalstack.api.v2.TenantServiceLeaveRequest\x1a-.metalstack.api.v2.TenantServiceLeaveResponse\"\t\xc2\xf3\x18\x01\x03\xe0\xf3\x18\x01\x12\x84\x01\n\x0cRemoveMember\x12\x33.metalstack.api.v2.TenantServiceRemoveMemberRequest\x1a\x34.metalstack.api.v2.TenantServiceRemoveMemberResponse\"\t\xc2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12\x84\x01\n\x0cUpdateMember\x12\x33.metalstack.api.v2.TenantServiceUpdateMemberRequest\x1a\x34.metalstack.api.v2.TenantServiceUpdateMemberResponse\"\t\xc2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12r\n\x06Invite\x12-.metalstack.api.v2.TenantServiceInviteRequest\x1a..metalstack.api.v2.TenantServiceInviteResponse\"\t\xc2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12\x83\x01\n\x0cInviteAccept\x12\x33.metalstack.api.v2.TenantServiceInviteAcceptRequest\x1a\x34.metalstack.api.v2.TenantServiceInviteAcceptResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x01\x12\x84\x01\n\x0cInviteDelete\x12\x33.metalstack.api.v2.TenantServiceInviteDeleteRequest\x1a\x34.metalstack.api.v2.TenantServiceInviteDeleteResponse\"\t\xc2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12\x81\x01\n\x0bInvitesList\x12\x32.metalstack.api.v2.TenantServiceInvitesListRequest\x1a\x33.metalstack.api.v2.TenantServiceInvitesListResponse\"\t\xc2\xf3\x18\x01\x01\xe0\xf3\x18\x02\x12z\n\tInviteGet\x12\x30.metalstack.api.v2.TenantServiceInviteGetRequest\x1a\x31.metalstack.api.v2.TenantServiceInviteGetResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x02\x42\xc1\x01\n\x15\x63om.metalstack.api.v2B\x0bTenantProtoP\x01Z5github.com/metal-stack/api/go/metalstack/api/v2;apiv2\xa2\x02\x03MAX\xaa\x02\x11Metalstack.Api.V2\xca\x02\x11Metalstack\\Api\\V2\xe2\x02\x1dMetalstack\\Api\\V2\\GPBMetadata\xea\x02\x13Metalstack::Api::V2b\x06proto3')
_globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -74,6 +74,8 @@
_globals['_TENANTSERVICE'].methods_by_name['Update']._serialized_options = b'\302\363\030\002\001\002\340\363\030\001'
_globals['_TENANTSERVICE'].methods_by_name['Delete']._loaded_options = None
_globals['_TENANTSERVICE'].methods_by_name['Delete']._serialized_options = b'\302\363\030\002\001\002\340\363\030\001'
+ _globals['_TENANTSERVICE'].methods_by_name['Leave']._loaded_options = None
+ _globals['_TENANTSERVICE'].methods_by_name['Leave']._serialized_options = b'\302\363\030\001\003\340\363\030\001'
_globals['_TENANTSERVICE'].methods_by_name['RemoveMember']._loaded_options = None
_globals['_TENANTSERVICE'].methods_by_name['RemoveMember']._serialized_options = b'\302\363\030\001\001\340\363\030\001'
_globals['_TENANTSERVICE'].methods_by_name['UpdateMember']._loaded_options = None
@@ -128,20 +130,24 @@
_globals['_TENANTSERVICEINVITEGETRESPONSE']._serialized_end=2935
_globals['_TENANTSERVICEREMOVEMEMBERREQUEST']._serialized_start=2937
_globals['_TENANTSERVICEREMOVEMEMBERREQUEST']._serialized_end=3017
- _globals['_TENANTSERVICEREMOVEMEMBERRESPONSE']._serialized_start=3019
- _globals['_TENANTSERVICEREMOVEMEMBERRESPONSE']._serialized_end=3054
- _globals['_TENANTSERVICEINVITEACCEPTREQUEST']._serialized_start=3056
- _globals['_TENANTSERVICEINVITEACCEPTREQUEST']._serialized_end=3114
- _globals['_TENANTSERVICEINVITEACCEPTRESPONSE']._serialized_start=3116
- _globals['_TENANTSERVICEINVITEACCEPTRESPONSE']._serialized_end=3208
- _globals['_TENANTSERVICEINVITEDELETEREQUEST']._serialized_start=3210
- _globals['_TENANTSERVICEINVITEDELETEREQUEST']._serialized_end=3290
- _globals['_TENANTSERVICEINVITEDELETERESPONSE']._serialized_start=3292
- _globals['_TENANTSERVICEINVITEDELETERESPONSE']._serialized_end=3327
- _globals['_TENANTSERVICEUPDATEMEMBERREQUEST']._serialized_start=3330
- _globals['_TENANTSERVICEUPDATEMEMBERREQUEST']._serialized_end=3471
- _globals['_TENANTSERVICEUPDATEMEMBERRESPONSE']._serialized_start=3473
- _globals['_TENANTSERVICEUPDATEMEMBERRESPONSE']._serialized_end=3578
- _globals['_TENANTSERVICE']._serialized_start=3581
- _globals['_TENANTSERVICE']._serialized_end=5075
+ _globals['_TENANTSERVICELEAVEREQUEST']._serialized_start=3019
+ _globals['_TENANTSERVICELEAVEREQUEST']._serialized_end=3068
+ _globals['_TENANTSERVICELEAVERESPONSE']._serialized_start=3070
+ _globals['_TENANTSERVICELEAVERESPONSE']._serialized_end=3098
+ _globals['_TENANTSERVICEREMOVEMEMBERRESPONSE']._serialized_start=3100
+ _globals['_TENANTSERVICEREMOVEMEMBERRESPONSE']._serialized_end=3135
+ _globals['_TENANTSERVICEINVITEACCEPTREQUEST']._serialized_start=3137
+ _globals['_TENANTSERVICEINVITEACCEPTREQUEST']._serialized_end=3195
+ _globals['_TENANTSERVICEINVITEACCEPTRESPONSE']._serialized_start=3197
+ _globals['_TENANTSERVICEINVITEACCEPTRESPONSE']._serialized_end=3289
+ _globals['_TENANTSERVICEINVITEDELETEREQUEST']._serialized_start=3291
+ _globals['_TENANTSERVICEINVITEDELETEREQUEST']._serialized_end=3371
+ _globals['_TENANTSERVICEINVITEDELETERESPONSE']._serialized_start=3373
+ _globals['_TENANTSERVICEINVITEDELETERESPONSE']._serialized_end=3408
+ _globals['_TENANTSERVICEUPDATEMEMBERREQUEST']._serialized_start=3411
+ _globals['_TENANTSERVICEUPDATEMEMBERREQUEST']._serialized_end=3552
+ _globals['_TENANTSERVICEUPDATEMEMBERRESPONSE']._serialized_start=3554
+ _globals['_TENANTSERVICEUPDATEMEMBERRESPONSE']._serialized_end=3659
+ _globals['_TENANTSERVICE']._serialized_start=3662
+ _globals['_TENANTSERVICE']._serialized_end=5269
# @@protoc_insertion_point(module_scope)
diff --git a/python/metalstack/api/v2/tenant_pb2.pyi b/python/metalstack/api/v2/tenant_pb2.pyi
index 00b19f25..190f6252 100644
--- a/python/metalstack/api/v2/tenant_pb2.pyi
+++ b/python/metalstack/api/v2/tenant_pb2.pyi
@@ -196,6 +196,16 @@ class TenantServiceRemoveMemberRequest(_message.Message):
member: str
def __init__(self, login: _Optional[str] = ..., member: _Optional[str] = ...) -> None: ...
+class TenantServiceLeaveRequest(_message.Message):
+ __slots__ = ("login",)
+ LOGIN_FIELD_NUMBER: _ClassVar[int]
+ login: str
+ def __init__(self, login: _Optional[str] = ...) -> None: ...
+
+class TenantServiceLeaveResponse(_message.Message):
+ __slots__ = ()
+ def __init__(self) -> None: ...
+
class TenantServiceRemoveMemberResponse(_message.Message):
__slots__ = ()
def __init__(self) -> None: ...