@@ -12452,6 +12551,583 @@
+
+
+
+
+
+ SizeReservation
+
+
+
+
+ | Field | Type | Label | Description |
+
+
+
+
+ | id |
+ string |
+ |
+ Id of this size reservation, is generated on creation |
+
+
+
+ | meta |
+ Meta |
+ |
+ Meta for this size reservation |
+
+
+
+ | name |
+ string |
+ |
+ Name of this size reservation |
+
+
+
+ | description |
+ string |
+ |
+ Description of this size reservation |
+
+
+
+ | project |
+ string |
+ |
+ Project of the size reservation |
+
+
+
+ | size |
+ string |
+ |
+ Size id of this size reservation |
+
+
+
+ | partitions |
+ string |
+ repeated |
+ Partition ids of this size reservation |
+
+
+
+ | amount |
+ int32 |
+ |
+ Amount of reservations of this size reservation |
+
+
+
+
+
+
+
+
+
+
+ SizeReservationQuery is used to search size reservations
+
+
+
+
+ | Field | Type | Label | Description |
+
+
+
+
+ | id |
+ string |
+ optional |
+ ID of the size reservation to get |
+
+
+
+ | name |
+ string |
+ optional |
+ Name of this size reservation |
+
+
+
+ | description |
+ string |
+ optional |
+ Description of this size reservation |
+
+
+
+ | size |
+ string |
+ optional |
+ Size id of this size reservation |
+
+
+
+ | project |
+ string |
+ optional |
+ Project of the size reservation |
+
+
+
+ | partition |
+ string |
+ optional |
+ Partition of the size reservation |
+
+
+
+ | labels |
+ Labels |
+ optional |
+ Labels lists only size reservations containing the given labels |
+
+
+
+
+
+
+
+
+
+
+ SizeReservationServiceGetRequest is the request payload for a size get request
+
+
+
+
+ | Field | Type | Label | Description |
+
+
+
+
+ | id |
+ string |
+ |
+ ID of the size reservation to get |
+
+
+
+ | project |
+ string |
+ |
+ Project of the size reservation |
+
+
+
+
+
+
+
+
+
+
+ SizeReservationServiceGetResponse is the response payload for a size reservation get request
+
+
+
+
+ | Field | Type | Label | Description |
+
+
+
+
+ | size_reservation |
+ SizeReservation |
+ |
+ Size reservation |
+
+
+
+
+
+
+
+
+
+
+ SizeReservationServiceListRequest is the request payload for a size list request
+
+
+
+
+ | Field | Type | Label | Description |
+
+
+
+
+ | project |
+ string |
+ |
+ Project of the size reservation |
+
+
+
+ | query |
+ SizeReservationQuery |
+ |
+ Query for size reservations |
+
+
+
+
+
+
+
+
+
+
+ SizeReservationServiceListResponse is the response payload for a size reservation list request
+
+
+
+
+ | Field | Type | Label | Description |
+
+
+
+
+ | size_reservations |
+ SizeReservation |
+ repeated |
+ Size reservations |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SizeReservationService serves size reservation related functions
+
+
+
+
+
+
+
+
+
+
+ SizeReservationServiceCreateRequest is the request payload for a size reservation create request
+
+
+
+
+
+
+
+
+
+ SizeReservationServiceCreateResponse is the response payload for a size reservation create request
+
+
+
+
+
+
+
+
+
+ SizeReservationServiceDeleteRequest is the request payload for a size reservation delete request
+
+
+
+
+ | Field | Type | Label | Description |
+
+
+
+
+ | id |
+ string |
+ |
+ ID of the size reservation to delete |
+
+
+
+
+
+
+
+
+
+
+ SizeReservationServiceDeleteResponse is the response payload for a size reservation delete request
+
+
+
+
+
+
+
+
+
+ SizeReservationServiceListRequest is the request payload for a size list request
+
+
+
+
+
+
+
+
+
+ SizeReservationServiceListResponse is the response payload for a size reservation list request
+
+
+
+
+
+
+
+
+
+ SizeReservationServiceUpdateRequest is the request payload for a size reservation update request
+
+
+
+
+ | Field | Type | Label | Description |
+
+
+
+
+ | id |
+ string |
+ |
+ Id of this size reservation |
+
+
+
+ | name |
+ string |
+ optional |
+ Name of this size reservation |
+
+
+
+ | description |
+ string |
+ optional |
+ Description of this size reservation |
+
+
+
+ | update_meta |
+ metalstack.api.v2.UpdateMeta |
+ |
+ UpdateMeta contains the timestamp and strategy to be used in this update request |
+
+
+
+ | partitions |
+ string |
+ repeated |
+ Partition ids of this size reservation |
+
+
+
+ | amount |
+ int32 |
+ optional |
+ Amount of reservations of this size reservation |
+
+
+
+ | labels |
+ metalstack.api.v2.UpdateLabels |
+ optional |
+ Labels to update of this size reservation |
+
+
+
+
+
+
+
+
+
+
+ SizeReservationServiceUpdateResponse is the response payload for a size reservation update request
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SizeReservationService serves size reservation related functions
+
+
+
+
+
diff --git a/go.mod b/go.mod
index 7910d294..bb6dac42 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/metal-stack/api
go 1.25
require (
- buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20251209175733-2a1774d88802.1
+ buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20260209202127-80ab13bee0bf.1
buf.build/go/protovalidate v1.1.0
connectrpc.com/connect v1.19.1
github.com/bufbuild/protocompile v0.14.1
@@ -20,15 +20,15 @@ require (
github.com/antlr4-go/antlr/v4 v4.13.1 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/google/cel-go v0.27.0 // indirect
- github.com/klauspost/compress v1.18.3 // indirect
+ github.com/klauspost/compress v1.18.4 // indirect
github.com/kr/pretty v0.3.1 // indirect
github.com/minio/minlz v1.0.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/stretchr/objx v0.5.3 // indirect
- golang.org/x/exp v0.0.0-20260112195511-716be5621a96 // indirect
- golang.org/x/text v0.33.0 // indirect
- google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20260203192932-546029d2fa20 // indirect
+ golang.org/x/exp v0.0.0-20260209203927-2842357ff358 // indirect
+ golang.org/x/text v0.34.0 // indirect
+ google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20260209200024-4cfbd4190f57 // indirect
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/go.sum b/go.sum
index 79bc0c12..965c62d0 100644
--- a/go.sum
+++ b/go.sum
@@ -1,5 +1,5 @@
-buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20251209175733-2a1774d88802.1 h1:j9yeqTWEFrtimt8Nng2MIeRrpoCvQzM9/g25XTvqUGg=
-buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20251209175733-2a1774d88802.1/go.mod h1:tvtbpgaVXZX4g6Pn+AnzFycuRK3MOz5HJfEGeEllXYM=
+buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20260209202127-80ab13bee0bf.1 h1:PMmTMyvHScV9Mn8wc6ASge9uRcHy0jtqPd+fM35LmsQ=
+buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20260209202127-80ab13bee0bf.1/go.mod h1:tvtbpgaVXZX4g6Pn+AnzFycuRK3MOz5HJfEGeEllXYM=
buf.build/go/protovalidate v1.1.0 h1:pQqEQRpOo4SqS60qkvmhLTTQU9JwzEvdyiqAtXa5SeY=
buf.build/go/protovalidate v1.1.0/go.mod h1:bGZcPiAQDC3ErCHK3t74jSoJDFOs2JH3d7LWuTEIdss=
cel.dev/expr v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4=
@@ -23,8 +23,8 @@ github.com/google/cel-go v0.27.0 h1:e7ih85+4qVrBuqQWTW4FKSqZYokVuc3HnhH5keboFTo=
github.com/google/cel-go v0.27.0/go.mod h1:tTJ11FWqnhw5KKpnWpvW9CJC3Y9GK4EIS0WXnBbebzw=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
-github.com/klauspost/compress v1.18.3 h1:9PJRvfbmTabkOX8moIpXPbMMbYN60bWImDDU7L+/6zw=
-github.com/klauspost/compress v1.18.3/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4=
+github.com/klauspost/compress v1.18.4 h1:RPhnKRAQ4Fh8zU2FY/6ZFDwTVTxgJ/EMydqSTzE9a2c=
+github.com/klauspost/compress v1.18.4/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4=
github.com/klauspost/connect-compress/v2 v2.1.1 h1:ycZNp4rWOZBodVE2Ls5AzK4aHkyK+GteEfzRZgKNs+c=
github.com/klauspost/connect-compress/v2 v2.1.1/go.mod h1:9oilsPHJMzGKkjafSBk9J7iVo4mO+dw0G0KSdVpnlVE=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
@@ -49,14 +49,14 @@ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
-golang.org/x/exp v0.0.0-20260112195511-716be5621a96 h1:Z/6YuSHTLOHfNFdb8zVZomZr7cqNgTJvA8+Qz75D8gU=
-golang.org/x/exp v0.0.0-20260112195511-716be5621a96/go.mod h1:nzimsREAkjBCIEFtHiYkrJyT+2uy9YZJB7H1k68CXZU=
-golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE=
-golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8=
-google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20 h1:7ei4lp52gK1uSejlA8AZl5AJjeLUOHBQscRQZUgAcu0=
-google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20/go.mod h1:ZdbssH/1SOVnjnDlXzxDHK2MCidiqXtbYccJNzNYPEE=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20260203192932-546029d2fa20 h1:Jr5R2J6F6qWyzINc+4AM8t5pfUz6beZpHp678GNrMbE=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20260203192932-546029d2fa20/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ=
+golang.org/x/exp v0.0.0-20260209203927-2842357ff358 h1:kpfSV7uLwKJbFSEgNhWzGSL47NDSF/5pYYQw1V0ub6c=
+golang.org/x/exp v0.0.0-20260209203927-2842357ff358/go.mod h1:R3t0oliuryB5eenPWl3rrQxwnNM3WTwnsRZZiXLAAW8=
+golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk=
+golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA=
+google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57 h1:JLQynH/LBHfCTSbDWl+py8C+Rg/k1OVH3xfcaiANuF0=
+google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57/go.mod h1:kSJwQxqmFXeo79zOmbrALdflXQeAYcUbgS7PbpMknCY=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20260209200024-4cfbd4190f57 h1:mWPCjDEyshlQYzBpMNHaEof6UX1PmHcaUODUywQ0uac=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20260209200024-4cfbd4190f57/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ=
google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
diff --git a/go/client/client.go b/go/client/client.go
index 5c935922..79704409 100755
--- a/go/client/client.go
+++ b/go/client/client.go
@@ -30,6 +30,7 @@ type (
Partition() adminv2connect.PartitionServiceClient
Project() adminv2connect.ProjectServiceClient
Size() adminv2connect.SizeServiceClient
+ SizeReservation() adminv2connect.SizeReservationServiceClient
Switch() adminv2connect.SwitchServiceClient
Task() adminv2connect.TaskServiceClient
Tenant() adminv2connect.TenantServiceClient
@@ -38,19 +39,20 @@ type (
}
adminv2 struct {
- filesystemservice adminv2connect.FilesystemServiceClient
- imageservice adminv2connect.ImageServiceClient
- ipservice adminv2connect.IPServiceClient
- machineservice adminv2connect.MachineServiceClient
- networkservice adminv2connect.NetworkServiceClient
- partitionservice adminv2connect.PartitionServiceClient
- projectservice adminv2connect.ProjectServiceClient
- sizeservice adminv2connect.SizeServiceClient
- switchservice adminv2connect.SwitchServiceClient
- taskservice adminv2connect.TaskServiceClient
- tenantservice adminv2connect.TenantServiceClient
- tokenservice adminv2connect.TokenServiceClient
- vpnservice adminv2connect.VPNServiceClient
+ filesystemservice adminv2connect.FilesystemServiceClient
+ imageservice adminv2connect.ImageServiceClient
+ ipservice adminv2connect.IPServiceClient
+ machineservice adminv2connect.MachineServiceClient
+ networkservice adminv2connect.NetworkServiceClient
+ partitionservice adminv2connect.PartitionServiceClient
+ projectservice adminv2connect.ProjectServiceClient
+ sizeservice adminv2connect.SizeServiceClient
+ sizereservationservice adminv2connect.SizeReservationServiceClient
+ switchservice adminv2connect.SwitchServiceClient
+ taskservice adminv2connect.TaskServiceClient
+ tenantservice adminv2connect.TenantServiceClient
+ tokenservice adminv2connect.TokenServiceClient
+ vpnservice adminv2connect.VPNServiceClient
}
Apiv2 interface {
@@ -64,6 +66,7 @@ type (
Partition() apiv2connect.PartitionServiceClient
Project() apiv2connect.ProjectServiceClient
Size() apiv2connect.SizeServiceClient
+ SizeReservation() apiv2connect.SizeReservationServiceClient
Tenant() apiv2connect.TenantServiceClient
Token() apiv2connect.TokenServiceClient
User() apiv2connect.UserServiceClient
@@ -71,20 +74,21 @@ type (
}
apiv2 struct {
- filesystemservice apiv2connect.FilesystemServiceClient
- healthservice apiv2connect.HealthServiceClient
- imageservice apiv2connect.ImageServiceClient
- ipservice apiv2connect.IPServiceClient
- machineservice apiv2connect.MachineServiceClient
- methodservice apiv2connect.MethodServiceClient
- networkservice apiv2connect.NetworkServiceClient
- partitionservice apiv2connect.PartitionServiceClient
- projectservice apiv2connect.ProjectServiceClient
- sizeservice apiv2connect.SizeServiceClient
- tenantservice apiv2connect.TenantServiceClient
- tokenservice apiv2connect.TokenServiceClient
- userservice apiv2connect.UserServiceClient
- versionservice apiv2connect.VersionServiceClient
+ filesystemservice apiv2connect.FilesystemServiceClient
+ healthservice apiv2connect.HealthServiceClient
+ imageservice apiv2connect.ImageServiceClient
+ ipservice apiv2connect.IPServiceClient
+ machineservice apiv2connect.MachineServiceClient
+ methodservice apiv2connect.MethodServiceClient
+ networkservice apiv2connect.NetworkServiceClient
+ partitionservice apiv2connect.PartitionServiceClient
+ projectservice apiv2connect.ProjectServiceClient
+ sizeservice apiv2connect.SizeServiceClient
+ sizereservationservice apiv2connect.SizeReservationServiceClient
+ tenantservice apiv2connect.TenantServiceClient
+ tokenservice apiv2connect.TokenServiceClient
+ userservice apiv2connect.UserServiceClient
+ versionservice apiv2connect.VersionServiceClient
}
Infrav2 interface {
@@ -181,6 +185,12 @@ func (c *client) Adminv2() Adminv2 {
connect.WithInterceptors(c.interceptors...),
compress.WithAll(compress.LevelBalanced),
),
+ sizereservationservice: adminv2connect.NewSizeReservationServiceClient(
+ c.config.HttpClient(),
+ c.config.BaseURL,
+ connect.WithInterceptors(c.interceptors...),
+ compress.WithAll(compress.LevelBalanced),
+ ),
switchservice: adminv2connect.NewSwitchServiceClient(
c.config.HttpClient(),
c.config.BaseURL,
@@ -239,6 +249,9 @@ func (c *adminv2) Project() adminv2connect.ProjectServiceClient {
func (c *adminv2) Size() adminv2connect.SizeServiceClient {
return c.sizeservice
}
+func (c *adminv2) SizeReservation() adminv2connect.SizeReservationServiceClient {
+ return c.sizereservationservice
+}
func (c *adminv2) Switch() adminv2connect.SwitchServiceClient {
return c.switchservice
}
@@ -317,6 +330,12 @@ func (c *client) Apiv2() Apiv2 {
connect.WithInterceptors(c.interceptors...),
compress.WithAll(compress.LevelBalanced),
),
+ sizereservationservice: apiv2connect.NewSizeReservationServiceClient(
+ c.config.HttpClient(),
+ c.config.BaseURL,
+ connect.WithInterceptors(c.interceptors...),
+ compress.WithAll(compress.LevelBalanced),
+ ),
tenantservice: apiv2connect.NewTenantServiceClient(
c.config.HttpClient(),
c.config.BaseURL,
@@ -375,6 +394,9 @@ func (c *apiv2) Project() apiv2connect.ProjectServiceClient {
func (c *apiv2) Size() apiv2connect.SizeServiceClient {
return c.sizeservice
}
+func (c *apiv2) SizeReservation() apiv2connect.SizeReservationServiceClient {
+ return c.sizereservationservice
+}
func (c *apiv2) Tenant() apiv2connect.TenantServiceClient {
return c.tenantservice
}
diff --git a/go/metalstack/admin/v2/adminv2connect/size_reservation.connect.go b/go/metalstack/admin/v2/adminv2connect/size_reservation.connect.go
new file mode 100644
index 00000000..b2c99985
--- /dev/null
+++ b/go/metalstack/admin/v2/adminv2connect/size_reservation.connect.go
@@ -0,0 +1,222 @@
+// Code generated by protoc-gen-connect-go. DO NOT EDIT.
+//
+// Source: metalstack/admin/v2/size_reservation.proto
+
+package adminv2connect
+
+import (
+ connect "connectrpc.com/connect"
+ context "context"
+ errors "errors"
+ v2 "github.com/metal-stack/api/go/metalstack/admin/v2"
+ http "net/http"
+ strings "strings"
+)
+
+// This is a compile-time assertion to ensure that this generated file and the connect package are
+// compatible. If you get a compiler error that this constant is not defined, this code was
+// generated with a version of connect newer than the one compiled into your binary. You can fix the
+// problem by either regenerating this code with an older version of connect or updating the connect
+// version compiled into your binary.
+const _ = connect.IsAtLeastVersion1_13_0
+
+const (
+ // SizeReservationServiceName is the fully-qualified name of the SizeReservationService service.
+ SizeReservationServiceName = "metalstack.admin.v2.SizeReservationService"
+)
+
+// These constants are the fully-qualified names of the RPCs defined in this package. They're
+// exposed at runtime as Spec.Procedure and as the final two segments of the HTTP route.
+//
+// Note that these are different from the fully-qualified method names used by
+// google.golang.org/protobuf/reflect/protoreflect. To convert from these constants to
+// reflection-formatted method names, remove the leading slash and convert the remaining slash to a
+// period.
+const (
+ // SizeReservationServiceCreateProcedure is the fully-qualified name of the SizeReservationService's
+ // Create RPC.
+ SizeReservationServiceCreateProcedure = "/metalstack.admin.v2.SizeReservationService/Create"
+ // SizeReservationServiceUpdateProcedure is the fully-qualified name of the SizeReservationService's
+ // Update RPC.
+ SizeReservationServiceUpdateProcedure = "/metalstack.admin.v2.SizeReservationService/Update"
+ // SizeReservationServiceDeleteProcedure is the fully-qualified name of the SizeReservationService's
+ // Delete RPC.
+ SizeReservationServiceDeleteProcedure = "/metalstack.admin.v2.SizeReservationService/Delete"
+ // SizeReservationServiceListProcedure is the fully-qualified name of the SizeReservationService's
+ // List RPC.
+ SizeReservationServiceListProcedure = "/metalstack.admin.v2.SizeReservationService/List"
+)
+
+// SizeReservationServiceClient is a client for the metalstack.admin.v2.SizeReservationService
+// service.
+type SizeReservationServiceClient interface {
+ // Create a size reservation
+ Create(context.Context, *v2.SizeReservationServiceCreateRequest) (*v2.SizeReservationServiceCreateResponse, error)
+ // Update a size reservation
+ Update(context.Context, *v2.SizeReservationServiceUpdateRequest) (*v2.SizeReservationServiceUpdateResponse, error)
+ // Delete a size reservation
+ Delete(context.Context, *v2.SizeReservationServiceDeleteRequest) (*v2.SizeReservationServiceDeleteResponse, error)
+ // List size reservations
+ List(context.Context, *v2.SizeReservationServiceListRequest) (*v2.SizeReservationServiceListResponse, error)
+}
+
+// NewSizeReservationServiceClient constructs a client for the
+// metalstack.admin.v2.SizeReservationService service. By default, it uses the Connect protocol with
+// the binary Protobuf Codec, asks for gzipped responses, and sends uncompressed requests. To use
+// the gRPC or gRPC-Web protocols, supply the connect.WithGRPC() or connect.WithGRPCWeb() options.
+//
+// The URL supplied here should be the base URL for the Connect or gRPC server (for example,
+// http://api.acme.com or https://acme.com/grpc).
+func NewSizeReservationServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...connect.ClientOption) SizeReservationServiceClient {
+ baseURL = strings.TrimRight(baseURL, "/")
+ sizeReservationServiceMethods := v2.File_metalstack_admin_v2_size_reservation_proto.Services().ByName("SizeReservationService").Methods()
+ return &sizeReservationServiceClient{
+ create: connect.NewClient[v2.SizeReservationServiceCreateRequest, v2.SizeReservationServiceCreateResponse](
+ httpClient,
+ baseURL+SizeReservationServiceCreateProcedure,
+ connect.WithSchema(sizeReservationServiceMethods.ByName("Create")),
+ connect.WithClientOptions(opts...),
+ ),
+ update: connect.NewClient[v2.SizeReservationServiceUpdateRequest, v2.SizeReservationServiceUpdateResponse](
+ httpClient,
+ baseURL+SizeReservationServiceUpdateProcedure,
+ connect.WithSchema(sizeReservationServiceMethods.ByName("Update")),
+ connect.WithClientOptions(opts...),
+ ),
+ delete: connect.NewClient[v2.SizeReservationServiceDeleteRequest, v2.SizeReservationServiceDeleteResponse](
+ httpClient,
+ baseURL+SizeReservationServiceDeleteProcedure,
+ connect.WithSchema(sizeReservationServiceMethods.ByName("Delete")),
+ connect.WithClientOptions(opts...),
+ ),
+ list: connect.NewClient[v2.SizeReservationServiceListRequest, v2.SizeReservationServiceListResponse](
+ httpClient,
+ baseURL+SizeReservationServiceListProcedure,
+ connect.WithSchema(sizeReservationServiceMethods.ByName("List")),
+ connect.WithClientOptions(opts...),
+ ),
+ }
+}
+
+// sizeReservationServiceClient implements SizeReservationServiceClient.
+type sizeReservationServiceClient struct {
+ create *connect.Client[v2.SizeReservationServiceCreateRequest, v2.SizeReservationServiceCreateResponse]
+ update *connect.Client[v2.SizeReservationServiceUpdateRequest, v2.SizeReservationServiceUpdateResponse]
+ delete *connect.Client[v2.SizeReservationServiceDeleteRequest, v2.SizeReservationServiceDeleteResponse]
+ list *connect.Client[v2.SizeReservationServiceListRequest, v2.SizeReservationServiceListResponse]
+}
+
+// Create calls metalstack.admin.v2.SizeReservationService.Create.
+func (c *sizeReservationServiceClient) Create(ctx context.Context, req *v2.SizeReservationServiceCreateRequest) (*v2.SizeReservationServiceCreateResponse, error) {
+ response, err := c.create.CallUnary(ctx, connect.NewRequest(req))
+ if response != nil {
+ return response.Msg, err
+ }
+ return nil, err
+}
+
+// Update calls metalstack.admin.v2.SizeReservationService.Update.
+func (c *sizeReservationServiceClient) Update(ctx context.Context, req *v2.SizeReservationServiceUpdateRequest) (*v2.SizeReservationServiceUpdateResponse, error) {
+ response, err := c.update.CallUnary(ctx, connect.NewRequest(req))
+ if response != nil {
+ return response.Msg, err
+ }
+ return nil, err
+}
+
+// Delete calls metalstack.admin.v2.SizeReservationService.Delete.
+func (c *sizeReservationServiceClient) Delete(ctx context.Context, req *v2.SizeReservationServiceDeleteRequest) (*v2.SizeReservationServiceDeleteResponse, error) {
+ response, err := c.delete.CallUnary(ctx, connect.NewRequest(req))
+ if response != nil {
+ return response.Msg, err
+ }
+ return nil, err
+}
+
+// List calls metalstack.admin.v2.SizeReservationService.List.
+func (c *sizeReservationServiceClient) List(ctx context.Context, req *v2.SizeReservationServiceListRequest) (*v2.SizeReservationServiceListResponse, error) {
+ response, err := c.list.CallUnary(ctx, connect.NewRequest(req))
+ if response != nil {
+ return response.Msg, err
+ }
+ return nil, err
+}
+
+// SizeReservationServiceHandler is an implementation of the
+// metalstack.admin.v2.SizeReservationService service.
+type SizeReservationServiceHandler interface {
+ // Create a size reservation
+ Create(context.Context, *v2.SizeReservationServiceCreateRequest) (*v2.SizeReservationServiceCreateResponse, error)
+ // Update a size reservation
+ Update(context.Context, *v2.SizeReservationServiceUpdateRequest) (*v2.SizeReservationServiceUpdateResponse, error)
+ // Delete a size reservation
+ Delete(context.Context, *v2.SizeReservationServiceDeleteRequest) (*v2.SizeReservationServiceDeleteResponse, error)
+ // List size reservations
+ List(context.Context, *v2.SizeReservationServiceListRequest) (*v2.SizeReservationServiceListResponse, error)
+}
+
+// NewSizeReservationServiceHandler builds an HTTP handler from the service implementation. It
+// returns the path on which to mount the handler and the handler itself.
+//
+// By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf
+// and JSON codecs. They also support gzip compression.
+func NewSizeReservationServiceHandler(svc SizeReservationServiceHandler, opts ...connect.HandlerOption) (string, http.Handler) {
+ sizeReservationServiceMethods := v2.File_metalstack_admin_v2_size_reservation_proto.Services().ByName("SizeReservationService").Methods()
+ sizeReservationServiceCreateHandler := connect.NewUnaryHandlerSimple(
+ SizeReservationServiceCreateProcedure,
+ svc.Create,
+ connect.WithSchema(sizeReservationServiceMethods.ByName("Create")),
+ connect.WithHandlerOptions(opts...),
+ )
+ sizeReservationServiceUpdateHandler := connect.NewUnaryHandlerSimple(
+ SizeReservationServiceUpdateProcedure,
+ svc.Update,
+ connect.WithSchema(sizeReservationServiceMethods.ByName("Update")),
+ connect.WithHandlerOptions(opts...),
+ )
+ sizeReservationServiceDeleteHandler := connect.NewUnaryHandlerSimple(
+ SizeReservationServiceDeleteProcedure,
+ svc.Delete,
+ connect.WithSchema(sizeReservationServiceMethods.ByName("Delete")),
+ connect.WithHandlerOptions(opts...),
+ )
+ sizeReservationServiceListHandler := connect.NewUnaryHandlerSimple(
+ SizeReservationServiceListProcedure,
+ svc.List,
+ connect.WithSchema(sizeReservationServiceMethods.ByName("List")),
+ connect.WithHandlerOptions(opts...),
+ )
+ return "/metalstack.admin.v2.SizeReservationService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ switch r.URL.Path {
+ case SizeReservationServiceCreateProcedure:
+ sizeReservationServiceCreateHandler.ServeHTTP(w, r)
+ case SizeReservationServiceUpdateProcedure:
+ sizeReservationServiceUpdateHandler.ServeHTTP(w, r)
+ case SizeReservationServiceDeleteProcedure:
+ sizeReservationServiceDeleteHandler.ServeHTTP(w, r)
+ case SizeReservationServiceListProcedure:
+ sizeReservationServiceListHandler.ServeHTTP(w, r)
+ default:
+ http.NotFound(w, r)
+ }
+ })
+}
+
+// UnimplementedSizeReservationServiceHandler returns CodeUnimplemented from all methods.
+type UnimplementedSizeReservationServiceHandler struct{}
+
+func (UnimplementedSizeReservationServiceHandler) Create(context.Context, *v2.SizeReservationServiceCreateRequest) (*v2.SizeReservationServiceCreateResponse, error) {
+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("metalstack.admin.v2.SizeReservationService.Create is not implemented"))
+}
+
+func (UnimplementedSizeReservationServiceHandler) Update(context.Context, *v2.SizeReservationServiceUpdateRequest) (*v2.SizeReservationServiceUpdateResponse, error) {
+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("metalstack.admin.v2.SizeReservationService.Update is not implemented"))
+}
+
+func (UnimplementedSizeReservationServiceHandler) Delete(context.Context, *v2.SizeReservationServiceDeleteRequest) (*v2.SizeReservationServiceDeleteResponse, error) {
+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("metalstack.admin.v2.SizeReservationService.Delete is not implemented"))
+}
+
+func (UnimplementedSizeReservationServiceHandler) List(context.Context, *v2.SizeReservationServiceListRequest) (*v2.SizeReservationServiceListResponse, error) {
+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("metalstack.admin.v2.SizeReservationService.List is not implemented"))
+}
diff --git a/go/metalstack/admin/v2/filesystem.pb.go b/go/metalstack/admin/v2/filesystem.pb.go
index 750ae226..3b85539a 100644
--- a/go/metalstack/admin/v2/filesystem.pb.go
+++ b/go/metalstack/admin/v2/filesystem.pb.go
@@ -388,10 +388,9 @@ const file_metalstack_admin_v2_filesystem_proto_rawDesc = "" +
"\x1eFilesystemServiceCreateRequest\x12P\n" +
"\x11filesystem_layout\x18\x01 \x01(\v2#.metalstack.api.v2.FilesystemLayoutR\x10filesystemLayout\"s\n" +
"\x1fFilesystemServiceCreateResponse\x12P\n" +
- "\x11filesystem_layout\x18\x01 \x01(\v2#.metalstack.api.v2.FilesystemLayoutR\x10filesystemLayout\"\xf6\x04\n" +
- "\x1eFilesystemServiceUpdateRequest\x12\x1a\n" +
- "\x02id\x18\x01 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01R\x02id\x12F\n" +
+ "\x11filesystem_layout\x18\x01 \x01(\v2#.metalstack.api.v2.FilesystemLayoutR\x10filesystemLayout\"\xf7\x04\n" +
+ "\x1eFilesystemServiceUpdateRequest\x12\x1b\n" +
+ "\x02id\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\x12F\n" +
"\vupdate_meta\x18\x02 \x01(\v2\x1d.metalstack.api.v2.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\n" +
"updateMeta\x12$\n" +
"\x04name\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x122\n" +
@@ -406,10 +405,9 @@ const file_metalstack_admin_v2_filesystem_proto_rawDesc = "" +
"\x05_nameB\x0e\n" +
"\f_description\"s\n" +
"\x1fFilesystemServiceUpdateResponse\x12P\n" +
- "\x11filesystem_layout\x18\x01 \x01(\v2#.metalstack.api.v2.FilesystemLayoutR\x10filesystemLayout\"<\n" +
- "\x1eFilesystemServiceDeleteRequest\x12\x1a\n" +
- "\x02id\x18\x01 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01R\x02id\"s\n" +
+ "\x11filesystem_layout\x18\x01 \x01(\v2#.metalstack.api.v2.FilesystemLayoutR\x10filesystemLayout\"=\n" +
+ "\x1eFilesystemServiceDeleteRequest\x12\x1b\n" +
+ "\x02id\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\"s\n" +
"\x1fFilesystemServiceDeleteResponse\x12P\n" +
"\x11filesystem_layout\x18\x01 \x01(\v2#.metalstack.api.v2.FilesystemLayoutR\x10filesystemLayout2\x93\x03\n" +
"\x11FilesystemService\x12~\n" +
diff --git a/go/metalstack/admin/v2/image.pb.go b/go/metalstack/admin/v2/image.pb.go
index 58202dbf..2e2c8a4f 100644
--- a/go/metalstack/admin/v2/image.pb.go
+++ b/go/metalstack/admin/v2/image.pb.go
@@ -463,10 +463,9 @@ const file_metalstack_admin_v2_image_proto_rawDesc = "" +
"\x19ImageServiceCreateRequest\x12.\n" +
"\x05image\x18\x01 \x01(\v2\x18.metalstack.api.v2.ImageR\x05image\"L\n" +
"\x1aImageServiceCreateResponse\x12.\n" +
- "\x05image\x18\x01 \x01(\v2\x18.metalstack.api.v2.ImageR\x05image\"\x81\x04\n" +
- "\x19ImageServiceUpdateRequest\x12\x1a\n" +
- "\x02id\x18\x01 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01R\x02id\x12F\n" +
+ "\x05image\x18\x01 \x01(\v2\x18.metalstack.api.v2.ImageR\x05image\"\x82\x04\n" +
+ "\x19ImageServiceUpdateRequest\x12\x1b\n" +
+ "\x02id\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\x12F\n" +
"\vupdate_meta\x18\x02 \x01(\v2\x1d.metalstack.api.v2.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\n" +
"updateMeta\x12\"\n" +
"\x03url\x18\x03 \x01(\tB\v\xbaH\br\x06೮\xb1\x02\x01H\x00R\x03url\x88\x01\x01\x12$\n" +
@@ -480,10 +479,9 @@ const file_metalstack_admin_v2_image_proto_rawDesc = "" +
"\x05_nameB\x0e\n" +
"\f_description\"L\n" +
"\x1aImageServiceUpdateResponse\x12.\n" +
- "\x05image\x18\x01 \x01(\v2\x18.metalstack.api.v2.ImageR\x05image\"7\n" +
- "\x19ImageServiceDeleteRequest\x12\x1a\n" +
- "\x02id\x18\x01 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01R\x02id\"L\n" +
+ "\x05image\x18\x01 \x01(\v2\x18.metalstack.api.v2.ImageR\x05image\"8\n" +
+ "\x19ImageServiceDeleteRequest\x12\x1b\n" +
+ "\x02id\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\"L\n" +
"\x1aImageServiceDeleteResponse\x12.\n" +
"\x05image\x18\x01 \x01(\v2\x18.metalstack.api.v2.ImageR\x05image\"O\n" +
"\x18ImageServiceUsageRequest\x123\n" +
diff --git a/go/metalstack/admin/v2/network.pb.go b/go/metalstack/admin/v2/network.pb.go
index 84993551..af73c608 100644
--- a/go/metalstack/admin/v2/network.pb.go
+++ b/go/metalstack/admin/v2/network.pb.go
@@ -730,15 +730,13 @@ var File_metalstack_admin_v2_network_proto protoreflect.FileDescriptor
const file_metalstack_admin_v2_network_proto_rawDesc = "" +
"\n" +
- "!metalstack/admin/v2/network.proto\x12\x13metalstack.admin.v2\x1a\x1bbuf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a\x1fmetalstack/api/v2/network.proto\x1a(metalstack/api/v2/predefined_rules.proto\"6\n" +
- "\x18NetworkServiceGetRequest\x12\x1a\n" +
- "\x02id\x18\x01 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01R\x02id\"Q\n" +
+ "!metalstack/admin/v2/network.proto\x12\x13metalstack.admin.v2\x1a\x1bbuf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a\x1fmetalstack/api/v2/network.proto\x1a(metalstack/api/v2/predefined_rules.proto\"7\n" +
+ "\x18NetworkServiceGetRequest\x12\x1b\n" +
+ "\x02id\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\"Q\n" +
"\x19NetworkServiceGetResponse\x124\n" +
- "\anetwork\x18\x01 \x01(\v2\x1a.metalstack.api.v2.NetworkR\anetwork\"\xa7\t\n" +
- "\x1bNetworkServiceCreateRequest\x12\x1f\n" +
- "\x02id\x18\x01 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01H\x00R\x02id\x88\x01\x01\x12$\n" +
+ "\anetwork\x18\x01 \x01(\v2\x1a.metalstack.api.v2.NetworkR\anetwork\"\xa8\t\n" +
+ "\x1bNetworkServiceCreateRequest\x12 \n" +
+ "\x02id\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x02id\x88\x01\x01\x12$\n" +
"\x04name\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x122\n" +
"\vdescription\x18\x03 \x01(\tB\v\xbaH\br\x06ȳ\xae\xb1\x02\x01H\x02R\vdescription\x88\x01\x01\x12.\n" +
"\tpartition\x18\x04 \x01(\tB\v\xbaH\br\x06г\xae\xb1\x02\x01H\x03R\tpartition\x88\x01\x01\x12'\n" +
@@ -790,10 +788,9 @@ const file_metalstack_admin_v2_network_proto_rawDesc = "" +
"\a_labelsB\x1e\n" +
"\x1c_default_child_prefix_lengthB\x1a\n" +
"\x18_min_child_prefix_lengthB\v\n" +
- "\t_nat_type\"9\n" +
- "\x1bNetworkServiceDeleteRequest\x12\x1a\n" +
- "\x02id\x18\x01 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01R\x02id\"R\n" +
+ "\t_nat_type\":\n" +
+ "\x1bNetworkServiceDeleteRequest\x12\x1b\n" +
+ "\x02id\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\"R\n" +
"\x19NetworkServiceListRequest\x125\n" +
"\x05query\x18\x02 \x01(\v2\x1f.metalstack.api.v2.NetworkQueryR\x05query\"T\n" +
"\x1cNetworkServiceCreateResponse\x124\n" +
diff --git a/go/metalstack/admin/v2/partition.pb.go b/go/metalstack/admin/v2/partition.pb.go
index 7d9266da..68dcedd4 100644
--- a/go/metalstack/admin/v2/partition.pb.go
+++ b/go/metalstack/admin/v2/partition.pb.go
@@ -86,6 +86,7 @@ type PartitionServiceUpdateRequest struct {
NtpServer []*v2.NTPServer `protobuf:"bytes,6,rep,name=ntp_server,json=ntpServer,proto3" json:"ntp_server,omitempty"`
// ManagementServiceAddresses defines where the management is reachable
// should be in the form :
+ // FIXME validation
MgmtServiceAddresses []string `protobuf:"bytes,7,rep,name=mgmt_service_addresses,json=mgmtServiceAddresses,proto3" json:"mgmt_service_addresses,omitempty"`
// Labels to update on this network
Labels *v2.UpdateLabels `protobuf:"bytes,8,opt,name=labels,proto3,oneof" json:"labels,omitempty"`
@@ -608,10 +609,9 @@ const file_metalstack_admin_v2_partition_proto_rawDesc = "" +
"\n" +
"#metalstack/admin/v2/partition.proto\x12\x13metalstack.admin.v2\x1a\x1bbuf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a!metalstack/api/v2/partition.proto\x1a(metalstack/api/v2/predefined_rules.proto\"[\n" +
"\x1dPartitionServiceCreateRequest\x12:\n" +
- "\tpartition\x18\x01 \x01(\v2\x1c.metalstack.api.v2.PartitionR\tpartition\"\xb2\x04\n" +
- "\x1dPartitionServiceUpdateRequest\x12\x1a\n" +
- "\x02id\x18\x01 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01R\x02id\x12F\n" +
+ "\tpartition\x18\x01 \x01(\v2\x1c.metalstack.api.v2.PartitionR\tpartition\"\xb3\x04\n" +
+ "\x1dPartitionServiceUpdateRequest\x12\x1b\n" +
+ "\x02id\x18\x01 \x01(\tB\v\xbaH\br\x06г\xae\xb1\x02\x01R\x02id\x12F\n" +
"\vupdate_meta\x18\x02 \x01(\v2\x1d.metalstack.api.v2.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\n" +
"updateMeta\x122\n" +
"\vdescription\x18\x03 \x01(\tB\v\xbaH\br\x06ȳ\xae\xb1\x02\x01H\x00R\vdescription\x88\x01\x01\x12\\\n" +
@@ -624,21 +624,18 @@ const file_metalstack_admin_v2_partition_proto_rawDesc = "" +
"\x16mgmt_service_addresses\x18\a \x03(\tR\x14mgmtServiceAddresses\x12<\n" +
"\x06labels\x18\b \x01(\v2\x1f.metalstack.api.v2.UpdateLabelsH\x01R\x06labels\x88\x01\x01B\x0e\n" +
"\f_descriptionB\t\n" +
- "\a_labels\";\n" +
- "\x1dPartitionServiceDeleteRequest\x12\x1a\n" +
- "\x02id\x18\x01 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01R\x02id\"\\\n" +
+ "\a_labels\"<\n" +
+ "\x1dPartitionServiceDeleteRequest\x12\x1b\n" +
+ "\x02id\x18\x01 \x01(\tB\v\xbaH\br\x06г\xae\xb1\x02\x01R\x02id\"\\\n" +
"\x1ePartitionServiceCreateResponse\x12:\n" +
"\tpartition\x18\x01 \x01(\v2\x1c.metalstack.api.v2.PartitionR\tpartition\"\\\n" +
"\x1ePartitionServiceUpdateResponse\x12:\n" +
"\tpartition\x18\x01 \x01(\v2\x1c.metalstack.api.v2.PartitionR\tpartition\"\\\n" +
"\x1ePartitionServiceDeleteResponse\x12:\n" +
- "\tpartition\x18\x01 \x01(\v2\x1c.metalstack.api.v2.PartitionR\tpartition\"\xac\x01\n" +
- "\x1fPartitionServiceCapacityRequest\x12\x1f\n" +
- "\x02id\x18\x01 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01H\x00R\x02id\x88\x01\x01\x12#\n" +
- "\x04size\x18\x02 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01H\x01R\x04size\x88\x01\x01\x12'\n" +
+ "\tpartition\x18\x01 \x01(\v2\x1c.metalstack.api.v2.PartitionR\tpartition\"\xae\x01\n" +
+ "\x1fPartitionServiceCapacityRequest\x12 \n" +
+ "\x02id\x18\x01 \x01(\tB\v\xbaH\br\x06г\xae\xb1\x02\x01H\x00R\x02id\x88\x01\x01\x12$\n" +
+ "\x04size\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04size\x88\x01\x01\x12'\n" +
"\aproject\x18\x03 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01H\x02R\aproject\x88\x01\x01B\x05\n" +
"\x03_idB\a\n" +
"\x05_sizeB\n" +
diff --git a/go/metalstack/admin/v2/project.pb.go b/go/metalstack/admin/v2/project.pb.go
index 76465046..27f410cc 100644
--- a/go/metalstack/admin/v2/project.pb.go
+++ b/go/metalstack/admin/v2/project.pb.go
@@ -128,10 +128,9 @@ var File_metalstack_admin_v2_project_proto protoreflect.FileDescriptor
const file_metalstack_admin_v2_project_proto_rawDesc = "" +
"\n" +
- "!metalstack/admin/v2/project.proto\x12\x13metalstack.admin.v2\x1a\x1bbuf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a\x1fmetalstack/api/v2/project.proto\"\x92\x01\n" +
- "\x19ProjectServiceListRequest\x12'\n" +
- "\x06tenant\x18\x01 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01H\x00R\x06tenant\x88\x01\x01\x126\n" +
+ "!metalstack/admin/v2/project.proto\x12\x13metalstack.admin.v2\x1a\x1bbuf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a(metalstack/api/v2/predefined_rules.proto\x1a\x1fmetalstack/api/v2/project.proto\"\x93\x01\n" +
+ "\x19ProjectServiceListRequest\x12(\n" +
+ "\x06tenant\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x06tenant\x88\x01\x01\x126\n" +
"\x06labels\x18\x02 \x01(\v2\x19.metalstack.api.v2.LabelsH\x01R\x06labels\x88\x01\x01B\t\n" +
"\a_tenantB\t\n" +
"\a_labels\"T\n" +
diff --git a/go/metalstack/admin/v2/size.pb.go b/go/metalstack/admin/v2/size.pb.go
index b17594a7..28b4f208 100644
--- a/go/metalstack/admin/v2/size.pb.go
+++ b/go/metalstack/admin/v2/size.pb.go
@@ -352,10 +352,9 @@ const file_metalstack_admin_v2_size_proto_rawDesc = "" +
"\x18SizeServiceCreateRequest\x12+\n" +
"\x04size\x18\x01 \x01(\v2\x17.metalstack.api.v2.SizeR\x04size\"H\n" +
"\x19SizeServiceCreateResponse\x12+\n" +
- "\x04size\x18\x01 \x01(\v2\x17.metalstack.api.v2.SizeR\x04size\"\xff\x02\n" +
- "\x18SizeServiceUpdateRequest\x12\x1a\n" +
- "\x02id\x18\x01 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01R\x02id\x12F\n" +
+ "\x04size\x18\x01 \x01(\v2\x17.metalstack.api.v2.SizeR\x04size\"\x80\x03\n" +
+ "\x18SizeServiceUpdateRequest\x12\x1b\n" +
+ "\x02id\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\x12F\n" +
"\vupdate_meta\x18\x02 \x01(\v2\x1d.metalstack.api.v2.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\n" +
"updateMeta\x12$\n" +
"\x04name\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x122\n" +
@@ -366,10 +365,9 @@ const file_metalstack_admin_v2_size_proto_rawDesc = "" +
"\f_descriptionB\t\n" +
"\a_labels\"H\n" +
"\x19SizeServiceUpdateResponse\x12+\n" +
- "\x04size\x18\x01 \x01(\v2\x17.metalstack.api.v2.SizeR\x04size\"6\n" +
- "\x18SizeServiceDeleteRequest\x12\x1a\n" +
- "\x02id\x18\x01 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01R\x02id\"H\n" +
+ "\x04size\x18\x01 \x01(\v2\x17.metalstack.api.v2.SizeR\x04size\"7\n" +
+ "\x18SizeServiceDeleteRequest\x12\x1b\n" +
+ "\x02id\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\"H\n" +
"\x19SizeServiceDeleteResponse\x12+\n" +
"\x04size\x18\x01 \x01(\v2\x17.metalstack.api.v2.SizeR\x04size2\xdd\x02\n" +
"\vSizeService\x12n\n" +
diff --git a/go/metalstack/admin/v2/size_reservation.pb.go b/go/metalstack/admin/v2/size_reservation.pb.go
new file mode 100644
index 00000000..d7444eca
--- /dev/null
+++ b/go/metalstack/admin/v2/size_reservation.pb.go
@@ -0,0 +1,564 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.36.11
+// protoc (unknown)
+// source: metalstack/admin/v2/size_reservation.proto
+
+package adminv2
+
+import (
+ _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate"
+ v2 "github.com/metal-stack/api/go/metalstack/api/v2"
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// SizeReservationServiceCreateRequest is the request payload for a size reservation create request
+type SizeReservationServiceCreateRequest struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // SizeReservation is the size reservation to create
+ SizeReservation *v2.SizeReservation `protobuf:"bytes,1,opt,name=size_reservation,json=sizeReservation,proto3" json:"size_reservation,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *SizeReservationServiceCreateRequest) Reset() {
+ *x = SizeReservationServiceCreateRequest{}
+ mi := &file_metalstack_admin_v2_size_reservation_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *SizeReservationServiceCreateRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SizeReservationServiceCreateRequest) ProtoMessage() {}
+
+func (x *SizeReservationServiceCreateRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_metalstack_admin_v2_size_reservation_proto_msgTypes[0]
+ 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 SizeReservationServiceCreateRequest.ProtoReflect.Descriptor instead.
+func (*SizeReservationServiceCreateRequest) Descriptor() ([]byte, []int) {
+ return file_metalstack_admin_v2_size_reservation_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *SizeReservationServiceCreateRequest) GetSizeReservation() *v2.SizeReservation {
+ if x != nil {
+ return x.SizeReservation
+ }
+ return nil
+}
+
+// SizeReservationServiceCreateResponse is the response payload for a size reservation create request
+type SizeReservationServiceCreateResponse struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // SizeReservation the size reservation
+ SizeReservation *v2.SizeReservation `protobuf:"bytes,1,opt,name=size_reservation,json=sizeReservation,proto3" json:"size_reservation,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *SizeReservationServiceCreateResponse) Reset() {
+ *x = SizeReservationServiceCreateResponse{}
+ mi := &file_metalstack_admin_v2_size_reservation_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *SizeReservationServiceCreateResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SizeReservationServiceCreateResponse) ProtoMessage() {}
+
+func (x *SizeReservationServiceCreateResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_metalstack_admin_v2_size_reservation_proto_msgTypes[1]
+ 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 SizeReservationServiceCreateResponse.ProtoReflect.Descriptor instead.
+func (*SizeReservationServiceCreateResponse) Descriptor() ([]byte, []int) {
+ return file_metalstack_admin_v2_size_reservation_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *SizeReservationServiceCreateResponse) GetSizeReservation() *v2.SizeReservation {
+ if x != nil {
+ return x.SizeReservation
+ }
+ return nil
+}
+
+// SizeReservationServiceUpdateRequest is the request payload for a size reservation update request
+type SizeReservationServiceUpdateRequest struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Id of this size reservation
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+ // Name of this size reservation
+ Name *string `protobuf:"bytes,2,opt,name=name,proto3,oneof" json:"name,omitempty"`
+ // Description of this size reservation
+ Description *string `protobuf:"bytes,3,opt,name=description,proto3,oneof" json:"description,omitempty"`
+ // UpdateMeta contains the timestamp and strategy to be used in this update request
+ UpdateMeta *v2.UpdateMeta `protobuf:"bytes,4,opt,name=update_meta,json=updateMeta,proto3" json:"update_meta,omitempty"`
+ // Partition ids of this size reservation
+ Partitions []string `protobuf:"bytes,5,rep,name=partitions,proto3" json:"partitions,omitempty"`
+ // Amount of reservations of this size reservation
+ Amount *int32 `protobuf:"varint,6,opt,name=amount,proto3,oneof" json:"amount,omitempty"`
+ // Labels to update of this size reservation
+ Labels *v2.UpdateLabels `protobuf:"bytes,7,opt,name=labels,proto3,oneof" json:"labels,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *SizeReservationServiceUpdateRequest) Reset() {
+ *x = SizeReservationServiceUpdateRequest{}
+ mi := &file_metalstack_admin_v2_size_reservation_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *SizeReservationServiceUpdateRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SizeReservationServiceUpdateRequest) ProtoMessage() {}
+
+func (x *SizeReservationServiceUpdateRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_metalstack_admin_v2_size_reservation_proto_msgTypes[2]
+ 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 SizeReservationServiceUpdateRequest.ProtoReflect.Descriptor instead.
+func (*SizeReservationServiceUpdateRequest) Descriptor() ([]byte, []int) {
+ return file_metalstack_admin_v2_size_reservation_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *SizeReservationServiceUpdateRequest) GetId() string {
+ if x != nil {
+ return x.Id
+ }
+ return ""
+}
+
+func (x *SizeReservationServiceUpdateRequest) GetName() string {
+ if x != nil && x.Name != nil {
+ return *x.Name
+ }
+ return ""
+}
+
+func (x *SizeReservationServiceUpdateRequest) GetDescription() string {
+ if x != nil && x.Description != nil {
+ return *x.Description
+ }
+ return ""
+}
+
+func (x *SizeReservationServiceUpdateRequest) GetUpdateMeta() *v2.UpdateMeta {
+ if x != nil {
+ return x.UpdateMeta
+ }
+ return nil
+}
+
+func (x *SizeReservationServiceUpdateRequest) GetPartitions() []string {
+ if x != nil {
+ return x.Partitions
+ }
+ return nil
+}
+
+func (x *SizeReservationServiceUpdateRequest) GetAmount() int32 {
+ if x != nil && x.Amount != nil {
+ return *x.Amount
+ }
+ return 0
+}
+
+func (x *SizeReservationServiceUpdateRequest) GetLabels() *v2.UpdateLabels {
+ if x != nil {
+ return x.Labels
+ }
+ return nil
+}
+
+// SizeReservationServiceUpdateResponse is the response payload for a size reservation update request
+type SizeReservationServiceUpdateResponse struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // SizeReservation the size reservation
+ SizeReservation *v2.SizeReservation `protobuf:"bytes,1,opt,name=size_reservation,json=sizeReservation,proto3" json:"size_reservation,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *SizeReservationServiceUpdateResponse) Reset() {
+ *x = SizeReservationServiceUpdateResponse{}
+ mi := &file_metalstack_admin_v2_size_reservation_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *SizeReservationServiceUpdateResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SizeReservationServiceUpdateResponse) ProtoMessage() {}
+
+func (x *SizeReservationServiceUpdateResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_metalstack_admin_v2_size_reservation_proto_msgTypes[3]
+ 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 SizeReservationServiceUpdateResponse.ProtoReflect.Descriptor instead.
+func (*SizeReservationServiceUpdateResponse) Descriptor() ([]byte, []int) {
+ return file_metalstack_admin_v2_size_reservation_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *SizeReservationServiceUpdateResponse) GetSizeReservation() *v2.SizeReservation {
+ if x != nil {
+ return x.SizeReservation
+ }
+ return nil
+}
+
+// SizeReservationServiceDeleteRequest is the request payload for a size reservation delete request
+type SizeReservationServiceDeleteRequest struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // ID of the size reservation to delete
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *SizeReservationServiceDeleteRequest) Reset() {
+ *x = SizeReservationServiceDeleteRequest{}
+ mi := &file_metalstack_admin_v2_size_reservation_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *SizeReservationServiceDeleteRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SizeReservationServiceDeleteRequest) ProtoMessage() {}
+
+func (x *SizeReservationServiceDeleteRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_metalstack_admin_v2_size_reservation_proto_msgTypes[4]
+ 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 SizeReservationServiceDeleteRequest.ProtoReflect.Descriptor instead.
+func (*SizeReservationServiceDeleteRequest) Descriptor() ([]byte, []int) {
+ return file_metalstack_admin_v2_size_reservation_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *SizeReservationServiceDeleteRequest) GetId() string {
+ if x != nil {
+ return x.Id
+ }
+ return ""
+}
+
+// SizeReservationServiceDeleteResponse is the response payload for a size reservation delete request
+type SizeReservationServiceDeleteResponse struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // SizeReservation the size reservation
+ SizeReservation *v2.SizeReservation `protobuf:"bytes,1,opt,name=size_reservation,json=sizeReservation,proto3" json:"size_reservation,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *SizeReservationServiceDeleteResponse) Reset() {
+ *x = SizeReservationServiceDeleteResponse{}
+ mi := &file_metalstack_admin_v2_size_reservation_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *SizeReservationServiceDeleteResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SizeReservationServiceDeleteResponse) ProtoMessage() {}
+
+func (x *SizeReservationServiceDeleteResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_metalstack_admin_v2_size_reservation_proto_msgTypes[5]
+ 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 SizeReservationServiceDeleteResponse.ProtoReflect.Descriptor instead.
+func (*SizeReservationServiceDeleteResponse) Descriptor() ([]byte, []int) {
+ return file_metalstack_admin_v2_size_reservation_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *SizeReservationServiceDeleteResponse) GetSizeReservation() *v2.SizeReservation {
+ if x != nil {
+ return x.SizeReservation
+ }
+ return nil
+}
+
+// SizeReservationServiceListRequest is the request payload for a size list request
+type SizeReservationServiceListRequest struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Query for size reservations
+ Query *v2.SizeReservationQuery `protobuf:"bytes,1,opt,name=query,proto3" json:"query,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *SizeReservationServiceListRequest) Reset() {
+ *x = SizeReservationServiceListRequest{}
+ mi := &file_metalstack_admin_v2_size_reservation_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *SizeReservationServiceListRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SizeReservationServiceListRequest) ProtoMessage() {}
+
+func (x *SizeReservationServiceListRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_metalstack_admin_v2_size_reservation_proto_msgTypes[6]
+ 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 SizeReservationServiceListRequest.ProtoReflect.Descriptor instead.
+func (*SizeReservationServiceListRequest) Descriptor() ([]byte, []int) {
+ return file_metalstack_admin_v2_size_reservation_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *SizeReservationServiceListRequest) GetQuery() *v2.SizeReservationQuery {
+ if x != nil {
+ return x.Query
+ }
+ return nil
+}
+
+// SizeReservationServiceListResponse is the response payload for a size reservation list request
+type SizeReservationServiceListResponse struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Size reservations
+ SizeReservations []*v2.SizeReservation `protobuf:"bytes,1,rep,name=size_reservations,json=sizeReservations,proto3" json:"size_reservations,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *SizeReservationServiceListResponse) Reset() {
+ *x = SizeReservationServiceListResponse{}
+ mi := &file_metalstack_admin_v2_size_reservation_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *SizeReservationServiceListResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SizeReservationServiceListResponse) ProtoMessage() {}
+
+func (x *SizeReservationServiceListResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_metalstack_admin_v2_size_reservation_proto_msgTypes[7]
+ 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 SizeReservationServiceListResponse.ProtoReflect.Descriptor instead.
+func (*SizeReservationServiceListResponse) Descriptor() ([]byte, []int) {
+ return file_metalstack_admin_v2_size_reservation_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *SizeReservationServiceListResponse) GetSizeReservations() []*v2.SizeReservation {
+ if x != nil {
+ return x.SizeReservations
+ }
+ return nil
+}
+
+var File_metalstack_admin_v2_size_reservation_proto protoreflect.FileDescriptor
+
+const file_metalstack_admin_v2_size_reservation_proto_rawDesc = "" +
+ "\n" +
+ "*metalstack/admin/v2/size_reservation.proto\x12\x13metalstack.admin.v2\x1a\x1bbuf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a(metalstack/api/v2/predefined_rules.proto\x1a(metalstack/api/v2/size_reservation.proto\"t\n" +
+ "#SizeReservationServiceCreateRequest\x12M\n" +
+ "\x10size_reservation\x18\x01 \x01(\v2\".metalstack.api.v2.SizeReservationR\x0fsizeReservation\"u\n" +
+ "$SizeReservationServiceCreateResponse\x12M\n" +
+ "\x10size_reservation\x18\x01 \x01(\v2\".metalstack.api.v2.SizeReservationR\x0fsizeReservation\"\xa8\x03\n" +
+ "#SizeReservationServiceUpdateRequest\x12\x18\n" +
+ "\x02id\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x02id\x12$\n" +
+ "\x04name\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x122\n" +
+ "\vdescription\x18\x03 \x01(\tB\v\xbaH\br\x06ȳ\xae\xb1\x02\x01H\x01R\vdescription\x88\x01\x01\x12F\n" +
+ "\vupdate_meta\x18\x04 \x01(\v2\x1d.metalstack.api.v2.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\n" +
+ "updateMeta\x122\n" +
+ "\n" +
+ "partitions\x18\x05 \x03(\tB\x12\xbaH\x0f\x92\x01\f\x18\x01\"\br\x06г\xae\xb1\x02\x01R\n" +
+ "partitions\x12$\n" +
+ "\x06amount\x18\x06 \x01(\x05B\a\xbaH\x04\x1a\x02 \x00H\x02R\x06amount\x88\x01\x01\x12<\n" +
+ "\x06labels\x18\a \x01(\v2\x1f.metalstack.api.v2.UpdateLabelsH\x03R\x06labels\x88\x01\x01B\a\n" +
+ "\x05_nameB\x0e\n" +
+ "\f_descriptionB\t\n" +
+ "\a_amountB\t\n" +
+ "\a_labels\"u\n" +
+ "$SizeReservationServiceUpdateResponse\x12M\n" +
+ "\x10size_reservation\x18\x01 \x01(\v2\".metalstack.api.v2.SizeReservationR\x0fsizeReservation\"?\n" +
+ "#SizeReservationServiceDeleteRequest\x12\x18\n" +
+ "\x02id\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x02id\"u\n" +
+ "$SizeReservationServiceDeleteResponse\x12M\n" +
+ "\x10size_reservation\x18\x01 \x01(\v2\".metalstack.api.v2.SizeReservationR\x0fsizeReservation\"b\n" +
+ "!SizeReservationServiceListRequest\x12=\n" +
+ "\x05query\x18\x01 \x01(\v2'.metalstack.api.v2.SizeReservationQueryR\x05query\"u\n" +
+ "\"SizeReservationServiceListResponse\x12O\n" +
+ "\x11size_reservations\x18\x01 \x03(\v2\".metalstack.api.v2.SizeReservationR\x10sizeReservations2\xbf\x04\n" +
+ "\x16SizeReservationService\x12\x88\x01\n" +
+ "\x06Create\x128.metalstack.admin.v2.SizeReservationServiceCreateRequest\x1a9.metalstack.admin.v2.SizeReservationServiceCreateResponse\"\t\xd2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12\x88\x01\n" +
+ "\x06Update\x128.metalstack.admin.v2.SizeReservationServiceUpdateRequest\x1a9.metalstack.admin.v2.SizeReservationServiceUpdateResponse\"\t\xd2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12\x88\x01\n" +
+ "\x06Delete\x128.metalstack.admin.v2.SizeReservationServiceDeleteRequest\x1a9.metalstack.admin.v2.SizeReservationServiceDeleteResponse\"\t\xd2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12\x83\x01\n" +
+ "\x04List\x126.metalstack.admin.v2.SizeReservationServiceListRequest\x1a7.metalstack.admin.v2.SizeReservationServiceListResponse\"\n" +
+ "\xd2\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02B\xd8\x01\n" +
+ "\x17com.metalstack.admin.v2B\x14SizeReservationProtoP\x01Z9github.com/metal-stack/api/go/metalstack/admin/v2;adminv2\xa2\x02\x03MAX\xaa\x02\x13Metalstack.Admin.V2\xca\x02\x13Metalstack\\Admin\\V2\xe2\x02\x1fMetalstack\\Admin\\V2\\GPBMetadata\xea\x02\x15Metalstack::Admin::V2b\x06proto3"
+
+var (
+ file_metalstack_admin_v2_size_reservation_proto_rawDescOnce sync.Once
+ file_metalstack_admin_v2_size_reservation_proto_rawDescData []byte
+)
+
+func file_metalstack_admin_v2_size_reservation_proto_rawDescGZIP() []byte {
+ file_metalstack_admin_v2_size_reservation_proto_rawDescOnce.Do(func() {
+ file_metalstack_admin_v2_size_reservation_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_metalstack_admin_v2_size_reservation_proto_rawDesc), len(file_metalstack_admin_v2_size_reservation_proto_rawDesc)))
+ })
+ return file_metalstack_admin_v2_size_reservation_proto_rawDescData
+}
+
+var file_metalstack_admin_v2_size_reservation_proto_msgTypes = make([]protoimpl.MessageInfo, 8)
+var file_metalstack_admin_v2_size_reservation_proto_goTypes = []any{
+ (*SizeReservationServiceCreateRequest)(nil), // 0: metalstack.admin.v2.SizeReservationServiceCreateRequest
+ (*SizeReservationServiceCreateResponse)(nil), // 1: metalstack.admin.v2.SizeReservationServiceCreateResponse
+ (*SizeReservationServiceUpdateRequest)(nil), // 2: metalstack.admin.v2.SizeReservationServiceUpdateRequest
+ (*SizeReservationServiceUpdateResponse)(nil), // 3: metalstack.admin.v2.SizeReservationServiceUpdateResponse
+ (*SizeReservationServiceDeleteRequest)(nil), // 4: metalstack.admin.v2.SizeReservationServiceDeleteRequest
+ (*SizeReservationServiceDeleteResponse)(nil), // 5: metalstack.admin.v2.SizeReservationServiceDeleteResponse
+ (*SizeReservationServiceListRequest)(nil), // 6: metalstack.admin.v2.SizeReservationServiceListRequest
+ (*SizeReservationServiceListResponse)(nil), // 7: metalstack.admin.v2.SizeReservationServiceListResponse
+ (*v2.SizeReservation)(nil), // 8: metalstack.api.v2.SizeReservation
+ (*v2.UpdateMeta)(nil), // 9: metalstack.api.v2.UpdateMeta
+ (*v2.UpdateLabels)(nil), // 10: metalstack.api.v2.UpdateLabels
+ (*v2.SizeReservationQuery)(nil), // 11: metalstack.api.v2.SizeReservationQuery
+}
+var file_metalstack_admin_v2_size_reservation_proto_depIdxs = []int32{
+ 8, // 0: metalstack.admin.v2.SizeReservationServiceCreateRequest.size_reservation:type_name -> metalstack.api.v2.SizeReservation
+ 8, // 1: metalstack.admin.v2.SizeReservationServiceCreateResponse.size_reservation:type_name -> metalstack.api.v2.SizeReservation
+ 9, // 2: metalstack.admin.v2.SizeReservationServiceUpdateRequest.update_meta:type_name -> metalstack.api.v2.UpdateMeta
+ 10, // 3: metalstack.admin.v2.SizeReservationServiceUpdateRequest.labels:type_name -> metalstack.api.v2.UpdateLabels
+ 8, // 4: metalstack.admin.v2.SizeReservationServiceUpdateResponse.size_reservation:type_name -> metalstack.api.v2.SizeReservation
+ 8, // 5: metalstack.admin.v2.SizeReservationServiceDeleteResponse.size_reservation:type_name -> metalstack.api.v2.SizeReservation
+ 11, // 6: metalstack.admin.v2.SizeReservationServiceListRequest.query:type_name -> metalstack.api.v2.SizeReservationQuery
+ 8, // 7: metalstack.admin.v2.SizeReservationServiceListResponse.size_reservations:type_name -> metalstack.api.v2.SizeReservation
+ 0, // 8: metalstack.admin.v2.SizeReservationService.Create:input_type -> metalstack.admin.v2.SizeReservationServiceCreateRequest
+ 2, // 9: metalstack.admin.v2.SizeReservationService.Update:input_type -> metalstack.admin.v2.SizeReservationServiceUpdateRequest
+ 4, // 10: metalstack.admin.v2.SizeReservationService.Delete:input_type -> metalstack.admin.v2.SizeReservationServiceDeleteRequest
+ 6, // 11: metalstack.admin.v2.SizeReservationService.List:input_type -> metalstack.admin.v2.SizeReservationServiceListRequest
+ 1, // 12: metalstack.admin.v2.SizeReservationService.Create:output_type -> metalstack.admin.v2.SizeReservationServiceCreateResponse
+ 3, // 13: metalstack.admin.v2.SizeReservationService.Update:output_type -> metalstack.admin.v2.SizeReservationServiceUpdateResponse
+ 5, // 14: metalstack.admin.v2.SizeReservationService.Delete:output_type -> metalstack.admin.v2.SizeReservationServiceDeleteResponse
+ 7, // 15: metalstack.admin.v2.SizeReservationService.List:output_type -> metalstack.admin.v2.SizeReservationServiceListResponse
+ 12, // [12:16] is the sub-list for method output_type
+ 8, // [8:12] is the sub-list for method input_type
+ 8, // [8:8] is the sub-list for extension type_name
+ 8, // [8:8] is the sub-list for extension extendee
+ 0, // [0:8] is the sub-list for field type_name
+}
+
+func init() { file_metalstack_admin_v2_size_reservation_proto_init() }
+func file_metalstack_admin_v2_size_reservation_proto_init() {
+ if File_metalstack_admin_v2_size_reservation_proto != nil {
+ return
+ }
+ file_metalstack_admin_v2_size_reservation_proto_msgTypes[2].OneofWrappers = []any{}
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_metalstack_admin_v2_size_reservation_proto_rawDesc), len(file_metalstack_admin_v2_size_reservation_proto_rawDesc)),
+ NumEnums: 0,
+ NumMessages: 8,
+ NumExtensions: 0,
+ NumServices: 1,
+ },
+ GoTypes: file_metalstack_admin_v2_size_reservation_proto_goTypes,
+ DependencyIndexes: file_metalstack_admin_v2_size_reservation_proto_depIdxs,
+ MessageInfos: file_metalstack_admin_v2_size_reservation_proto_msgTypes,
+ }.Build()
+ File_metalstack_admin_v2_size_reservation_proto = out.File
+ file_metalstack_admin_v2_size_reservation_proto_goTypes = nil
+ file_metalstack_admin_v2_size_reservation_proto_depIdxs = nil
+}
diff --git a/go/metalstack/api/v2/apiv2connect/size_reservation.connect.go b/go/metalstack/api/v2/apiv2connect/size_reservation.connect.go
new file mode 100644
index 00000000..0f6ea868
--- /dev/null
+++ b/go/metalstack/api/v2/apiv2connect/size_reservation.connect.go
@@ -0,0 +1,152 @@
+// Code generated by protoc-gen-connect-go. DO NOT EDIT.
+//
+// Source: metalstack/api/v2/size_reservation.proto
+
+package apiv2connect
+
+import (
+ connect "connectrpc.com/connect"
+ context "context"
+ errors "errors"
+ v2 "github.com/metal-stack/api/go/metalstack/api/v2"
+ http "net/http"
+ strings "strings"
+)
+
+// This is a compile-time assertion to ensure that this generated file and the connect package are
+// compatible. If you get a compiler error that this constant is not defined, this code was
+// generated with a version of connect newer than the one compiled into your binary. You can fix the
+// problem by either regenerating this code with an older version of connect or updating the connect
+// version compiled into your binary.
+const _ = connect.IsAtLeastVersion1_13_0
+
+const (
+ // SizeReservationServiceName is the fully-qualified name of the SizeReservationService service.
+ SizeReservationServiceName = "metalstack.api.v2.SizeReservationService"
+)
+
+// These constants are the fully-qualified names of the RPCs defined in this package. They're
+// exposed at runtime as Spec.Procedure and as the final two segments of the HTTP route.
+//
+// Note that these are different from the fully-qualified method names used by
+// google.golang.org/protobuf/reflect/protoreflect. To convert from these constants to
+// reflection-formatted method names, remove the leading slash and convert the remaining slash to a
+// period.
+const (
+ // SizeReservationServiceGetProcedure is the fully-qualified name of the SizeReservationService's
+ // Get RPC.
+ SizeReservationServiceGetProcedure = "/metalstack.api.v2.SizeReservationService/Get"
+ // SizeReservationServiceListProcedure is the fully-qualified name of the SizeReservationService's
+ // List RPC.
+ SizeReservationServiceListProcedure = "/metalstack.api.v2.SizeReservationService/List"
+)
+
+// SizeReservationServiceClient is a client for the metalstack.api.v2.SizeReservationService
+// service.
+type SizeReservationServiceClient interface {
+ // Get a size reservation
+ Get(context.Context, *v2.SizeReservationServiceGetRequest) (*v2.SizeReservationServiceGetResponse, error)
+ // List size reservations
+ List(context.Context, *v2.SizeReservationServiceListRequest) (*v2.SizeReservationServiceListResponse, error)
+}
+
+// NewSizeReservationServiceClient constructs a client for the
+// metalstack.api.v2.SizeReservationService service. By default, it uses the Connect protocol with
+// the binary Protobuf Codec, asks for gzipped responses, and sends uncompressed requests. To use
+// the gRPC or gRPC-Web protocols, supply the connect.WithGRPC() or connect.WithGRPCWeb() options.
+//
+// The URL supplied here should be the base URL for the Connect or gRPC server (for example,
+// http://api.acme.com or https://acme.com/grpc).
+func NewSizeReservationServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...connect.ClientOption) SizeReservationServiceClient {
+ baseURL = strings.TrimRight(baseURL, "/")
+ sizeReservationServiceMethods := v2.File_metalstack_api_v2_size_reservation_proto.Services().ByName("SizeReservationService").Methods()
+ return &sizeReservationServiceClient{
+ get: connect.NewClient[v2.SizeReservationServiceGetRequest, v2.SizeReservationServiceGetResponse](
+ httpClient,
+ baseURL+SizeReservationServiceGetProcedure,
+ connect.WithSchema(sizeReservationServiceMethods.ByName("Get")),
+ connect.WithClientOptions(opts...),
+ ),
+ list: connect.NewClient[v2.SizeReservationServiceListRequest, v2.SizeReservationServiceListResponse](
+ httpClient,
+ baseURL+SizeReservationServiceListProcedure,
+ connect.WithSchema(sizeReservationServiceMethods.ByName("List")),
+ connect.WithClientOptions(opts...),
+ ),
+ }
+}
+
+// sizeReservationServiceClient implements SizeReservationServiceClient.
+type sizeReservationServiceClient struct {
+ get *connect.Client[v2.SizeReservationServiceGetRequest, v2.SizeReservationServiceGetResponse]
+ list *connect.Client[v2.SizeReservationServiceListRequest, v2.SizeReservationServiceListResponse]
+}
+
+// Get calls metalstack.api.v2.SizeReservationService.Get.
+func (c *sizeReservationServiceClient) Get(ctx context.Context, req *v2.SizeReservationServiceGetRequest) (*v2.SizeReservationServiceGetResponse, error) {
+ response, err := c.get.CallUnary(ctx, connect.NewRequest(req))
+ if response != nil {
+ return response.Msg, err
+ }
+ return nil, err
+}
+
+// List calls metalstack.api.v2.SizeReservationService.List.
+func (c *sizeReservationServiceClient) List(ctx context.Context, req *v2.SizeReservationServiceListRequest) (*v2.SizeReservationServiceListResponse, error) {
+ response, err := c.list.CallUnary(ctx, connect.NewRequest(req))
+ if response != nil {
+ return response.Msg, err
+ }
+ return nil, err
+}
+
+// SizeReservationServiceHandler is an implementation of the
+// metalstack.api.v2.SizeReservationService service.
+type SizeReservationServiceHandler interface {
+ // Get a size reservation
+ Get(context.Context, *v2.SizeReservationServiceGetRequest) (*v2.SizeReservationServiceGetResponse, error)
+ // List size reservations
+ List(context.Context, *v2.SizeReservationServiceListRequest) (*v2.SizeReservationServiceListResponse, error)
+}
+
+// NewSizeReservationServiceHandler builds an HTTP handler from the service implementation. It
+// returns the path on which to mount the handler and the handler itself.
+//
+// By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf
+// and JSON codecs. They also support gzip compression.
+func NewSizeReservationServiceHandler(svc SizeReservationServiceHandler, opts ...connect.HandlerOption) (string, http.Handler) {
+ sizeReservationServiceMethods := v2.File_metalstack_api_v2_size_reservation_proto.Services().ByName("SizeReservationService").Methods()
+ sizeReservationServiceGetHandler := connect.NewUnaryHandlerSimple(
+ SizeReservationServiceGetProcedure,
+ svc.Get,
+ connect.WithSchema(sizeReservationServiceMethods.ByName("Get")),
+ connect.WithHandlerOptions(opts...),
+ )
+ sizeReservationServiceListHandler := connect.NewUnaryHandlerSimple(
+ SizeReservationServiceListProcedure,
+ svc.List,
+ connect.WithSchema(sizeReservationServiceMethods.ByName("List")),
+ connect.WithHandlerOptions(opts...),
+ )
+ return "/metalstack.api.v2.SizeReservationService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ switch r.URL.Path {
+ case SizeReservationServiceGetProcedure:
+ sizeReservationServiceGetHandler.ServeHTTP(w, r)
+ case SizeReservationServiceListProcedure:
+ sizeReservationServiceListHandler.ServeHTTP(w, r)
+ default:
+ http.NotFound(w, r)
+ }
+ })
+}
+
+// UnimplementedSizeReservationServiceHandler returns CodeUnimplemented from all methods.
+type UnimplementedSizeReservationServiceHandler struct{}
+
+func (UnimplementedSizeReservationServiceHandler) Get(context.Context, *v2.SizeReservationServiceGetRequest) (*v2.SizeReservationServiceGetResponse, error) {
+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("metalstack.api.v2.SizeReservationService.Get is not implemented"))
+}
+
+func (UnimplementedSizeReservationServiceHandler) List(context.Context, *v2.SizeReservationServiceListRequest) (*v2.SizeReservationServiceListResponse, error) {
+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("metalstack.api.v2.SizeReservationService.List is not implemented"))
+}
diff --git a/go/metalstack/api/v2/filesystem.pb.go b/go/metalstack/api/v2/filesystem.pb.go
index ffeb547c..259d95d5 100644
--- a/go/metalstack/api/v2/filesystem.pb.go
+++ b/go/metalstack/api/v2/filesystem.pb.go
@@ -1333,13 +1333,11 @@ var File_metalstack_api_v2_filesystem_proto protoreflect.FileDescriptor
const file_metalstack_api_v2_filesystem_proto_rawDesc = "" +
"\n" +
- "\"metalstack/api/v2/filesystem.proto\x12\x11metalstack.api.v2\x1a\x1bbuf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a(metalstack/api/v2/predefined_rules.proto\"9\n" +
- "\x1bFilesystemServiceGetRequest\x12\x1a\n" +
- "\x02id\x18\x01 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01R\x02id\"F\n" +
- "\x1cFilesystemServiceListRequest\x12\x1f\n" +
- "\x02id\x18\x01 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01H\x00R\x02id\x88\x01\x01B\x05\n" +
+ "\"metalstack/api/v2/filesystem.proto\x12\x11metalstack.api.v2\x1a\x1bbuf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a(metalstack/api/v2/predefined_rules.proto\":\n" +
+ "\x1bFilesystemServiceGetRequest\x12\x1b\n" +
+ "\x02id\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\"G\n" +
+ "\x1cFilesystemServiceListRequest\x12 \n" +
+ "\x02id\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x02id\x88\x01\x01B\x05\n" +
"\x03_id\"p\n" +
"\x1cFilesystemServiceGetResponse\x12P\n" +
"\x11filesystem_layout\x18\x01 \x01(\v2#.metalstack.api.v2.FilesystemLayoutR\x10filesystemLayout\"s\n" +
@@ -1348,21 +1346,17 @@ const file_metalstack_api_v2_filesystem_proto_rawDesc = "" +
"\x1dFilesystemServiceMatchRequest\x12L\n" +
"\x0esize_and_image\x18\x01 \x01(\v2$.metalstack.api.v2.MatchImageAndSizeH\x00R\fsizeAndImage\x12c\n" +
"\x1cmachine_and_filesystemlayout\x18\x02 \x01(\v2\x1f.metalstack.api.v2.MatchMachineH\x00R\x1amachineAndFilesystemlayoutB\a\n" +
- "\x05match\"U\n" +
- "\x11MatchImageAndSize\x12\x1e\n" +
- "\x04size\x18\x01 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01R\x04size\x12 \n" +
- "\x05image\x18\x02 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01R\x05image\"k\n" +
+ "\x05match\"W\n" +
+ "\x11MatchImageAndSize\x12\x1f\n" +
+ "\x04size\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x04size\x12!\n" +
+ "\x05image\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x05image\"l\n" +
"\fMatchMachine\x12\"\n" +
- "\amachine\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\amachine\x127\n" +
- "\x11filesystem_layout\x18\x02 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01R\x10filesystemLayout\"r\n" +
+ "\amachine\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\amachine\x128\n" +
+ "\x11filesystem_layout\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x10filesystemLayout\"r\n" +
"\x1eFilesystemServiceMatchResponse\x12P\n" +
- "\x11filesystem_layout\x18\x01 \x01(\v2#.metalstack.api.v2.FilesystemLayoutR\x10filesystemLayout\"\xcd\x04\n" +
- "\x10FilesystemLayout\x12\x1a\n" +
- "\x02id\x18\x01 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01R\x02id\x12+\n" +
+ "\x11filesystem_layout\x18\x01 \x01(\v2#.metalstack.api.v2.FilesystemLayoutR\x10filesystemLayout\"\xce\x04\n" +
+ "\x10FilesystemLayout\x12\x1b\n" +
+ "\x02id\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\x12+\n" +
"\x04meta\x18\x02 \x01(\v2\x17.metalstack.api.v2.MetaR\x04meta\x12$\n" +
"\x04name\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x122\n" +
"\vdescription\x18\x04 \x01(\tB\v\xbaH\br\x06ȳ\xae\xb1\x02\x01H\x01R\vdescription\x88\x01\x01\x12?\n" +
@@ -1380,11 +1374,10 @@ const file_metalstack_api_v2_filesystem_proto_rawDesc = "" +
"\x06images\x18\x02 \x03(\v2:.metalstack.api.v2.FilesystemLayoutConstraints.ImagesEntryR\x06images\x1a9\n" +
"\vImagesEntry\x12\x10\n" +
"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
- "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xb8\x03\n" +
+ "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xb9\x03\n" +
"\n" +
- "Filesystem\x12\"\n" +
- "\x06device\x18\x01 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01R\x06device\x12>\n" +
+ "Filesystem\x12#\n" +
+ "\x06device\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x06device\x12>\n" +
"\x06format\x18\x02 \x01(\x0e2\x19.metalstack.api.v2.FormatB\v\xbaH\b\xc8\x01\x01\x82\x01\x02\x10\x01R\x06format\x12$\n" +
"\x04name\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x122\n" +
"\vdescription\x18\x04 \x01(\tB\v\xbaH\br\x06ȳ\xae\xb1\x02\x01H\x01R\vdescription\x88\x01\x01\x12#\n" +
diff --git a/go/metalstack/api/v2/image.pb.go b/go/metalstack/api/v2/image.pb.go
index baf8fdea..b4162f67 100644
--- a/go/metalstack/api/v2/image.pb.go
+++ b/go/metalstack/api/v2/image.pb.go
@@ -696,10 +696,9 @@ var File_metalstack_api_v2_image_proto protoreflect.FileDescriptor
const file_metalstack_api_v2_image_proto_rawDesc = "" +
"\n" +
- "\x1dmetalstack/api/v2/image.proto\x12\x11metalstack.api.v2\x1a\x1bbuf/validate/validate.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1emetalstack/api/v2/common.proto\x1a(metalstack/api/v2/predefined_rules.proto\"4\n" +
- "\x16ImageServiceGetRequest\x12\x1a\n" +
- "\x02id\x18\x01 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01R\x02id\"N\n" +
+ "\x1dmetalstack/api/v2/image.proto\x12\x11metalstack.api.v2\x1a\x1bbuf/validate/validate.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1emetalstack/api/v2/common.proto\x1a(metalstack/api/v2/predefined_rules.proto\"5\n" +
+ "\x16ImageServiceGetRequest\x12\x1b\n" +
+ "\x02id\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\"N\n" +
"\x17ImageServiceListRequest\x123\n" +
"\x05query\x18\x01 \x01(\v2\x1d.metalstack.api.v2.ImageQueryR\x05query\"+\n" +
"\x19ImageServiceLatestRequest\x12\x0e\n" +
@@ -709,10 +708,9 @@ const file_metalstack_api_v2_image_proto_rawDesc = "" +
"\x18ImageServiceListResponse\x120\n" +
"\x06images\x18\x01 \x03(\v2\x18.metalstack.api.v2.ImageR\x06images\"L\n" +
"\x1aImageServiceLatestResponse\x12.\n" +
- "\x05image\x18\x01 \x01(\v2\x18.metalstack.api.v2.ImageR\x05image\"\xc5\x03\n" +
- "\x05Image\x12\x1a\n" +
- "\x02id\x18\x01 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01R\x02id\x12+\n" +
+ "\x05image\x18\x01 \x01(\v2\x18.metalstack.api.v2.ImageR\x05image\"\xc6\x03\n" +
+ "\x05Image\x12\x1b\n" +
+ "\x02id\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\x12+\n" +
"\x04meta\x18\x02 \x01(\v2\x17.metalstack.api.v2.MetaR\x04meta\x12\x1d\n" +
"\x03url\x18\x03 \x01(\tB\v\xbaH\br\x06೮\xb1\x02\x01R\x03url\x12$\n" +
"\x04name\x18\x04 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x122\n" +
@@ -726,11 +724,10 @@ const file_metalstack_api_v2_image_proto_rawDesc = "" +
"\n" +
"ImageUsage\x12.\n" +
"\x05image\x18\x01 \x01(\v2\x18.metalstack.api.v2.ImageR\x05image\x12\x17\n" +
- "\aused_by\x18\x02 \x03(\tR\x06usedBy\"\xbd\x04\n" +
+ "\aused_by\x18\x02 \x03(\tR\x06usedBy\"\xbe\x04\n" +
"\n" +
- "ImageQuery\x12\x1f\n" +
- "\x02id\x18\x01 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01H\x00R\x02id\x88\x01\x01\x12\x1f\n" +
+ "ImageQuery\x12 \n" +
+ "\x02id\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x02id\x88\x01\x01\x12\x1f\n" +
"\x02os\x18\x02 \x01(\tB\n" +
"\xbaH\ar\x05\x10\x02\x18\x80\x01H\x01R\x02os\x88\x01\x01\x12)\n" +
"\aversion\x18\x03 \x01(\tB\n" +
diff --git a/go/metalstack/api/v2/ip.pb.go b/go/metalstack/api/v2/ip.pb.go
index cf4645b1..37416f18 100644
--- a/go/metalstack/api/v2/ip.pb.go
+++ b/go/metalstack/api/v2/ip.pb.go
@@ -1009,15 +1009,14 @@ var File_metalstack_api_v2_ip_proto protoreflect.FileDescriptor
const file_metalstack_api_v2_ip_proto_rawDesc = "" +
"\n" +
- "\x1ametalstack/api/v2/ip.proto\x12\x11metalstack.api.v2\x1a\x1bbuf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a(metalstack/api/v2/predefined_rules.proto\"\xf6\x02\n" +
+ "\x1ametalstack/api/v2/ip.proto\x12\x11metalstack.api.v2\x1a\x1bbuf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a(metalstack/api/v2/predefined_rules.proto\"\xf7\x02\n" +
"\x02IP\x12\x1c\n" +
"\x04uuid\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12+\n" +
"\x04meta\x18\x02 \x01(\v2\x17.metalstack.api.v2.MetaR\x04meta\x12\x17\n" +
"\x02ip\x18\x03 \x01(\tB\a\xbaH\x04r\x02p\x01R\x02ip\x12\x1f\n" +
"\x04name\x18\x04 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12-\n" +
- "\vdescription\x18\x05 \x01(\tB\v\xbaH\br\x06ȳ\xae\xb1\x02\x01R\vdescription\x12$\n" +
- "\anetwork\x18\x06 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01R\anetwork\x12\"\n" +
+ "\vdescription\x18\x05 \x01(\tB\v\xbaH\br\x06ȳ\xae\xb1\x02\x01R\vdescription\x12%\n" +
+ "\anetwork\x18\x06 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\anetwork\x12\"\n" +
"\aproject\x18\a \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x127\n" +
"\x04type\x18\b \x01(\x0e2\x19.metalstack.api.v2.IPTypeB\b\xbaH\x05\x82\x01\x02\x10\x01R\x04type\x12+\n" +
"\tnamespace\x18\t \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01H\x00R\tnamespace\x88\x01\x01B\f\n" +
@@ -1028,10 +1027,9 @@ const file_metalstack_api_v2_ip_proto_rawDesc = "" +
"\aproject\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12+\n" +
"\tnamespace\x18\x03 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01H\x00R\tnamespace\x88\x01\x01B\f\n" +
"\n" +
- "_namespace\"\xa6\x04\n" +
- "\x16IPServiceCreateRequest\x12$\n" +
- "\anetwork\x18\x01 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01R\anetwork\x12\"\n" +
+ "_namespace\"\xa7\x04\n" +
+ "\x16IPServiceCreateRequest\x12%\n" +
+ "\anetwork\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\anetwork\x12\"\n" +
"\aproject\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12$\n" +
"\x04name\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x122\n" +
"\vdescription\x18\x04 \x01(\tB\v\xbaH\br\x06ȳ\xae\xb1\x02\x01H\x01R\vdescription\x88\x01\x01\x12\x1c\n" +
@@ -1063,11 +1061,10 @@ const file_metalstack_api_v2_ip_proto_rawDesc = "" +
"\a_labels\"l\n" +
"\x14IPServiceListRequest\x12\"\n" +
"\aproject\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x120\n" +
- "\x05query\x18\x02 \x01(\v2\x1a.metalstack.api.v2.IPQueryR\x05query\"\xb0\x05\n" +
+ "\x05query\x18\x02 \x01(\v2\x1a.metalstack.api.v2.IPQueryR\x05query\"\xb1\x05\n" +
"\aIPQuery\x12\x1c\n" +
- "\x02ip\x18\x01 \x01(\tB\a\xbaH\x04r\x02p\x01H\x00R\x02ip\x88\x01\x01\x12)\n" +
- "\anetwork\x18\x02 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01H\x01R\anetwork\x88\x01\x01\x12'\n" +
+ "\x02ip\x18\x01 \x01(\tB\a\xbaH\x04r\x02p\x01H\x00R\x02ip\x88\x01\x01\x12*\n" +
+ "\anetwork\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\anetwork\x88\x01\x01\x12'\n" +
"\aproject\x18\x03 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01H\x02R\aproject\x88\x01\x01\x12$\n" +
"\x04name\x18\x04 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x03R\x04name\x88\x01\x01\x12!\n" +
"\x04uuid\x18\x05 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01H\x04R\x04uuid\x88\x01\x01\x12'\n" +
diff --git a/go/metalstack/api/v2/network.pb.go b/go/metalstack/api/v2/network.pb.go
index 5d3d96f3..5782c31c 100644
--- a/go/metalstack/api/v2/network.pb.go
+++ b/go/metalstack/api/v2/network.pb.go
@@ -1460,10 +1460,9 @@ var File_metalstack_api_v2_network_proto protoreflect.FileDescriptor
const file_metalstack_api_v2_network_proto_rawDesc = "" +
"\n" +
- "\x1fmetalstack/api/v2/network.proto\x12\x11metalstack.api.v2\x1a\x1bbuf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a(metalstack/api/v2/predefined_rules.proto\"]\n" +
- "\x18NetworkServiceGetRequest\x12\x1a\n" +
- "\x02id\x18\x01 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01R\x02id\x12%\n" +
+ "\x1fmetalstack/api/v2/network.proto\x12\x11metalstack.api.v2\x1a\x1bbuf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a(metalstack/api/v2/predefined_rules.proto\"^\n" +
+ "\x18NetworkServiceGetRequest\x12\x1b\n" +
+ "\x02id\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\x12%\n" +
"\aproject\x18\x02 \x01(\tB\v\xbaH\b\xd8\x01\x01r\x03\xb0\x01\x01R\aproject\"Q\n" +
"\x19NetworkServiceGetResponse\x124\n" +
"\anetwork\x18\x01 \x01(\v2\x1a.metalstack.api.v2.NetworkR\anetwork\"\xb1\x04\n" +
@@ -1543,10 +1542,9 @@ const file_metalstack_api_v2_network_proto_rawDesc = "" +
"\x05_typeB\v\n" +
"\t_nat_typeB\x06\n" +
"\x04_vrfB\x11\n" +
- "\x0f_parent_network\"\x81\a\n" +
- "\fNetworkQuery\x12\x1f\n" +
- "\x02id\x18\x01 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01H\x00R\x02id\x88\x01\x01\x12$\n" +
+ "\x0f_parent_network\"\x82\a\n" +
+ "\fNetworkQuery\x12 \n" +
+ "\x02id\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x02id\x88\x01\x01\x12$\n" +
"\x04name\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x122\n" +
"\vdescription\x18\x03 \x01(\tB\v\xbaH\br\x06ȳ\xae\xb1\x02\x01H\x02R\vdescription\x88\x01\x01\x12.\n" +
"\tpartition\x18\x04 \x01(\tB\v\xbaH\br\x06г\xae\xb1\x02\x01H\x03R\tpartition\x88\x01\x01\x12'\n" +
diff --git a/go/metalstack/api/v2/partition.pb.go b/go/metalstack/api/v2/partition.pb.go
index cc4f8191..045a3a41 100644
--- a/go/metalstack/api/v2/partition.pb.go
+++ b/go/metalstack/api/v2/partition.pb.go
@@ -545,9 +545,9 @@ const file_metalstack_api_v2_partition_proto_rawDesc = "" +
"kernel_url\x18\x02 \x01(\tB\v\xbaH\br\x06೮\xb1\x02\x01R\tkernelUrl\x12 \n" +
"\vcommandline\x18\x03 \x01(\tR\vcommandline\"$\n" +
"\tDNSServer\x12\x17\n" +
- "\x02ip\x18\x01 \x01(\tB\a\xbaH\x04r\x02p\x01R\x02ip\"/\n" +
- "\tNTPServer\x12\"\n" +
- "\aaddress\x18\x01 \x01(\tB\b\xbaH\x05r\x03\x18\x80\x02R\aaddress\"9\n" +
+ "\x02ip\x18\x01 \x01(\tB\a\xbaH\x04r\x02p\x01R\x02ip\"2\n" +
+ "\tNTPServer\x12%\n" +
+ "\aaddress\x18\x01 \x01(\tB\v\xbaH\br\x06賮\xb1\x02\x01R\aaddress\"9\n" +
"\x1aPartitionServiceGetRequest\x12\x1b\n" +
"\x02id\x18\x01 \x01(\tB\v\xbaH\br\x06г\xae\xb1\x02\x01R\x02id\"V\n" +
"\x1bPartitionServiceListRequest\x127\n" +
diff --git a/go/metalstack/api/v2/predefined_rules.pb.go b/go/metalstack/api/v2/predefined_rules.pb.go
index 2af9f29b..9bd2c2e5 100644
--- a/go/metalstack/api/v2/predefined_rules.pb.go
+++ b/go/metalstack/api/v2/predefined_rules.pb.go
@@ -70,6 +70,14 @@ var file_metalstack_api_v2_predefined_rules_proto_extTypes = []protoimpl.Extensi
Tag: "varint,80048956,opt,name=is_uri",
Filename: "metalstack/api/v2/predefined_rules.proto",
},
+ {
+ ExtendedType: (*validate.StringRules)(nil),
+ ExtensionType: (*bool)(nil),
+ Field: 80048957,
+ Name: "metalstack.api.v2.is_ip_or_hostname",
+ Tag: "varint,80048957,opt,name=is_ip_or_hostname",
+ Filename: "metalstack/api/v2/predefined_rules.proto",
+ },
{
ExtendedType: (*validate.RepeatedRules)(nil),
ExtensionType: (*bool)(nil),
@@ -114,6 +122,10 @@ var (
//
// optional bool is_uri = 80048956;
E_IsUri = &file_metalstack_api_v2_predefined_rules_proto_extTypes[5]
+ // IsIpOrHostname validates that the given string is either a ip or a hostname
+ //
+ // optional bool is_ip_or_hostname = 80048957;
+ E_IsIpOrHostname = &file_metalstack_api_v2_predefined_rules_proto_extTypes[6]
)
// Extension fields to validate.RepeatedRules.
@@ -121,11 +133,11 @@ var (
// Prefixes validates if a slice of prefixes in string form are valid
//
// optional bool prefixes = 80058951;
- E_Prefixes = &file_metalstack_api_v2_predefined_rules_proto_extTypes[6]
+ E_Prefixes = &file_metalstack_api_v2_predefined_rules_proto_extTypes[7]
// Ips validates if a slice of ips in string form are valid
//
// optional bool ips = 80058952;
- E_Ips = &file_metalstack_api_v2_predefined_rules_proto_extTypes[7]
+ E_Ips = &file_metalstack_api_v2_predefined_rules_proto_extTypes[8]
)
var File_metalstack_api_v2_predefined_rules_proto protoreflect.FileDescriptor
@@ -153,7 +165,10 @@ const file_metalstack_api_v2_predefined_rules_proto_rawDesc = "" +
"\x06is_uri\x12\x19.buf.validate.StringRules\x18\xbc\xe6\x95& \x01(\bB8\xc2H5\n" +
"3\n" +
"\n" +
- "string.uri\x12\x17given uri must be valid\x1a\fthis.isUri()R\x05isUri:\x8f\x01\n" +
+ "string.uri\x12\x17given uri must be valid\x1a\fthis.isUri()R\x05isUri:\xa7\x01\n" +
+ "\x11is_ip_or_hostname\x12\x19.buf.validate.StringRules\x18\xbd\xe6\x95& \x01(\bB^\xc2H[\n" +
+ "Y\n" +
+ "\rvalid_address\x12&must be a valid IP address or hostname\x1a this.isIp() || this.isHostname()R\x0eisIpOrHostname:\x8f\x01\n" +
"\bprefixes\x12\x1b.buf.validate.RepeatedRules\x18Ǵ\x96& \x01(\bBS\xc2HP\n" +
"N\n" +
"\x11repeated.prefixes\x12\x1cgiven prefixes must be valid\x1a\x1bthis.all(m, m.isIpPrefix())R\bprefixes:u\n" +
@@ -173,12 +188,13 @@ var file_metalstack_api_v2_predefined_rules_proto_depIdxs = []int32{
0, // 3: metalstack.api.v2.is_partition:extendee -> buf.validate.StringRules
0, // 4: metalstack.api.v2.is_prefix:extendee -> buf.validate.StringRules
0, // 5: metalstack.api.v2.is_uri:extendee -> buf.validate.StringRules
- 1, // 6: metalstack.api.v2.prefixes:extendee -> buf.validate.RepeatedRules
- 1, // 7: metalstack.api.v2.ips:extendee -> buf.validate.RepeatedRules
- 8, // [8:8] is the sub-list for method output_type
- 8, // [8:8] is the sub-list for method input_type
- 8, // [8:8] is the sub-list for extension type_name
- 0, // [0:8] is the sub-list for extension extendee
+ 0, // 6: metalstack.api.v2.is_ip_or_hostname:extendee -> buf.validate.StringRules
+ 1, // 7: metalstack.api.v2.prefixes:extendee -> buf.validate.RepeatedRules
+ 1, // 8: metalstack.api.v2.ips:extendee -> buf.validate.RepeatedRules
+ 9, // [9:9] is the sub-list for method output_type
+ 9, // [9:9] is the sub-list for method input_type
+ 9, // [9:9] is the sub-list for extension type_name
+ 0, // [0:9] is the sub-list for extension extendee
0, // [0:0] is the sub-list for field type_name
}
@@ -194,7 +210,7 @@ func file_metalstack_api_v2_predefined_rules_proto_init() {
RawDescriptor: unsafe.Slice(unsafe.StringData(file_metalstack_api_v2_predefined_rules_proto_rawDesc), len(file_metalstack_api_v2_predefined_rules_proto_rawDesc)),
NumEnums: 0,
NumMessages: 0,
- NumExtensions: 8,
+ NumExtensions: 9,
NumServices: 0,
},
GoTypes: file_metalstack_api_v2_predefined_rules_proto_goTypes,
diff --git a/go/metalstack/api/v2/project.pb.go b/go/metalstack/api/v2/project.pb.go
index 6a185273..1973ec80 100644
--- a/go/metalstack/api/v2/project.pb.go
+++ b/go/metalstack/api/v2/project.pb.go
@@ -1684,12 +1684,11 @@ const file_metalstack_api_v2_project_proto_rawDesc = "" +
"\n" +
"expires_at\x18\n" +
" \x01(\v2\x1a.google.protobuf.TimestampR\texpiresAt\x127\n" +
- "\tjoined_at\x18\v \x01(\v2\x1a.google.protobuf.TimestampR\bjoinedAt\"\xdd\x01\n" +
+ "\tjoined_at\x18\v \x01(\v2\x1a.google.protobuf.TimestampR\bjoinedAt\"\xde\x01\n" +
"\x19ProjectServiceListRequest\x12\x13\n" +
"\x02id\x18\x01 \x01(\tH\x00R\x02id\x88\x01\x01\x12$\n" +
- "\x04name\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12'\n" +
- "\x06tenant\x18\x03 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01H\x02R\x06tenant\x88\x01\x01\x126\n" +
+ "\x04name\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x12(\n" +
+ "\x06tenant\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x02R\x06tenant\x88\x01\x01\x126\n" +
"\x06labels\x18\x06 \x01(\v2\x19.metalstack.api.v2.LabelsH\x03R\x06labels\x88\x01\x01B\x05\n" +
"\x03_idB\a\n" +
"\x05_nameB\t\n" +
@@ -1701,10 +1700,9 @@ const file_metalstack_api_v2_project_proto_rawDesc = "" +
"\aproject\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\"\x9c\x01\n" +
"\x19ProjectServiceGetResponse\x124\n" +
"\aproject\x18\x01 \x01(\v2\x1a.metalstack.api.v2.ProjectR\aproject\x12I\n" +
- "\x0fproject_members\x18\x02 \x03(\v2 .metalstack.api.v2.ProjectMemberR\x0eprojectMembers\"\xf5\x01\n" +
- "\x1bProjectServiceCreateRequest\x12 \n" +
- "\x05login\x18\x01 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01R\x05login\x12\x1f\n" +
+ "\x0fproject_members\x18\x02 \x03(\v2 .metalstack.api.v2.ProjectMemberR\x0eprojectMembers\"\xf6\x01\n" +
+ "\x1bProjectServiceCreateRequest\x12!\n" +
+ "\x05login\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x05login\x12\x1f\n" +
"\x04name\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12-\n" +
"\vdescription\x18\x03 \x01(\tB\v\xbaH\br\x06ȳ\xae\xb1\x02\x01R\vdescription\x12\"\n" +
"\n" +
diff --git a/go/metalstack/api/v2/size.pb.go b/go/metalstack/api/v2/size.pb.go
index 2f6c9070..85e74b90 100644
--- a/go/metalstack/api/v2/size.pb.go
+++ b/go/metalstack/api/v2/size.pb.go
@@ -508,10 +508,9 @@ const file_metalstack_api_v2_size_proto_rawDesc = "" +
"\x16SizeServiceGetResponse\x12+\n" +
"\x04size\x18\x01 \x01(\v2\x17.metalstack.api.v2.SizeR\x04size\"H\n" +
"\x17SizeServiceListResponse\x12-\n" +
- "\x05sizes\x18\x01 \x03(\v2\x17.metalstack.api.v2.SizeR\x05sizes\"\x87\x02\n" +
- "\x04Size\x12\x1a\n" +
- "\x02id\x18\x01 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01R\x02id\x12+\n" +
+ "\x05sizes\x18\x01 \x03(\v2\x17.metalstack.api.v2.SizeR\x05sizes\"\x88\x02\n" +
+ "\x04Size\x12\x1b\n" +
+ "\x02id\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\x12+\n" +
"\x04meta\x18\x02 \x01(\v2\x17.metalstack.api.v2.MetaR\x04meta\x12$\n" +
"\x04name\x18\x04 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x122\n" +
"\vdescription\x18\x05 \x01(\tB\v\xbaH\br\x06ȳ\xae\xb1\x02\x01H\x01R\vdescription\x88\x01\x01\x12C\n" +
@@ -526,10 +525,9 @@ const file_metalstack_api_v2_size_proto_rawDesc = "" +
"identifier\x18\x04 \x01(\tB\n" +
"\xbaH\ar\x05\x10\x00\x18\x80\x01H\x00R\n" +
"identifier\x88\x01\x01B\r\n" +
- "\v_identifier\"\xe9\x01\n" +
- "\tSizeQuery\x12\x1f\n" +
- "\x02id\x18\x01 \x01(\tB\n" +
- "\xbaH\ar\x05\x10\x02\x18\x80\x01H\x00R\x02id\x88\x01\x01\x12$\n" +
+ "\v_identifier\"\xea\x01\n" +
+ "\tSizeQuery\x12 \n" +
+ "\x02id\x18\x01 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x02id\x88\x01\x01\x12$\n" +
"\x04name\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x122\n" +
"\vdescription\x18\x03 \x01(\tB\v\xbaH\br\x06ȳ\xae\xb1\x02\x01H\x02R\vdescription\x88\x01\x01\x126\n" +
"\x06labels\x18\x04 \x01(\v2\x19.metalstack.api.v2.LabelsH\x03R\x06labels\x88\x01\x01B\x05\n" +
diff --git a/go/metalstack/api/v2/size_reservation.pb.go b/go/metalstack/api/v2/size_reservation.pb.go
new file mode 100644
index 00000000..16974a85
--- /dev/null
+++ b/go/metalstack/api/v2/size_reservation.pb.go
@@ -0,0 +1,549 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.36.11
+// protoc (unknown)
+// source: metalstack/api/v2/size_reservation.proto
+
+package apiv2
+
+import (
+ _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate"
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// SizeReservationServiceGetRequest is the request payload for a size get request
+type SizeReservationServiceGetRequest struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // ID of the size reservation to get
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+ // Project of the size reservation
+ Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *SizeReservationServiceGetRequest) Reset() {
+ *x = SizeReservationServiceGetRequest{}
+ mi := &file_metalstack_api_v2_size_reservation_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *SizeReservationServiceGetRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SizeReservationServiceGetRequest) ProtoMessage() {}
+
+func (x *SizeReservationServiceGetRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_metalstack_api_v2_size_reservation_proto_msgTypes[0]
+ 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 SizeReservationServiceGetRequest.ProtoReflect.Descriptor instead.
+func (*SizeReservationServiceGetRequest) Descriptor() ([]byte, []int) {
+ return file_metalstack_api_v2_size_reservation_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *SizeReservationServiceGetRequest) GetId() string {
+ if x != nil {
+ return x.Id
+ }
+ return ""
+}
+
+func (x *SizeReservationServiceGetRequest) GetProject() string {
+ if x != nil {
+ return x.Project
+ }
+ return ""
+}
+
+// SizeReservationServiceListRequest is the request payload for a size list request
+type SizeReservationServiceListRequest struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Project of the size reservation
+ Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"`
+ // Query for size reservations
+ Query *SizeReservationQuery `protobuf:"bytes,2,opt,name=query,proto3" json:"query,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *SizeReservationServiceListRequest) Reset() {
+ *x = SizeReservationServiceListRequest{}
+ mi := &file_metalstack_api_v2_size_reservation_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *SizeReservationServiceListRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SizeReservationServiceListRequest) ProtoMessage() {}
+
+func (x *SizeReservationServiceListRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_metalstack_api_v2_size_reservation_proto_msgTypes[1]
+ 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 SizeReservationServiceListRequest.ProtoReflect.Descriptor instead.
+func (*SizeReservationServiceListRequest) Descriptor() ([]byte, []int) {
+ return file_metalstack_api_v2_size_reservation_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *SizeReservationServiceListRequest) GetProject() string {
+ if x != nil {
+ return x.Project
+ }
+ return ""
+}
+
+func (x *SizeReservationServiceListRequest) GetQuery() *SizeReservationQuery {
+ if x != nil {
+ return x.Query
+ }
+ return nil
+}
+
+// SizeReservationServiceGetResponse is the response payload for a size reservation get request
+type SizeReservationServiceGetResponse struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Size reservation
+ SizeReservation *SizeReservation `protobuf:"bytes,1,opt,name=size_reservation,json=sizeReservation,proto3" json:"size_reservation,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *SizeReservationServiceGetResponse) Reset() {
+ *x = SizeReservationServiceGetResponse{}
+ mi := &file_metalstack_api_v2_size_reservation_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *SizeReservationServiceGetResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SizeReservationServiceGetResponse) ProtoMessage() {}
+
+func (x *SizeReservationServiceGetResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_metalstack_api_v2_size_reservation_proto_msgTypes[2]
+ 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 SizeReservationServiceGetResponse.ProtoReflect.Descriptor instead.
+func (*SizeReservationServiceGetResponse) Descriptor() ([]byte, []int) {
+ return file_metalstack_api_v2_size_reservation_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *SizeReservationServiceGetResponse) GetSizeReservation() *SizeReservation {
+ if x != nil {
+ return x.SizeReservation
+ }
+ return nil
+}
+
+// SizeReservationServiceListResponse is the response payload for a size reservation list request
+type SizeReservationServiceListResponse struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Size reservations
+ SizeReservations []*SizeReservation `protobuf:"bytes,1,rep,name=size_reservations,json=sizeReservations,proto3" json:"size_reservations,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *SizeReservationServiceListResponse) Reset() {
+ *x = SizeReservationServiceListResponse{}
+ mi := &file_metalstack_api_v2_size_reservation_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *SizeReservationServiceListResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SizeReservationServiceListResponse) ProtoMessage() {}
+
+func (x *SizeReservationServiceListResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_metalstack_api_v2_size_reservation_proto_msgTypes[3]
+ 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 SizeReservationServiceListResponse.ProtoReflect.Descriptor instead.
+func (*SizeReservationServiceListResponse) Descriptor() ([]byte, []int) {
+ return file_metalstack_api_v2_size_reservation_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *SizeReservationServiceListResponse) GetSizeReservations() []*SizeReservation {
+ if x != nil {
+ return x.SizeReservations
+ }
+ return nil
+}
+
+// SizeReservation
+type SizeReservation struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Id of this size reservation, is generated on creation
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+ // Meta for this size reservation
+ Meta *Meta `protobuf:"bytes,2,opt,name=meta,proto3" json:"meta,omitempty"`
+ // Name of this size reservation
+ Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
+ // Description of this size reservation
+ Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"`
+ // Project of the size reservation
+ Project string `protobuf:"bytes,5,opt,name=project,proto3" json:"project,omitempty"`
+ // Size id of this size reservation
+ Size string `protobuf:"bytes,6,opt,name=size,proto3" json:"size,omitempty"`
+ // Partition ids of this size reservation
+ Partitions []string `protobuf:"bytes,7,rep,name=partitions,proto3" json:"partitions,omitempty"`
+ // Amount of reservations of this size reservation
+ Amount int32 `protobuf:"varint,8,opt,name=amount,proto3" json:"amount,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *SizeReservation) Reset() {
+ *x = SizeReservation{}
+ mi := &file_metalstack_api_v2_size_reservation_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *SizeReservation) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SizeReservation) ProtoMessage() {}
+
+func (x *SizeReservation) ProtoReflect() protoreflect.Message {
+ mi := &file_metalstack_api_v2_size_reservation_proto_msgTypes[4]
+ 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 SizeReservation.ProtoReflect.Descriptor instead.
+func (*SizeReservation) Descriptor() ([]byte, []int) {
+ return file_metalstack_api_v2_size_reservation_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *SizeReservation) GetId() string {
+ if x != nil {
+ return x.Id
+ }
+ return ""
+}
+
+func (x *SizeReservation) GetMeta() *Meta {
+ if x != nil {
+ return x.Meta
+ }
+ return nil
+}
+
+func (x *SizeReservation) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+
+func (x *SizeReservation) GetDescription() string {
+ if x != nil {
+ return x.Description
+ }
+ return ""
+}
+
+func (x *SizeReservation) GetProject() string {
+ if x != nil {
+ return x.Project
+ }
+ return ""
+}
+
+func (x *SizeReservation) GetSize() string {
+ if x != nil {
+ return x.Size
+ }
+ return ""
+}
+
+func (x *SizeReservation) GetPartitions() []string {
+ if x != nil {
+ return x.Partitions
+ }
+ return nil
+}
+
+func (x *SizeReservation) GetAmount() int32 {
+ if x != nil {
+ return x.Amount
+ }
+ return 0
+}
+
+// SizeReservationQuery is used to search size reservations
+type SizeReservationQuery struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // ID of the size reservation to get
+ Id *string `protobuf:"bytes,1,opt,name=id,proto3,oneof" json:"id,omitempty"`
+ // Name of this size reservation
+ Name *string `protobuf:"bytes,2,opt,name=name,proto3,oneof" json:"name,omitempty"`
+ // Description of this size reservation
+ Description *string `protobuf:"bytes,3,opt,name=description,proto3,oneof" json:"description,omitempty"`
+ // Size id of this size reservation
+ Size *string `protobuf:"bytes,4,opt,name=size,proto3,oneof" json:"size,omitempty"`
+ // Project of the size reservation
+ Project *string `protobuf:"bytes,5,opt,name=project,proto3,oneof" json:"project,omitempty"`
+ // Partition of the size reservation
+ Partition *string `protobuf:"bytes,6,opt,name=partition,proto3,oneof" json:"partition,omitempty"`
+ // Labels lists only size reservations containing the given labels
+ Labels *Labels `protobuf:"bytes,7,opt,name=labels,proto3,oneof" json:"labels,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *SizeReservationQuery) Reset() {
+ *x = SizeReservationQuery{}
+ mi := &file_metalstack_api_v2_size_reservation_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *SizeReservationQuery) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SizeReservationQuery) ProtoMessage() {}
+
+func (x *SizeReservationQuery) ProtoReflect() protoreflect.Message {
+ mi := &file_metalstack_api_v2_size_reservation_proto_msgTypes[5]
+ 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 SizeReservationQuery.ProtoReflect.Descriptor instead.
+func (*SizeReservationQuery) Descriptor() ([]byte, []int) {
+ return file_metalstack_api_v2_size_reservation_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *SizeReservationQuery) GetId() string {
+ if x != nil && x.Id != nil {
+ return *x.Id
+ }
+ return ""
+}
+
+func (x *SizeReservationQuery) GetName() string {
+ if x != nil && x.Name != nil {
+ return *x.Name
+ }
+ return ""
+}
+
+func (x *SizeReservationQuery) GetDescription() string {
+ if x != nil && x.Description != nil {
+ return *x.Description
+ }
+ return ""
+}
+
+func (x *SizeReservationQuery) GetSize() string {
+ if x != nil && x.Size != nil {
+ return *x.Size
+ }
+ return ""
+}
+
+func (x *SizeReservationQuery) GetProject() string {
+ if x != nil && x.Project != nil {
+ return *x.Project
+ }
+ return ""
+}
+
+func (x *SizeReservationQuery) GetPartition() string {
+ if x != nil && x.Partition != nil {
+ return *x.Partition
+ }
+ return ""
+}
+
+func (x *SizeReservationQuery) GetLabels() *Labels {
+ if x != nil {
+ return x.Labels
+ }
+ return nil
+}
+
+var File_metalstack_api_v2_size_reservation_proto protoreflect.FileDescriptor
+
+const file_metalstack_api_v2_size_reservation_proto_rawDesc = "" +
+ "\n" +
+ "(metalstack/api/v2/size_reservation.proto\x12\x11metalstack.api.v2\x1a\x1bbuf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a(metalstack/api/v2/predefined_rules.proto\"`\n" +
+ " SizeReservationServiceGetRequest\x12\x18\n" +
+ "\x02id\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x02id\x12\"\n" +
+ "\aproject\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\"\x86\x01\n" +
+ "!SizeReservationServiceListRequest\x12\"\n" +
+ "\aproject\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12=\n" +
+ "\x05query\x18\x02 \x01(\v2'.metalstack.api.v2.SizeReservationQueryR\x05query\"r\n" +
+ "!SizeReservationServiceGetResponse\x12M\n" +
+ "\x10size_reservation\x18\x01 \x01(\v2\".metalstack.api.v2.SizeReservationR\x0fsizeReservation\"u\n" +
+ "\"SizeReservationServiceListResponse\x12O\n" +
+ "\x11size_reservations\x18\x01 \x03(\v2\".metalstack.api.v2.SizeReservationR\x10sizeReservations\"\xc7\x02\n" +
+ "\x0fSizeReservation\x12\x1b\n" +
+ "\x02id\x18\x01 \x01(\tB\v\xbaH\b\xd8\x01\x01r\x03\xb0\x01\x01R\x02id\x12+\n" +
+ "\x04meta\x18\x02 \x01(\v2\x17.metalstack.api.v2.MetaR\x04meta\x12\x1f\n" +
+ "\x04name\x18\x03 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12-\n" +
+ "\vdescription\x18\x04 \x01(\tB\v\xbaH\br\x06ȳ\xae\xb1\x02\x01R\vdescription\x12\"\n" +
+ "\aproject\x18\x05 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\aproject\x12\x1f\n" +
+ "\x04size\x18\x06 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01R\x04size\x124\n" +
+ "\n" +
+ "partitions\x18\a \x03(\tB\x14\xbaH\x11\x92\x01\x0e\b\x01\x18\x01\"\br\x06г\xae\xb1\x02\x01R\n" +
+ "partitions\x12\x1f\n" +
+ "\x06amount\x18\b \x01(\x05B\a\xbaH\x04\x1a\x02 \x00R\x06amount\"\x94\x03\n" +
+ "\x14SizeReservationQuery\x12\x1d\n" +
+ "\x02id\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01H\x00R\x02id\x88\x01\x01\x12$\n" +
+ "\x04name\x18\x02 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\x88\x01\x01\x122\n" +
+ "\vdescription\x18\x03 \x01(\tB\v\xbaH\br\x06ȳ\xae\xb1\x02\x01H\x02R\vdescription\x88\x01\x01\x12$\n" +
+ "\x04size\x18\x04 \x01(\tB\v\xbaH\br\x06\xc0\xb3\xae\xb1\x02\x01H\x03R\x04size\x88\x01\x01\x12'\n" +
+ "\aproject\x18\x05 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01H\x04R\aproject\x88\x01\x01\x12.\n" +
+ "\tpartition\x18\x06 \x01(\tB\v\xbaH\br\x06г\xae\xb1\x02\x01H\x05R\tpartition\x88\x01\x01\x126\n" +
+ "\x06labels\x18\a \x01(\v2\x19.metalstack.api.v2.LabelsH\x06R\x06labels\x88\x01\x01B\x05\n" +
+ "\x03_idB\a\n" +
+ "\x05_nameB\x0e\n" +
+ "\f_descriptionB\a\n" +
+ "\x05_sizeB\n" +
+ "\n" +
+ "\b_projectB\f\n" +
+ "\n" +
+ "_partitionB\t\n" +
+ "\a_labels2\x9a\x02\n" +
+ "\x16SizeReservationService\x12}\n" +
+ "\x03Get\x123.metalstack.api.v2.SizeReservationServiceGetRequest\x1a4.metalstack.api.v2.SizeReservationServiceGetResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12\x80\x01\n" +
+ "\x04List\x124.metalstack.api.v2.SizeReservationServiceListRequest\x1a5.metalstack.api.v2.SizeReservationServiceListResponse\"\v\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02B\xca\x01\n" +
+ "\x15com.metalstack.api.v2B\x14SizeReservationProtoP\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"
+
+var (
+ file_metalstack_api_v2_size_reservation_proto_rawDescOnce sync.Once
+ file_metalstack_api_v2_size_reservation_proto_rawDescData []byte
+)
+
+func file_metalstack_api_v2_size_reservation_proto_rawDescGZIP() []byte {
+ file_metalstack_api_v2_size_reservation_proto_rawDescOnce.Do(func() {
+ file_metalstack_api_v2_size_reservation_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_metalstack_api_v2_size_reservation_proto_rawDesc), len(file_metalstack_api_v2_size_reservation_proto_rawDesc)))
+ })
+ return file_metalstack_api_v2_size_reservation_proto_rawDescData
+}
+
+var file_metalstack_api_v2_size_reservation_proto_msgTypes = make([]protoimpl.MessageInfo, 6)
+var file_metalstack_api_v2_size_reservation_proto_goTypes = []any{
+ (*SizeReservationServiceGetRequest)(nil), // 0: metalstack.api.v2.SizeReservationServiceGetRequest
+ (*SizeReservationServiceListRequest)(nil), // 1: metalstack.api.v2.SizeReservationServiceListRequest
+ (*SizeReservationServiceGetResponse)(nil), // 2: metalstack.api.v2.SizeReservationServiceGetResponse
+ (*SizeReservationServiceListResponse)(nil), // 3: metalstack.api.v2.SizeReservationServiceListResponse
+ (*SizeReservation)(nil), // 4: metalstack.api.v2.SizeReservation
+ (*SizeReservationQuery)(nil), // 5: metalstack.api.v2.SizeReservationQuery
+ (*Meta)(nil), // 6: metalstack.api.v2.Meta
+ (*Labels)(nil), // 7: metalstack.api.v2.Labels
+}
+var file_metalstack_api_v2_size_reservation_proto_depIdxs = []int32{
+ 5, // 0: metalstack.api.v2.SizeReservationServiceListRequest.query:type_name -> metalstack.api.v2.SizeReservationQuery
+ 4, // 1: metalstack.api.v2.SizeReservationServiceGetResponse.size_reservation:type_name -> metalstack.api.v2.SizeReservation
+ 4, // 2: metalstack.api.v2.SizeReservationServiceListResponse.size_reservations:type_name -> metalstack.api.v2.SizeReservation
+ 6, // 3: metalstack.api.v2.SizeReservation.meta:type_name -> metalstack.api.v2.Meta
+ 7, // 4: metalstack.api.v2.SizeReservationQuery.labels:type_name -> metalstack.api.v2.Labels
+ 0, // 5: metalstack.api.v2.SizeReservationService.Get:input_type -> metalstack.api.v2.SizeReservationServiceGetRequest
+ 1, // 6: metalstack.api.v2.SizeReservationService.List:input_type -> metalstack.api.v2.SizeReservationServiceListRequest
+ 2, // 7: metalstack.api.v2.SizeReservationService.Get:output_type -> metalstack.api.v2.SizeReservationServiceGetResponse
+ 3, // 8: metalstack.api.v2.SizeReservationService.List:output_type -> metalstack.api.v2.SizeReservationServiceListResponse
+ 7, // [7:9] is the sub-list for method output_type
+ 5, // [5:7] is the sub-list for method input_type
+ 5, // [5:5] is the sub-list for extension type_name
+ 5, // [5:5] is the sub-list for extension extendee
+ 0, // [0:5] is the sub-list for field type_name
+}
+
+func init() { file_metalstack_api_v2_size_reservation_proto_init() }
+func file_metalstack_api_v2_size_reservation_proto_init() {
+ if File_metalstack_api_v2_size_reservation_proto != nil {
+ return
+ }
+ file_metalstack_api_v2_common_proto_init()
+ file_metalstack_api_v2_predefined_rules_proto_init()
+ file_metalstack_api_v2_size_reservation_proto_msgTypes[5].OneofWrappers = []any{}
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_metalstack_api_v2_size_reservation_proto_rawDesc), len(file_metalstack_api_v2_size_reservation_proto_rawDesc)),
+ NumEnums: 0,
+ NumMessages: 6,
+ NumExtensions: 0,
+ NumServices: 1,
+ },
+ GoTypes: file_metalstack_api_v2_size_reservation_proto_goTypes,
+ DependencyIndexes: file_metalstack_api_v2_size_reservation_proto_depIdxs,
+ MessageInfos: file_metalstack_api_v2_size_reservation_proto_msgTypes,
+ }.Build()
+ File_metalstack_api_v2_size_reservation_proto = out.File
+ file_metalstack_api_v2_size_reservation_proto_goTypes = nil
+ file_metalstack_api_v2_size_reservation_proto_depIdxs = nil
+}
diff --git a/go/permissions/servicepermissions.go b/go/permissions/servicepermissions.go
index 060a748f..a6866748 100755
--- a/go/permissions/servicepermissions.go
+++ b/go/permissions/servicepermissions.go
@@ -14,6 +14,7 @@ func GetServices() []string {
"metalstack.admin.v2.NetworkService",
"metalstack.admin.v2.PartitionService",
"metalstack.admin.v2.ProjectService",
+ "metalstack.admin.v2.SizeReservationService",
"metalstack.admin.v2.SizeService",
"metalstack.admin.v2.SwitchService",
"metalstack.admin.v2.TaskService",
@@ -29,6 +30,7 @@ func GetServices() []string {
"metalstack.api.v2.NetworkService",
"metalstack.api.v2.PartitionService",
"metalstack.api.v2.ProjectService",
+ "metalstack.api.v2.SizeReservationService",
"metalstack.api.v2.SizeService",
"metalstack.api.v2.TenantService",
"metalstack.api.v2.TokenService",
@@ -73,6 +75,10 @@ func GetServicePermissions() *ServicePermissions {
"/metalstack.admin.v2.SizeService/Create",
"/metalstack.admin.v2.SizeService/Update",
"/metalstack.admin.v2.SizeService/Delete",
+ "/metalstack.admin.v2.SizeReservationService/Create",
+ "/metalstack.admin.v2.SizeReservationService/Update",
+ "/metalstack.admin.v2.SizeReservationService/Delete",
+ "/metalstack.admin.v2.SizeReservationService/List",
"/metalstack.admin.v2.SwitchService/Get",
"/metalstack.admin.v2.SwitchService/List",
"/metalstack.admin.v2.SwitchService/Update",
@@ -103,6 +109,7 @@ func GetServicePermissions() *ServicePermissions {
"/metalstack.admin.v2.NetworkService/List",
"/metalstack.admin.v2.PartitionService/Capacity",
"/metalstack.admin.v2.ProjectService/List",
+ "/metalstack.admin.v2.SizeReservationService/List",
"/metalstack.admin.v2.SwitchService/Get",
"/metalstack.admin.v2.SwitchService/List",
"/metalstack.admin.v2.TaskService/Get",
@@ -185,6 +192,8 @@ func GetServicePermissions() *ServicePermissions {
"/metalstack.api.v2.NetworkService/Delete",
"/metalstack.api.v2.ProjectService/Get",
"/metalstack.api.v2.ProjectService/Update",
+ "/metalstack.api.v2.SizeReservationService/Get",
+ "/metalstack.api.v2.SizeReservationService/List",
},
"PROJECT_ROLE_OWNER": []string{
"/metalstack.api.v2.IPService/Get",
@@ -213,6 +222,8 @@ func GetServicePermissions() *ServicePermissions {
"/metalstack.api.v2.ProjectService/Invite",
"/metalstack.api.v2.ProjectService/InviteDelete",
"/metalstack.api.v2.ProjectService/InvitesList",
+ "/metalstack.api.v2.SizeReservationService/Get",
+ "/metalstack.api.v2.SizeReservationService/List",
},
"PROJECT_ROLE_VIEWER": []string{
"/metalstack.api.v2.IPService/Get",
@@ -224,6 +235,8 @@ func GetServicePermissions() *ServicePermissions {
"/metalstack.api.v2.NetworkService/ListBaseNetworks",
"/metalstack.api.v2.ProjectService/Get",
"/metalstack.api.v2.ProjectService/Leave",
+ "/metalstack.api.v2.SizeReservationService/Get",
+ "/metalstack.api.v2.SizeReservationService/List",
},
},
},
@@ -254,6 +267,10 @@ func GetServicePermissions() *ServicePermissions {
"/metalstack.admin.v2.PartitionService/Delete": true,
"/metalstack.admin.v2.PartitionService/Update": true,
"/metalstack.admin.v2.ProjectService/List": true,
+ "/metalstack.admin.v2.SizeReservationService/Create": true,
+ "/metalstack.admin.v2.SizeReservationService/Delete": true,
+ "/metalstack.admin.v2.SizeReservationService/List": true,
+ "/metalstack.admin.v2.SizeReservationService/Update": true,
"/metalstack.admin.v2.SizeService/Create": true,
"/metalstack.admin.v2.SizeService/Delete": true,
"/metalstack.admin.v2.SizeService/Update": true,
@@ -316,6 +333,8 @@ func GetServicePermissions() *ServicePermissions {
"/metalstack.api.v2.ProjectService/RemoveMember": true,
"/metalstack.api.v2.ProjectService/Update": true,
"/metalstack.api.v2.ProjectService/UpdateMember": true,
+ "/metalstack.api.v2.SizeReservationService/Get": true,
+ "/metalstack.api.v2.SizeReservationService/List": true,
"/metalstack.api.v2.SizeService/Get": true,
"/metalstack.api.v2.SizeService/List": true,
"/metalstack.api.v2.TenantService/Create": true,
@@ -413,6 +432,10 @@ func GetServicePermissions() *ServicePermissions {
"/metalstack.admin.v2.PartitionService/Delete": true,
"/metalstack.admin.v2.PartitionService/Update": true,
"/metalstack.admin.v2.ProjectService/List": true,
+ "/metalstack.admin.v2.SizeReservationService/Create": true,
+ "/metalstack.admin.v2.SizeReservationService/Delete": true,
+ "/metalstack.admin.v2.SizeReservationService/List": true,
+ "/metalstack.admin.v2.SizeReservationService/Update": true,
"/metalstack.admin.v2.SizeService/Create": true,
"/metalstack.admin.v2.SizeService/Delete": true,
"/metalstack.admin.v2.SizeService/Update": true,
@@ -491,6 +514,8 @@ func GetServicePermissions() *ServicePermissions {
"/metalstack.api.v2.ProjectService/RemoveMember": true,
"/metalstack.api.v2.ProjectService/Update": true,
"/metalstack.api.v2.ProjectService/UpdateMember": true,
+ "/metalstack.api.v2.SizeReservationService/Get": true,
+ "/metalstack.api.v2.SizeReservationService/List": true,
},
},
Auditable: map[string]bool{
@@ -518,6 +543,10 @@ func GetServicePermissions() *ServicePermissions {
"/metalstack.admin.v2.PartitionService/Delete": true,
"/metalstack.admin.v2.PartitionService/Update": true,
"/metalstack.admin.v2.ProjectService/List": false,
+ "/metalstack.admin.v2.SizeReservationService/Create": true,
+ "/metalstack.admin.v2.SizeReservationService/Delete": true,
+ "/metalstack.admin.v2.SizeReservationService/List": false,
+ "/metalstack.admin.v2.SizeReservationService/Update": true,
"/metalstack.admin.v2.SizeService/Create": true,
"/metalstack.admin.v2.SizeService/Delete": true,
"/metalstack.admin.v2.SizeService/Update": true,
@@ -580,6 +609,8 @@ func GetServicePermissions() *ServicePermissions {
"/metalstack.api.v2.ProjectService/RemoveMember": true,
"/metalstack.api.v2.ProjectService/Update": true,
"/metalstack.api.v2.ProjectService/UpdateMember": true,
+ "/metalstack.api.v2.SizeReservationService/Get": false,
+ "/metalstack.api.v2.SizeReservationService/List": false,
"/metalstack.api.v2.SizeService/Get": false,
"/metalstack.api.v2.SizeService/List": false,
"/metalstack.api.v2.TenantService/Create": true,
diff --git a/go/tests/mock_clients.go b/go/tests/mock_clients.go
index 54e9e412..ae59a8ab 100755
--- a/go/tests/mock_clients.go
+++ b/go/tests/mock_clients.go
@@ -32,68 +32,72 @@ type (
t *testing.T
}
adminv2 struct {
- filesystemservice *adminv2mocks.FilesystemServiceClient
- imageservice *adminv2mocks.ImageServiceClient
- ipservice *adminv2mocks.IPServiceClient
- machineservice *adminv2mocks.MachineServiceClient
- networkservice *adminv2mocks.NetworkServiceClient
- partitionservice *adminv2mocks.PartitionServiceClient
- projectservice *adminv2mocks.ProjectServiceClient
- sizeservice *adminv2mocks.SizeServiceClient
- switchservice *adminv2mocks.SwitchServiceClient
- taskservice *adminv2mocks.TaskServiceClient
- tenantservice *adminv2mocks.TenantServiceClient
- tokenservice *adminv2mocks.TokenServiceClient
- vpnservice *adminv2mocks.VPNServiceClient
+ filesystemservice *adminv2mocks.FilesystemServiceClient
+ imageservice *adminv2mocks.ImageServiceClient
+ ipservice *adminv2mocks.IPServiceClient
+ machineservice *adminv2mocks.MachineServiceClient
+ networkservice *adminv2mocks.NetworkServiceClient
+ partitionservice *adminv2mocks.PartitionServiceClient
+ projectservice *adminv2mocks.ProjectServiceClient
+ sizeservice *adminv2mocks.SizeServiceClient
+ sizereservationservice *adminv2mocks.SizeReservationServiceClient
+ switchservice *adminv2mocks.SwitchServiceClient
+ taskservice *adminv2mocks.TaskServiceClient
+ tenantservice *adminv2mocks.TenantServiceClient
+ tokenservice *adminv2mocks.TokenServiceClient
+ vpnservice *adminv2mocks.VPNServiceClient
}
Adminv2MockFns struct {
- Filesystem func(m *mock.Mock)
- Image func(m *mock.Mock)
- IP func(m *mock.Mock)
- Machine func(m *mock.Mock)
- Network func(m *mock.Mock)
- Partition func(m *mock.Mock)
- Project func(m *mock.Mock)
- Size func(m *mock.Mock)
- Switch func(m *mock.Mock)
- Task func(m *mock.Mock)
- Tenant func(m *mock.Mock)
- Token func(m *mock.Mock)
- VPN func(m *mock.Mock)
+ Filesystem func(m *mock.Mock)
+ Image func(m *mock.Mock)
+ IP func(m *mock.Mock)
+ Machine func(m *mock.Mock)
+ Network func(m *mock.Mock)
+ Partition func(m *mock.Mock)
+ Project func(m *mock.Mock)
+ Size func(m *mock.Mock)
+ SizeReservation func(m *mock.Mock)
+ Switch func(m *mock.Mock)
+ Task func(m *mock.Mock)
+ Tenant func(m *mock.Mock)
+ Token func(m *mock.Mock)
+ VPN func(m *mock.Mock)
}
apiv2 struct {
- filesystemservice *apiv2mocks.FilesystemServiceClient
- healthservice *apiv2mocks.HealthServiceClient
- imageservice *apiv2mocks.ImageServiceClient
- ipservice *apiv2mocks.IPServiceClient
- machineservice *apiv2mocks.MachineServiceClient
- methodservice *apiv2mocks.MethodServiceClient
- networkservice *apiv2mocks.NetworkServiceClient
- partitionservice *apiv2mocks.PartitionServiceClient
- projectservice *apiv2mocks.ProjectServiceClient
- sizeservice *apiv2mocks.SizeServiceClient
- tenantservice *apiv2mocks.TenantServiceClient
- tokenservice *apiv2mocks.TokenServiceClient
- userservice *apiv2mocks.UserServiceClient
- versionservice *apiv2mocks.VersionServiceClient
+ filesystemservice *apiv2mocks.FilesystemServiceClient
+ healthservice *apiv2mocks.HealthServiceClient
+ imageservice *apiv2mocks.ImageServiceClient
+ ipservice *apiv2mocks.IPServiceClient
+ machineservice *apiv2mocks.MachineServiceClient
+ methodservice *apiv2mocks.MethodServiceClient
+ networkservice *apiv2mocks.NetworkServiceClient
+ partitionservice *apiv2mocks.PartitionServiceClient
+ projectservice *apiv2mocks.ProjectServiceClient
+ sizeservice *apiv2mocks.SizeServiceClient
+ sizereservationservice *apiv2mocks.SizeReservationServiceClient
+ tenantservice *apiv2mocks.TenantServiceClient
+ tokenservice *apiv2mocks.TokenServiceClient
+ userservice *apiv2mocks.UserServiceClient
+ versionservice *apiv2mocks.VersionServiceClient
}
Apiv2MockFns struct {
- Filesystem func(m *mock.Mock)
- Health func(m *mock.Mock)
- Image func(m *mock.Mock)
- IP func(m *mock.Mock)
- Machine func(m *mock.Mock)
- Method func(m *mock.Mock)
- Network func(m *mock.Mock)
- Partition func(m *mock.Mock)
- Project func(m *mock.Mock)
- Size func(m *mock.Mock)
- Tenant func(m *mock.Mock)
- Token func(m *mock.Mock)
- User func(m *mock.Mock)
- Version func(m *mock.Mock)
+ Filesystem func(m *mock.Mock)
+ Health func(m *mock.Mock)
+ Image func(m *mock.Mock)
+ IP func(m *mock.Mock)
+ Machine func(m *mock.Mock)
+ Method func(m *mock.Mock)
+ Network func(m *mock.Mock)
+ Partition func(m *mock.Mock)
+ Project func(m *mock.Mock)
+ Size func(m *mock.Mock)
+ SizeReservation func(m *mock.Mock)
+ Tenant func(m *mock.Mock)
+ Token func(m *mock.Mock)
+ User func(m *mock.Mock)
+ Version func(m *mock.Mock)
}
infrav2 struct {
bmcservice *infrav2mocks.BMCServiceClient
@@ -138,19 +142,20 @@ func (w wrapper) Adminv2(fns *Adminv2MockFns) *adminv2 {
func newadminv2(t *testing.T, fns *Adminv2MockFns) *adminv2 {
a := &adminv2{
- filesystemservice: adminv2mocks.NewFilesystemServiceClient(t),
- imageservice: adminv2mocks.NewImageServiceClient(t),
- ipservice: adminv2mocks.NewIPServiceClient(t),
- machineservice: adminv2mocks.NewMachineServiceClient(t),
- networkservice: adminv2mocks.NewNetworkServiceClient(t),
- partitionservice: adminv2mocks.NewPartitionServiceClient(t),
- projectservice: adminv2mocks.NewProjectServiceClient(t),
- sizeservice: adminv2mocks.NewSizeServiceClient(t),
- switchservice: adminv2mocks.NewSwitchServiceClient(t),
- taskservice: adminv2mocks.NewTaskServiceClient(t),
- tenantservice: adminv2mocks.NewTenantServiceClient(t),
- tokenservice: adminv2mocks.NewTokenServiceClient(t),
- vpnservice: adminv2mocks.NewVPNServiceClient(t),
+ filesystemservice: adminv2mocks.NewFilesystemServiceClient(t),
+ imageservice: adminv2mocks.NewImageServiceClient(t),
+ ipservice: adminv2mocks.NewIPServiceClient(t),
+ machineservice: adminv2mocks.NewMachineServiceClient(t),
+ networkservice: adminv2mocks.NewNetworkServiceClient(t),
+ partitionservice: adminv2mocks.NewPartitionServiceClient(t),
+ projectservice: adminv2mocks.NewProjectServiceClient(t),
+ sizeservice: adminv2mocks.NewSizeServiceClient(t),
+ sizereservationservice: adminv2mocks.NewSizeReservationServiceClient(t),
+ switchservice: adminv2mocks.NewSwitchServiceClient(t),
+ taskservice: adminv2mocks.NewTaskServiceClient(t),
+ tenantservice: adminv2mocks.NewTenantServiceClient(t),
+ tokenservice: adminv2mocks.NewTokenServiceClient(t),
+ vpnservice: adminv2mocks.NewVPNServiceClient(t),
}
if fns != nil {
@@ -178,6 +183,9 @@ func newadminv2(t *testing.T, fns *Adminv2MockFns) *adminv2 {
if fns.Size != nil {
fns.Size(&a.sizeservice.Mock)
}
+ if fns.SizeReservation != nil {
+ fns.SizeReservation(&a.sizereservationservice.Mock)
+ }
if fns.Switch != nil {
fns.Switch(&a.switchservice.Mock)
}
@@ -223,6 +231,9 @@ func (c *adminv2) Project() adminv2connect.ProjectServiceClient {
func (c *adminv2) Size() adminv2connect.SizeServiceClient {
return c.sizeservice
}
+func (c *adminv2) SizeReservation() adminv2connect.SizeReservationServiceClient {
+ return c.sizereservationservice
+}
func (c *adminv2) Switch() adminv2connect.SwitchServiceClient {
return c.switchservice
}
@@ -245,20 +256,21 @@ func (w wrapper) Apiv2(fns *Apiv2MockFns) *apiv2 {
func newapiv2(t *testing.T, fns *Apiv2MockFns) *apiv2 {
a := &apiv2{
- filesystemservice: apiv2mocks.NewFilesystemServiceClient(t),
- healthservice: apiv2mocks.NewHealthServiceClient(t),
- imageservice: apiv2mocks.NewImageServiceClient(t),
- ipservice: apiv2mocks.NewIPServiceClient(t),
- machineservice: apiv2mocks.NewMachineServiceClient(t),
- methodservice: apiv2mocks.NewMethodServiceClient(t),
- networkservice: apiv2mocks.NewNetworkServiceClient(t),
- partitionservice: apiv2mocks.NewPartitionServiceClient(t),
- projectservice: apiv2mocks.NewProjectServiceClient(t),
- sizeservice: apiv2mocks.NewSizeServiceClient(t),
- tenantservice: apiv2mocks.NewTenantServiceClient(t),
- tokenservice: apiv2mocks.NewTokenServiceClient(t),
- userservice: apiv2mocks.NewUserServiceClient(t),
- versionservice: apiv2mocks.NewVersionServiceClient(t),
+ filesystemservice: apiv2mocks.NewFilesystemServiceClient(t),
+ healthservice: apiv2mocks.NewHealthServiceClient(t),
+ imageservice: apiv2mocks.NewImageServiceClient(t),
+ ipservice: apiv2mocks.NewIPServiceClient(t),
+ machineservice: apiv2mocks.NewMachineServiceClient(t),
+ methodservice: apiv2mocks.NewMethodServiceClient(t),
+ networkservice: apiv2mocks.NewNetworkServiceClient(t),
+ partitionservice: apiv2mocks.NewPartitionServiceClient(t),
+ projectservice: apiv2mocks.NewProjectServiceClient(t),
+ sizeservice: apiv2mocks.NewSizeServiceClient(t),
+ sizereservationservice: apiv2mocks.NewSizeReservationServiceClient(t),
+ tenantservice: apiv2mocks.NewTenantServiceClient(t),
+ tokenservice: apiv2mocks.NewTokenServiceClient(t),
+ userservice: apiv2mocks.NewUserServiceClient(t),
+ versionservice: apiv2mocks.NewVersionServiceClient(t),
}
if fns != nil {
@@ -292,6 +304,9 @@ func newapiv2(t *testing.T, fns *Apiv2MockFns) *apiv2 {
if fns.Size != nil {
fns.Size(&a.sizeservice.Mock)
}
+ if fns.SizeReservation != nil {
+ fns.SizeReservation(&a.sizereservationservice.Mock)
+ }
if fns.Tenant != nil {
fns.Tenant(&a.tenantservice.Mock)
}
@@ -340,6 +355,9 @@ func (c *apiv2) Project() apiv2connect.ProjectServiceClient {
func (c *apiv2) Size() apiv2connect.SizeServiceClient {
return c.sizeservice
}
+func (c *apiv2) SizeReservation() apiv2connect.SizeReservationServiceClient {
+ return c.sizereservationservice
+}
func (c *apiv2) Tenant() apiv2connect.TenantServiceClient {
return c.tenantservice
}
diff --git a/go/tests/mocks/client/Adminv2.go b/go/tests/mocks/client/Adminv2.go
index 686385d9..43fdda69 100644
--- a/go/tests/mocks/client/Adminv2.go
+++ b/go/tests/mocks/client/Adminv2.go
@@ -404,6 +404,52 @@ func (_c *Adminv2_Size_Call) RunAndReturn(run func() adminv2connect.SizeServiceC
return _c
}
+// SizeReservation provides a mock function for the type Adminv2
+func (_mock *Adminv2) SizeReservation() adminv2connect.SizeReservationServiceClient {
+ ret := _mock.Called()
+
+ if len(ret) == 0 {
+ panic("no return value specified for SizeReservation")
+ }
+
+ var r0 adminv2connect.SizeReservationServiceClient
+ if returnFunc, ok := ret.Get(0).(func() adminv2connect.SizeReservationServiceClient); ok {
+ r0 = returnFunc()
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(adminv2connect.SizeReservationServiceClient)
+ }
+ }
+ return r0
+}
+
+// Adminv2_SizeReservation_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SizeReservation'
+type Adminv2_SizeReservation_Call struct {
+ *mock.Call
+}
+
+// SizeReservation is a helper method to define mock.On call
+func (_e *Adminv2_Expecter) SizeReservation() *Adminv2_SizeReservation_Call {
+ return &Adminv2_SizeReservation_Call{Call: _e.mock.On("SizeReservation")}
+}
+
+func (_c *Adminv2_SizeReservation_Call) Run(run func()) *Adminv2_SizeReservation_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run()
+ })
+ return _c
+}
+
+func (_c *Adminv2_SizeReservation_Call) Return(sizeReservationServiceClient adminv2connect.SizeReservationServiceClient) *Adminv2_SizeReservation_Call {
+ _c.Call.Return(sizeReservationServiceClient)
+ return _c
+}
+
+func (_c *Adminv2_SizeReservation_Call) RunAndReturn(run func() adminv2connect.SizeReservationServiceClient) *Adminv2_SizeReservation_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
// Switch provides a mock function for the type Adminv2
func (_mock *Adminv2) Switch() adminv2connect.SwitchServiceClient {
ret := _mock.Called()
diff --git a/go/tests/mocks/client/Apiv2.go b/go/tests/mocks/client/Apiv2.go
index f893ecaf..b637cb87 100644
--- a/go/tests/mocks/client/Apiv2.go
+++ b/go/tests/mocks/client/Apiv2.go
@@ -496,6 +496,52 @@ func (_c *Apiv2_Size_Call) RunAndReturn(run func() apiv2connect.SizeServiceClien
return _c
}
+// SizeReservation provides a mock function for the type Apiv2
+func (_mock *Apiv2) SizeReservation() apiv2connect.SizeReservationServiceClient {
+ ret := _mock.Called()
+
+ if len(ret) == 0 {
+ panic("no return value specified for SizeReservation")
+ }
+
+ var r0 apiv2connect.SizeReservationServiceClient
+ if returnFunc, ok := ret.Get(0).(func() apiv2connect.SizeReservationServiceClient); ok {
+ r0 = returnFunc()
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(apiv2connect.SizeReservationServiceClient)
+ }
+ }
+ return r0
+}
+
+// Apiv2_SizeReservation_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SizeReservation'
+type Apiv2_SizeReservation_Call struct {
+ *mock.Call
+}
+
+// SizeReservation is a helper method to define mock.On call
+func (_e *Apiv2_Expecter) SizeReservation() *Apiv2_SizeReservation_Call {
+ return &Apiv2_SizeReservation_Call{Call: _e.mock.On("SizeReservation")}
+}
+
+func (_c *Apiv2_SizeReservation_Call) Run(run func()) *Apiv2_SizeReservation_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run()
+ })
+ return _c
+}
+
+func (_c *Apiv2_SizeReservation_Call) Return(sizeReservationServiceClient apiv2connect.SizeReservationServiceClient) *Apiv2_SizeReservation_Call {
+ _c.Call.Return(sizeReservationServiceClient)
+ return _c
+}
+
+func (_c *Apiv2_SizeReservation_Call) RunAndReturn(run func() apiv2connect.SizeReservationServiceClient) *Apiv2_SizeReservation_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
// Tenant provides a mock function for the type Apiv2
func (_mock *Apiv2) Tenant() apiv2connect.TenantServiceClient {
ret := _mock.Called()
diff --git a/go/tests/mocks/metalstack/admin/v2/adminv2connect/SizeReservationServiceClient.go b/go/tests/mocks/metalstack/admin/v2/adminv2connect/SizeReservationServiceClient.go
new file mode 100644
index 00000000..88638e99
--- /dev/null
+++ b/go/tests/mocks/metalstack/admin/v2/adminv2connect/SizeReservationServiceClient.go
@@ -0,0 +1,311 @@
+// Code generated by mockery; DO NOT EDIT.
+// github.com/vektra/mockery
+// template: testify
+
+package adminv2connect
+
+import (
+ "context"
+
+ "github.com/metal-stack/api/go/metalstack/admin/v2"
+ mock "github.com/stretchr/testify/mock"
+)
+
+// NewSizeReservationServiceClient creates a new instance of SizeReservationServiceClient. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
+// The first argument is typically a *testing.T value.
+func NewSizeReservationServiceClient(t interface {
+ mock.TestingT
+ Cleanup(func())
+}) *SizeReservationServiceClient {
+ mock := &SizeReservationServiceClient{}
+ mock.Mock.Test(t)
+
+ t.Cleanup(func() { mock.AssertExpectations(t) })
+
+ return mock
+}
+
+// SizeReservationServiceClient is an autogenerated mock type for the SizeReservationServiceClient type
+type SizeReservationServiceClient struct {
+ mock.Mock
+}
+
+type SizeReservationServiceClient_Expecter struct {
+ mock *mock.Mock
+}
+
+func (_m *SizeReservationServiceClient) EXPECT() *SizeReservationServiceClient_Expecter {
+ return &SizeReservationServiceClient_Expecter{mock: &_m.Mock}
+}
+
+// Create provides a mock function for the type SizeReservationServiceClient
+func (_mock *SizeReservationServiceClient) Create(context1 context.Context, sizeReservationServiceCreateRequest *adminv2.SizeReservationServiceCreateRequest) (*adminv2.SizeReservationServiceCreateResponse, error) {
+ ret := _mock.Called(context1, sizeReservationServiceCreateRequest)
+
+ if len(ret) == 0 {
+ panic("no return value specified for Create")
+ }
+
+ var r0 *adminv2.SizeReservationServiceCreateResponse
+ var r1 error
+ if returnFunc, ok := ret.Get(0).(func(context.Context, *adminv2.SizeReservationServiceCreateRequest) (*adminv2.SizeReservationServiceCreateResponse, error)); ok {
+ return returnFunc(context1, sizeReservationServiceCreateRequest)
+ }
+ if returnFunc, ok := ret.Get(0).(func(context.Context, *adminv2.SizeReservationServiceCreateRequest) *adminv2.SizeReservationServiceCreateResponse); ok {
+ r0 = returnFunc(context1, sizeReservationServiceCreateRequest)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*adminv2.SizeReservationServiceCreateResponse)
+ }
+ }
+ if returnFunc, ok := ret.Get(1).(func(context.Context, *adminv2.SizeReservationServiceCreateRequest) error); ok {
+ r1 = returnFunc(context1, sizeReservationServiceCreateRequest)
+ } else {
+ r1 = ret.Error(1)
+ }
+ return r0, r1
+}
+
+// SizeReservationServiceClient_Create_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Create'
+type SizeReservationServiceClient_Create_Call struct {
+ *mock.Call
+}
+
+// Create is a helper method to define mock.On call
+// - context1 context.Context
+// - sizeReservationServiceCreateRequest *adminv2.SizeReservationServiceCreateRequest
+func (_e *SizeReservationServiceClient_Expecter) Create(context1 interface{}, sizeReservationServiceCreateRequest interface{}) *SizeReservationServiceClient_Create_Call {
+ return &SizeReservationServiceClient_Create_Call{Call: _e.mock.On("Create", context1, sizeReservationServiceCreateRequest)}
+}
+
+func (_c *SizeReservationServiceClient_Create_Call) Run(run func(context1 context.Context, sizeReservationServiceCreateRequest *adminv2.SizeReservationServiceCreateRequest)) *SizeReservationServiceClient_Create_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ var arg0 context.Context
+ if args[0] != nil {
+ arg0 = args[0].(context.Context)
+ }
+ var arg1 *adminv2.SizeReservationServiceCreateRequest
+ if args[1] != nil {
+ arg1 = args[1].(*adminv2.SizeReservationServiceCreateRequest)
+ }
+ run(
+ arg0,
+ arg1,
+ )
+ })
+ return _c
+}
+
+func (_c *SizeReservationServiceClient_Create_Call) Return(sizeReservationServiceCreateResponse *adminv2.SizeReservationServiceCreateResponse, err error) *SizeReservationServiceClient_Create_Call {
+ _c.Call.Return(sizeReservationServiceCreateResponse, err)
+ return _c
+}
+
+func (_c *SizeReservationServiceClient_Create_Call) RunAndReturn(run func(context1 context.Context, sizeReservationServiceCreateRequest *adminv2.SizeReservationServiceCreateRequest) (*adminv2.SizeReservationServiceCreateResponse, error)) *SizeReservationServiceClient_Create_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// Delete provides a mock function for the type SizeReservationServiceClient
+func (_mock *SizeReservationServiceClient) Delete(context1 context.Context, sizeReservationServiceDeleteRequest *adminv2.SizeReservationServiceDeleteRequest) (*adminv2.SizeReservationServiceDeleteResponse, error) {
+ ret := _mock.Called(context1, sizeReservationServiceDeleteRequest)
+
+ if len(ret) == 0 {
+ panic("no return value specified for Delete")
+ }
+
+ var r0 *adminv2.SizeReservationServiceDeleteResponse
+ var r1 error
+ if returnFunc, ok := ret.Get(0).(func(context.Context, *adminv2.SizeReservationServiceDeleteRequest) (*adminv2.SizeReservationServiceDeleteResponse, error)); ok {
+ return returnFunc(context1, sizeReservationServiceDeleteRequest)
+ }
+ if returnFunc, ok := ret.Get(0).(func(context.Context, *adminv2.SizeReservationServiceDeleteRequest) *adminv2.SizeReservationServiceDeleteResponse); ok {
+ r0 = returnFunc(context1, sizeReservationServiceDeleteRequest)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*adminv2.SizeReservationServiceDeleteResponse)
+ }
+ }
+ if returnFunc, ok := ret.Get(1).(func(context.Context, *adminv2.SizeReservationServiceDeleteRequest) error); ok {
+ r1 = returnFunc(context1, sizeReservationServiceDeleteRequest)
+ } else {
+ r1 = ret.Error(1)
+ }
+ return r0, r1
+}
+
+// SizeReservationServiceClient_Delete_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Delete'
+type SizeReservationServiceClient_Delete_Call struct {
+ *mock.Call
+}
+
+// Delete is a helper method to define mock.On call
+// - context1 context.Context
+// - sizeReservationServiceDeleteRequest *adminv2.SizeReservationServiceDeleteRequest
+func (_e *SizeReservationServiceClient_Expecter) Delete(context1 interface{}, sizeReservationServiceDeleteRequest interface{}) *SizeReservationServiceClient_Delete_Call {
+ return &SizeReservationServiceClient_Delete_Call{Call: _e.mock.On("Delete", context1, sizeReservationServiceDeleteRequest)}
+}
+
+func (_c *SizeReservationServiceClient_Delete_Call) Run(run func(context1 context.Context, sizeReservationServiceDeleteRequest *adminv2.SizeReservationServiceDeleteRequest)) *SizeReservationServiceClient_Delete_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ var arg0 context.Context
+ if args[0] != nil {
+ arg0 = args[0].(context.Context)
+ }
+ var arg1 *adminv2.SizeReservationServiceDeleteRequest
+ if args[1] != nil {
+ arg1 = args[1].(*adminv2.SizeReservationServiceDeleteRequest)
+ }
+ run(
+ arg0,
+ arg1,
+ )
+ })
+ return _c
+}
+
+func (_c *SizeReservationServiceClient_Delete_Call) Return(sizeReservationServiceDeleteResponse *adminv2.SizeReservationServiceDeleteResponse, err error) *SizeReservationServiceClient_Delete_Call {
+ _c.Call.Return(sizeReservationServiceDeleteResponse, err)
+ return _c
+}
+
+func (_c *SizeReservationServiceClient_Delete_Call) RunAndReturn(run func(context1 context.Context, sizeReservationServiceDeleteRequest *adminv2.SizeReservationServiceDeleteRequest) (*adminv2.SizeReservationServiceDeleteResponse, error)) *SizeReservationServiceClient_Delete_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// List provides a mock function for the type SizeReservationServiceClient
+func (_mock *SizeReservationServiceClient) List(context1 context.Context, sizeReservationServiceListRequest *adminv2.SizeReservationServiceListRequest) (*adminv2.SizeReservationServiceListResponse, error) {
+ ret := _mock.Called(context1, sizeReservationServiceListRequest)
+
+ if len(ret) == 0 {
+ panic("no return value specified for List")
+ }
+
+ var r0 *adminv2.SizeReservationServiceListResponse
+ var r1 error
+ if returnFunc, ok := ret.Get(0).(func(context.Context, *adminv2.SizeReservationServiceListRequest) (*adminv2.SizeReservationServiceListResponse, error)); ok {
+ return returnFunc(context1, sizeReservationServiceListRequest)
+ }
+ if returnFunc, ok := ret.Get(0).(func(context.Context, *adminv2.SizeReservationServiceListRequest) *adminv2.SizeReservationServiceListResponse); ok {
+ r0 = returnFunc(context1, sizeReservationServiceListRequest)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*adminv2.SizeReservationServiceListResponse)
+ }
+ }
+ if returnFunc, ok := ret.Get(1).(func(context.Context, *adminv2.SizeReservationServiceListRequest) error); ok {
+ r1 = returnFunc(context1, sizeReservationServiceListRequest)
+ } else {
+ r1 = ret.Error(1)
+ }
+ return r0, r1
+}
+
+// SizeReservationServiceClient_List_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'List'
+type SizeReservationServiceClient_List_Call struct {
+ *mock.Call
+}
+
+// List is a helper method to define mock.On call
+// - context1 context.Context
+// - sizeReservationServiceListRequest *adminv2.SizeReservationServiceListRequest
+func (_e *SizeReservationServiceClient_Expecter) List(context1 interface{}, sizeReservationServiceListRequest interface{}) *SizeReservationServiceClient_List_Call {
+ return &SizeReservationServiceClient_List_Call{Call: _e.mock.On("List", context1, sizeReservationServiceListRequest)}
+}
+
+func (_c *SizeReservationServiceClient_List_Call) Run(run func(context1 context.Context, sizeReservationServiceListRequest *adminv2.SizeReservationServiceListRequest)) *SizeReservationServiceClient_List_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ var arg0 context.Context
+ if args[0] != nil {
+ arg0 = args[0].(context.Context)
+ }
+ var arg1 *adminv2.SizeReservationServiceListRequest
+ if args[1] != nil {
+ arg1 = args[1].(*adminv2.SizeReservationServiceListRequest)
+ }
+ run(
+ arg0,
+ arg1,
+ )
+ })
+ return _c
+}
+
+func (_c *SizeReservationServiceClient_List_Call) Return(sizeReservationServiceListResponse *adminv2.SizeReservationServiceListResponse, err error) *SizeReservationServiceClient_List_Call {
+ _c.Call.Return(sizeReservationServiceListResponse, err)
+ return _c
+}
+
+func (_c *SizeReservationServiceClient_List_Call) RunAndReturn(run func(context1 context.Context, sizeReservationServiceListRequest *adminv2.SizeReservationServiceListRequest) (*adminv2.SizeReservationServiceListResponse, error)) *SizeReservationServiceClient_List_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// Update provides a mock function for the type SizeReservationServiceClient
+func (_mock *SizeReservationServiceClient) Update(context1 context.Context, sizeReservationServiceUpdateRequest *adminv2.SizeReservationServiceUpdateRequest) (*adminv2.SizeReservationServiceUpdateResponse, error) {
+ ret := _mock.Called(context1, sizeReservationServiceUpdateRequest)
+
+ if len(ret) == 0 {
+ panic("no return value specified for Update")
+ }
+
+ var r0 *adminv2.SizeReservationServiceUpdateResponse
+ var r1 error
+ if returnFunc, ok := ret.Get(0).(func(context.Context, *adminv2.SizeReservationServiceUpdateRequest) (*adminv2.SizeReservationServiceUpdateResponse, error)); ok {
+ return returnFunc(context1, sizeReservationServiceUpdateRequest)
+ }
+ if returnFunc, ok := ret.Get(0).(func(context.Context, *adminv2.SizeReservationServiceUpdateRequest) *adminv2.SizeReservationServiceUpdateResponse); ok {
+ r0 = returnFunc(context1, sizeReservationServiceUpdateRequest)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*adminv2.SizeReservationServiceUpdateResponse)
+ }
+ }
+ if returnFunc, ok := ret.Get(1).(func(context.Context, *adminv2.SizeReservationServiceUpdateRequest) error); ok {
+ r1 = returnFunc(context1, sizeReservationServiceUpdateRequest)
+ } else {
+ r1 = ret.Error(1)
+ }
+ return r0, r1
+}
+
+// SizeReservationServiceClient_Update_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Update'
+type SizeReservationServiceClient_Update_Call struct {
+ *mock.Call
+}
+
+// Update is a helper method to define mock.On call
+// - context1 context.Context
+// - sizeReservationServiceUpdateRequest *adminv2.SizeReservationServiceUpdateRequest
+func (_e *SizeReservationServiceClient_Expecter) Update(context1 interface{}, sizeReservationServiceUpdateRequest interface{}) *SizeReservationServiceClient_Update_Call {
+ return &SizeReservationServiceClient_Update_Call{Call: _e.mock.On("Update", context1, sizeReservationServiceUpdateRequest)}
+}
+
+func (_c *SizeReservationServiceClient_Update_Call) Run(run func(context1 context.Context, sizeReservationServiceUpdateRequest *adminv2.SizeReservationServiceUpdateRequest)) *SizeReservationServiceClient_Update_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ var arg0 context.Context
+ if args[0] != nil {
+ arg0 = args[0].(context.Context)
+ }
+ var arg1 *adminv2.SizeReservationServiceUpdateRequest
+ if args[1] != nil {
+ arg1 = args[1].(*adminv2.SizeReservationServiceUpdateRequest)
+ }
+ run(
+ arg0,
+ arg1,
+ )
+ })
+ return _c
+}
+
+func (_c *SizeReservationServiceClient_Update_Call) Return(sizeReservationServiceUpdateResponse *adminv2.SizeReservationServiceUpdateResponse, err error) *SizeReservationServiceClient_Update_Call {
+ _c.Call.Return(sizeReservationServiceUpdateResponse, err)
+ return _c
+}
+
+func (_c *SizeReservationServiceClient_Update_Call) RunAndReturn(run func(context1 context.Context, sizeReservationServiceUpdateRequest *adminv2.SizeReservationServiceUpdateRequest) (*adminv2.SizeReservationServiceUpdateResponse, error)) *SizeReservationServiceClient_Update_Call {
+ _c.Call.Return(run)
+ return _c
+}
diff --git a/go/tests/mocks/metalstack/admin/v2/adminv2connect/SizeReservationServiceHandler.go b/go/tests/mocks/metalstack/admin/v2/adminv2connect/SizeReservationServiceHandler.go
new file mode 100644
index 00000000..81d22373
--- /dev/null
+++ b/go/tests/mocks/metalstack/admin/v2/adminv2connect/SizeReservationServiceHandler.go
@@ -0,0 +1,311 @@
+// Code generated by mockery; DO NOT EDIT.
+// github.com/vektra/mockery
+// template: testify
+
+package adminv2connect
+
+import (
+ "context"
+
+ "github.com/metal-stack/api/go/metalstack/admin/v2"
+ mock "github.com/stretchr/testify/mock"
+)
+
+// NewSizeReservationServiceHandler creates a new instance of SizeReservationServiceHandler. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
+// The first argument is typically a *testing.T value.
+func NewSizeReservationServiceHandler(t interface {
+ mock.TestingT
+ Cleanup(func())
+}) *SizeReservationServiceHandler {
+ mock := &SizeReservationServiceHandler{}
+ mock.Mock.Test(t)
+
+ t.Cleanup(func() { mock.AssertExpectations(t) })
+
+ return mock
+}
+
+// SizeReservationServiceHandler is an autogenerated mock type for the SizeReservationServiceHandler type
+type SizeReservationServiceHandler struct {
+ mock.Mock
+}
+
+type SizeReservationServiceHandler_Expecter struct {
+ mock *mock.Mock
+}
+
+func (_m *SizeReservationServiceHandler) EXPECT() *SizeReservationServiceHandler_Expecter {
+ return &SizeReservationServiceHandler_Expecter{mock: &_m.Mock}
+}
+
+// Create provides a mock function for the type SizeReservationServiceHandler
+func (_mock *SizeReservationServiceHandler) Create(context1 context.Context, sizeReservationServiceCreateRequest *adminv2.SizeReservationServiceCreateRequest) (*adminv2.SizeReservationServiceCreateResponse, error) {
+ ret := _mock.Called(context1, sizeReservationServiceCreateRequest)
+
+ if len(ret) == 0 {
+ panic("no return value specified for Create")
+ }
+
+ var r0 *adminv2.SizeReservationServiceCreateResponse
+ var r1 error
+ if returnFunc, ok := ret.Get(0).(func(context.Context, *adminv2.SizeReservationServiceCreateRequest) (*adminv2.SizeReservationServiceCreateResponse, error)); ok {
+ return returnFunc(context1, sizeReservationServiceCreateRequest)
+ }
+ if returnFunc, ok := ret.Get(0).(func(context.Context, *adminv2.SizeReservationServiceCreateRequest) *adminv2.SizeReservationServiceCreateResponse); ok {
+ r0 = returnFunc(context1, sizeReservationServiceCreateRequest)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*adminv2.SizeReservationServiceCreateResponse)
+ }
+ }
+ if returnFunc, ok := ret.Get(1).(func(context.Context, *adminv2.SizeReservationServiceCreateRequest) error); ok {
+ r1 = returnFunc(context1, sizeReservationServiceCreateRequest)
+ } else {
+ r1 = ret.Error(1)
+ }
+ return r0, r1
+}
+
+// SizeReservationServiceHandler_Create_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Create'
+type SizeReservationServiceHandler_Create_Call struct {
+ *mock.Call
+}
+
+// Create is a helper method to define mock.On call
+// - context1 context.Context
+// - sizeReservationServiceCreateRequest *adminv2.SizeReservationServiceCreateRequest
+func (_e *SizeReservationServiceHandler_Expecter) Create(context1 interface{}, sizeReservationServiceCreateRequest interface{}) *SizeReservationServiceHandler_Create_Call {
+ return &SizeReservationServiceHandler_Create_Call{Call: _e.mock.On("Create", context1, sizeReservationServiceCreateRequest)}
+}
+
+func (_c *SizeReservationServiceHandler_Create_Call) Run(run func(context1 context.Context, sizeReservationServiceCreateRequest *adminv2.SizeReservationServiceCreateRequest)) *SizeReservationServiceHandler_Create_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ var arg0 context.Context
+ if args[0] != nil {
+ arg0 = args[0].(context.Context)
+ }
+ var arg1 *adminv2.SizeReservationServiceCreateRequest
+ if args[1] != nil {
+ arg1 = args[1].(*adminv2.SizeReservationServiceCreateRequest)
+ }
+ run(
+ arg0,
+ arg1,
+ )
+ })
+ return _c
+}
+
+func (_c *SizeReservationServiceHandler_Create_Call) Return(sizeReservationServiceCreateResponse *adminv2.SizeReservationServiceCreateResponse, err error) *SizeReservationServiceHandler_Create_Call {
+ _c.Call.Return(sizeReservationServiceCreateResponse, err)
+ return _c
+}
+
+func (_c *SizeReservationServiceHandler_Create_Call) RunAndReturn(run func(context1 context.Context, sizeReservationServiceCreateRequest *adminv2.SizeReservationServiceCreateRequest) (*adminv2.SizeReservationServiceCreateResponse, error)) *SizeReservationServiceHandler_Create_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// Delete provides a mock function for the type SizeReservationServiceHandler
+func (_mock *SizeReservationServiceHandler) Delete(context1 context.Context, sizeReservationServiceDeleteRequest *adminv2.SizeReservationServiceDeleteRequest) (*adminv2.SizeReservationServiceDeleteResponse, error) {
+ ret := _mock.Called(context1, sizeReservationServiceDeleteRequest)
+
+ if len(ret) == 0 {
+ panic("no return value specified for Delete")
+ }
+
+ var r0 *adminv2.SizeReservationServiceDeleteResponse
+ var r1 error
+ if returnFunc, ok := ret.Get(0).(func(context.Context, *adminv2.SizeReservationServiceDeleteRequest) (*adminv2.SizeReservationServiceDeleteResponse, error)); ok {
+ return returnFunc(context1, sizeReservationServiceDeleteRequest)
+ }
+ if returnFunc, ok := ret.Get(0).(func(context.Context, *adminv2.SizeReservationServiceDeleteRequest) *adminv2.SizeReservationServiceDeleteResponse); ok {
+ r0 = returnFunc(context1, sizeReservationServiceDeleteRequest)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*adminv2.SizeReservationServiceDeleteResponse)
+ }
+ }
+ if returnFunc, ok := ret.Get(1).(func(context.Context, *adminv2.SizeReservationServiceDeleteRequest) error); ok {
+ r1 = returnFunc(context1, sizeReservationServiceDeleteRequest)
+ } else {
+ r1 = ret.Error(1)
+ }
+ return r0, r1
+}
+
+// SizeReservationServiceHandler_Delete_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Delete'
+type SizeReservationServiceHandler_Delete_Call struct {
+ *mock.Call
+}
+
+// Delete is a helper method to define mock.On call
+// - context1 context.Context
+// - sizeReservationServiceDeleteRequest *adminv2.SizeReservationServiceDeleteRequest
+func (_e *SizeReservationServiceHandler_Expecter) Delete(context1 interface{}, sizeReservationServiceDeleteRequest interface{}) *SizeReservationServiceHandler_Delete_Call {
+ return &SizeReservationServiceHandler_Delete_Call{Call: _e.mock.On("Delete", context1, sizeReservationServiceDeleteRequest)}
+}
+
+func (_c *SizeReservationServiceHandler_Delete_Call) Run(run func(context1 context.Context, sizeReservationServiceDeleteRequest *adminv2.SizeReservationServiceDeleteRequest)) *SizeReservationServiceHandler_Delete_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ var arg0 context.Context
+ if args[0] != nil {
+ arg0 = args[0].(context.Context)
+ }
+ var arg1 *adminv2.SizeReservationServiceDeleteRequest
+ if args[1] != nil {
+ arg1 = args[1].(*adminv2.SizeReservationServiceDeleteRequest)
+ }
+ run(
+ arg0,
+ arg1,
+ )
+ })
+ return _c
+}
+
+func (_c *SizeReservationServiceHandler_Delete_Call) Return(sizeReservationServiceDeleteResponse *adminv2.SizeReservationServiceDeleteResponse, err error) *SizeReservationServiceHandler_Delete_Call {
+ _c.Call.Return(sizeReservationServiceDeleteResponse, err)
+ return _c
+}
+
+func (_c *SizeReservationServiceHandler_Delete_Call) RunAndReturn(run func(context1 context.Context, sizeReservationServiceDeleteRequest *adminv2.SizeReservationServiceDeleteRequest) (*adminv2.SizeReservationServiceDeleteResponse, error)) *SizeReservationServiceHandler_Delete_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// List provides a mock function for the type SizeReservationServiceHandler
+func (_mock *SizeReservationServiceHandler) List(context1 context.Context, sizeReservationServiceListRequest *adminv2.SizeReservationServiceListRequest) (*adminv2.SizeReservationServiceListResponse, error) {
+ ret := _mock.Called(context1, sizeReservationServiceListRequest)
+
+ if len(ret) == 0 {
+ panic("no return value specified for List")
+ }
+
+ var r0 *adminv2.SizeReservationServiceListResponse
+ var r1 error
+ if returnFunc, ok := ret.Get(0).(func(context.Context, *adminv2.SizeReservationServiceListRequest) (*adminv2.SizeReservationServiceListResponse, error)); ok {
+ return returnFunc(context1, sizeReservationServiceListRequest)
+ }
+ if returnFunc, ok := ret.Get(0).(func(context.Context, *adminv2.SizeReservationServiceListRequest) *adminv2.SizeReservationServiceListResponse); ok {
+ r0 = returnFunc(context1, sizeReservationServiceListRequest)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*adminv2.SizeReservationServiceListResponse)
+ }
+ }
+ if returnFunc, ok := ret.Get(1).(func(context.Context, *adminv2.SizeReservationServiceListRequest) error); ok {
+ r1 = returnFunc(context1, sizeReservationServiceListRequest)
+ } else {
+ r1 = ret.Error(1)
+ }
+ return r0, r1
+}
+
+// SizeReservationServiceHandler_List_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'List'
+type SizeReservationServiceHandler_List_Call struct {
+ *mock.Call
+}
+
+// List is a helper method to define mock.On call
+// - context1 context.Context
+// - sizeReservationServiceListRequest *adminv2.SizeReservationServiceListRequest
+func (_e *SizeReservationServiceHandler_Expecter) List(context1 interface{}, sizeReservationServiceListRequest interface{}) *SizeReservationServiceHandler_List_Call {
+ return &SizeReservationServiceHandler_List_Call{Call: _e.mock.On("List", context1, sizeReservationServiceListRequest)}
+}
+
+func (_c *SizeReservationServiceHandler_List_Call) Run(run func(context1 context.Context, sizeReservationServiceListRequest *adminv2.SizeReservationServiceListRequest)) *SizeReservationServiceHandler_List_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ var arg0 context.Context
+ if args[0] != nil {
+ arg0 = args[0].(context.Context)
+ }
+ var arg1 *adminv2.SizeReservationServiceListRequest
+ if args[1] != nil {
+ arg1 = args[1].(*adminv2.SizeReservationServiceListRequest)
+ }
+ run(
+ arg0,
+ arg1,
+ )
+ })
+ return _c
+}
+
+func (_c *SizeReservationServiceHandler_List_Call) Return(sizeReservationServiceListResponse *adminv2.SizeReservationServiceListResponse, err error) *SizeReservationServiceHandler_List_Call {
+ _c.Call.Return(sizeReservationServiceListResponse, err)
+ return _c
+}
+
+func (_c *SizeReservationServiceHandler_List_Call) RunAndReturn(run func(context1 context.Context, sizeReservationServiceListRequest *adminv2.SizeReservationServiceListRequest) (*adminv2.SizeReservationServiceListResponse, error)) *SizeReservationServiceHandler_List_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// Update provides a mock function for the type SizeReservationServiceHandler
+func (_mock *SizeReservationServiceHandler) Update(context1 context.Context, sizeReservationServiceUpdateRequest *adminv2.SizeReservationServiceUpdateRequest) (*adminv2.SizeReservationServiceUpdateResponse, error) {
+ ret := _mock.Called(context1, sizeReservationServiceUpdateRequest)
+
+ if len(ret) == 0 {
+ panic("no return value specified for Update")
+ }
+
+ var r0 *adminv2.SizeReservationServiceUpdateResponse
+ var r1 error
+ if returnFunc, ok := ret.Get(0).(func(context.Context, *adminv2.SizeReservationServiceUpdateRequest) (*adminv2.SizeReservationServiceUpdateResponse, error)); ok {
+ return returnFunc(context1, sizeReservationServiceUpdateRequest)
+ }
+ if returnFunc, ok := ret.Get(0).(func(context.Context, *adminv2.SizeReservationServiceUpdateRequest) *adminv2.SizeReservationServiceUpdateResponse); ok {
+ r0 = returnFunc(context1, sizeReservationServiceUpdateRequest)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*adminv2.SizeReservationServiceUpdateResponse)
+ }
+ }
+ if returnFunc, ok := ret.Get(1).(func(context.Context, *adminv2.SizeReservationServiceUpdateRequest) error); ok {
+ r1 = returnFunc(context1, sizeReservationServiceUpdateRequest)
+ } else {
+ r1 = ret.Error(1)
+ }
+ return r0, r1
+}
+
+// SizeReservationServiceHandler_Update_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Update'
+type SizeReservationServiceHandler_Update_Call struct {
+ *mock.Call
+}
+
+// Update is a helper method to define mock.On call
+// - context1 context.Context
+// - sizeReservationServiceUpdateRequest *adminv2.SizeReservationServiceUpdateRequest
+func (_e *SizeReservationServiceHandler_Expecter) Update(context1 interface{}, sizeReservationServiceUpdateRequest interface{}) *SizeReservationServiceHandler_Update_Call {
+ return &SizeReservationServiceHandler_Update_Call{Call: _e.mock.On("Update", context1, sizeReservationServiceUpdateRequest)}
+}
+
+func (_c *SizeReservationServiceHandler_Update_Call) Run(run func(context1 context.Context, sizeReservationServiceUpdateRequest *adminv2.SizeReservationServiceUpdateRequest)) *SizeReservationServiceHandler_Update_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ var arg0 context.Context
+ if args[0] != nil {
+ arg0 = args[0].(context.Context)
+ }
+ var arg1 *adminv2.SizeReservationServiceUpdateRequest
+ if args[1] != nil {
+ arg1 = args[1].(*adminv2.SizeReservationServiceUpdateRequest)
+ }
+ run(
+ arg0,
+ arg1,
+ )
+ })
+ return _c
+}
+
+func (_c *SizeReservationServiceHandler_Update_Call) Return(sizeReservationServiceUpdateResponse *adminv2.SizeReservationServiceUpdateResponse, err error) *SizeReservationServiceHandler_Update_Call {
+ _c.Call.Return(sizeReservationServiceUpdateResponse, err)
+ return _c
+}
+
+func (_c *SizeReservationServiceHandler_Update_Call) RunAndReturn(run func(context1 context.Context, sizeReservationServiceUpdateRequest *adminv2.SizeReservationServiceUpdateRequest) (*adminv2.SizeReservationServiceUpdateResponse, error)) *SizeReservationServiceHandler_Update_Call {
+ _c.Call.Return(run)
+ return _c
+}
diff --git a/go/tests/mocks/metalstack/api/v2/apiv2connect/SizeReservationServiceClient.go b/go/tests/mocks/metalstack/api/v2/apiv2connect/SizeReservationServiceClient.go
new file mode 100644
index 00000000..e549126b
--- /dev/null
+++ b/go/tests/mocks/metalstack/api/v2/apiv2connect/SizeReservationServiceClient.go
@@ -0,0 +1,175 @@
+// Code generated by mockery; DO NOT EDIT.
+// github.com/vektra/mockery
+// template: testify
+
+package apiv2connect
+
+import (
+ "context"
+
+ "github.com/metal-stack/api/go/metalstack/api/v2"
+ mock "github.com/stretchr/testify/mock"
+)
+
+// NewSizeReservationServiceClient creates a new instance of SizeReservationServiceClient. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
+// The first argument is typically a *testing.T value.
+func NewSizeReservationServiceClient(t interface {
+ mock.TestingT
+ Cleanup(func())
+}) *SizeReservationServiceClient {
+ mock := &SizeReservationServiceClient{}
+ mock.Mock.Test(t)
+
+ t.Cleanup(func() { mock.AssertExpectations(t) })
+
+ return mock
+}
+
+// SizeReservationServiceClient is an autogenerated mock type for the SizeReservationServiceClient type
+type SizeReservationServiceClient struct {
+ mock.Mock
+}
+
+type SizeReservationServiceClient_Expecter struct {
+ mock *mock.Mock
+}
+
+func (_m *SizeReservationServiceClient) EXPECT() *SizeReservationServiceClient_Expecter {
+ return &SizeReservationServiceClient_Expecter{mock: &_m.Mock}
+}
+
+// Get provides a mock function for the type SizeReservationServiceClient
+func (_mock *SizeReservationServiceClient) Get(context1 context.Context, sizeReservationServiceGetRequest *apiv2.SizeReservationServiceGetRequest) (*apiv2.SizeReservationServiceGetResponse, error) {
+ ret := _mock.Called(context1, sizeReservationServiceGetRequest)
+
+ if len(ret) == 0 {
+ panic("no return value specified for Get")
+ }
+
+ var r0 *apiv2.SizeReservationServiceGetResponse
+ var r1 error
+ if returnFunc, ok := ret.Get(0).(func(context.Context, *apiv2.SizeReservationServiceGetRequest) (*apiv2.SizeReservationServiceGetResponse, error)); ok {
+ return returnFunc(context1, sizeReservationServiceGetRequest)
+ }
+ if returnFunc, ok := ret.Get(0).(func(context.Context, *apiv2.SizeReservationServiceGetRequest) *apiv2.SizeReservationServiceGetResponse); ok {
+ r0 = returnFunc(context1, sizeReservationServiceGetRequest)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*apiv2.SizeReservationServiceGetResponse)
+ }
+ }
+ if returnFunc, ok := ret.Get(1).(func(context.Context, *apiv2.SizeReservationServiceGetRequest) error); ok {
+ r1 = returnFunc(context1, sizeReservationServiceGetRequest)
+ } else {
+ r1 = ret.Error(1)
+ }
+ return r0, r1
+}
+
+// SizeReservationServiceClient_Get_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Get'
+type SizeReservationServiceClient_Get_Call struct {
+ *mock.Call
+}
+
+// Get is a helper method to define mock.On call
+// - context1 context.Context
+// - sizeReservationServiceGetRequest *apiv2.SizeReservationServiceGetRequest
+func (_e *SizeReservationServiceClient_Expecter) Get(context1 interface{}, sizeReservationServiceGetRequest interface{}) *SizeReservationServiceClient_Get_Call {
+ return &SizeReservationServiceClient_Get_Call{Call: _e.mock.On("Get", context1, sizeReservationServiceGetRequest)}
+}
+
+func (_c *SizeReservationServiceClient_Get_Call) Run(run func(context1 context.Context, sizeReservationServiceGetRequest *apiv2.SizeReservationServiceGetRequest)) *SizeReservationServiceClient_Get_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ var arg0 context.Context
+ if args[0] != nil {
+ arg0 = args[0].(context.Context)
+ }
+ var arg1 *apiv2.SizeReservationServiceGetRequest
+ if args[1] != nil {
+ arg1 = args[1].(*apiv2.SizeReservationServiceGetRequest)
+ }
+ run(
+ arg0,
+ arg1,
+ )
+ })
+ return _c
+}
+
+func (_c *SizeReservationServiceClient_Get_Call) Return(sizeReservationServiceGetResponse *apiv2.SizeReservationServiceGetResponse, err error) *SizeReservationServiceClient_Get_Call {
+ _c.Call.Return(sizeReservationServiceGetResponse, err)
+ return _c
+}
+
+func (_c *SizeReservationServiceClient_Get_Call) RunAndReturn(run func(context1 context.Context, sizeReservationServiceGetRequest *apiv2.SizeReservationServiceGetRequest) (*apiv2.SizeReservationServiceGetResponse, error)) *SizeReservationServiceClient_Get_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// List provides a mock function for the type SizeReservationServiceClient
+func (_mock *SizeReservationServiceClient) List(context1 context.Context, sizeReservationServiceListRequest *apiv2.SizeReservationServiceListRequest) (*apiv2.SizeReservationServiceListResponse, error) {
+ ret := _mock.Called(context1, sizeReservationServiceListRequest)
+
+ if len(ret) == 0 {
+ panic("no return value specified for List")
+ }
+
+ var r0 *apiv2.SizeReservationServiceListResponse
+ var r1 error
+ if returnFunc, ok := ret.Get(0).(func(context.Context, *apiv2.SizeReservationServiceListRequest) (*apiv2.SizeReservationServiceListResponse, error)); ok {
+ return returnFunc(context1, sizeReservationServiceListRequest)
+ }
+ if returnFunc, ok := ret.Get(0).(func(context.Context, *apiv2.SizeReservationServiceListRequest) *apiv2.SizeReservationServiceListResponse); ok {
+ r0 = returnFunc(context1, sizeReservationServiceListRequest)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*apiv2.SizeReservationServiceListResponse)
+ }
+ }
+ if returnFunc, ok := ret.Get(1).(func(context.Context, *apiv2.SizeReservationServiceListRequest) error); ok {
+ r1 = returnFunc(context1, sizeReservationServiceListRequest)
+ } else {
+ r1 = ret.Error(1)
+ }
+ return r0, r1
+}
+
+// SizeReservationServiceClient_List_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'List'
+type SizeReservationServiceClient_List_Call struct {
+ *mock.Call
+}
+
+// List is a helper method to define mock.On call
+// - context1 context.Context
+// - sizeReservationServiceListRequest *apiv2.SizeReservationServiceListRequest
+func (_e *SizeReservationServiceClient_Expecter) List(context1 interface{}, sizeReservationServiceListRequest interface{}) *SizeReservationServiceClient_List_Call {
+ return &SizeReservationServiceClient_List_Call{Call: _e.mock.On("List", context1, sizeReservationServiceListRequest)}
+}
+
+func (_c *SizeReservationServiceClient_List_Call) Run(run func(context1 context.Context, sizeReservationServiceListRequest *apiv2.SizeReservationServiceListRequest)) *SizeReservationServiceClient_List_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ var arg0 context.Context
+ if args[0] != nil {
+ arg0 = args[0].(context.Context)
+ }
+ var arg1 *apiv2.SizeReservationServiceListRequest
+ if args[1] != nil {
+ arg1 = args[1].(*apiv2.SizeReservationServiceListRequest)
+ }
+ run(
+ arg0,
+ arg1,
+ )
+ })
+ return _c
+}
+
+func (_c *SizeReservationServiceClient_List_Call) Return(sizeReservationServiceListResponse *apiv2.SizeReservationServiceListResponse, err error) *SizeReservationServiceClient_List_Call {
+ _c.Call.Return(sizeReservationServiceListResponse, err)
+ return _c
+}
+
+func (_c *SizeReservationServiceClient_List_Call) RunAndReturn(run func(context1 context.Context, sizeReservationServiceListRequest *apiv2.SizeReservationServiceListRequest) (*apiv2.SizeReservationServiceListResponse, error)) *SizeReservationServiceClient_List_Call {
+ _c.Call.Return(run)
+ return _c
+}
diff --git a/go/tests/mocks/metalstack/api/v2/apiv2connect/SizeReservationServiceHandler.go b/go/tests/mocks/metalstack/api/v2/apiv2connect/SizeReservationServiceHandler.go
new file mode 100644
index 00000000..cd05f59c
--- /dev/null
+++ b/go/tests/mocks/metalstack/api/v2/apiv2connect/SizeReservationServiceHandler.go
@@ -0,0 +1,175 @@
+// Code generated by mockery; DO NOT EDIT.
+// github.com/vektra/mockery
+// template: testify
+
+package apiv2connect
+
+import (
+ "context"
+
+ "github.com/metal-stack/api/go/metalstack/api/v2"
+ mock "github.com/stretchr/testify/mock"
+)
+
+// NewSizeReservationServiceHandler creates a new instance of SizeReservationServiceHandler. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
+// The first argument is typically a *testing.T value.
+func NewSizeReservationServiceHandler(t interface {
+ mock.TestingT
+ Cleanup(func())
+}) *SizeReservationServiceHandler {
+ mock := &SizeReservationServiceHandler{}
+ mock.Mock.Test(t)
+
+ t.Cleanup(func() { mock.AssertExpectations(t) })
+
+ return mock
+}
+
+// SizeReservationServiceHandler is an autogenerated mock type for the SizeReservationServiceHandler type
+type SizeReservationServiceHandler struct {
+ mock.Mock
+}
+
+type SizeReservationServiceHandler_Expecter struct {
+ mock *mock.Mock
+}
+
+func (_m *SizeReservationServiceHandler) EXPECT() *SizeReservationServiceHandler_Expecter {
+ return &SizeReservationServiceHandler_Expecter{mock: &_m.Mock}
+}
+
+// Get provides a mock function for the type SizeReservationServiceHandler
+func (_mock *SizeReservationServiceHandler) Get(context1 context.Context, sizeReservationServiceGetRequest *apiv2.SizeReservationServiceGetRequest) (*apiv2.SizeReservationServiceGetResponse, error) {
+ ret := _mock.Called(context1, sizeReservationServiceGetRequest)
+
+ if len(ret) == 0 {
+ panic("no return value specified for Get")
+ }
+
+ var r0 *apiv2.SizeReservationServiceGetResponse
+ var r1 error
+ if returnFunc, ok := ret.Get(0).(func(context.Context, *apiv2.SizeReservationServiceGetRequest) (*apiv2.SizeReservationServiceGetResponse, error)); ok {
+ return returnFunc(context1, sizeReservationServiceGetRequest)
+ }
+ if returnFunc, ok := ret.Get(0).(func(context.Context, *apiv2.SizeReservationServiceGetRequest) *apiv2.SizeReservationServiceGetResponse); ok {
+ r0 = returnFunc(context1, sizeReservationServiceGetRequest)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*apiv2.SizeReservationServiceGetResponse)
+ }
+ }
+ if returnFunc, ok := ret.Get(1).(func(context.Context, *apiv2.SizeReservationServiceGetRequest) error); ok {
+ r1 = returnFunc(context1, sizeReservationServiceGetRequest)
+ } else {
+ r1 = ret.Error(1)
+ }
+ return r0, r1
+}
+
+// SizeReservationServiceHandler_Get_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Get'
+type SizeReservationServiceHandler_Get_Call struct {
+ *mock.Call
+}
+
+// Get is a helper method to define mock.On call
+// - context1 context.Context
+// - sizeReservationServiceGetRequest *apiv2.SizeReservationServiceGetRequest
+func (_e *SizeReservationServiceHandler_Expecter) Get(context1 interface{}, sizeReservationServiceGetRequest interface{}) *SizeReservationServiceHandler_Get_Call {
+ return &SizeReservationServiceHandler_Get_Call{Call: _e.mock.On("Get", context1, sizeReservationServiceGetRequest)}
+}
+
+func (_c *SizeReservationServiceHandler_Get_Call) Run(run func(context1 context.Context, sizeReservationServiceGetRequest *apiv2.SizeReservationServiceGetRequest)) *SizeReservationServiceHandler_Get_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ var arg0 context.Context
+ if args[0] != nil {
+ arg0 = args[0].(context.Context)
+ }
+ var arg1 *apiv2.SizeReservationServiceGetRequest
+ if args[1] != nil {
+ arg1 = args[1].(*apiv2.SizeReservationServiceGetRequest)
+ }
+ run(
+ arg0,
+ arg1,
+ )
+ })
+ return _c
+}
+
+func (_c *SizeReservationServiceHandler_Get_Call) Return(sizeReservationServiceGetResponse *apiv2.SizeReservationServiceGetResponse, err error) *SizeReservationServiceHandler_Get_Call {
+ _c.Call.Return(sizeReservationServiceGetResponse, err)
+ return _c
+}
+
+func (_c *SizeReservationServiceHandler_Get_Call) RunAndReturn(run func(context1 context.Context, sizeReservationServiceGetRequest *apiv2.SizeReservationServiceGetRequest) (*apiv2.SizeReservationServiceGetResponse, error)) *SizeReservationServiceHandler_Get_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// List provides a mock function for the type SizeReservationServiceHandler
+func (_mock *SizeReservationServiceHandler) List(context1 context.Context, sizeReservationServiceListRequest *apiv2.SizeReservationServiceListRequest) (*apiv2.SizeReservationServiceListResponse, error) {
+ ret := _mock.Called(context1, sizeReservationServiceListRequest)
+
+ if len(ret) == 0 {
+ panic("no return value specified for List")
+ }
+
+ var r0 *apiv2.SizeReservationServiceListResponse
+ var r1 error
+ if returnFunc, ok := ret.Get(0).(func(context.Context, *apiv2.SizeReservationServiceListRequest) (*apiv2.SizeReservationServiceListResponse, error)); ok {
+ return returnFunc(context1, sizeReservationServiceListRequest)
+ }
+ if returnFunc, ok := ret.Get(0).(func(context.Context, *apiv2.SizeReservationServiceListRequest) *apiv2.SizeReservationServiceListResponse); ok {
+ r0 = returnFunc(context1, sizeReservationServiceListRequest)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*apiv2.SizeReservationServiceListResponse)
+ }
+ }
+ if returnFunc, ok := ret.Get(1).(func(context.Context, *apiv2.SizeReservationServiceListRequest) error); ok {
+ r1 = returnFunc(context1, sizeReservationServiceListRequest)
+ } else {
+ r1 = ret.Error(1)
+ }
+ return r0, r1
+}
+
+// SizeReservationServiceHandler_List_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'List'
+type SizeReservationServiceHandler_List_Call struct {
+ *mock.Call
+}
+
+// List is a helper method to define mock.On call
+// - context1 context.Context
+// - sizeReservationServiceListRequest *apiv2.SizeReservationServiceListRequest
+func (_e *SizeReservationServiceHandler_Expecter) List(context1 interface{}, sizeReservationServiceListRequest interface{}) *SizeReservationServiceHandler_List_Call {
+ return &SizeReservationServiceHandler_List_Call{Call: _e.mock.On("List", context1, sizeReservationServiceListRequest)}
+}
+
+func (_c *SizeReservationServiceHandler_List_Call) Run(run func(context1 context.Context, sizeReservationServiceListRequest *apiv2.SizeReservationServiceListRequest)) *SizeReservationServiceHandler_List_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ var arg0 context.Context
+ if args[0] != nil {
+ arg0 = args[0].(context.Context)
+ }
+ var arg1 *apiv2.SizeReservationServiceListRequest
+ if args[1] != nil {
+ arg1 = args[1].(*apiv2.SizeReservationServiceListRequest)
+ }
+ run(
+ arg0,
+ arg1,
+ )
+ })
+ return _c
+}
+
+func (_c *SizeReservationServiceHandler_List_Call) Return(sizeReservationServiceListResponse *apiv2.SizeReservationServiceListResponse, err error) *SizeReservationServiceHandler_List_Call {
+ _c.Call.Return(sizeReservationServiceListResponse, err)
+ return _c
+}
+
+func (_c *SizeReservationServiceHandler_List_Call) RunAndReturn(run func(context1 context.Context, sizeReservationServiceListRequest *apiv2.SizeReservationServiceListRequest) (*apiv2.SizeReservationServiceListResponse, error)) *SizeReservationServiceHandler_List_Call {
+ _c.Call.Return(run)
+ return _c
+}
diff --git a/go/tests/validation/filesystem_test.go b/go/tests/validation/filesystem_test.go
index 3cdd0a97..57c0fd1a 100644
--- a/go/tests/validation/filesystem_test.go
+++ b/go/tests/validation/filesystem_test.go
@@ -26,7 +26,7 @@ func TestValidateFilesystem(t *testing.T) {
},
wantErr: true,
wantErrorMessage: `validation errors:
- - device: value length must be at least 2 characters
+ - device: must be within 2 and 128 characters
- format: value is required`,
},
{
diff --git a/go/tests/validation/ip_test.go b/go/tests/validation/ip_test.go
index c405e88c..303d1548 100644
--- a/go/tests/validation/ip_test.go
+++ b/go/tests/validation/ip_test.go
@@ -19,7 +19,7 @@ func TestValidateIP(t *testing.T) {
- uuid: value must be a valid UUID
- ip: value is empty, which is not a valid IP address
- name: must be within 2 and 128 characters
- - network: value length must be at least 2 characters
+ - network: must be within 2 and 128 characters
- project: value is empty, which is not a valid UUID`,
},
{
@@ -32,7 +32,7 @@ func TestValidateIP(t *testing.T) {
wantErrorMessage: `validation errors:
- ip: value is empty, which is not a valid IP address
- name: must be within 2 and 128 characters
- - network: value length must be at least 2 characters
+ - network: must be within 2 and 128 characters
- project: value is empty, which is not a valid UUID`,
},
{
@@ -45,7 +45,7 @@ func TestValidateIP(t *testing.T) {
wantErr: true,
wantErrorMessage: `validation errors:
- name: must be within 2 and 128 characters
- - network: value length must be at least 2 characters
+ - network: must be within 2 and 128 characters
- project: value is empty, which is not a valid UUID`,
},
{
@@ -58,7 +58,7 @@ func TestValidateIP(t *testing.T) {
wantErr: true,
wantErrorMessage: `validation errors:
- name: must be within 2 and 128 characters
- - network: value length must be at least 2 characters
+ - network: must be within 2 and 128 characters
- project: value is empty, which is not a valid UUID`,
},
{
@@ -71,7 +71,7 @@ func TestValidateIP(t *testing.T) {
},
wantErr: true,
wantErrorMessage: `validation errors:
- - network: value length must be at least 2 characters
+ - network: must be within 2 and 128 characters
- project: value is empty, which is not a valid UUID`,
},
{
@@ -136,7 +136,7 @@ func TestValidateIP(t *testing.T) {
msg: &apiv2.IPServiceCreateRequest{},
wantErr: true,
wantErrorMessage: `validation errors:
- - network: value length must be at least 2 characters
+ - network: must be within 2 and 128 characters
- project: value is empty, which is not a valid UUID`,
},
{
diff --git a/go/tests/validation/partition_test.go b/go/tests/validation/partition_test.go
new file mode 100644
index 00000000..0bc62115
--- /dev/null
+++ b/go/tests/validation/partition_test.go
@@ -0,0 +1,43 @@
+package validation
+
+import (
+ "testing"
+
+ apiv2 "github.com/metal-stack/api/go/metalstack/api/v2"
+)
+
+func TestValidateNTPServer(t *testing.T) {
+ tests := prototests{
+ {
+ name: "Valid NTPServer with ip as address",
+ msg: &apiv2.NTPServer{
+ Address: "172.10.0.1",
+ },
+ wantErr: false,
+ },
+ {
+ name: "Valid NTPServer with hostname as address",
+ msg: &apiv2.NTPServer{
+ Address: "ntp.company.com",
+ },
+ wantErr: false,
+ },
+ {
+ name: "Invalid NTPServer address",
+ msg: &apiv2.NTPServer{
+ Address: "1.1.1.1.1",
+ },
+ wantErr: true,
+ wantErrorMessage: "validation error: address: must be a valid IP address or hostname",
+ },
+ {
+ name: "Invalid NTPServer address",
+ msg: &apiv2.NTPServer{
+ Address: "-bla.com#",
+ },
+ wantErr: true,
+ wantErrorMessage: "validation error: address: must be a valid IP address or hostname",
+ },
+ }
+ validateProtos(t, tests)
+}
diff --git a/go/tests/validation/size-reservation_test.go b/go/tests/validation/size-reservation_test.go
new file mode 100644
index 00000000..9e45346a
--- /dev/null
+++ b/go/tests/validation/size-reservation_test.go
@@ -0,0 +1,90 @@
+package validation
+
+import (
+ "testing"
+
+ apiv2 "github.com/metal-stack/api/go/metalstack/api/v2"
+)
+
+func TestValidateSizeReservation(t *testing.T) {
+ tests := prototests{
+ {
+ name: "Invalid SizeReservation",
+ msg: &apiv2.SizeReservation{
+ Partitions: []string{"partition-1"},
+ },
+ wantErr: true,
+ wantErrorMessage: `validation errors:
+ - name: must be within 2 and 128 characters
+ - project: value is empty, which is not a valid UUID
+ - size: must be within 2 and 128 characters
+ - amount: value must be greater than 0`,
+ },
+ {
+ name: "Invalid SizeReservation id not a uuid",
+ msg: &apiv2.SizeReservation{
+ Id: "abc",
+ Partitions: []string{"partition-1"},
+ },
+ wantErr: true,
+ wantErrorMessage: `validation errors:
+ - id: value must be a valid UUID
+ - name: must be within 2 and 128 characters
+ - project: value is empty, which is not a valid UUID
+ - size: must be within 2 and 128 characters
+ - amount: value must be greater than 0`,
+ },
+ {
+ name: "Invalid SizeReservation partitions not unique",
+ msg: &apiv2.SizeReservation{
+ Id: "e266fcc6-f6de-4ee1-ba26-baa17bf47b13",
+ Name: "Simple",
+ Project: "e266fcc6-f6de-4ee1-ba26-baa17bf47b13",
+ Size: "c1-xlarge",
+ Amount: 2,
+ Partitions: []string{"partition-1", "partition-1"},
+ },
+ wantErr: true,
+ wantErrorMessage: `validation error: partitions: repeated value must contain unique items`,
+ },
+ {
+ name: "Invalid SizeReservation partitions not unique and to short",
+ msg: &apiv2.SizeReservation{
+ Id: "e266fcc6-f6de-4ee1-ba26-baa17bf47b13",
+ Name: "Simple",
+ Project: "e266fcc6-f6de-4ee1-ba26-baa17bf47b13",
+ Size: "c1-xlarge",
+ Amount: 3,
+ Partitions: []string{"partition-1", "partition-1", "p"},
+ },
+ wantErr: true,
+ wantErrorMessage: `validation errors:
+ - partitions: repeated value must contain unique items
+ - partitions[2]: must be within 2 and 128 characters`,
+ },
+ {
+ name: "Valid SizeReservation",
+ msg: &apiv2.SizeReservation{
+ Id: "e266fcc6-f6de-4ee1-ba26-baa17bf47b13",
+ Name: "Simple",
+ Project: "e266fcc6-f6de-4ee1-ba26-baa17bf47b13",
+ Size: "c1-xlarge",
+ Amount: 3,
+ Partitions: []string{"partition-1", "partition-2"},
+ },
+ wantErr: false,
+ },
+ {
+ name: "Valid SizeReservation empty id",
+ msg: &apiv2.SizeReservation{
+ Name: "Simple",
+ Project: "e266fcc6-f6de-4ee1-ba26-baa17bf47b13",
+ Size: "c1-xlarge",
+ Amount: 3,
+ Partitions: []string{"partition-1", "partition-2"},
+ },
+ wantErr: false,
+ },
+ }
+ validateProtos(t, tests)
+}
diff --git a/js/buf/validate/validate_pb.ts b/js/buf/validate/validate_pb.ts
index a69ccd80..ff83229e 100644
--- a/js/buf/validate/validate_pb.ts
+++ b/js/buf/validate/validate_pb.ts
@@ -1,4 +1,4 @@
-// Copyright 2023-2025 Buf Technologies, Inc.
+// Copyright 2023-2026 Buf Technologies, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -16,6 +16,35 @@
// @generated from file buf/validate/validate.proto (package buf.validate, syntax proto2)
/* eslint-disable */
+// [Protovalidate](https://protovalidate.com/) is the semantic validation library for Protobuf.
+// It provides standard annotations to validate common rules on messages and fields, as well as the ability to use [CEL](https://cel.dev) to write custom rules.
+// It's the next generation of [protoc-gen-validate](https://github.com/bufbuild/protoc-gen-validate).
+//
+// This package provides the options, messages, and enums that power Protovalidate.
+// Apply its options to messages, fields, and oneofs in your Protobuf schemas to add validation rules:
+//
+// ```proto
+// message User {
+// string id = 1 [(buf.validate.field).string.uuid = true];
+// string first_name = 2 [(buf.validate.field).string.max_len = 64];
+// string last_name = 3 [(buf.validate.field).string.max_len = 64];
+//
+// option (buf.validate.message).cel = {
+// id: "first_name_requires_last_name"
+// message: "last_name must be present if first_name is present"
+// expression: "!has(this.first_name) || has(this.last_name)"
+// };
+// }
+// ```
+//
+// These rules are enforced at runtime by language-specific libraries.
+// See the [developer quickstart](https://protovalidate.com/quickstart/) to get started, or go directly to the runtime library for your language:
+// [Go](https://github.com/bufbuild/protovalidate-go)
+// [JavaScript/TypeScript](https://github.com/bufbuild/protovalidate-es),
+// [Java](https://github.com/bufbuild/protovalidate-java),
+// [Python](https://github.com/bufbuild/protovalidate-python),
+// or [C++](https://github.com/bufbuild/protovalidate-cc).
+
import type { GenEnum, GenExtension, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import { enumDesc, extDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
import type { Duration, FieldDescriptorProto_Type, FieldMask, FieldOptions, MessageOptions, OneofOptions, Timestamp } from "@bufbuild/protobuf/wkt";
diff --git a/js/metalstack/admin/v2/filesystem_pb.ts b/js/metalstack/admin/v2/filesystem_pb.ts
index 45279099..e9ccab92 100644
--- a/js/metalstack/admin/v2/filesystem_pb.ts
+++ b/js/metalstack/admin/v2/filesystem_pb.ts
@@ -16,7 +16,7 @@ import type { Message } from "@bufbuild/protobuf";
* Describes the file metalstack/admin/v2/filesystem.proto.
*/
export const file_metalstack_admin_v2_filesystem: GenFile = /*@__PURE__*/
- fileDesc("CiRtZXRhbHN0YWNrL2FkbWluL3YyL2ZpbGVzeXN0ZW0ucHJvdG8SE21ldGFsc3RhY2suYWRtaW4udjIiYAoeRmlsZXN5c3RlbVNlcnZpY2VDcmVhdGVSZXF1ZXN0Ej4KEWZpbGVzeXN0ZW1fbGF5b3V0GAEgASgLMiMubWV0YWxzdGFjay5hcGkudjIuRmlsZXN5c3RlbUxheW91dCJhCh9GaWxlc3lzdGVtU2VydmljZUNyZWF0ZVJlc3BvbnNlEj4KEWZpbGVzeXN0ZW1fbGF5b3V0GAEgASgLMiMubWV0YWxzdGFjay5hcGkudjIuRmlsZXN5c3RlbUxheW91dCKOBAoeRmlsZXN5c3RlbVNlcnZpY2VVcGRhdGVSZXF1ZXN0EhYKAmlkGAEgASgJQgq6SAdyBRACGIABEjoKC3VwZGF0ZV9tZXRhGAIgASgLMh0ubWV0YWxzdGFjay5hcGkudjIuVXBkYXRlTWV0YUIGukgDyAEBEh4KBG5hbWUYAyABKAlCC7pICHIGwLOusQIBSACIAQESJQoLZGVzY3JpcHRpb24YBCABKAlCC7pICHIGyLOusQIBSAGIAQESMgoLZmlsZXN5c3RlbXMYBSADKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5GaWxlc3lzdGVtEiYKBWRpc2tzGAYgAygLMhcubWV0YWxzdGFjay5hcGkudjIuRGlzaxIlCgRyYWlkGAcgAygLMhcubWV0YWxzdGFjay5hcGkudjIuUmFpZBI1Cg12b2x1bWVfZ3JvdXBzGAggAygLMh4ubWV0YWxzdGFjay5hcGkudjIuVm9sdW1lR3JvdXASOQoPbG9naWNhbF92b2x1bWVzGAkgAygLMiAubWV0YWxzdGFjay5hcGkudjIuTG9naWNhbFZvbHVtZRJDCgtjb25zdHJhaW50cxgKIAEoCzIuLm1ldGFsc3RhY2suYXBpLnYyLkZpbGVzeXN0ZW1MYXlvdXRDb25zdHJhaW50c0IHCgVfbmFtZUIOCgxfZGVzY3JpcHRpb24iYQofRmlsZXN5c3RlbVNlcnZpY2VVcGRhdGVSZXNwb25zZRI+ChFmaWxlc3lzdGVtX2xheW91dBgBIAEoCzIjLm1ldGFsc3RhY2suYXBpLnYyLkZpbGVzeXN0ZW1MYXlvdXQiOAoeRmlsZXN5c3RlbVNlcnZpY2VEZWxldGVSZXF1ZXN0EhYKAmlkGAEgASgJQgq6SAdyBRACGIABImEKH0ZpbGVzeXN0ZW1TZXJ2aWNlRGVsZXRlUmVzcG9uc2USPgoRZmlsZXN5c3RlbV9sYXlvdXQYASABKAsyIy5tZXRhbHN0YWNrLmFwaS52Mi5GaWxlc3lzdGVtTGF5b3V0MpMDChFGaWxlc3lzdGVtU2VydmljZRJ+CgZDcmVhdGUSMy5tZXRhbHN0YWNrLmFkbWluLnYyLkZpbGVzeXN0ZW1TZXJ2aWNlQ3JlYXRlUmVxdWVzdBo0Lm1ldGFsc3RhY2suYWRtaW4udjIuRmlsZXN5c3RlbVNlcnZpY2VDcmVhdGVSZXNwb25zZSIJ0vMYAQHg8xgBEn4KBlVwZGF0ZRIzLm1ldGFsc3RhY2suYWRtaW4udjIuRmlsZXN5c3RlbVNlcnZpY2VVcGRhdGVSZXF1ZXN0GjQubWV0YWxzdGFjay5hZG1pbi52Mi5GaWxlc3lzdGVtU2VydmljZVVwZGF0ZVJlc3BvbnNlIgnS8xgBAeDzGAESfgoGRGVsZXRlEjMubWV0YWxzdGFjay5hZG1pbi52Mi5GaWxlc3lzdGVtU2VydmljZURlbGV0ZVJlcXVlc3QaNC5tZXRhbHN0YWNrLmFkbWluLnYyLkZpbGVzeXN0ZW1TZXJ2aWNlRGVsZXRlUmVzcG9uc2UiCdLzGAEB4PMYAULTAQoXY29tLm1ldGFsc3RhY2suYWRtaW4udjJCD0ZpbGVzeXN0ZW1Qcm90b1ABWjlnaXRodWIuY29tL21ldGFsLXN0YWNrL2FwaS9nby9tZXRhbHN0YWNrL2FkbWluL3YyO2FkbWludjKiAgNNQViqAhNNZXRhbHN0YWNrLkFkbWluLlYyygITTWV0YWxzdGFja1xBZG1pblxWMuICH01ldGFsc3RhY2tcQWRtaW5cVjJcR1BCTWV0YWRhdGHqAhVNZXRhbHN0YWNrOjpBZG1pbjo6VjJiBnByb3RvMw", [file_buf_validate_validate, file_metalstack_api_v2_common, file_metalstack_api_v2_filesystem, file_metalstack_api_v2_predefined_rules]);
+ fileDesc("CiRtZXRhbHN0YWNrL2FkbWluL3YyL2ZpbGVzeXN0ZW0ucHJvdG8SE21ldGFsc3RhY2suYWRtaW4udjIiYAoeRmlsZXN5c3RlbVNlcnZpY2VDcmVhdGVSZXF1ZXN0Ej4KEWZpbGVzeXN0ZW1fbGF5b3V0GAEgASgLMiMubWV0YWxzdGFjay5hcGkudjIuRmlsZXN5c3RlbUxheW91dCJhCh9GaWxlc3lzdGVtU2VydmljZUNyZWF0ZVJlc3BvbnNlEj4KEWZpbGVzeXN0ZW1fbGF5b3V0GAEgASgLMiMubWV0YWxzdGFjay5hcGkudjIuRmlsZXN5c3RlbUxheW91dCKPBAoeRmlsZXN5c3RlbVNlcnZpY2VVcGRhdGVSZXF1ZXN0EhcKAmlkGAEgASgJQgu6SAhyBsCzrrECARI6Cgt1cGRhdGVfbWV0YRgCIAEoCzIdLm1ldGFsc3RhY2suYXBpLnYyLlVwZGF0ZU1ldGFCBrpIA8gBARIeCgRuYW1lGAMgASgJQgu6SAhyBsCzrrECAUgAiAEBEiUKC2Rlc2NyaXB0aW9uGAQgASgJQgu6SAhyBsizrrECAUgBiAEBEjIKC2ZpbGVzeXN0ZW1zGAUgAygLMh0ubWV0YWxzdGFjay5hcGkudjIuRmlsZXN5c3RlbRImCgVkaXNrcxgGIAMoCzIXLm1ldGFsc3RhY2suYXBpLnYyLkRpc2sSJQoEcmFpZBgHIAMoCzIXLm1ldGFsc3RhY2suYXBpLnYyLlJhaWQSNQoNdm9sdW1lX2dyb3VwcxgIIAMoCzIeLm1ldGFsc3RhY2suYXBpLnYyLlZvbHVtZUdyb3VwEjkKD2xvZ2ljYWxfdm9sdW1lcxgJIAMoCzIgLm1ldGFsc3RhY2suYXBpLnYyLkxvZ2ljYWxWb2x1bWUSQwoLY29uc3RyYWludHMYCiABKAsyLi5tZXRhbHN0YWNrLmFwaS52Mi5GaWxlc3lzdGVtTGF5b3V0Q29uc3RyYWludHNCBwoFX25hbWVCDgoMX2Rlc2NyaXB0aW9uImEKH0ZpbGVzeXN0ZW1TZXJ2aWNlVXBkYXRlUmVzcG9uc2USPgoRZmlsZXN5c3RlbV9sYXlvdXQYASABKAsyIy5tZXRhbHN0YWNrLmFwaS52Mi5GaWxlc3lzdGVtTGF5b3V0IjkKHkZpbGVzeXN0ZW1TZXJ2aWNlRGVsZXRlUmVxdWVzdBIXCgJpZBgBIAEoCUILukgIcgbAs66xAgEiYQofRmlsZXN5c3RlbVNlcnZpY2VEZWxldGVSZXNwb25zZRI+ChFmaWxlc3lzdGVtX2xheW91dBgBIAEoCzIjLm1ldGFsc3RhY2suYXBpLnYyLkZpbGVzeXN0ZW1MYXlvdXQykwMKEUZpbGVzeXN0ZW1TZXJ2aWNlEn4KBkNyZWF0ZRIzLm1ldGFsc3RhY2suYWRtaW4udjIuRmlsZXN5c3RlbVNlcnZpY2VDcmVhdGVSZXF1ZXN0GjQubWV0YWxzdGFjay5hZG1pbi52Mi5GaWxlc3lzdGVtU2VydmljZUNyZWF0ZVJlc3BvbnNlIgnS8xgBAeDzGAESfgoGVXBkYXRlEjMubWV0YWxzdGFjay5hZG1pbi52Mi5GaWxlc3lzdGVtU2VydmljZVVwZGF0ZVJlcXVlc3QaNC5tZXRhbHN0YWNrLmFkbWluLnYyLkZpbGVzeXN0ZW1TZXJ2aWNlVXBkYXRlUmVzcG9uc2UiCdLzGAEB4PMYARJ+CgZEZWxldGUSMy5tZXRhbHN0YWNrLmFkbWluLnYyLkZpbGVzeXN0ZW1TZXJ2aWNlRGVsZXRlUmVxdWVzdBo0Lm1ldGFsc3RhY2suYWRtaW4udjIuRmlsZXN5c3RlbVNlcnZpY2VEZWxldGVSZXNwb25zZSIJ0vMYAQHg8xgBQtMBChdjb20ubWV0YWxzdGFjay5hZG1pbi52MkIPRmlsZXN5c3RlbVByb3RvUAFaOWdpdGh1Yi5jb20vbWV0YWwtc3RhY2svYXBpL2dvL21ldGFsc3RhY2svYWRtaW4vdjI7YWRtaW52MqICA01BWKoCE01ldGFsc3RhY2suQWRtaW4uVjLKAhNNZXRhbHN0YWNrXEFkbWluXFYy4gIfTWV0YWxzdGFja1xBZG1pblxWMlxHUEJNZXRhZGF0YeoCFU1ldGFsc3RhY2s6OkFkbWluOjpWMmIGcHJvdG8z", [file_buf_validate_validate, file_metalstack_api_v2_common, file_metalstack_api_v2_filesystem, file_metalstack_api_v2_predefined_rules]);
/**
* FilesystemServiceCreateRequest
diff --git a/js/metalstack/admin/v2/image_pb.ts b/js/metalstack/admin/v2/image_pb.ts
index e60ff5b2..bab9b012 100644
--- a/js/metalstack/admin/v2/image_pb.ts
+++ b/js/metalstack/admin/v2/image_pb.ts
@@ -18,7 +18,7 @@ import type { Message } from "@bufbuild/protobuf";
* Describes the file metalstack/admin/v2/image.proto.
*/
export const file_metalstack_admin_v2_image: GenFile = /*@__PURE__*/
- fileDesc("Ch9tZXRhbHN0YWNrL2FkbWluL3YyL2ltYWdlLnByb3RvEhNtZXRhbHN0YWNrLmFkbWluLnYyIkQKGUltYWdlU2VydmljZUNyZWF0ZVJlcXVlc3QSJwoFaW1hZ2UYASABKAsyGC5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZSJFChpJbWFnZVNlcnZpY2VDcmVhdGVSZXNwb25zZRInCgVpbWFnZRgBIAEoCzIYLm1ldGFsc3RhY2suYXBpLnYyLkltYWdlIrQDChlJbWFnZVNlcnZpY2VVcGRhdGVSZXF1ZXN0EhYKAmlkGAEgASgJQgq6SAdyBRACGIABEjoKC3VwZGF0ZV9tZXRhGAIgASgLMh0ubWV0YWxzdGFjay5hcGkudjIuVXBkYXRlTWV0YUIGukgDyAEBEh0KA3VybBgDIAEoCUILukgIcgbgs66xAgFIAIgBARIeCgRuYW1lGAQgASgJQgu6SAhyBsCzrrECAUgBiAEBEiUKC2Rlc2NyaXB0aW9uGAUgASgJQgu6SAhyBsizrrECAUgCiAEBEkIKCGZlYXR1cmVzGAYgAygOMh8ubWV0YWxzdGFjay5hcGkudjIuSW1hZ2VGZWF0dXJlQg+6SAySAQkYASIFggECEAESSAoOY2xhc3NpZmljYXRpb24YByABKA4yJi5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZUNsYXNzaWZpY2F0aW9uQgi6SAWCAQIQARIuCgpleHBpcmVzX2F0GAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEIGCgRfdXJsQgcKBV9uYW1lQg4KDF9kZXNjcmlwdGlvbiJFChpJbWFnZVNlcnZpY2VVcGRhdGVSZXNwb25zZRInCgVpbWFnZRgBIAEoCzIYLm1ldGFsc3RhY2suYXBpLnYyLkltYWdlIjMKGUltYWdlU2VydmljZURlbGV0ZVJlcXVlc3QSFgoCaWQYASABKAlCCrpIB3IFEAIYgAEiRQoaSW1hZ2VTZXJ2aWNlRGVsZXRlUmVzcG9uc2USJwoFaW1hZ2UYASABKAsyGC5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZSJIChhJbWFnZVNlcnZpY2VVc2FnZVJlcXVlc3QSLAoFcXVlcnkYASABKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZVF1ZXJ5Ik8KGUltYWdlU2VydmljZVVzYWdlUmVzcG9uc2USMgoLaW1hZ2VfdXNhZ2UYASADKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZVVzYWdlMuADCgxJbWFnZVNlcnZpY2USdAoGQ3JlYXRlEi4ubWV0YWxzdGFjay5hZG1pbi52Mi5JbWFnZVNlcnZpY2VDcmVhdGVSZXF1ZXN0Gi8ubWV0YWxzdGFjay5hZG1pbi52Mi5JbWFnZVNlcnZpY2VDcmVhdGVSZXNwb25zZSIJ0vMYAQHg8xgBEnQKBlVwZGF0ZRIuLm1ldGFsc3RhY2suYWRtaW4udjIuSW1hZ2VTZXJ2aWNlVXBkYXRlUmVxdWVzdBovLm1ldGFsc3RhY2suYWRtaW4udjIuSW1hZ2VTZXJ2aWNlVXBkYXRlUmVzcG9uc2UiCdLzGAEB4PMYARJ0CgZEZWxldGUSLi5tZXRhbHN0YWNrLmFkbWluLnYyLkltYWdlU2VydmljZURlbGV0ZVJlcXVlc3QaLy5tZXRhbHN0YWNrLmFkbWluLnYyLkltYWdlU2VydmljZURlbGV0ZVJlc3BvbnNlIgnS8xgBAeDzGAESbgoFVXNhZ2USLS5tZXRhbHN0YWNrLmFkbWluLnYyLkltYWdlU2VydmljZVVzYWdlUmVxdWVzdBouLm1ldGFsc3RhY2suYWRtaW4udjIuSW1hZ2VTZXJ2aWNlVXNhZ2VSZXNwb25zZSIG0vMYAgECQs4BChdjb20ubWV0YWxzdGFjay5hZG1pbi52MkIKSW1hZ2VQcm90b1ABWjlnaXRodWIuY29tL21ldGFsLXN0YWNrL2FwaS9nby9tZXRhbHN0YWNrL2FkbWluL3YyO2FkbWludjKiAgNNQViqAhNNZXRhbHN0YWNrLkFkbWluLlYyygITTWV0YWxzdGFja1xBZG1pblxWMuICH01ldGFsc3RhY2tcQWRtaW5cVjJcR1BCTWV0YWRhdGHqAhVNZXRhbHN0YWNrOjpBZG1pbjo6VjJiBnByb3RvMw", [file_buf_validate_validate, file_google_protobuf_timestamp, file_metalstack_api_v2_common, file_metalstack_api_v2_image, file_metalstack_api_v2_predefined_rules]);
+ fileDesc("Ch9tZXRhbHN0YWNrL2FkbWluL3YyL2ltYWdlLnByb3RvEhNtZXRhbHN0YWNrLmFkbWluLnYyIkQKGUltYWdlU2VydmljZUNyZWF0ZVJlcXVlc3QSJwoFaW1hZ2UYASABKAsyGC5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZSJFChpJbWFnZVNlcnZpY2VDcmVhdGVSZXNwb25zZRInCgVpbWFnZRgBIAEoCzIYLm1ldGFsc3RhY2suYXBpLnYyLkltYWdlIrUDChlJbWFnZVNlcnZpY2VVcGRhdGVSZXF1ZXN0EhcKAmlkGAEgASgJQgu6SAhyBsCzrrECARI6Cgt1cGRhdGVfbWV0YRgCIAEoCzIdLm1ldGFsc3RhY2suYXBpLnYyLlVwZGF0ZU1ldGFCBrpIA8gBARIdCgN1cmwYAyABKAlCC7pICHIG4LOusQIBSACIAQESHgoEbmFtZRgEIAEoCUILukgIcgbAs66xAgFIAYgBARIlCgtkZXNjcmlwdGlvbhgFIAEoCUILukgIcgbIs66xAgFIAogBARJCCghmZWF0dXJlcxgGIAMoDjIfLm1ldGFsc3RhY2suYXBpLnYyLkltYWdlRmVhdHVyZUIPukgMkgEJGAEiBYIBAhABEkgKDmNsYXNzaWZpY2F0aW9uGAcgASgOMiYubWV0YWxzdGFjay5hcGkudjIuSW1hZ2VDbGFzc2lmaWNhdGlvbkIIukgFggECEAESLgoKZXhwaXJlc19hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCBgoEX3VybEIHCgVfbmFtZUIOCgxfZGVzY3JpcHRpb24iRQoaSW1hZ2VTZXJ2aWNlVXBkYXRlUmVzcG9uc2USJwoFaW1hZ2UYASABKAsyGC5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZSI0ChlJbWFnZVNlcnZpY2VEZWxldGVSZXF1ZXN0EhcKAmlkGAEgASgJQgu6SAhyBsCzrrECASJFChpJbWFnZVNlcnZpY2VEZWxldGVSZXNwb25zZRInCgVpbWFnZRgBIAEoCzIYLm1ldGFsc3RhY2suYXBpLnYyLkltYWdlIkgKGEltYWdlU2VydmljZVVzYWdlUmVxdWVzdBIsCgVxdWVyeRgBIAEoCzIdLm1ldGFsc3RhY2suYXBpLnYyLkltYWdlUXVlcnkiTwoZSW1hZ2VTZXJ2aWNlVXNhZ2VSZXNwb25zZRIyCgtpbWFnZV91c2FnZRgBIAMoCzIdLm1ldGFsc3RhY2suYXBpLnYyLkltYWdlVXNhZ2Uy4AMKDEltYWdlU2VydmljZRJ0CgZDcmVhdGUSLi5tZXRhbHN0YWNrLmFkbWluLnYyLkltYWdlU2VydmljZUNyZWF0ZVJlcXVlc3QaLy5tZXRhbHN0YWNrLmFkbWluLnYyLkltYWdlU2VydmljZUNyZWF0ZVJlc3BvbnNlIgnS8xgBAeDzGAESdAoGVXBkYXRlEi4ubWV0YWxzdGFjay5hZG1pbi52Mi5JbWFnZVNlcnZpY2VVcGRhdGVSZXF1ZXN0Gi8ubWV0YWxzdGFjay5hZG1pbi52Mi5JbWFnZVNlcnZpY2VVcGRhdGVSZXNwb25zZSIJ0vMYAQHg8xgBEnQKBkRlbGV0ZRIuLm1ldGFsc3RhY2suYWRtaW4udjIuSW1hZ2VTZXJ2aWNlRGVsZXRlUmVxdWVzdBovLm1ldGFsc3RhY2suYWRtaW4udjIuSW1hZ2VTZXJ2aWNlRGVsZXRlUmVzcG9uc2UiCdLzGAEB4PMYARJuCgVVc2FnZRItLm1ldGFsc3RhY2suYWRtaW4udjIuSW1hZ2VTZXJ2aWNlVXNhZ2VSZXF1ZXN0Gi4ubWV0YWxzdGFjay5hZG1pbi52Mi5JbWFnZVNlcnZpY2VVc2FnZVJlc3BvbnNlIgbS8xgCAQJCzgEKF2NvbS5tZXRhbHN0YWNrLmFkbWluLnYyQgpJbWFnZVByb3RvUAFaOWdpdGh1Yi5jb20vbWV0YWwtc3RhY2svYXBpL2dvL21ldGFsc3RhY2svYWRtaW4vdjI7YWRtaW52MqICA01BWKoCE01ldGFsc3RhY2suQWRtaW4uVjLKAhNNZXRhbHN0YWNrXEFkbWluXFYy4gIfTWV0YWxzdGFja1xBZG1pblxWMlxHUEJNZXRhZGF0YeoCFU1ldGFsc3RhY2s6OkFkbWluOjpWMmIGcHJvdG8z", [file_buf_validate_validate, file_google_protobuf_timestamp, file_metalstack_api_v2_common, file_metalstack_api_v2_image, file_metalstack_api_v2_predefined_rules]);
/**
* ImageServiceCreateRequest
diff --git a/js/metalstack/admin/v2/network_pb.ts b/js/metalstack/admin/v2/network_pb.ts
index 45ef2be9..f44d0df1 100644
--- a/js/metalstack/admin/v2/network_pb.ts
+++ b/js/metalstack/admin/v2/network_pb.ts
@@ -16,7 +16,7 @@ import type { Message } from "@bufbuild/protobuf";
* Describes the file metalstack/admin/v2/network.proto.
*/
export const file_metalstack_admin_v2_network: GenFile = /*@__PURE__*/
- fileDesc("CiFtZXRhbHN0YWNrL2FkbWluL3YyL25ldHdvcmsucHJvdG8SE21ldGFsc3RhY2suYWRtaW4udjIiMgoYTmV0d29ya1NlcnZpY2VHZXRSZXF1ZXN0EhYKAmlkGAEgASgJQgq6SAdyBRACGIABIkgKGU5ldHdvcmtTZXJ2aWNlR2V0UmVzcG9uc2USKwoHbmV0d29yaxgBIAEoCzIaLm1ldGFsc3RhY2suYXBpLnYyLk5ldHdvcmsizwcKG05ldHdvcmtTZXJ2aWNlQ3JlYXRlUmVxdWVzdBIbCgJpZBgBIAEoCUIKukgHcgUQAhiAAUgAiAEBEh4KBG5hbWUYAiABKAlCC7pICHIGwLOusQIBSAGIAQESJQoLZGVzY3JpcHRpb24YAyABKAlCC7pICHIGyLOusQIBSAKIAQESIwoJcGFydGl0aW9uGAQgASgJQgu6SAhyBtCzrrECAUgDiAEBEh4KB3Byb2plY3QYBSABKAlCCLpIBXIDsAEBSASIAQESNgoEdHlwZRgGIAEoDjIeLm1ldGFsc3RhY2suYXBpLnYyLk5ldHdvcmtUeXBlQgi6SAWCAQIQARIuCgZsYWJlbHMYByABKAsyGS5tZXRhbHN0YWNrLmFwaS52Mi5MYWJlbHNIBYgBARIeCghwcmVmaXhlcxgIIAMoCUIMukgJkgEGuKSzsQIBEioKFGRlc3RpbmF0aW9uX3ByZWZpeGVzGAkgAygJQgy6SAmSAQa4pLOxAgESSQobZGVmYXVsdF9jaGlsZF9wcmVmaXhfbGVuZ3RoGAogASgLMiQubWV0YWxzdGFjay5hcGkudjIuQ2hpbGRQcmVmaXhMZW5ndGgSRQoXbWluX2NoaWxkX3ByZWZpeF9sZW5ndGgYCyABKAsyJC5tZXRhbHN0YWNrLmFwaS52Mi5DaGlsZFByZWZpeExlbmd0aBI7CghuYXRfdHlwZRgMIAEoDjIaLm1ldGFsc3RhY2suYXBpLnYyLk5BVFR5cGVCCLpIBYIBAhABSAaIAQESEAoDdnJmGA0gASgNSAeIAQESKAoOcGFyZW50X25ldHdvcmsYDiABKAlCC7pICHIGwLOusQIBSAiIAQESMgocYWRkaXRpb25hbF9hbm5vdW5jYWJsZV9jaWRycxgPIAMoCUIMukgJkgEGuKSzsQIBEjkKBmxlbmd0aBgQIAEoCzIkLm1ldGFsc3RhY2suYXBpLnYyLkNoaWxkUHJlZml4TGVuZ3RoSAmIAQESTgoOYWRkcmVzc19mYW1pbHkYESABKA4yJy5tZXRhbHN0YWNrLmFwaS52Mi5OZXR3b3JrQWRkcmVzc0ZhbWlseUIIukgFggECEAFICogBAUIFCgNfaWRCBwoFX25hbWVCDgoMX2Rlc2NyaXB0aW9uQgwKCl9wYXJ0aXRpb25CCgoIX3Byb2plY3RCCQoHX2xhYmVsc0ILCglfbmF0X3R5cGVCBgoEX3ZyZkIRCg9fcGFyZW50X25ldHdvcmtCCQoHX2xlbmd0aEIRCg9fYWRkcmVzc19mYW1pbHkixAUKG05ldHdvcmtTZXJ2aWNlVXBkYXRlUmVxdWVzdBIXCgJpZBgBIAEoCUILukgIcgbAs66xAgESOgoLdXBkYXRlX21ldGEYAiABKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5VcGRhdGVNZXRhQga6SAPIAQESHgoEbmFtZRgDIAEoCUILukgIcgbAs66xAgFIAIgBARIlCgtkZXNjcmlwdGlvbhgEIAEoCUILukgIcgbIs66xAgFIAYgBARI0CgZsYWJlbHMYBSABKAsyHy5tZXRhbHN0YWNrLmFwaS52Mi5VcGRhdGVMYWJlbHNIAogBARIeCghwcmVmaXhlcxgGIAMoCUIMukgJkgEGuKSzsQIBEioKFGRlc3RpbmF0aW9uX3ByZWZpeGVzGAcgAygJQgy6SAmSAQa4pLOxAgESTgobZGVmYXVsdF9jaGlsZF9wcmVmaXhfbGVuZ3RoGAogASgLMiQubWV0YWxzdGFjay5hcGkudjIuQ2hpbGRQcmVmaXhMZW5ndGhIA4gBARJKChdtaW5fY2hpbGRfcHJlZml4X2xlbmd0aBgLIAEoCzIkLm1ldGFsc3RhY2suYXBpLnYyLkNoaWxkUHJlZml4TGVuZ3RoSASIAQESOwoIbmF0X3R5cGUYDSABKA4yGi5tZXRhbHN0YWNrLmFwaS52Mi5OQVRUeXBlQgi6SAWCAQIQAUgFiAEBEjIKHGFkZGl0aW9uYWxfYW5ub3VuY2FibGVfY2lkcnMYECADKAlCDLpICZIBBriks7ECARINCgVmb3JjZRgUIAEoCEIHCgVfbmFtZUIOCgxfZGVzY3JpcHRpb25CCQoHX2xhYmVsc0IeChxfZGVmYXVsdF9jaGlsZF9wcmVmaXhfbGVuZ3RoQhoKGF9taW5fY2hpbGRfcHJlZml4X2xlbmd0aEILCglfbmF0X3R5cGUiNQobTmV0d29ya1NlcnZpY2VEZWxldGVSZXF1ZXN0EhYKAmlkGAEgASgJQgq6SAdyBRACGIABIksKGU5ldHdvcmtTZXJ2aWNlTGlzdFJlcXVlc3QSLgoFcXVlcnkYAiABKAsyHy5tZXRhbHN0YWNrLmFwaS52Mi5OZXR3b3JrUXVlcnkiSwocTmV0d29ya1NlcnZpY2VDcmVhdGVSZXNwb25zZRIrCgduZXR3b3JrGAEgASgLMhoubWV0YWxzdGFjay5hcGkudjIuTmV0d29yayJLChxOZXR3b3JrU2VydmljZVVwZGF0ZVJlc3BvbnNlEisKB25ldHdvcmsYASABKAsyGi5tZXRhbHN0YWNrLmFwaS52Mi5OZXR3b3JrIksKHE5ldHdvcmtTZXJ2aWNlRGVsZXRlUmVzcG9uc2USKwoHbmV0d29yaxgBIAEoCzIaLm1ldGFsc3RhY2suYXBpLnYyLk5ldHdvcmsiSgoaTmV0d29ya1NlcnZpY2VMaXN0UmVzcG9uc2USLAoIbmV0d29ya3MYASADKAsyGi5tZXRhbHN0YWNrLmFwaS52Mi5OZXR3b3JrMuUECg5OZXR3b3JrU2VydmljZRJwCgNHZXQSLS5tZXRhbHN0YWNrLmFkbWluLnYyLk5ldHdvcmtTZXJ2aWNlR2V0UmVxdWVzdBouLm1ldGFsc3RhY2suYWRtaW4udjIuTmV0d29ya1NlcnZpY2VHZXRSZXNwb25zZSIK0vMYAgEC4PMYAhJ4CgZDcmVhdGUSMC5tZXRhbHN0YWNrLmFkbWluLnYyLk5ldHdvcmtTZXJ2aWNlQ3JlYXRlUmVxdWVzdBoxLm1ldGFsc3RhY2suYWRtaW4udjIuTmV0d29ya1NlcnZpY2VDcmVhdGVSZXNwb25zZSIJ0vMYAQHg8xgBEngKBlVwZGF0ZRIwLm1ldGFsc3RhY2suYWRtaW4udjIuTmV0d29ya1NlcnZpY2VVcGRhdGVSZXF1ZXN0GjEubWV0YWxzdGFjay5hZG1pbi52Mi5OZXR3b3JrU2VydmljZVVwZGF0ZVJlc3BvbnNlIgnS8xgBAeDzGAESeAoGRGVsZXRlEjAubWV0YWxzdGFjay5hZG1pbi52Mi5OZXR3b3JrU2VydmljZURlbGV0ZVJlcXVlc3QaMS5tZXRhbHN0YWNrLmFkbWluLnYyLk5ldHdvcmtTZXJ2aWNlRGVsZXRlUmVzcG9uc2UiCdLzGAEB4PMYARJzCgRMaXN0Ei4ubWV0YWxzdGFjay5hZG1pbi52Mi5OZXR3b3JrU2VydmljZUxpc3RSZXF1ZXN0Gi8ubWV0YWxzdGFjay5hZG1pbi52Mi5OZXR3b3JrU2VydmljZUxpc3RSZXNwb25zZSIK0vMYAgEC4PMYAkLQAQoXY29tLm1ldGFsc3RhY2suYWRtaW4udjJCDE5ldHdvcmtQcm90b1ABWjlnaXRodWIuY29tL21ldGFsLXN0YWNrL2FwaS9nby9tZXRhbHN0YWNrL2FkbWluL3YyO2FkbWludjKiAgNNQViqAhNNZXRhbHN0YWNrLkFkbWluLlYyygITTWV0YWxzdGFja1xBZG1pblxWMuICH01ldGFsc3RhY2tcQWRtaW5cVjJcR1BCTWV0YWRhdGHqAhVNZXRhbHN0YWNrOjpBZG1pbjo6VjJiBnByb3RvMw", [file_buf_validate_validate, file_metalstack_api_v2_common, file_metalstack_api_v2_network, file_metalstack_api_v2_predefined_rules]);
+ fileDesc("CiFtZXRhbHN0YWNrL2FkbWluL3YyL25ldHdvcmsucHJvdG8SE21ldGFsc3RhY2suYWRtaW4udjIiMwoYTmV0d29ya1NlcnZpY2VHZXRSZXF1ZXN0EhcKAmlkGAEgASgJQgu6SAhyBsCzrrECASJIChlOZXR3b3JrU2VydmljZUdldFJlc3BvbnNlEisKB25ldHdvcmsYASABKAsyGi5tZXRhbHN0YWNrLmFwaS52Mi5OZXR3b3JrItAHChtOZXR3b3JrU2VydmljZUNyZWF0ZVJlcXVlc3QSHAoCaWQYASABKAlCC7pICHIGwLOusQIBSACIAQESHgoEbmFtZRgCIAEoCUILukgIcgbAs66xAgFIAYgBARIlCgtkZXNjcmlwdGlvbhgDIAEoCUILukgIcgbIs66xAgFIAogBARIjCglwYXJ0aXRpb24YBCABKAlCC7pICHIG0LOusQIBSAOIAQESHgoHcHJvamVjdBgFIAEoCUIIukgFcgOwAQFIBIgBARI2CgR0eXBlGAYgASgOMh4ubWV0YWxzdGFjay5hcGkudjIuTmV0d29ya1R5cGVCCLpIBYIBAhABEi4KBmxhYmVscxgHIAEoCzIZLm1ldGFsc3RhY2suYXBpLnYyLkxhYmVsc0gFiAEBEh4KCHByZWZpeGVzGAggAygJQgy6SAmSAQa4pLOxAgESKgoUZGVzdGluYXRpb25fcHJlZml4ZXMYCSADKAlCDLpICZIBBriks7ECARJJChtkZWZhdWx0X2NoaWxkX3ByZWZpeF9sZW5ndGgYCiABKAsyJC5tZXRhbHN0YWNrLmFwaS52Mi5DaGlsZFByZWZpeExlbmd0aBJFChdtaW5fY2hpbGRfcHJlZml4X2xlbmd0aBgLIAEoCzIkLm1ldGFsc3RhY2suYXBpLnYyLkNoaWxkUHJlZml4TGVuZ3RoEjsKCG5hdF90eXBlGAwgASgOMhoubWV0YWxzdGFjay5hcGkudjIuTkFUVHlwZUIIukgFggECEAFIBogBARIQCgN2cmYYDSABKA1IB4gBARIoCg5wYXJlbnRfbmV0d29yaxgOIAEoCUILukgIcgbAs66xAgFICIgBARIyChxhZGRpdGlvbmFsX2Fubm91bmNhYmxlX2NpZHJzGA8gAygJQgy6SAmSAQa4pLOxAgESOQoGbGVuZ3RoGBAgASgLMiQubWV0YWxzdGFjay5hcGkudjIuQ2hpbGRQcmVmaXhMZW5ndGhICYgBARJOCg5hZGRyZXNzX2ZhbWlseRgRIAEoDjInLm1ldGFsc3RhY2suYXBpLnYyLk5ldHdvcmtBZGRyZXNzRmFtaWx5Qgi6SAWCAQIQAUgKiAEBQgUKA19pZEIHCgVfbmFtZUIOCgxfZGVzY3JpcHRpb25CDAoKX3BhcnRpdGlvbkIKCghfcHJvamVjdEIJCgdfbGFiZWxzQgsKCV9uYXRfdHlwZUIGCgRfdnJmQhEKD19wYXJlbnRfbmV0d29ya0IJCgdfbGVuZ3RoQhEKD19hZGRyZXNzX2ZhbWlseSLEBQobTmV0d29ya1NlcnZpY2VVcGRhdGVSZXF1ZXN0EhcKAmlkGAEgASgJQgu6SAhyBsCzrrECARI6Cgt1cGRhdGVfbWV0YRgCIAEoCzIdLm1ldGFsc3RhY2suYXBpLnYyLlVwZGF0ZU1ldGFCBrpIA8gBARIeCgRuYW1lGAMgASgJQgu6SAhyBsCzrrECAUgAiAEBEiUKC2Rlc2NyaXB0aW9uGAQgASgJQgu6SAhyBsizrrECAUgBiAEBEjQKBmxhYmVscxgFIAEoCzIfLm1ldGFsc3RhY2suYXBpLnYyLlVwZGF0ZUxhYmVsc0gCiAEBEh4KCHByZWZpeGVzGAYgAygJQgy6SAmSAQa4pLOxAgESKgoUZGVzdGluYXRpb25fcHJlZml4ZXMYByADKAlCDLpICZIBBriks7ECARJOChtkZWZhdWx0X2NoaWxkX3ByZWZpeF9sZW5ndGgYCiABKAsyJC5tZXRhbHN0YWNrLmFwaS52Mi5DaGlsZFByZWZpeExlbmd0aEgDiAEBEkoKF21pbl9jaGlsZF9wcmVmaXhfbGVuZ3RoGAsgASgLMiQubWV0YWxzdGFjay5hcGkudjIuQ2hpbGRQcmVmaXhMZW5ndGhIBIgBARI7CghuYXRfdHlwZRgNIAEoDjIaLm1ldGFsc3RhY2suYXBpLnYyLk5BVFR5cGVCCLpIBYIBAhABSAWIAQESMgocYWRkaXRpb25hbF9hbm5vdW5jYWJsZV9jaWRycxgQIAMoCUIMukgJkgEGuKSzsQIBEg0KBWZvcmNlGBQgASgIQgcKBV9uYW1lQg4KDF9kZXNjcmlwdGlvbkIJCgdfbGFiZWxzQh4KHF9kZWZhdWx0X2NoaWxkX3ByZWZpeF9sZW5ndGhCGgoYX21pbl9jaGlsZF9wcmVmaXhfbGVuZ3RoQgsKCV9uYXRfdHlwZSI2ChtOZXR3b3JrU2VydmljZURlbGV0ZVJlcXVlc3QSFwoCaWQYASABKAlCC7pICHIGwLOusQIBIksKGU5ldHdvcmtTZXJ2aWNlTGlzdFJlcXVlc3QSLgoFcXVlcnkYAiABKAsyHy5tZXRhbHN0YWNrLmFwaS52Mi5OZXR3b3JrUXVlcnkiSwocTmV0d29ya1NlcnZpY2VDcmVhdGVSZXNwb25zZRIrCgduZXR3b3JrGAEgASgLMhoubWV0YWxzdGFjay5hcGkudjIuTmV0d29yayJLChxOZXR3b3JrU2VydmljZVVwZGF0ZVJlc3BvbnNlEisKB25ldHdvcmsYASABKAsyGi5tZXRhbHN0YWNrLmFwaS52Mi5OZXR3b3JrIksKHE5ldHdvcmtTZXJ2aWNlRGVsZXRlUmVzcG9uc2USKwoHbmV0d29yaxgBIAEoCzIaLm1ldGFsc3RhY2suYXBpLnYyLk5ldHdvcmsiSgoaTmV0d29ya1NlcnZpY2VMaXN0UmVzcG9uc2USLAoIbmV0d29ya3MYASADKAsyGi5tZXRhbHN0YWNrLmFwaS52Mi5OZXR3b3JrMuUECg5OZXR3b3JrU2VydmljZRJwCgNHZXQSLS5tZXRhbHN0YWNrLmFkbWluLnYyLk5ldHdvcmtTZXJ2aWNlR2V0UmVxdWVzdBouLm1ldGFsc3RhY2suYWRtaW4udjIuTmV0d29ya1NlcnZpY2VHZXRSZXNwb25zZSIK0vMYAgEC4PMYAhJ4CgZDcmVhdGUSMC5tZXRhbHN0YWNrLmFkbWluLnYyLk5ldHdvcmtTZXJ2aWNlQ3JlYXRlUmVxdWVzdBoxLm1ldGFsc3RhY2suYWRtaW4udjIuTmV0d29ya1NlcnZpY2VDcmVhdGVSZXNwb25zZSIJ0vMYAQHg8xgBEngKBlVwZGF0ZRIwLm1ldGFsc3RhY2suYWRtaW4udjIuTmV0d29ya1NlcnZpY2VVcGRhdGVSZXF1ZXN0GjEubWV0YWxzdGFjay5hZG1pbi52Mi5OZXR3b3JrU2VydmljZVVwZGF0ZVJlc3BvbnNlIgnS8xgBAeDzGAESeAoGRGVsZXRlEjAubWV0YWxzdGFjay5hZG1pbi52Mi5OZXR3b3JrU2VydmljZURlbGV0ZVJlcXVlc3QaMS5tZXRhbHN0YWNrLmFkbWluLnYyLk5ldHdvcmtTZXJ2aWNlRGVsZXRlUmVzcG9uc2UiCdLzGAEB4PMYARJzCgRMaXN0Ei4ubWV0YWxzdGFjay5hZG1pbi52Mi5OZXR3b3JrU2VydmljZUxpc3RSZXF1ZXN0Gi8ubWV0YWxzdGFjay5hZG1pbi52Mi5OZXR3b3JrU2VydmljZUxpc3RSZXNwb25zZSIK0vMYAgEC4PMYAkLQAQoXY29tLm1ldGFsc3RhY2suYWRtaW4udjJCDE5ldHdvcmtQcm90b1ABWjlnaXRodWIuY29tL21ldGFsLXN0YWNrL2FwaS9nby9tZXRhbHN0YWNrL2FkbWluL3YyO2FkbWludjKiAgNNQViqAhNNZXRhbHN0YWNrLkFkbWluLlYyygITTWV0YWxzdGFja1xBZG1pblxWMuICH01ldGFsc3RhY2tcQWRtaW5cVjJcR1BCTWV0YWRhdGHqAhVNZXRhbHN0YWNrOjpBZG1pbjo6VjJiBnByb3RvMw", [file_buf_validate_validate, file_metalstack_api_v2_common, file_metalstack_api_v2_network, file_metalstack_api_v2_predefined_rules]);
/**
* NetworkServiceGetRequest
diff --git a/js/metalstack/admin/v2/partition_pb.ts b/js/metalstack/admin/v2/partition_pb.ts
index d6bff362..ced9e369 100644
--- a/js/metalstack/admin/v2/partition_pb.ts
+++ b/js/metalstack/admin/v2/partition_pb.ts
@@ -16,7 +16,7 @@ import type { Message } from "@bufbuild/protobuf";
* Describes the file metalstack/admin/v2/partition.proto.
*/
export const file_metalstack_admin_v2_partition: GenFile = /*@__PURE__*/
- fileDesc("CiNtZXRhbHN0YWNrL2FkbWluL3YyL3BhcnRpdGlvbi5wcm90bxITbWV0YWxzdGFjay5hZG1pbi52MiJQCh1QYXJ0aXRpb25TZXJ2aWNlQ3JlYXRlUmVxdWVzdBIvCglwYXJ0aXRpb24YASABKAsyHC5tZXRhbHN0YWNrLmFwaS52Mi5QYXJ0aXRpb24izgMKHVBhcnRpdGlvblNlcnZpY2VVcGRhdGVSZXF1ZXN0EhYKAmlkGAEgASgJQgq6SAdyBRACGIABEjoKC3VwZGF0ZV9tZXRhGAIgASgLMh0ubWV0YWxzdGFjay5hcGkudjIuVXBkYXRlTWV0YUIGukgDyAEBEiUKC2Rlc2NyaXB0aW9uGAMgASgJQgu6SAhyBsizrrECAUgAiAEBEkkKEmJvb3RfY29uZmlndXJhdGlvbhgEIAEoCzItLm1ldGFsc3RhY2suYXBpLnYyLlBhcnRpdGlvbkJvb3RDb25maWd1cmF0aW9uEjoKCmRuc19zZXJ2ZXIYBSADKAsyHC5tZXRhbHN0YWNrLmFwaS52Mi5ETlNTZXJ2ZXJCCLpIBZIBAhADEjoKCm50cF9zZXJ2ZXIYBiADKAsyHC5tZXRhbHN0YWNrLmFwaS52Mi5OVFBTZXJ2ZXJCCLpIBZIBAhAKEh4KFm1nbXRfc2VydmljZV9hZGRyZXNzZXMYByADKAkSNAoGbGFiZWxzGAggASgLMh8ubWV0YWxzdGFjay5hcGkudjIuVXBkYXRlTGFiZWxzSAGIAQFCDgoMX2Rlc2NyaXB0aW9uQgkKB19sYWJlbHMiNwodUGFydGl0aW9uU2VydmljZURlbGV0ZVJlcXVlc3QSFgoCaWQYASABKAlCCrpIB3IFEAIYgAEiUQoeUGFydGl0aW9uU2VydmljZUNyZWF0ZVJlc3BvbnNlEi8KCXBhcnRpdGlvbhgBIAEoCzIcLm1ldGFsc3RhY2suYXBpLnYyLlBhcnRpdGlvbiJRCh5QYXJ0aXRpb25TZXJ2aWNlVXBkYXRlUmVzcG9uc2USLwoJcGFydGl0aW9uGAEgASgLMhwubWV0YWxzdGFjay5hcGkudjIuUGFydGl0aW9uIlEKHlBhcnRpdGlvblNlcnZpY2VEZWxldGVSZXNwb25zZRIvCglwYXJ0aXRpb24YASABKAsyHC5tZXRhbHN0YWNrLmFwaS52Mi5QYXJ0aXRpb24imQEKH1BhcnRpdGlvblNlcnZpY2VDYXBhY2l0eVJlcXVlc3QSGwoCaWQYASABKAlCCrpIB3IFEAIYgAFIAIgBARIdCgRzaXplGAIgASgJQgq6SAdyBRACGIABSAGIAQESHgoHcHJvamVjdBgDIAEoCUIIukgFcgOwAQFIAogBAUIFCgNfaWRCBwoFX3NpemVCCgoIX3Byb2plY3Qi0QIKIFBhcnRpdGlvblNlcnZpY2VDYXBhY2l0eVJlc3BvbnNlEgwKBHNpemUYASABKAkSDQoFdG90YWwYAiABKAMSEwoLcGhvbmVkX2hvbWUYAyABKAMSDwoHd2FpdGluZxgEIAEoAxINCgVvdGhlchgFIAEoAxIWCg5vdGhlcl9tYWNoaW5lcxgGIAMoCRIRCglhbGxvY2F0ZWQYByABKAMSEwoLYWxsb2NhdGFibGUYCCABKAMSDAoEZnJlZRgJIAEoAxITCgt1bmF2YWlsYWJsZRgKIAEoAxIOCgZmYXVsdHkYCyABKAMSFwoPZmF1bHR5X21hY2hpbmVzGAwgAygJEhQKDHJlc2VydmF0aW9ucxgNIAEoAxIZChF1c2VkX3Jlc2VydmF0aW9ucxgOIAEoAxIeChZyZW1haW5pbmdfcmVzZXJ2YXRpb25zGA8gASgDMpIEChBQYXJ0aXRpb25TZXJ2aWNlEnwKBkNyZWF0ZRIyLm1ldGFsc3RhY2suYWRtaW4udjIuUGFydGl0aW9uU2VydmljZUNyZWF0ZVJlcXVlc3QaMy5tZXRhbHN0YWNrLmFkbWluLnYyLlBhcnRpdGlvblNlcnZpY2VDcmVhdGVSZXNwb25zZSIJ0vMYAQHg8xgBEnwKBlVwZGF0ZRIyLm1ldGFsc3RhY2suYWRtaW4udjIuUGFydGl0aW9uU2VydmljZVVwZGF0ZVJlcXVlc3QaMy5tZXRhbHN0YWNrLmFkbWluLnYyLlBhcnRpdGlvblNlcnZpY2VVcGRhdGVSZXNwb25zZSIJ0vMYAQHg8xgBEnwKBkRlbGV0ZRIyLm1ldGFsc3RhY2suYWRtaW4udjIuUGFydGl0aW9uU2VydmljZURlbGV0ZVJlcXVlc3QaMy5tZXRhbHN0YWNrLmFkbWluLnYyLlBhcnRpdGlvblNlcnZpY2VEZWxldGVSZXNwb25zZSIJ0vMYAQHg8xgBEoMBCghDYXBhY2l0eRI0Lm1ldGFsc3RhY2suYWRtaW4udjIuUGFydGl0aW9uU2VydmljZUNhcGFjaXR5UmVxdWVzdBo1Lm1ldGFsc3RhY2suYWRtaW4udjIuUGFydGl0aW9uU2VydmljZUNhcGFjaXR5UmVzcG9uc2UiCtLzGAICAeDzGAJC0gEKF2NvbS5tZXRhbHN0YWNrLmFkbWluLnYyQg5QYXJ0aXRpb25Qcm90b1ABWjlnaXRodWIuY29tL21ldGFsLXN0YWNrL2FwaS9nby9tZXRhbHN0YWNrL2FkbWluL3YyO2FkbWludjKiAgNNQViqAhNNZXRhbHN0YWNrLkFkbWluLlYyygITTWV0YWxzdGFja1xBZG1pblxWMuICH01ldGFsc3RhY2tcQWRtaW5cVjJcR1BCTWV0YWRhdGHqAhVNZXRhbHN0YWNrOjpBZG1pbjo6VjJiBnByb3RvMw", [file_buf_validate_validate, file_metalstack_api_v2_common, file_metalstack_api_v2_partition, file_metalstack_api_v2_predefined_rules]);
+ fileDesc("CiNtZXRhbHN0YWNrL2FkbWluL3YyL3BhcnRpdGlvbi5wcm90bxITbWV0YWxzdGFjay5hZG1pbi52MiJQCh1QYXJ0aXRpb25TZXJ2aWNlQ3JlYXRlUmVxdWVzdBIvCglwYXJ0aXRpb24YASABKAsyHC5tZXRhbHN0YWNrLmFwaS52Mi5QYXJ0aXRpb24izwMKHVBhcnRpdGlvblNlcnZpY2VVcGRhdGVSZXF1ZXN0EhcKAmlkGAEgASgJQgu6SAhyBtCzrrECARI6Cgt1cGRhdGVfbWV0YRgCIAEoCzIdLm1ldGFsc3RhY2suYXBpLnYyLlVwZGF0ZU1ldGFCBrpIA8gBARIlCgtkZXNjcmlwdGlvbhgDIAEoCUILukgIcgbIs66xAgFIAIgBARJJChJib290X2NvbmZpZ3VyYXRpb24YBCABKAsyLS5tZXRhbHN0YWNrLmFwaS52Mi5QYXJ0aXRpb25Cb290Q29uZmlndXJhdGlvbhI6CgpkbnNfc2VydmVyGAUgAygLMhwubWV0YWxzdGFjay5hcGkudjIuRE5TU2VydmVyQgi6SAWSAQIQAxI6CgpudHBfc2VydmVyGAYgAygLMhwubWV0YWxzdGFjay5hcGkudjIuTlRQU2VydmVyQgi6SAWSAQIQChIeChZtZ210X3NlcnZpY2VfYWRkcmVzc2VzGAcgAygJEjQKBmxhYmVscxgIIAEoCzIfLm1ldGFsc3RhY2suYXBpLnYyLlVwZGF0ZUxhYmVsc0gBiAEBQg4KDF9kZXNjcmlwdGlvbkIJCgdfbGFiZWxzIjgKHVBhcnRpdGlvblNlcnZpY2VEZWxldGVSZXF1ZXN0EhcKAmlkGAEgASgJQgu6SAhyBtCzrrECASJRCh5QYXJ0aXRpb25TZXJ2aWNlQ3JlYXRlUmVzcG9uc2USLwoJcGFydGl0aW9uGAEgASgLMhwubWV0YWxzdGFjay5hcGkudjIuUGFydGl0aW9uIlEKHlBhcnRpdGlvblNlcnZpY2VVcGRhdGVSZXNwb25zZRIvCglwYXJ0aXRpb24YASABKAsyHC5tZXRhbHN0YWNrLmFwaS52Mi5QYXJ0aXRpb24iUQoeUGFydGl0aW9uU2VydmljZURlbGV0ZVJlc3BvbnNlEi8KCXBhcnRpdGlvbhgBIAEoCzIcLm1ldGFsc3RhY2suYXBpLnYyLlBhcnRpdGlvbiKbAQofUGFydGl0aW9uU2VydmljZUNhcGFjaXR5UmVxdWVzdBIcCgJpZBgBIAEoCUILukgIcgbQs66xAgFIAIgBARIeCgRzaXplGAIgASgJQgu6SAhyBsCzrrECAUgBiAEBEh4KB3Byb2plY3QYAyABKAlCCLpIBXIDsAEBSAKIAQFCBQoDX2lkQgcKBV9zaXplQgoKCF9wcm9qZWN0ItECCiBQYXJ0aXRpb25TZXJ2aWNlQ2FwYWNpdHlSZXNwb25zZRIMCgRzaXplGAEgASgJEg0KBXRvdGFsGAIgASgDEhMKC3Bob25lZF9ob21lGAMgASgDEg8KB3dhaXRpbmcYBCABKAMSDQoFb3RoZXIYBSABKAMSFgoOb3RoZXJfbWFjaGluZXMYBiADKAkSEQoJYWxsb2NhdGVkGAcgASgDEhMKC2FsbG9jYXRhYmxlGAggASgDEgwKBGZyZWUYCSABKAMSEwoLdW5hdmFpbGFibGUYCiABKAMSDgoGZmF1bHR5GAsgASgDEhcKD2ZhdWx0eV9tYWNoaW5lcxgMIAMoCRIUCgxyZXNlcnZhdGlvbnMYDSABKAMSGQoRdXNlZF9yZXNlcnZhdGlvbnMYDiABKAMSHgoWcmVtYWluaW5nX3Jlc2VydmF0aW9ucxgPIAEoAzKSBAoQUGFydGl0aW9uU2VydmljZRJ8CgZDcmVhdGUSMi5tZXRhbHN0YWNrLmFkbWluLnYyLlBhcnRpdGlvblNlcnZpY2VDcmVhdGVSZXF1ZXN0GjMubWV0YWxzdGFjay5hZG1pbi52Mi5QYXJ0aXRpb25TZXJ2aWNlQ3JlYXRlUmVzcG9uc2UiCdLzGAEB4PMYARJ8CgZVcGRhdGUSMi5tZXRhbHN0YWNrLmFkbWluLnYyLlBhcnRpdGlvblNlcnZpY2VVcGRhdGVSZXF1ZXN0GjMubWV0YWxzdGFjay5hZG1pbi52Mi5QYXJ0aXRpb25TZXJ2aWNlVXBkYXRlUmVzcG9uc2UiCdLzGAEB4PMYARJ8CgZEZWxldGUSMi5tZXRhbHN0YWNrLmFkbWluLnYyLlBhcnRpdGlvblNlcnZpY2VEZWxldGVSZXF1ZXN0GjMubWV0YWxzdGFjay5hZG1pbi52Mi5QYXJ0aXRpb25TZXJ2aWNlRGVsZXRlUmVzcG9uc2UiCdLzGAEB4PMYARKDAQoIQ2FwYWNpdHkSNC5tZXRhbHN0YWNrLmFkbWluLnYyLlBhcnRpdGlvblNlcnZpY2VDYXBhY2l0eVJlcXVlc3QaNS5tZXRhbHN0YWNrLmFkbWluLnYyLlBhcnRpdGlvblNlcnZpY2VDYXBhY2l0eVJlc3BvbnNlIgrS8xgCAgHg8xgCQtIBChdjb20ubWV0YWxzdGFjay5hZG1pbi52MkIOUGFydGl0aW9uUHJvdG9QAVo5Z2l0aHViLmNvbS9tZXRhbC1zdGFjay9hcGkvZ28vbWV0YWxzdGFjay9hZG1pbi92MjthZG1pbnYyogIDTUFYqgITTWV0YWxzdGFjay5BZG1pbi5WMsoCE01ldGFsc3RhY2tcQWRtaW5cVjLiAh9NZXRhbHN0YWNrXEFkbWluXFYyXEdQQk1ldGFkYXRh6gIVTWV0YWxzdGFjazo6QWRtaW46OlYyYgZwcm90bzM", [file_buf_validate_validate, file_metalstack_api_v2_common, file_metalstack_api_v2_partition, file_metalstack_api_v2_predefined_rules]);
/**
* PartitionServiceCreateRequest is the request payload for a partition create request
@@ -90,6 +90,7 @@ export type PartitionServiceUpdateRequest = Message<"metalstack.admin.v2.Partiti
/**
* ManagementServiceAddresses defines where the management is reachable
* should be in the form :
+ * FIXME validation
*
* @generated from field: repeated string mgmt_service_addresses = 7;
*/
diff --git a/js/metalstack/admin/v2/project_pb.ts b/js/metalstack/admin/v2/project_pb.ts
index 887df608..914c265a 100644
--- a/js/metalstack/admin/v2/project_pb.ts
+++ b/js/metalstack/admin/v2/project_pb.ts
@@ -7,6 +7,7 @@ import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2
import { file_buf_validate_validate } from "../../../buf/validate/validate_pb";
import type { Labels } from "../../api/v2/common_pb";
import { file_metalstack_api_v2_common } from "../../api/v2/common_pb";
+import { file_metalstack_api_v2_predefined_rules } from "../../api/v2/predefined_rules_pb";
import type { Project } from "../../api/v2/project_pb";
import { file_metalstack_api_v2_project } from "../../api/v2/project_pb";
import type { Message } from "@bufbuild/protobuf";
@@ -15,7 +16,7 @@ import type { Message } from "@bufbuild/protobuf";
* Describes the file metalstack/admin/v2/project.proto.
*/
export const file_metalstack_admin_v2_project: GenFile = /*@__PURE__*/
- fileDesc("CiFtZXRhbHN0YWNrL2FkbWluL3YyL3Byb2plY3QucHJvdG8SE21ldGFsc3RhY2suYWRtaW4udjIiggEKGVByb2plY3RTZXJ2aWNlTGlzdFJlcXVlc3QSHwoGdGVuYW50GAEgASgJQgq6SAdyBRACGIABSACIAQESLgoGbGFiZWxzGAIgASgLMhkubWV0YWxzdGFjay5hcGkudjIuTGFiZWxzSAGIAQFCCQoHX3RlbmFudEIJCgdfbGFiZWxzIkoKGlByb2plY3RTZXJ2aWNlTGlzdFJlc3BvbnNlEiwKCHByb2plY3RzGAEgAygLMhoubWV0YWxzdGFjay5hcGkudjIuUHJvamVjdDKFAQoOUHJvamVjdFNlcnZpY2UScwoETGlzdBIuLm1ldGFsc3RhY2suYWRtaW4udjIuUHJvamVjdFNlcnZpY2VMaXN0UmVxdWVzdBovLm1ldGFsc3RhY2suYWRtaW4udjIuUHJvamVjdFNlcnZpY2VMaXN0UmVzcG9uc2UiCtLzGAIBAuDzGAJC0AEKF2NvbS5tZXRhbHN0YWNrLmFkbWluLnYyQgxQcm9qZWN0UHJvdG9QAVo5Z2l0aHViLmNvbS9tZXRhbC1zdGFjay9hcGkvZ28vbWV0YWxzdGFjay9hZG1pbi92MjthZG1pbnYyogIDTUFYqgITTWV0YWxzdGFjay5BZG1pbi5WMsoCE01ldGFsc3RhY2tcQWRtaW5cVjLiAh9NZXRhbHN0YWNrXEFkbWluXFYyXEdQQk1ldGFkYXRh6gIVTWV0YWxzdGFjazo6QWRtaW46OlYyYgZwcm90bzM", [file_buf_validate_validate, file_metalstack_api_v2_common, file_metalstack_api_v2_project]);
+ fileDesc("CiFtZXRhbHN0YWNrL2FkbWluL3YyL3Byb2plY3QucHJvdG8SE21ldGFsc3RhY2suYWRtaW4udjIigwEKGVByb2plY3RTZXJ2aWNlTGlzdFJlcXVlc3QSIAoGdGVuYW50GAEgASgJQgu6SAhyBsCzrrECAUgAiAEBEi4KBmxhYmVscxgCIAEoCzIZLm1ldGFsc3RhY2suYXBpLnYyLkxhYmVsc0gBiAEBQgkKB190ZW5hbnRCCQoHX2xhYmVscyJKChpQcm9qZWN0U2VydmljZUxpc3RSZXNwb25zZRIsCghwcm9qZWN0cxgBIAMoCzIaLm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3QyhQEKDlByb2plY3RTZXJ2aWNlEnMKBExpc3QSLi5tZXRhbHN0YWNrLmFkbWluLnYyLlByb2plY3RTZXJ2aWNlTGlzdFJlcXVlc3QaLy5tZXRhbHN0YWNrLmFkbWluLnYyLlByb2plY3RTZXJ2aWNlTGlzdFJlc3BvbnNlIgrS8xgCAQLg8xgCQtABChdjb20ubWV0YWxzdGFjay5hZG1pbi52MkIMUHJvamVjdFByb3RvUAFaOWdpdGh1Yi5jb20vbWV0YWwtc3RhY2svYXBpL2dvL21ldGFsc3RhY2svYWRtaW4vdjI7YWRtaW52MqICA01BWKoCE01ldGFsc3RhY2suQWRtaW4uVjLKAhNNZXRhbHN0YWNrXEFkbWluXFYy4gIfTWV0YWxzdGFja1xBZG1pblxWMlxHUEJNZXRhZGF0YeoCFU1ldGFsc3RhY2s6OkFkbWluOjpWMmIGcHJvdG8z", [file_buf_validate_validate, file_metalstack_api_v2_common, file_metalstack_api_v2_predefined_rules, file_metalstack_api_v2_project]);
/**
* ProjectServiceListRequest is the request payload for the project list request
diff --git a/js/metalstack/admin/v2/size_pb.ts b/js/metalstack/admin/v2/size_pb.ts
index 30413e39..d6001611 100644
--- a/js/metalstack/admin/v2/size_pb.ts
+++ b/js/metalstack/admin/v2/size_pb.ts
@@ -16,7 +16,7 @@ import type { Message } from "@bufbuild/protobuf";
* Describes the file metalstack/admin/v2/size.proto.
*/
export const file_metalstack_admin_v2_size: GenFile = /*@__PURE__*/
- fileDesc("Ch5tZXRhbHN0YWNrL2FkbWluL3YyL3NpemUucHJvdG8SE21ldGFsc3RhY2suYWRtaW4udjIiQQoYU2l6ZVNlcnZpY2VDcmVhdGVSZXF1ZXN0EiUKBHNpemUYASABKAsyFy5tZXRhbHN0YWNrLmFwaS52Mi5TaXplIkIKGVNpemVTZXJ2aWNlQ3JlYXRlUmVzcG9uc2USJQoEc2l6ZRgBIAEoCzIXLm1ldGFsc3RhY2suYXBpLnYyLlNpemUixwIKGFNpemVTZXJ2aWNlVXBkYXRlUmVxdWVzdBIWCgJpZBgBIAEoCUIKukgHcgUQAhiAARI6Cgt1cGRhdGVfbWV0YRgCIAEoCzIdLm1ldGFsc3RhY2suYXBpLnYyLlVwZGF0ZU1ldGFCBrpIA8gBARIeCgRuYW1lGAMgASgJQgu6SAhyBsCzrrECAUgAiAEBEiUKC2Rlc2NyaXB0aW9uGAQgASgJQgu6SAhyBsizrrECAUgBiAEBEjYKC2NvbnN0cmFpbnRzGAUgAygLMiEubWV0YWxzdGFjay5hcGkudjIuU2l6ZUNvbnN0cmFpbnQSNAoGbGFiZWxzGAYgASgLMh8ubWV0YWxzdGFjay5hcGkudjIuVXBkYXRlTGFiZWxzSAKIAQFCBwoFX25hbWVCDgoMX2Rlc2NyaXB0aW9uQgkKB19sYWJlbHMiQgoZU2l6ZVNlcnZpY2VVcGRhdGVSZXNwb25zZRIlCgRzaXplGAEgASgLMhcubWV0YWxzdGFjay5hcGkudjIuU2l6ZSIyChhTaXplU2VydmljZURlbGV0ZVJlcXVlc3QSFgoCaWQYASABKAlCCrpIB3IFEAIYgAEiQgoZU2l6ZVNlcnZpY2VEZWxldGVSZXNwb25zZRIlCgRzaXplGAEgASgLMhcubWV0YWxzdGFjay5hcGkudjIuU2l6ZTLdAgoLU2l6ZVNlcnZpY2USbgoGQ3JlYXRlEi0ubWV0YWxzdGFjay5hZG1pbi52Mi5TaXplU2VydmljZUNyZWF0ZVJlcXVlc3QaLi5tZXRhbHN0YWNrLmFkbWluLnYyLlNpemVTZXJ2aWNlQ3JlYXRlUmVzcG9uc2UiBdLzGAEBEm4KBlVwZGF0ZRItLm1ldGFsc3RhY2suYWRtaW4udjIuU2l6ZVNlcnZpY2VVcGRhdGVSZXF1ZXN0Gi4ubWV0YWxzdGFjay5hZG1pbi52Mi5TaXplU2VydmljZVVwZGF0ZVJlc3BvbnNlIgXS8xgBARJuCgZEZWxldGUSLS5tZXRhbHN0YWNrLmFkbWluLnYyLlNpemVTZXJ2aWNlRGVsZXRlUmVxdWVzdBouLm1ldGFsc3RhY2suYWRtaW4udjIuU2l6ZVNlcnZpY2VEZWxldGVSZXNwb25zZSIF0vMYAQFCzQEKF2NvbS5tZXRhbHN0YWNrLmFkbWluLnYyQglTaXplUHJvdG9QAVo5Z2l0aHViLmNvbS9tZXRhbC1zdGFjay9hcGkvZ28vbWV0YWxzdGFjay9hZG1pbi92MjthZG1pbnYyogIDTUFYqgITTWV0YWxzdGFjay5BZG1pbi5WMsoCE01ldGFsc3RhY2tcQWRtaW5cVjLiAh9NZXRhbHN0YWNrXEFkbWluXFYyXEdQQk1ldGFkYXRh6gIVTWV0YWxzdGFjazo6QWRtaW46OlYyYgZwcm90bzM", [file_buf_validate_validate, file_metalstack_api_v2_common, file_metalstack_api_v2_predefined_rules, file_metalstack_api_v2_size]);
+ fileDesc("Ch5tZXRhbHN0YWNrL2FkbWluL3YyL3NpemUucHJvdG8SE21ldGFsc3RhY2suYWRtaW4udjIiQQoYU2l6ZVNlcnZpY2VDcmVhdGVSZXF1ZXN0EiUKBHNpemUYASABKAsyFy5tZXRhbHN0YWNrLmFwaS52Mi5TaXplIkIKGVNpemVTZXJ2aWNlQ3JlYXRlUmVzcG9uc2USJQoEc2l6ZRgBIAEoCzIXLm1ldGFsc3RhY2suYXBpLnYyLlNpemUiyAIKGFNpemVTZXJ2aWNlVXBkYXRlUmVxdWVzdBIXCgJpZBgBIAEoCUILukgIcgbAs66xAgESOgoLdXBkYXRlX21ldGEYAiABKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5VcGRhdGVNZXRhQga6SAPIAQESHgoEbmFtZRgDIAEoCUILukgIcgbAs66xAgFIAIgBARIlCgtkZXNjcmlwdGlvbhgEIAEoCUILukgIcgbIs66xAgFIAYgBARI2Cgtjb25zdHJhaW50cxgFIAMoCzIhLm1ldGFsc3RhY2suYXBpLnYyLlNpemVDb25zdHJhaW50EjQKBmxhYmVscxgGIAEoCzIfLm1ldGFsc3RhY2suYXBpLnYyLlVwZGF0ZUxhYmVsc0gCiAEBQgcKBV9uYW1lQg4KDF9kZXNjcmlwdGlvbkIJCgdfbGFiZWxzIkIKGVNpemVTZXJ2aWNlVXBkYXRlUmVzcG9uc2USJQoEc2l6ZRgBIAEoCzIXLm1ldGFsc3RhY2suYXBpLnYyLlNpemUiMwoYU2l6ZVNlcnZpY2VEZWxldGVSZXF1ZXN0EhcKAmlkGAEgASgJQgu6SAhyBsCzrrECASJCChlTaXplU2VydmljZURlbGV0ZVJlc3BvbnNlEiUKBHNpemUYASABKAsyFy5tZXRhbHN0YWNrLmFwaS52Mi5TaXplMt0CCgtTaXplU2VydmljZRJuCgZDcmVhdGUSLS5tZXRhbHN0YWNrLmFkbWluLnYyLlNpemVTZXJ2aWNlQ3JlYXRlUmVxdWVzdBouLm1ldGFsc3RhY2suYWRtaW4udjIuU2l6ZVNlcnZpY2VDcmVhdGVSZXNwb25zZSIF0vMYAQESbgoGVXBkYXRlEi0ubWV0YWxzdGFjay5hZG1pbi52Mi5TaXplU2VydmljZVVwZGF0ZVJlcXVlc3QaLi5tZXRhbHN0YWNrLmFkbWluLnYyLlNpemVTZXJ2aWNlVXBkYXRlUmVzcG9uc2UiBdLzGAEBEm4KBkRlbGV0ZRItLm1ldGFsc3RhY2suYWRtaW4udjIuU2l6ZVNlcnZpY2VEZWxldGVSZXF1ZXN0Gi4ubWV0YWxzdGFjay5hZG1pbi52Mi5TaXplU2VydmljZURlbGV0ZVJlc3BvbnNlIgXS8xgBAULNAQoXY29tLm1ldGFsc3RhY2suYWRtaW4udjJCCVNpemVQcm90b1ABWjlnaXRodWIuY29tL21ldGFsLXN0YWNrL2FwaS9nby9tZXRhbHN0YWNrL2FkbWluL3YyO2FkbWludjKiAgNNQViqAhNNZXRhbHN0YWNrLkFkbWluLlYyygITTWV0YWxzdGFja1xBZG1pblxWMuICH01ldGFsc3RhY2tcQWRtaW5cVjJcR1BCTWV0YWRhdGHqAhVNZXRhbHN0YWNrOjpBZG1pbjo6VjJiBnByb3RvMw", [file_buf_validate_validate, file_metalstack_api_v2_common, file_metalstack_api_v2_predefined_rules, file_metalstack_api_v2_size]);
/**
* SizeServiceCreateRequest is the request payload for a size create request
diff --git a/js/metalstack/admin/v2/size_reservation_pb.ts b/js/metalstack/admin/v2/size_reservation_pb.ts
new file mode 100644
index 00000000..4dd7815a
--- /dev/null
+++ b/js/metalstack/admin/v2/size_reservation_pb.ts
@@ -0,0 +1,279 @@
+// @generated by protoc-gen-es v2.11.0 with parameter "target=ts"
+// @generated from file metalstack/admin/v2/size_reservation.proto (package metalstack.admin.v2, syntax proto3)
+/* eslint-disable */
+
+import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2";
+import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2";
+import { file_buf_validate_validate } from "../../../buf/validate/validate_pb";
+import type { UpdateLabels, UpdateMeta } from "../../api/v2/common_pb";
+import { file_metalstack_api_v2_common } from "../../api/v2/common_pb";
+import { file_metalstack_api_v2_predefined_rules } from "../../api/v2/predefined_rules_pb";
+import type { SizeReservation, SizeReservationQuery } from "../../api/v2/size_reservation_pb";
+import { file_metalstack_api_v2_size_reservation } from "../../api/v2/size_reservation_pb";
+import type { Message } from "@bufbuild/protobuf";
+
+/**
+ * Describes the file metalstack/admin/v2/size_reservation.proto.
+ */
+export const file_metalstack_admin_v2_size_reservation: GenFile = /*@__PURE__*/
+ fileDesc("CiptZXRhbHN0YWNrL2FkbWluL3YyL3NpemVfcmVzZXJ2YXRpb24ucHJvdG8SE21ldGFsc3RhY2suYWRtaW4udjIiYwojU2l6ZVJlc2VydmF0aW9uU2VydmljZUNyZWF0ZVJlcXVlc3QSPAoQc2l6ZV9yZXNlcnZhdGlvbhgBIAEoCzIiLm1ldGFsc3RhY2suYXBpLnYyLlNpemVSZXNlcnZhdGlvbiJkCiRTaXplUmVzZXJ2YXRpb25TZXJ2aWNlQ3JlYXRlUmVzcG9uc2USPAoQc2l6ZV9yZXNlcnZhdGlvbhgBIAEoCzIiLm1ldGFsc3RhY2suYXBpLnYyLlNpemVSZXNlcnZhdGlvbiLpAgojU2l6ZVJlc2VydmF0aW9uU2VydmljZVVwZGF0ZVJlcXVlc3QSFAoCaWQYASABKAlCCLpIBXIDsAEBEh4KBG5hbWUYAiABKAlCC7pICHIGwLOusQIBSACIAQESJQoLZGVzY3JpcHRpb24YAyABKAlCC7pICHIGyLOusQIBSAGIAQESOgoLdXBkYXRlX21ldGEYBCABKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5VcGRhdGVNZXRhQga6SAPIAQESJgoKcGFydGl0aW9ucxgFIAMoCUISukgPkgEMGAEiCHIG0LOusQIBEhwKBmFtb3VudBgGIAEoBUIHukgEGgIgAEgCiAEBEjQKBmxhYmVscxgHIAEoCzIfLm1ldGFsc3RhY2suYXBpLnYyLlVwZGF0ZUxhYmVsc0gDiAEBQgcKBV9uYW1lQg4KDF9kZXNjcmlwdGlvbkIJCgdfYW1vdW50QgkKB19sYWJlbHMiZAokU2l6ZVJlc2VydmF0aW9uU2VydmljZVVwZGF0ZVJlc3BvbnNlEjwKEHNpemVfcmVzZXJ2YXRpb24YASABKAsyIi5tZXRhbHN0YWNrLmFwaS52Mi5TaXplUmVzZXJ2YXRpb24iOwojU2l6ZVJlc2VydmF0aW9uU2VydmljZURlbGV0ZVJlcXVlc3QSFAoCaWQYASABKAlCCLpIBXIDsAEBImQKJFNpemVSZXNlcnZhdGlvblNlcnZpY2VEZWxldGVSZXNwb25zZRI8ChBzaXplX3Jlc2VydmF0aW9uGAEgASgLMiIubWV0YWxzdGFjay5hcGkudjIuU2l6ZVJlc2VydmF0aW9uIlsKIVNpemVSZXNlcnZhdGlvblNlcnZpY2VMaXN0UmVxdWVzdBI2CgVxdWVyeRgBIAEoCzInLm1ldGFsc3RhY2suYXBpLnYyLlNpemVSZXNlcnZhdGlvblF1ZXJ5ImMKIlNpemVSZXNlcnZhdGlvblNlcnZpY2VMaXN0UmVzcG9uc2USPQoRc2l6ZV9yZXNlcnZhdGlvbnMYASADKAsyIi5tZXRhbHN0YWNrLmFwaS52Mi5TaXplUmVzZXJ2YXRpb24yvwQKFlNpemVSZXNlcnZhdGlvblNlcnZpY2USiAEKBkNyZWF0ZRI4Lm1ldGFsc3RhY2suYWRtaW4udjIuU2l6ZVJlc2VydmF0aW9uU2VydmljZUNyZWF0ZVJlcXVlc3QaOS5tZXRhbHN0YWNrLmFkbWluLnYyLlNpemVSZXNlcnZhdGlvblNlcnZpY2VDcmVhdGVSZXNwb25zZSIJ0vMYAQHg8xgBEogBCgZVcGRhdGUSOC5tZXRhbHN0YWNrLmFkbWluLnYyLlNpemVSZXNlcnZhdGlvblNlcnZpY2VVcGRhdGVSZXF1ZXN0GjkubWV0YWxzdGFjay5hZG1pbi52Mi5TaXplUmVzZXJ2YXRpb25TZXJ2aWNlVXBkYXRlUmVzcG9uc2UiCdLzGAEB4PMYARKIAQoGRGVsZXRlEjgubWV0YWxzdGFjay5hZG1pbi52Mi5TaXplUmVzZXJ2YXRpb25TZXJ2aWNlRGVsZXRlUmVxdWVzdBo5Lm1ldGFsc3RhY2suYWRtaW4udjIuU2l6ZVJlc2VydmF0aW9uU2VydmljZURlbGV0ZVJlc3BvbnNlIgnS8xgBAeDzGAESgwEKBExpc3QSNi5tZXRhbHN0YWNrLmFkbWluLnYyLlNpemVSZXNlcnZhdGlvblNlcnZpY2VMaXN0UmVxdWVzdBo3Lm1ldGFsc3RhY2suYWRtaW4udjIuU2l6ZVJlc2VydmF0aW9uU2VydmljZUxpc3RSZXNwb25zZSIK0vMYAgEC4PMYAkLYAQoXY29tLm1ldGFsc3RhY2suYWRtaW4udjJCFFNpemVSZXNlcnZhdGlvblByb3RvUAFaOWdpdGh1Yi5jb20vbWV0YWwtc3RhY2svYXBpL2dvL21ldGFsc3RhY2svYWRtaW4vdjI7YWRtaW52MqICA01BWKoCE01ldGFsc3RhY2suQWRtaW4uVjLKAhNNZXRhbHN0YWNrXEFkbWluXFYy4gIfTWV0YWxzdGFja1xBZG1pblxWMlxHUEJNZXRhZGF0YeoCFU1ldGFsc3RhY2s6OkFkbWluOjpWMmIGcHJvdG8z", [file_buf_validate_validate, file_metalstack_api_v2_common, file_metalstack_api_v2_predefined_rules, file_metalstack_api_v2_size_reservation]);
+
+/**
+ * SizeReservationServiceCreateRequest is the request payload for a size reservation create request
+ *
+ * @generated from message metalstack.admin.v2.SizeReservationServiceCreateRequest
+ */
+export type SizeReservationServiceCreateRequest = Message<"metalstack.admin.v2.SizeReservationServiceCreateRequest"> & {
+ /**
+ * SizeReservation is the size reservation to create
+ *
+ * @generated from field: metalstack.api.v2.SizeReservation size_reservation = 1;
+ */
+ sizeReservation?: SizeReservation;
+};
+
+/**
+ * Describes the message metalstack.admin.v2.SizeReservationServiceCreateRequest.
+ * Use `create(SizeReservationServiceCreateRequestSchema)` to create a new message.
+ */
+export const SizeReservationServiceCreateRequestSchema: GenMessage = /*@__PURE__*/
+ messageDesc(file_metalstack_admin_v2_size_reservation, 0);
+
+/**
+ * SizeReservationServiceCreateResponse is the response payload for a size reservation create request
+ *
+ * @generated from message metalstack.admin.v2.SizeReservationServiceCreateResponse
+ */
+export type SizeReservationServiceCreateResponse = Message<"metalstack.admin.v2.SizeReservationServiceCreateResponse"> & {
+ /**
+ * SizeReservation the size reservation
+ *
+ * @generated from field: metalstack.api.v2.SizeReservation size_reservation = 1;
+ */
+ sizeReservation?: SizeReservation;
+};
+
+/**
+ * Describes the message metalstack.admin.v2.SizeReservationServiceCreateResponse.
+ * Use `create(SizeReservationServiceCreateResponseSchema)` to create a new message.
+ */
+export const SizeReservationServiceCreateResponseSchema: GenMessage = /*@__PURE__*/
+ messageDesc(file_metalstack_admin_v2_size_reservation, 1);
+
+/**
+ * SizeReservationServiceUpdateRequest is the request payload for a size reservation update request
+ *
+ * @generated from message metalstack.admin.v2.SizeReservationServiceUpdateRequest
+ */
+export type SizeReservationServiceUpdateRequest = Message<"metalstack.admin.v2.SizeReservationServiceUpdateRequest"> & {
+ /**
+ * Id of this size reservation
+ *
+ * @generated from field: string id = 1;
+ */
+ id: string;
+
+ /**
+ * Name of this size reservation
+ *
+ * @generated from field: optional string name = 2;
+ */
+ name?: string;
+
+ /**
+ * Description of this size reservation
+ *
+ * @generated from field: optional string description = 3;
+ */
+ description?: string;
+
+ /**
+ * UpdateMeta contains the timestamp and strategy to be used in this update request
+ *
+ * @generated from field: metalstack.api.v2.UpdateMeta update_meta = 4;
+ */
+ updateMeta?: UpdateMeta;
+
+ /**
+ * Partition ids of this size reservation
+ *
+ * @generated from field: repeated string partitions = 5;
+ */
+ partitions: string[];
+
+ /**
+ * Amount of reservations of this size reservation
+ *
+ * @generated from field: optional int32 amount = 6;
+ */
+ amount?: number;
+
+ /**
+ * Labels to update of this size reservation
+ *
+ * @generated from field: optional metalstack.api.v2.UpdateLabels labels = 7;
+ */
+ labels?: UpdateLabels;
+};
+
+/**
+ * Describes the message metalstack.admin.v2.SizeReservationServiceUpdateRequest.
+ * Use `create(SizeReservationServiceUpdateRequestSchema)` to create a new message.
+ */
+export const SizeReservationServiceUpdateRequestSchema: GenMessage = /*@__PURE__*/
+ messageDesc(file_metalstack_admin_v2_size_reservation, 2);
+
+/**
+ * SizeReservationServiceUpdateResponse is the response payload for a size reservation update request
+ *
+ * @generated from message metalstack.admin.v2.SizeReservationServiceUpdateResponse
+ */
+export type SizeReservationServiceUpdateResponse = Message<"metalstack.admin.v2.SizeReservationServiceUpdateResponse"> & {
+ /**
+ * SizeReservation the size reservation
+ *
+ * @generated from field: metalstack.api.v2.SizeReservation size_reservation = 1;
+ */
+ sizeReservation?: SizeReservation;
+};
+
+/**
+ * Describes the message metalstack.admin.v2.SizeReservationServiceUpdateResponse.
+ * Use `create(SizeReservationServiceUpdateResponseSchema)` to create a new message.
+ */
+export const SizeReservationServiceUpdateResponseSchema: GenMessage = /*@__PURE__*/
+ messageDesc(file_metalstack_admin_v2_size_reservation, 3);
+
+/**
+ * SizeReservationServiceDeleteRequest is the request payload for a size reservation delete request
+ *
+ * @generated from message metalstack.admin.v2.SizeReservationServiceDeleteRequest
+ */
+export type SizeReservationServiceDeleteRequest = Message<"metalstack.admin.v2.SizeReservationServiceDeleteRequest"> & {
+ /**
+ * ID of the size reservation to delete
+ *
+ * @generated from field: string id = 1;
+ */
+ id: string;
+};
+
+/**
+ * Describes the message metalstack.admin.v2.SizeReservationServiceDeleteRequest.
+ * Use `create(SizeReservationServiceDeleteRequestSchema)` to create a new message.
+ */
+export const SizeReservationServiceDeleteRequestSchema: GenMessage = /*@__PURE__*/
+ messageDesc(file_metalstack_admin_v2_size_reservation, 4);
+
+/**
+ * SizeReservationServiceDeleteResponse is the response payload for a size reservation delete request
+ *
+ * @generated from message metalstack.admin.v2.SizeReservationServiceDeleteResponse
+ */
+export type SizeReservationServiceDeleteResponse = Message<"metalstack.admin.v2.SizeReservationServiceDeleteResponse"> & {
+ /**
+ * SizeReservation the size reservation
+ *
+ * @generated from field: metalstack.api.v2.SizeReservation size_reservation = 1;
+ */
+ sizeReservation?: SizeReservation;
+};
+
+/**
+ * Describes the message metalstack.admin.v2.SizeReservationServiceDeleteResponse.
+ * Use `create(SizeReservationServiceDeleteResponseSchema)` to create a new message.
+ */
+export const SizeReservationServiceDeleteResponseSchema: GenMessage = /*@__PURE__*/
+ messageDesc(file_metalstack_admin_v2_size_reservation, 5);
+
+/**
+ * SizeReservationServiceListRequest is the request payload for a size list request
+ *
+ * @generated from message metalstack.admin.v2.SizeReservationServiceListRequest
+ */
+export type SizeReservationServiceListRequest = Message<"metalstack.admin.v2.SizeReservationServiceListRequest"> & {
+ /**
+ * Query for size reservations
+ *
+ * @generated from field: metalstack.api.v2.SizeReservationQuery query = 1;
+ */
+ query?: SizeReservationQuery;
+};
+
+/**
+ * Describes the message metalstack.admin.v2.SizeReservationServiceListRequest.
+ * Use `create(SizeReservationServiceListRequestSchema)` to create a new message.
+ */
+export const SizeReservationServiceListRequestSchema: GenMessage = /*@__PURE__*/
+ messageDesc(file_metalstack_admin_v2_size_reservation, 6);
+
+/**
+ * SizeReservationServiceListResponse is the response payload for a size reservation list request
+ *
+ * @generated from message metalstack.admin.v2.SizeReservationServiceListResponse
+ */
+export type SizeReservationServiceListResponse = Message<"metalstack.admin.v2.SizeReservationServiceListResponse"> & {
+ /**
+ * Size reservations
+ *
+ * @generated from field: repeated metalstack.api.v2.SizeReservation size_reservations = 1;
+ */
+ sizeReservations: SizeReservation[];
+};
+
+/**
+ * Describes the message metalstack.admin.v2.SizeReservationServiceListResponse.
+ * Use `create(SizeReservationServiceListResponseSchema)` to create a new message.
+ */
+export const SizeReservationServiceListResponseSchema: GenMessage = /*@__PURE__*/
+ messageDesc(file_metalstack_admin_v2_size_reservation, 7);
+
+/**
+ * SizeReservationService serves size reservation related functions
+ *
+ * @generated from service metalstack.admin.v2.SizeReservationService
+ */
+export const SizeReservationService: GenService<{
+ /**
+ * Create a size reservation
+ *
+ * @generated from rpc metalstack.admin.v2.SizeReservationService.Create
+ */
+ create: {
+ methodKind: "unary";
+ input: typeof SizeReservationServiceCreateRequestSchema;
+ output: typeof SizeReservationServiceCreateResponseSchema;
+ },
+ /**
+ * Update a size reservation
+ *
+ * @generated from rpc metalstack.admin.v2.SizeReservationService.Update
+ */
+ update: {
+ methodKind: "unary";
+ input: typeof SizeReservationServiceUpdateRequestSchema;
+ output: typeof SizeReservationServiceUpdateResponseSchema;
+ },
+ /**
+ * Delete a size reservation
+ *
+ * @generated from rpc metalstack.admin.v2.SizeReservationService.Delete
+ */
+ delete: {
+ methodKind: "unary";
+ input: typeof SizeReservationServiceDeleteRequestSchema;
+ output: typeof SizeReservationServiceDeleteResponseSchema;
+ },
+ /**
+ * List size reservations
+ *
+ * @generated from rpc metalstack.admin.v2.SizeReservationService.List
+ */
+ list: {
+ methodKind: "unary";
+ input: typeof SizeReservationServiceListRequestSchema;
+ output: typeof SizeReservationServiceListResponseSchema;
+ },
+}> = /*@__PURE__*/
+ serviceDesc(file_metalstack_admin_v2_size_reservation, 0);
+
diff --git a/js/metalstack/api/v2/filesystem_pb.ts b/js/metalstack/api/v2/filesystem_pb.ts
index 825588b4..964a1832 100644
--- a/js/metalstack/api/v2/filesystem_pb.ts
+++ b/js/metalstack/api/v2/filesystem_pb.ts
@@ -14,7 +14,7 @@ import type { Message } from "@bufbuild/protobuf";
* Describes the file metalstack/api/v2/filesystem.proto.
*/
export const file_metalstack_api_v2_filesystem: GenFile = /*@__PURE__*/
- fileDesc("CiJtZXRhbHN0YWNrL2FwaS92Mi9maWxlc3lzdGVtLnByb3RvEhFtZXRhbHN0YWNrLmFwaS52MiI1ChtGaWxlc3lzdGVtU2VydmljZUdldFJlcXVlc3QSFgoCaWQYASABKAlCCrpIB3IFEAIYgAEiQgocRmlsZXN5c3RlbVNlcnZpY2VMaXN0UmVxdWVzdBIbCgJpZBgBIAEoCUIKukgHcgUQAhiAAUgAiAEBQgUKA19pZCJeChxGaWxlc3lzdGVtU2VydmljZUdldFJlc3BvbnNlEj4KEWZpbGVzeXN0ZW1fbGF5b3V0GAEgASgLMiMubWV0YWxzdGFjay5hcGkudjIuRmlsZXN5c3RlbUxheW91dCJgCh1GaWxlc3lzdGVtU2VydmljZUxpc3RSZXNwb25zZRI/ChJmaWxlc3lzdGVtX2xheW91dHMYASADKAsyIy5tZXRhbHN0YWNrLmFwaS52Mi5GaWxlc3lzdGVtTGF5b3V0IrEBCh1GaWxlc3lzdGVtU2VydmljZU1hdGNoUmVxdWVzdBI+Cg5zaXplX2FuZF9pbWFnZRgBIAEoCzIkLm1ldGFsc3RhY2suYXBpLnYyLk1hdGNoSW1hZ2VBbmRTaXplSAASRwocbWFjaGluZV9hbmRfZmlsZXN5c3RlbWxheW91dBgCIAEoCzIfLm1ldGFsc3RhY2suYXBpLnYyLk1hdGNoTWFjaGluZUgAQgcKBW1hdGNoIkgKEU1hdGNoSW1hZ2VBbmRTaXplEhgKBHNpemUYASABKAlCCrpIB3IFEAIYgAESGQoFaW1hZ2UYAiABKAlCCrpIB3IFEAIYgAEiUAoMTWF0Y2hNYWNoaW5lEhkKB21hY2hpbmUYASABKAlCCLpIBXIDsAEBEiUKEWZpbGVzeXN0ZW1fbGF5b3V0GAIgASgJQgq6SAdyBRACGIABImAKHkZpbGVzeXN0ZW1TZXJ2aWNlTWF0Y2hSZXNwb25zZRI+ChFmaWxlc3lzdGVtX2xheW91dBgBIAEoCzIjLm1ldGFsc3RhY2suYXBpLnYyLkZpbGVzeXN0ZW1MYXlvdXQi6wMKEEZpbGVzeXN0ZW1MYXlvdXQSFgoCaWQYASABKAlCCrpIB3IFEAIYgAESJQoEbWV0YRgCIAEoCzIXLm1ldGFsc3RhY2suYXBpLnYyLk1ldGESHgoEbmFtZRgDIAEoCUILukgIcgbAs66xAgFIAIgBARIlCgtkZXNjcmlwdGlvbhgEIAEoCUILukgIcgbIs66xAgFIAYgBARIyCgtmaWxlc3lzdGVtcxgFIAMoCzIdLm1ldGFsc3RhY2suYXBpLnYyLkZpbGVzeXN0ZW0SJgoFZGlza3MYBiADKAsyFy5tZXRhbHN0YWNrLmFwaS52Mi5EaXNrEiUKBHJhaWQYByADKAsyFy5tZXRhbHN0YWNrLmFwaS52Mi5SYWlkEjUKDXZvbHVtZV9ncm91cHMYCCADKAsyHi5tZXRhbHN0YWNrLmFwaS52Mi5Wb2x1bWVHcm91cBI5Cg9sb2dpY2FsX3ZvbHVtZXMYCSADKAsyIC5tZXRhbHN0YWNrLmFwaS52Mi5Mb2dpY2FsVm9sdW1lEkMKC2NvbnN0cmFpbnRzGAogASgLMi4ubWV0YWxzdGFjay5hcGkudjIuRmlsZXN5c3RlbUxheW91dENvbnN0cmFpbnRzQgcKBV9uYW1lQg4KDF9kZXNjcmlwdGlvbiKnAQobRmlsZXN5c3RlbUxheW91dENvbnN0cmFpbnRzEg0KBXNpemVzGAEgAygJEkoKBmltYWdlcxgCIAMoCzI6Lm1ldGFsc3RhY2suYXBpLnYyLkZpbGVzeXN0ZW1MYXlvdXRDb25zdHJhaW50cy5JbWFnZXNFbnRyeRotCgtJbWFnZXNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIusCCgpGaWxlc3lzdGVtEhoKBmRldmljZRgBIAEoCUIKukgHcgUQAhiAARI2CgZmb3JtYXQYAiABKA4yGS5tZXRhbHN0YWNrLmFwaS52Mi5Gb3JtYXRCC7pICMgBAYIBAhABEh4KBG5hbWUYAyABKAlCC7pICHIGwLOusQIBSACIAQESJQoLZGVzY3JpcHRpb24YBCABKAlCC7pICHIGyLOusQIBSAGIAQESHQoEcGF0aBgFIAEoCUIKukgHcgUQARiAIEgCiAEBEh4KBWxhYmVsGAYgASgJQgq6SAdyBRACGIABSAOIAQESKgoNbW91bnRfb3B0aW9ucxgHIAMoCUITukgQkgENECAYASIHcgUQARiAARIrCg5jcmVhdGVfb3B0aW9ucxgIIAMoCUITukgQkgENECAYASIHcgUQARiAAUIHCgVfbmFtZUIOCgxfZGVzY3JpcHRpb25CBwoFX3BhdGhCCAoGX2xhYmVsIlgKBERpc2sSGgoGZGV2aWNlGAEgASgJQgq6SAdyBRACGIABEjQKCnBhcnRpdGlvbnMYAiADKAsyIC5tZXRhbHN0YWNrLmFwaS52Mi5EaXNrUGFydGl0aW9uIqIBCgRSYWlkEhIKCmFycmF5X25hbWUYASABKAkSDwoHZGV2aWNlcxgCIAMoCRI4CgVsZXZlbBgDIAEoDjIcLm1ldGFsc3RhY2suYXBpLnYyLlJhaWRMZXZlbEILukgIyAEBggECEAESKwoOY3JlYXRlX29wdGlvbnMYBCADKAlCE7pIEJIBDRAgGAEiB3IFEAEYgAESDgoGc3BhcmVzGAUgASgFIpgBCg1EaXNrUGFydGl0aW9uEg4KBm51bWJlchgBIAEoDRISCgVsYWJlbBgCIAEoCUgAiAEBEgwKBHNpemUYAyABKAQSPgoIZ3B0X3R5cGUYBCABKA4yGi5tZXRhbHN0YWNrLmFwaS52Mi5HUFRUeXBlQgu6SAjIAQGCAQIQAUgBiAEBQggKBl9sYWJlbEILCglfZ3B0X3R5cGUiRwoLVm9sdW1lR3JvdXASGQoEbmFtZRgBIAEoCUILukgIcgbAs66xAgESDwoHZGV2aWNlcxgCIAMoCRIMCgR0YWdzGAMgAygJIpIBCg1Mb2dpY2FsVm9sdW1lEhkKBG5hbWUYASABKAlCC7pICHIGwLOusQIBEiAKDHZvbHVtZV9ncm91cBgCIAEoCUIKukgHcgUQAhiAARIMCgRzaXplGAMgASgEEjYKCGx2bV90eXBlGAQgASgOMhoubWV0YWxzdGFjay5hcGkudjIuTFZNVHlwZUIIukgFggECEAEqhgEKB0xWTVR5cGUSGAoUTFZNX1RZUEVfVU5TUEVDSUZJRUQQABIfCg9MVk1fVFlQRV9MSU5FQVIQARoKgrIZBmxpbmVhchIhChBMVk1fVFlQRV9TVFJJUEVEEAIaC4KyGQdzdHJpcGVkEh0KDkxWTV9UWVBFX1JBSUQxEAMaCYKyGQVyYWlkMSrEAQoGRm9ybWF0EhYKEkZPUk1BVF9VTlNQRUNJRklFRBAAEhkKC0ZPUk1BVF9WRkFUEAEaCIKyGQR2ZmF0EhkKC0ZPUk1BVF9FWFQzEAIaCIKyGQRleHQzEhkKC0ZPUk1BVF9FWFQ0EAMaCIKyGQRleHQ0EhkKC0ZPUk1BVF9TV0FQEAQaCIKyGQRzd2FwEhsKDEZPUk1BVF9UTVBGUxAFGgmCshkFdG1wZnMSGQoLRk9STUFUX05PTkUQBhoIgrIZBG5vbmUqowEKB0dQVFR5cGUSGAoUR1BUX1RZUEVfVU5TUEVDSUZJRUQQABIbCg1HUFRfVFlQRV9CT09UEAEaCIKyGQRlZjAwEhwKDkdQVF9UWVBFX0xJTlVYEAIaCIKyGQQ4MzAwEiEKE0dQVF9UWVBFX0xJTlVYX1JBSUQQAxoIgrIZBGZkMDASIAoSR1BUX1RZUEVfTElOVVhfTFZNEAQaCIKyGQQ4ZTAwKksKCVJhaWRMZXZlbBIaChZSQUlEX0xFVkVMX1VOU1BFQ0lGSUVEEAASEAoMUkFJRF9MRVZFTF8wEAESEAoMUkFJRF9MRVZFTF8xEAIy8gIKEUZpbGVzeXN0ZW1TZXJ2aWNlEnAKA0dldBIuLm1ldGFsc3RhY2suYXBpLnYyLkZpbGVzeXN0ZW1TZXJ2aWNlR2V0UmVxdWVzdBovLm1ldGFsc3RhY2suYXBpLnYyLkZpbGVzeXN0ZW1TZXJ2aWNlR2V0UmVzcG9uc2UiCNjzGAPg8xgCEnMKBExpc3QSLy5tZXRhbHN0YWNrLmFwaS52Mi5GaWxlc3lzdGVtU2VydmljZUxpc3RSZXF1ZXN0GjAubWV0YWxzdGFjay5hcGkudjIuRmlsZXN5c3RlbVNlcnZpY2VMaXN0UmVzcG9uc2UiCNjzGAPg8xgCEnYKBU1hdGNoEjAubWV0YWxzdGFjay5hcGkudjIuRmlsZXN5c3RlbVNlcnZpY2VNYXRjaFJlcXVlc3QaMS5tZXRhbHN0YWNrLmFwaS52Mi5GaWxlc3lzdGVtU2VydmljZU1hdGNoUmVzcG9uc2UiCNjzGAPg8xgCQsUBChVjb20ubWV0YWxzdGFjay5hcGkudjJCD0ZpbGVzeXN0ZW1Qcm90b1ABWjVnaXRodWIuY29tL21ldGFsLXN0YWNrL2FwaS9nby9tZXRhbHN0YWNrL2FwaS92MjthcGl2MqICA01BWKoCEU1ldGFsc3RhY2suQXBpLlYyygIRTWV0YWxzdGFja1xBcGlcVjLiAh1NZXRhbHN0YWNrXEFwaVxWMlxHUEJNZXRhZGF0YeoCE01ldGFsc3RhY2s6OkFwaTo6VjJiBnByb3RvMw", [file_buf_validate_validate, file_metalstack_api_v2_common, file_metalstack_api_v2_predefined_rules]);
+ fileDesc("CiJtZXRhbHN0YWNrL2FwaS92Mi9maWxlc3lzdGVtLnByb3RvEhFtZXRhbHN0YWNrLmFwaS52MiI2ChtGaWxlc3lzdGVtU2VydmljZUdldFJlcXVlc3QSFwoCaWQYASABKAlCC7pICHIGwLOusQIBIkMKHEZpbGVzeXN0ZW1TZXJ2aWNlTGlzdFJlcXVlc3QSHAoCaWQYASABKAlCC7pICHIGwLOusQIBSACIAQFCBQoDX2lkIl4KHEZpbGVzeXN0ZW1TZXJ2aWNlR2V0UmVzcG9uc2USPgoRZmlsZXN5c3RlbV9sYXlvdXQYASABKAsyIy5tZXRhbHN0YWNrLmFwaS52Mi5GaWxlc3lzdGVtTGF5b3V0ImAKHUZpbGVzeXN0ZW1TZXJ2aWNlTGlzdFJlc3BvbnNlEj8KEmZpbGVzeXN0ZW1fbGF5b3V0cxgBIAMoCzIjLm1ldGFsc3RhY2suYXBpLnYyLkZpbGVzeXN0ZW1MYXlvdXQisQEKHUZpbGVzeXN0ZW1TZXJ2aWNlTWF0Y2hSZXF1ZXN0Ej4KDnNpemVfYW5kX2ltYWdlGAEgASgLMiQubWV0YWxzdGFjay5hcGkudjIuTWF0Y2hJbWFnZUFuZFNpemVIABJHChxtYWNoaW5lX2FuZF9maWxlc3lzdGVtbGF5b3V0GAIgASgLMh8ubWV0YWxzdGFjay5hcGkudjIuTWF0Y2hNYWNoaW5lSABCBwoFbWF0Y2giSgoRTWF0Y2hJbWFnZUFuZFNpemUSGQoEc2l6ZRgBIAEoCUILukgIcgbAs66xAgESGgoFaW1hZ2UYAiABKAlCC7pICHIGwLOusQIBIlEKDE1hdGNoTWFjaGluZRIZCgdtYWNoaW5lGAEgASgJQgi6SAVyA7ABARImChFmaWxlc3lzdGVtX2xheW91dBgCIAEoCUILukgIcgbAs66xAgEiYAoeRmlsZXN5c3RlbVNlcnZpY2VNYXRjaFJlc3BvbnNlEj4KEWZpbGVzeXN0ZW1fbGF5b3V0GAEgASgLMiMubWV0YWxzdGFjay5hcGkudjIuRmlsZXN5c3RlbUxheW91dCLsAwoQRmlsZXN5c3RlbUxheW91dBIXCgJpZBgBIAEoCUILukgIcgbAs66xAgESJQoEbWV0YRgCIAEoCzIXLm1ldGFsc3RhY2suYXBpLnYyLk1ldGESHgoEbmFtZRgDIAEoCUILukgIcgbAs66xAgFIAIgBARIlCgtkZXNjcmlwdGlvbhgEIAEoCUILukgIcgbIs66xAgFIAYgBARIyCgtmaWxlc3lzdGVtcxgFIAMoCzIdLm1ldGFsc3RhY2suYXBpLnYyLkZpbGVzeXN0ZW0SJgoFZGlza3MYBiADKAsyFy5tZXRhbHN0YWNrLmFwaS52Mi5EaXNrEiUKBHJhaWQYByADKAsyFy5tZXRhbHN0YWNrLmFwaS52Mi5SYWlkEjUKDXZvbHVtZV9ncm91cHMYCCADKAsyHi5tZXRhbHN0YWNrLmFwaS52Mi5Wb2x1bWVHcm91cBI5Cg9sb2dpY2FsX3ZvbHVtZXMYCSADKAsyIC5tZXRhbHN0YWNrLmFwaS52Mi5Mb2dpY2FsVm9sdW1lEkMKC2NvbnN0cmFpbnRzGAogASgLMi4ubWV0YWxzdGFjay5hcGkudjIuRmlsZXN5c3RlbUxheW91dENvbnN0cmFpbnRzQgcKBV9uYW1lQg4KDF9kZXNjcmlwdGlvbiKnAQobRmlsZXN5c3RlbUxheW91dENvbnN0cmFpbnRzEg0KBXNpemVzGAEgAygJEkoKBmltYWdlcxgCIAMoCzI6Lm1ldGFsc3RhY2suYXBpLnYyLkZpbGVzeXN0ZW1MYXlvdXRDb25zdHJhaW50cy5JbWFnZXNFbnRyeRotCgtJbWFnZXNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIuwCCgpGaWxlc3lzdGVtEhsKBmRldmljZRgBIAEoCUILukgIcgbAs66xAgESNgoGZm9ybWF0GAIgASgOMhkubWV0YWxzdGFjay5hcGkudjIuRm9ybWF0Qgu6SAjIAQGCAQIQARIeCgRuYW1lGAMgASgJQgu6SAhyBsCzrrECAUgAiAEBEiUKC2Rlc2NyaXB0aW9uGAQgASgJQgu6SAhyBsizrrECAUgBiAEBEh0KBHBhdGgYBSABKAlCCrpIB3IFEAEYgCBIAogBARIeCgVsYWJlbBgGIAEoCUIKukgHcgUQAhiAAUgDiAEBEioKDW1vdW50X29wdGlvbnMYByADKAlCE7pIEJIBDRAgGAEiB3IFEAEYgAESKwoOY3JlYXRlX29wdGlvbnMYCCADKAlCE7pIEJIBDRAgGAEiB3IFEAEYgAFCBwoFX25hbWVCDgoMX2Rlc2NyaXB0aW9uQgcKBV9wYXRoQggKBl9sYWJlbCJYCgREaXNrEhoKBmRldmljZRgBIAEoCUIKukgHcgUQAhiAARI0CgpwYXJ0aXRpb25zGAIgAygLMiAubWV0YWxzdGFjay5hcGkudjIuRGlza1BhcnRpdGlvbiKiAQoEUmFpZBISCgphcnJheV9uYW1lGAEgASgJEg8KB2RldmljZXMYAiADKAkSOAoFbGV2ZWwYAyABKA4yHC5tZXRhbHN0YWNrLmFwaS52Mi5SYWlkTGV2ZWxCC7pICMgBAYIBAhABEisKDmNyZWF0ZV9vcHRpb25zGAQgAygJQhO6SBCSAQ0QIBgBIgdyBRABGIABEg4KBnNwYXJlcxgFIAEoBSKYAQoNRGlza1BhcnRpdGlvbhIOCgZudW1iZXIYASABKA0SEgoFbGFiZWwYAiABKAlIAIgBARIMCgRzaXplGAMgASgEEj4KCGdwdF90eXBlGAQgASgOMhoubWV0YWxzdGFjay5hcGkudjIuR1BUVHlwZUILukgIyAEBggECEAFIAYgBAUIICgZfbGFiZWxCCwoJX2dwdF90eXBlIkcKC1ZvbHVtZUdyb3VwEhkKBG5hbWUYASABKAlCC7pICHIGwLOusQIBEg8KB2RldmljZXMYAiADKAkSDAoEdGFncxgDIAMoCSKSAQoNTG9naWNhbFZvbHVtZRIZCgRuYW1lGAEgASgJQgu6SAhyBsCzrrECARIgCgx2b2x1bWVfZ3JvdXAYAiABKAlCCrpIB3IFEAIYgAESDAoEc2l6ZRgDIAEoBBI2Cghsdm1fdHlwZRgEIAEoDjIaLm1ldGFsc3RhY2suYXBpLnYyLkxWTVR5cGVCCLpIBYIBAhABKoYBCgdMVk1UeXBlEhgKFExWTV9UWVBFX1VOU1BFQ0lGSUVEEAASHwoPTFZNX1RZUEVfTElORUFSEAEaCoKyGQZsaW5lYXISIQoQTFZNX1RZUEVfU1RSSVBFRBACGguCshkHc3RyaXBlZBIdCg5MVk1fVFlQRV9SQUlEMRADGgmCshkFcmFpZDEqxAEKBkZvcm1hdBIWChJGT1JNQVRfVU5TUEVDSUZJRUQQABIZCgtGT1JNQVRfVkZBVBABGgiCshkEdmZhdBIZCgtGT1JNQVRfRVhUMxACGgiCshkEZXh0MxIZCgtGT1JNQVRfRVhUNBADGgiCshkEZXh0NBIZCgtGT1JNQVRfU1dBUBAEGgiCshkEc3dhcBIbCgxGT1JNQVRfVE1QRlMQBRoJgrIZBXRtcGZzEhkKC0ZPUk1BVF9OT05FEAYaCIKyGQRub25lKqMBCgdHUFRUeXBlEhgKFEdQVF9UWVBFX1VOU1BFQ0lGSUVEEAASGwoNR1BUX1RZUEVfQk9PVBABGgiCshkEZWYwMBIcCg5HUFRfVFlQRV9MSU5VWBACGgiCshkEODMwMBIhChNHUFRfVFlQRV9MSU5VWF9SQUlEEAMaCIKyGQRmZDAwEiAKEkdQVF9UWVBFX0xJTlVYX0xWTRAEGgiCshkEOGUwMCpLCglSYWlkTGV2ZWwSGgoWUkFJRF9MRVZFTF9VTlNQRUNJRklFRBAAEhAKDFJBSURfTEVWRUxfMBABEhAKDFJBSURfTEVWRUxfMRACMvICChFGaWxlc3lzdGVtU2VydmljZRJwCgNHZXQSLi5tZXRhbHN0YWNrLmFwaS52Mi5GaWxlc3lzdGVtU2VydmljZUdldFJlcXVlc3QaLy5tZXRhbHN0YWNrLmFwaS52Mi5GaWxlc3lzdGVtU2VydmljZUdldFJlc3BvbnNlIgjY8xgD4PMYAhJzCgRMaXN0Ei8ubWV0YWxzdGFjay5hcGkudjIuRmlsZXN5c3RlbVNlcnZpY2VMaXN0UmVxdWVzdBowLm1ldGFsc3RhY2suYXBpLnYyLkZpbGVzeXN0ZW1TZXJ2aWNlTGlzdFJlc3BvbnNlIgjY8xgD4PMYAhJ2CgVNYXRjaBIwLm1ldGFsc3RhY2suYXBpLnYyLkZpbGVzeXN0ZW1TZXJ2aWNlTWF0Y2hSZXF1ZXN0GjEubWV0YWxzdGFjay5hcGkudjIuRmlsZXN5c3RlbVNlcnZpY2VNYXRjaFJlc3BvbnNlIgjY8xgD4PMYAkLFAQoVY29tLm1ldGFsc3RhY2suYXBpLnYyQg9GaWxlc3lzdGVtUHJvdG9QAVo1Z2l0aHViLmNvbS9tZXRhbC1zdGFjay9hcGkvZ28vbWV0YWxzdGFjay9hcGkvdjI7YXBpdjKiAgNNQViqAhFNZXRhbHN0YWNrLkFwaS5WMsoCEU1ldGFsc3RhY2tcQXBpXFYy4gIdTWV0YWxzdGFja1xBcGlcVjJcR1BCTWV0YWRhdGHqAhNNZXRhbHN0YWNrOjpBcGk6OlYyYgZwcm90bzM", [file_buf_validate_validate, file_metalstack_api_v2_common, file_metalstack_api_v2_predefined_rules]);
/**
* FilesystemServiceGetRequest is the request payload for a filesystem get request
diff --git a/js/metalstack/api/v2/image_pb.ts b/js/metalstack/api/v2/image_pb.ts
index 472519ec..6df06378 100644
--- a/js/metalstack/api/v2/image_pb.ts
+++ b/js/metalstack/api/v2/image_pb.ts
@@ -16,7 +16,7 @@ import type { Message } from "@bufbuild/protobuf";
* Describes the file metalstack/api/v2/image.proto.
*/
export const file_metalstack_api_v2_image: GenFile = /*@__PURE__*/
- fileDesc("Ch1tZXRhbHN0YWNrL2FwaS92Mi9pbWFnZS5wcm90bxIRbWV0YWxzdGFjay5hcGkudjIiMAoWSW1hZ2VTZXJ2aWNlR2V0UmVxdWVzdBIWCgJpZBgBIAEoCUIKukgHcgUQAhiAASJHChdJbWFnZVNlcnZpY2VMaXN0UmVxdWVzdBIsCgVxdWVyeRgBIAEoCzIdLm1ldGFsc3RhY2suYXBpLnYyLkltYWdlUXVlcnkiJwoZSW1hZ2VTZXJ2aWNlTGF0ZXN0UmVxdWVzdBIKCgJvcxgBIAEoCSJCChdJbWFnZVNlcnZpY2VHZXRSZXNwb25zZRInCgVpbWFnZRgBIAEoCzIYLm1ldGFsc3RhY2suYXBpLnYyLkltYWdlIkQKGEltYWdlU2VydmljZUxpc3RSZXNwb25zZRIoCgZpbWFnZXMYASADKAsyGC5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZSJFChpJbWFnZVNlcnZpY2VMYXRlc3RSZXNwb25zZRInCgVpbWFnZRgBIAEoCzIYLm1ldGFsc3RhY2suYXBpLnYyLkltYWdlIv4CCgVJbWFnZRIWCgJpZBgBIAEoCUIKukgHcgUQAhiAARIlCgRtZXRhGAIgASgLMhcubWV0YWxzdGFjay5hcGkudjIuTWV0YRIYCgN1cmwYAyABKAlCC7pICHIG4LOusQIBEh4KBG5hbWUYBCABKAlCC7pICHIGwLOusQIBSACIAQESJQoLZGVzY3JpcHRpb24YBSABKAlCC7pICHIGyLOusQIBSAGIAQESQgoIZmVhdHVyZXMYBiADKA4yHy5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZUZlYXR1cmVCD7pIDJIBCRgBIgWCAQIQARJICg5jbGFzc2lmaWNhdGlvbhgHIAEoDjImLm1ldGFsc3RhY2suYXBpLnYyLkltYWdlQ2xhc3NpZmljYXRpb25CCLpIBYIBAhABEi4KCmV4cGlyZXNfYXQYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgcKBV9uYW1lQg4KDF9kZXNjcmlwdGlvbiJGCgpJbWFnZVVzYWdlEicKBWltYWdlGAEgASgLMhgubWV0YWxzdGFjay5hcGkudjIuSW1hZ2USDwoHdXNlZF9ieRgCIAMoCSLzAwoKSW1hZ2VRdWVyeRIbCgJpZBgBIAEoCUIKukgHcgUQAhiAAUgAiAEBEhsKAm9zGAIgASgJQgq6SAdyBRACGIABSAGIAQESIAoHdmVyc2lvbhgDIAEoCUIKukgHcgUQARiAAUgCiAEBEh4KBG5hbWUYBCABKAlCC7pICHIGwLOusQIBSAOIAQESJQoLZGVzY3JpcHRpb24YBSABKAlCC7pICHIGyLOusQIBSASIAQESHQoDdXJsGAYgASgJQgu6SAhyBuCzrrECAUgFiAEBEj8KB2ZlYXR1cmUYByABKA4yHy5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZUZlYXR1cmVCCLpIBYIBAhABSAaIAQESTQoOY2xhc3NpZmljYXRpb24YCCABKA4yJi5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZUNsYXNzaWZpY2F0aW9uQgi6SAWCAQIQAUgHiAEBEi4KBmxhYmVscxgJIAEoCzIZLm1ldGFsc3RhY2suYXBpLnYyLkxhYmVsc0gIiAEBQgUKA19pZEIFCgNfb3NCCgoIX3ZlcnNpb25CBwoFX25hbWVCDgoMX2Rlc2NyaXB0aW9uQgYKBF91cmxCCgoIX2ZlYXR1cmVCEQoPX2NsYXNzaWZpY2F0aW9uQgkKB19sYWJlbHMqfwoMSW1hZ2VGZWF0dXJlEh0KGUlNQUdFX0ZFQVRVUkVfVU5TUEVDSUZJRUQQABImChVJTUFHRV9GRUFUVVJFX01BQ0hJTkUQARoLgrIZB21hY2hpbmUSKAoWSU1BR0VfRkVBVFVSRV9GSVJFV0FMTBACGgyCshkIZmlyZXdhbGwq0gEKE0ltYWdlQ2xhc3NpZmljYXRpb24SJAogSU1BR0VfQ0xBU1NJRklDQVRJT05fVU5TUEVDSUZJRUQQABItChxJTUFHRV9DTEFTU0lGSUNBVElPTl9QUkVWSUVXEAEaC4KyGQdwcmV2aWV3EjEKHklNQUdFX0NMQVNTSUZJQ0FUSU9OX1NVUFBPUlRFRBACGg2CshkJc3VwcG9ydGVkEjMKH0lNQUdFX0NMQVNTSUZJQ0FUSU9OX0RFUFJFQ0FURUQQAxoOgrIZCmRlcHJlY2F0ZWQy0gIKDEltYWdlU2VydmljZRJmCgNHZXQSKS5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZVNlcnZpY2VHZXRSZXF1ZXN0GioubWV0YWxzdGFjay5hcGkudjIuSW1hZ2VTZXJ2aWNlR2V0UmVzcG9uc2UiCNjzGAPg8xgCEmkKBExpc3QSKi5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZVNlcnZpY2VMaXN0UmVxdWVzdBorLm1ldGFsc3RhY2suYXBpLnYyLkltYWdlU2VydmljZUxpc3RSZXNwb25zZSII2PMYA+DzGAISbwoGTGF0ZXN0EiwubWV0YWxzdGFjay5hcGkudjIuSW1hZ2VTZXJ2aWNlTGF0ZXN0UmVxdWVzdBotLm1ldGFsc3RhY2suYXBpLnYyLkltYWdlU2VydmljZUxhdGVzdFJlc3BvbnNlIgjY8xgD4PMYAkLAAQoVY29tLm1ldGFsc3RhY2suYXBpLnYyQgpJbWFnZVByb3RvUAFaNWdpdGh1Yi5jb20vbWV0YWwtc3RhY2svYXBpL2dvL21ldGFsc3RhY2svYXBpL3YyO2FwaXYyogIDTUFYqgIRTWV0YWxzdGFjay5BcGkuVjLKAhFNZXRhbHN0YWNrXEFwaVxWMuICHU1ldGFsc3RhY2tcQXBpXFYyXEdQQk1ldGFkYXRh6gITTWV0YWxzdGFjazo6QXBpOjpWMmIGcHJvdG8z", [file_buf_validate_validate, file_google_protobuf_timestamp, file_metalstack_api_v2_common, file_metalstack_api_v2_predefined_rules]);
+ fileDesc("Ch1tZXRhbHN0YWNrL2FwaS92Mi9pbWFnZS5wcm90bxIRbWV0YWxzdGFjay5hcGkudjIiMQoWSW1hZ2VTZXJ2aWNlR2V0UmVxdWVzdBIXCgJpZBgBIAEoCUILukgIcgbAs66xAgEiRwoXSW1hZ2VTZXJ2aWNlTGlzdFJlcXVlc3QSLAoFcXVlcnkYASABKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZVF1ZXJ5IicKGUltYWdlU2VydmljZUxhdGVzdFJlcXVlc3QSCgoCb3MYASABKAkiQgoXSW1hZ2VTZXJ2aWNlR2V0UmVzcG9uc2USJwoFaW1hZ2UYASABKAsyGC5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZSJEChhJbWFnZVNlcnZpY2VMaXN0UmVzcG9uc2USKAoGaW1hZ2VzGAEgAygLMhgubWV0YWxzdGFjay5hcGkudjIuSW1hZ2UiRQoaSW1hZ2VTZXJ2aWNlTGF0ZXN0UmVzcG9uc2USJwoFaW1hZ2UYASABKAsyGC5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZSL/AgoFSW1hZ2USFwoCaWQYASABKAlCC7pICHIGwLOusQIBEiUKBG1ldGEYAiABKAsyFy5tZXRhbHN0YWNrLmFwaS52Mi5NZXRhEhgKA3VybBgDIAEoCUILukgIcgbgs66xAgESHgoEbmFtZRgEIAEoCUILukgIcgbAs66xAgFIAIgBARIlCgtkZXNjcmlwdGlvbhgFIAEoCUILukgIcgbIs66xAgFIAYgBARJCCghmZWF0dXJlcxgGIAMoDjIfLm1ldGFsc3RhY2suYXBpLnYyLkltYWdlRmVhdHVyZUIPukgMkgEJGAEiBYIBAhABEkgKDmNsYXNzaWZpY2F0aW9uGAcgASgOMiYubWV0YWxzdGFjay5hcGkudjIuSW1hZ2VDbGFzc2lmaWNhdGlvbkIIukgFggECEAESLgoKZXhwaXJlc19hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCBwoFX25hbWVCDgoMX2Rlc2NyaXB0aW9uIkYKCkltYWdlVXNhZ2USJwoFaW1hZ2UYASABKAsyGC5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZRIPCgd1c2VkX2J5GAIgAygJIvQDCgpJbWFnZVF1ZXJ5EhwKAmlkGAEgASgJQgu6SAhyBsCzrrECAUgAiAEBEhsKAm9zGAIgASgJQgq6SAdyBRACGIABSAGIAQESIAoHdmVyc2lvbhgDIAEoCUIKukgHcgUQARiAAUgCiAEBEh4KBG5hbWUYBCABKAlCC7pICHIGwLOusQIBSAOIAQESJQoLZGVzY3JpcHRpb24YBSABKAlCC7pICHIGyLOusQIBSASIAQESHQoDdXJsGAYgASgJQgu6SAhyBuCzrrECAUgFiAEBEj8KB2ZlYXR1cmUYByABKA4yHy5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZUZlYXR1cmVCCLpIBYIBAhABSAaIAQESTQoOY2xhc3NpZmljYXRpb24YCCABKA4yJi5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZUNsYXNzaWZpY2F0aW9uQgi6SAWCAQIQAUgHiAEBEi4KBmxhYmVscxgJIAEoCzIZLm1ldGFsc3RhY2suYXBpLnYyLkxhYmVsc0gIiAEBQgUKA19pZEIFCgNfb3NCCgoIX3ZlcnNpb25CBwoFX25hbWVCDgoMX2Rlc2NyaXB0aW9uQgYKBF91cmxCCgoIX2ZlYXR1cmVCEQoPX2NsYXNzaWZpY2F0aW9uQgkKB19sYWJlbHMqfwoMSW1hZ2VGZWF0dXJlEh0KGUlNQUdFX0ZFQVRVUkVfVU5TUEVDSUZJRUQQABImChVJTUFHRV9GRUFUVVJFX01BQ0hJTkUQARoLgrIZB21hY2hpbmUSKAoWSU1BR0VfRkVBVFVSRV9GSVJFV0FMTBACGgyCshkIZmlyZXdhbGwq0gEKE0ltYWdlQ2xhc3NpZmljYXRpb24SJAogSU1BR0VfQ0xBU1NJRklDQVRJT05fVU5TUEVDSUZJRUQQABItChxJTUFHRV9DTEFTU0lGSUNBVElPTl9QUkVWSUVXEAEaC4KyGQdwcmV2aWV3EjEKHklNQUdFX0NMQVNTSUZJQ0FUSU9OX1NVUFBPUlRFRBACGg2CshkJc3VwcG9ydGVkEjMKH0lNQUdFX0NMQVNTSUZJQ0FUSU9OX0RFUFJFQ0FURUQQAxoOgrIZCmRlcHJlY2F0ZWQy0gIKDEltYWdlU2VydmljZRJmCgNHZXQSKS5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZVNlcnZpY2VHZXRSZXF1ZXN0GioubWV0YWxzdGFjay5hcGkudjIuSW1hZ2VTZXJ2aWNlR2V0UmVzcG9uc2UiCNjzGAPg8xgCEmkKBExpc3QSKi5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZVNlcnZpY2VMaXN0UmVxdWVzdBorLm1ldGFsc3RhY2suYXBpLnYyLkltYWdlU2VydmljZUxpc3RSZXNwb25zZSII2PMYA+DzGAISbwoGTGF0ZXN0EiwubWV0YWxzdGFjay5hcGkudjIuSW1hZ2VTZXJ2aWNlTGF0ZXN0UmVxdWVzdBotLm1ldGFsc3RhY2suYXBpLnYyLkltYWdlU2VydmljZUxhdGVzdFJlc3BvbnNlIgjY8xgD4PMYAkLAAQoVY29tLm1ldGFsc3RhY2suYXBpLnYyQgpJbWFnZVByb3RvUAFaNWdpdGh1Yi5jb20vbWV0YWwtc3RhY2svYXBpL2dvL21ldGFsc3RhY2svYXBpL3YyO2FwaXYyogIDTUFYqgIRTWV0YWxzdGFjay5BcGkuVjLKAhFNZXRhbHN0YWNrXEFwaVxWMuICHU1ldGFsc3RhY2tcQXBpXFYyXEdQQk1ldGFkYXRh6gITTWV0YWxzdGFjazo6QXBpOjpWMmIGcHJvdG8z", [file_buf_validate_validate, file_google_protobuf_timestamp, file_metalstack_api_v2_common, file_metalstack_api_v2_predefined_rules]);
/**
* ImageServiceGetRequest is the request payload for a image get request
diff --git a/js/metalstack/api/v2/ip_pb.ts b/js/metalstack/api/v2/ip_pb.ts
index e463ffa8..49e5ffc4 100644
--- a/js/metalstack/api/v2/ip_pb.ts
+++ b/js/metalstack/api/v2/ip_pb.ts
@@ -14,7 +14,7 @@ import type { Message } from "@bufbuild/protobuf";
* Describes the file metalstack/api/v2/ip.proto.
*/
export const file_metalstack_api_v2_ip: GenFile = /*@__PURE__*/
- fileDesc("ChptZXRhbHN0YWNrL2FwaS92Mi9pcC5wcm90bxIRbWV0YWxzdGFjay5hcGkudjIisAIKAklQEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEiUKBG1ldGEYAiABKAsyFy5tZXRhbHN0YWNrLmFwaS52Mi5NZXRhEhMKAmlwGAMgASgJQge6SARyAnABEhkKBG5hbWUYBCABKAlCC7pICHIGwLOusQIBEiAKC2Rlc2NyaXB0aW9uGAUgASgJQgu6SAhyBsizrrECARIbCgduZXR3b3JrGAYgASgJQgq6SAdyBRACGIABEhkKB3Byb2plY3QYByABKAlCCLpIBXIDsAEBEjEKBHR5cGUYCCABKA4yGS5tZXRhbHN0YWNrLmFwaS52Mi5JUFR5cGVCCLpIBYIBAhABEiAKCW5hbWVzcGFjZRgJIAEoCUIIukgFcgOwAQFIAIgBAUIMCgpfbmFtZXNwYWNlInUKE0lQU2VydmljZUdldFJlcXVlc3QSEwoCaXAYASABKAlCB7pIBHICcAESGQoHcHJvamVjdBgCIAEoCUIIukgFcgOwAQESIAoJbmFtZXNwYWNlGAMgASgJQgi6SAVyA7ABAUgAiAEBQgwKCl9uYW1lc3BhY2Ui1wMKFklQU2VydmljZUNyZWF0ZVJlcXVlc3QSGwoHbmV0d29yaxgBIAEoCUIKukgHcgUQAhiAARIZCgdwcm9qZWN0GAIgASgJQgi6SAVyA7ABARIeCgRuYW1lGAMgASgJQgu6SAhyBsCzrrECAUgAiAEBEiUKC2Rlc2NyaXB0aW9uGAQgASgJQgu6SAhyBsizrrECAUgBiAEBEhgKAmlwGAUgASgJQge6SARyAnABSAKIAQESHgoHbWFjaGluZRgGIAEoCUIIukgFcgOwAQFIA4gBARIuCgZsYWJlbHMYByABKAsyGS5tZXRhbHN0YWNrLmFwaS52Mi5MYWJlbHNIBIgBARI2CgR0eXBlGAggASgOMhkubWV0YWxzdGFjay5hcGkudjIuSVBUeXBlQgi6SAWCAQIQAUgFiAEBEkkKDmFkZHJlc3NfZmFtaWx5GAkgASgOMiIubWV0YWxzdGFjay5hcGkudjIuSVBBZGRyZXNzRmFtaWx5Qgi6SAWCAQIQAUgGiAEBQgcKBV9uYW1lQg4KDF9kZXNjcmlwdGlvbkIFCgNfaXBCCgoIX21hY2hpbmVCCQoHX2xhYmVsc0IHCgVfdHlwZUIRCg9fYWRkcmVzc19mYW1pbHki5gIKFklQU2VydmljZVVwZGF0ZVJlcXVlc3QSEwoCaXAYASABKAlCB7pIBHICcAESOgoLdXBkYXRlX21ldGEYAiABKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5VcGRhdGVNZXRhQga6SAPIAQESGQoHcHJvamVjdBgDIAEoCUIIukgFcgOwAQESHgoEbmFtZRgEIAEoCUILukgIcgbAs66xAgFIAIgBARIlCgtkZXNjcmlwdGlvbhgFIAEoCUILukgIcgbIs66xAgFIAYgBARI2CgR0eXBlGAYgASgOMhkubWV0YWxzdGFjay5hcGkudjIuSVBUeXBlQgi6SAWCAQIQAUgCiAEBEjQKBmxhYmVscxgHIAEoCzIfLm1ldGFsc3RhY2suYXBpLnYyLlVwZGF0ZUxhYmVsc0gDiAEBQgcKBV9uYW1lQg4KDF9kZXNjcmlwdGlvbkIHCgVfdHlwZUIJCgdfbGFiZWxzIlwKFElQU2VydmljZUxpc3RSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBEikKBXF1ZXJ5GAIgASgLMhoubWV0YWxzdGFjay5hcGkudjIuSVBRdWVyeSLLBAoHSVBRdWVyeRIYCgJpcBgBIAEoCUIHukgEcgJwAUgAiAEBEiAKB25ldHdvcmsYAiABKAlCCrpIB3IFEAIYgAFIAYgBARIeCgdwcm9qZWN0GAMgASgJQgi6SAVyA7ABAUgCiAEBEh4KBG5hbWUYBCABKAlCC7pICHIGwLOusQIBSAOIAQESGwoEdXVpZBgFIAEoCUIIukgFcgOwAQFIBIgBARIeCgdtYWNoaW5lGAYgASgJQgi6SAVyA7ABAUgFiAEBEikKEnBhcmVudF9wcmVmaXhfY2lkchgHIAEoCUIIukgFcgPoAQFIBogBARIuCgZsYWJlbHMYCCABKAsyGS5tZXRhbHN0YWNrLmFwaS52Mi5MYWJlbHNIB4gBARI2CgR0eXBlGAkgASgOMhkubWV0YWxzdGFjay5hcGkudjIuSVBUeXBlQgi6SAWCAQIQAUgIiAEBEkkKDmFkZHJlc3NfZmFtaWx5GAogASgOMiIubWV0YWxzdGFjay5hcGkudjIuSVBBZGRyZXNzRmFtaWx5Qgi6SAWCAQIQAUgJiAEBEiAKCW5hbWVzcGFjZRgLIAEoCUIIukgFcgOwAQFICogBAUIFCgNfaXBCCgoIX25ldHdvcmtCCgoIX3Byb2plY3RCBwoFX25hbWVCBwoFX3V1aWRCCgoIX21hY2hpbmVCFQoTX3BhcmVudF9wcmVmaXhfY2lkckIJCgdfbGFiZWxzQgcKBV90eXBlQhEKD19hZGRyZXNzX2ZhbWlseUIMCgpfbmFtZXNwYWNlIkgKFklQU2VydmljZURlbGV0ZVJlcXVlc3QSEwoCaXAYASABKAlCB7pIBHICcAESGQoHcHJvamVjdBgCIAEoCUIIukgFcgOwAQEiOQoUSVBTZXJ2aWNlR2V0UmVzcG9uc2USIQoCaXAYASABKAsyFS5tZXRhbHN0YWNrLmFwaS52Mi5JUCI8ChdJUFNlcnZpY2VVcGRhdGVSZXNwb25zZRIhCgJpcBgBIAEoCzIVLm1ldGFsc3RhY2suYXBpLnYyLklQIjwKF0lQU2VydmljZUNyZWF0ZVJlc3BvbnNlEiEKAmlwGAEgASgLMhUubWV0YWxzdGFjay5hcGkudjIuSVAiOwoVSVBTZXJ2aWNlTGlzdFJlc3BvbnNlEiIKA2lwcxgBIAMoCzIVLm1ldGFsc3RhY2suYXBpLnYyLklQIjwKF0lQU2VydmljZURlbGV0ZVJlc3BvbnNlEiEKAmlwGAEgASgLMhUubWV0YWxzdGFjay5hcGkudjIuSVAqZwoGSVBUeXBlEhcKE0lQX1RZUEVfVU5TUEVDSUZJRUQQABIkChFJUF9UWVBFX0VQSEVNRVJBTBABGg2CshkJZXBoZW1lcmFsEh4KDklQX1RZUEVfU1RBVElDEAIaCoKyGQZzdGF0aWMqfAoPSVBBZGRyZXNzRmFtaWx5EiEKHUlQX0FERFJFU1NfRkFNSUxZX1VOU1BFQ0lGSUVEEAASIgoUSVBfQUREUkVTU19GQU1JTFlfVjQQARoIgrIZBGlwdjQSIgoUSVBfQUREUkVTU19GQU1JTFlfVjYQAhoIgrIZBGlwdjYykwQKCUlQU2VydmljZRJjCgNHZXQSJi5tZXRhbHN0YWNrLmFwaS52Mi5JUFNlcnZpY2VHZXRSZXF1ZXN0GicubWV0YWxzdGFjay5hcGkudjIuSVBTZXJ2aWNlR2V0UmVzcG9uc2UiC8rzGAMBAgPg8xgCEmcKBkNyZWF0ZRIpLm1ldGFsc3RhY2suYXBpLnYyLklQU2VydmljZUNyZWF0ZVJlcXVlc3QaKi5tZXRhbHN0YWNrLmFwaS52Mi5JUFNlcnZpY2VDcmVhdGVSZXNwb25zZSIGyvMYAgECEmcKBlVwZGF0ZRIpLm1ldGFsc3RhY2suYXBpLnYyLklQU2VydmljZVVwZGF0ZVJlcXVlc3QaKi5tZXRhbHN0YWNrLmFwaS52Mi5JUFNlcnZpY2VVcGRhdGVSZXNwb25zZSIGyvMYAgECEmYKBExpc3QSJy5tZXRhbHN0YWNrLmFwaS52Mi5JUFNlcnZpY2VMaXN0UmVxdWVzdBooLm1ldGFsc3RhY2suYXBpLnYyLklQU2VydmljZUxpc3RSZXNwb25zZSILyvMYAwECA+DzGAISZwoGRGVsZXRlEikubWV0YWxzdGFjay5hcGkudjIuSVBTZXJ2aWNlRGVsZXRlUmVxdWVzdBoqLm1ldGFsc3RhY2suYXBpLnYyLklQU2VydmljZURlbGV0ZVJlc3BvbnNlIgbK8xgCAQJCvQEKFWNvbS5tZXRhbHN0YWNrLmFwaS52MkIHSXBQcm90b1ABWjVnaXRodWIuY29tL21ldGFsLXN0YWNrL2FwaS9nby9tZXRhbHN0YWNrL2FwaS92MjthcGl2MqICA01BWKoCEU1ldGFsc3RhY2suQXBpLlYyygIRTWV0YWxzdGFja1xBcGlcVjLiAh1NZXRhbHN0YWNrXEFwaVxWMlxHUEJNZXRhZGF0YeoCE01ldGFsc3RhY2s6OkFwaTo6VjJiBnByb3RvMw", [file_buf_validate_validate, file_metalstack_api_v2_common, file_metalstack_api_v2_predefined_rules]);
+ fileDesc("ChptZXRhbHN0YWNrL2FwaS92Mi9pcC5wcm90bxIRbWV0YWxzdGFjay5hcGkudjIisQIKAklQEhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEiUKBG1ldGEYAiABKAsyFy5tZXRhbHN0YWNrLmFwaS52Mi5NZXRhEhMKAmlwGAMgASgJQge6SARyAnABEhkKBG5hbWUYBCABKAlCC7pICHIGwLOusQIBEiAKC2Rlc2NyaXB0aW9uGAUgASgJQgu6SAhyBsizrrECARIcCgduZXR3b3JrGAYgASgJQgu6SAhyBsCzrrECARIZCgdwcm9qZWN0GAcgASgJQgi6SAVyA7ABARIxCgR0eXBlGAggASgOMhkubWV0YWxzdGFjay5hcGkudjIuSVBUeXBlQgi6SAWCAQIQARIgCgluYW1lc3BhY2UYCSABKAlCCLpIBXIDsAEBSACIAQFCDAoKX25hbWVzcGFjZSJ1ChNJUFNlcnZpY2VHZXRSZXF1ZXN0EhMKAmlwGAEgASgJQge6SARyAnABEhkKB3Byb2plY3QYAiABKAlCCLpIBXIDsAEBEiAKCW5hbWVzcGFjZRgDIAEoCUIIukgFcgOwAQFIAIgBAUIMCgpfbmFtZXNwYWNlItgDChZJUFNlcnZpY2VDcmVhdGVSZXF1ZXN0EhwKB25ldHdvcmsYASABKAlCC7pICHIGwLOusQIBEhkKB3Byb2plY3QYAiABKAlCCLpIBXIDsAEBEh4KBG5hbWUYAyABKAlCC7pICHIGwLOusQIBSACIAQESJQoLZGVzY3JpcHRpb24YBCABKAlCC7pICHIGyLOusQIBSAGIAQESGAoCaXAYBSABKAlCB7pIBHICcAFIAogBARIeCgdtYWNoaW5lGAYgASgJQgi6SAVyA7ABAUgDiAEBEi4KBmxhYmVscxgHIAEoCzIZLm1ldGFsc3RhY2suYXBpLnYyLkxhYmVsc0gEiAEBEjYKBHR5cGUYCCABKA4yGS5tZXRhbHN0YWNrLmFwaS52Mi5JUFR5cGVCCLpIBYIBAhABSAWIAQESSQoOYWRkcmVzc19mYW1pbHkYCSABKA4yIi5tZXRhbHN0YWNrLmFwaS52Mi5JUEFkZHJlc3NGYW1pbHlCCLpIBYIBAhABSAaIAQFCBwoFX25hbWVCDgoMX2Rlc2NyaXB0aW9uQgUKA19pcEIKCghfbWFjaGluZUIJCgdfbGFiZWxzQgcKBV90eXBlQhEKD19hZGRyZXNzX2ZhbWlseSLmAgoWSVBTZXJ2aWNlVXBkYXRlUmVxdWVzdBITCgJpcBgBIAEoCUIHukgEcgJwARI6Cgt1cGRhdGVfbWV0YRgCIAEoCzIdLm1ldGFsc3RhY2suYXBpLnYyLlVwZGF0ZU1ldGFCBrpIA8gBARIZCgdwcm9qZWN0GAMgASgJQgi6SAVyA7ABARIeCgRuYW1lGAQgASgJQgu6SAhyBsCzrrECAUgAiAEBEiUKC2Rlc2NyaXB0aW9uGAUgASgJQgu6SAhyBsizrrECAUgBiAEBEjYKBHR5cGUYBiABKA4yGS5tZXRhbHN0YWNrLmFwaS52Mi5JUFR5cGVCCLpIBYIBAhABSAKIAQESNAoGbGFiZWxzGAcgASgLMh8ubWV0YWxzdGFjay5hcGkudjIuVXBkYXRlTGFiZWxzSAOIAQFCBwoFX25hbWVCDgoMX2Rlc2NyaXB0aW9uQgcKBV90eXBlQgkKB19sYWJlbHMiXAoUSVBTZXJ2aWNlTGlzdFJlcXVlc3QSGQoHcHJvamVjdBgBIAEoCUIIukgFcgOwAQESKQoFcXVlcnkYAiABKAsyGi5tZXRhbHN0YWNrLmFwaS52Mi5JUFF1ZXJ5IswECgdJUFF1ZXJ5EhgKAmlwGAEgASgJQge6SARyAnABSACIAQESIQoHbmV0d29yaxgCIAEoCUILukgIcgbAs66xAgFIAYgBARIeCgdwcm9qZWN0GAMgASgJQgi6SAVyA7ABAUgCiAEBEh4KBG5hbWUYBCABKAlCC7pICHIGwLOusQIBSAOIAQESGwoEdXVpZBgFIAEoCUIIukgFcgOwAQFIBIgBARIeCgdtYWNoaW5lGAYgASgJQgi6SAVyA7ABAUgFiAEBEikKEnBhcmVudF9wcmVmaXhfY2lkchgHIAEoCUIIukgFcgPoAQFIBogBARIuCgZsYWJlbHMYCCABKAsyGS5tZXRhbHN0YWNrLmFwaS52Mi5MYWJlbHNIB4gBARI2CgR0eXBlGAkgASgOMhkubWV0YWxzdGFjay5hcGkudjIuSVBUeXBlQgi6SAWCAQIQAUgIiAEBEkkKDmFkZHJlc3NfZmFtaWx5GAogASgOMiIubWV0YWxzdGFjay5hcGkudjIuSVBBZGRyZXNzRmFtaWx5Qgi6SAWCAQIQAUgJiAEBEiAKCW5hbWVzcGFjZRgLIAEoCUIIukgFcgOwAQFICogBAUIFCgNfaXBCCgoIX25ldHdvcmtCCgoIX3Byb2plY3RCBwoFX25hbWVCBwoFX3V1aWRCCgoIX21hY2hpbmVCFQoTX3BhcmVudF9wcmVmaXhfY2lkckIJCgdfbGFiZWxzQgcKBV90eXBlQhEKD19hZGRyZXNzX2ZhbWlseUIMCgpfbmFtZXNwYWNlIkgKFklQU2VydmljZURlbGV0ZVJlcXVlc3QSEwoCaXAYASABKAlCB7pIBHICcAESGQoHcHJvamVjdBgCIAEoCUIIukgFcgOwAQEiOQoUSVBTZXJ2aWNlR2V0UmVzcG9uc2USIQoCaXAYASABKAsyFS5tZXRhbHN0YWNrLmFwaS52Mi5JUCI8ChdJUFNlcnZpY2VVcGRhdGVSZXNwb25zZRIhCgJpcBgBIAEoCzIVLm1ldGFsc3RhY2suYXBpLnYyLklQIjwKF0lQU2VydmljZUNyZWF0ZVJlc3BvbnNlEiEKAmlwGAEgASgLMhUubWV0YWxzdGFjay5hcGkudjIuSVAiOwoVSVBTZXJ2aWNlTGlzdFJlc3BvbnNlEiIKA2lwcxgBIAMoCzIVLm1ldGFsc3RhY2suYXBpLnYyLklQIjwKF0lQU2VydmljZURlbGV0ZVJlc3BvbnNlEiEKAmlwGAEgASgLMhUubWV0YWxzdGFjay5hcGkudjIuSVAqZwoGSVBUeXBlEhcKE0lQX1RZUEVfVU5TUEVDSUZJRUQQABIkChFJUF9UWVBFX0VQSEVNRVJBTBABGg2CshkJZXBoZW1lcmFsEh4KDklQX1RZUEVfU1RBVElDEAIaCoKyGQZzdGF0aWMqfAoPSVBBZGRyZXNzRmFtaWx5EiEKHUlQX0FERFJFU1NfRkFNSUxZX1VOU1BFQ0lGSUVEEAASIgoUSVBfQUREUkVTU19GQU1JTFlfVjQQARoIgrIZBGlwdjQSIgoUSVBfQUREUkVTU19GQU1JTFlfVjYQAhoIgrIZBGlwdjYykwQKCUlQU2VydmljZRJjCgNHZXQSJi5tZXRhbHN0YWNrLmFwaS52Mi5JUFNlcnZpY2VHZXRSZXF1ZXN0GicubWV0YWxzdGFjay5hcGkudjIuSVBTZXJ2aWNlR2V0UmVzcG9uc2UiC8rzGAMBAgPg8xgCEmcKBkNyZWF0ZRIpLm1ldGFsc3RhY2suYXBpLnYyLklQU2VydmljZUNyZWF0ZVJlcXVlc3QaKi5tZXRhbHN0YWNrLmFwaS52Mi5JUFNlcnZpY2VDcmVhdGVSZXNwb25zZSIGyvMYAgECEmcKBlVwZGF0ZRIpLm1ldGFsc3RhY2suYXBpLnYyLklQU2VydmljZVVwZGF0ZVJlcXVlc3QaKi5tZXRhbHN0YWNrLmFwaS52Mi5JUFNlcnZpY2VVcGRhdGVSZXNwb25zZSIGyvMYAgECEmYKBExpc3QSJy5tZXRhbHN0YWNrLmFwaS52Mi5JUFNlcnZpY2VMaXN0UmVxdWVzdBooLm1ldGFsc3RhY2suYXBpLnYyLklQU2VydmljZUxpc3RSZXNwb25zZSILyvMYAwECA+DzGAISZwoGRGVsZXRlEikubWV0YWxzdGFjay5hcGkudjIuSVBTZXJ2aWNlRGVsZXRlUmVxdWVzdBoqLm1ldGFsc3RhY2suYXBpLnYyLklQU2VydmljZURlbGV0ZVJlc3BvbnNlIgbK8xgCAQJCvQEKFWNvbS5tZXRhbHN0YWNrLmFwaS52MkIHSXBQcm90b1ABWjVnaXRodWIuY29tL21ldGFsLXN0YWNrL2FwaS9nby9tZXRhbHN0YWNrL2FwaS92MjthcGl2MqICA01BWKoCEU1ldGFsc3RhY2suQXBpLlYyygIRTWV0YWxzdGFja1xBcGlcVjLiAh1NZXRhbHN0YWNrXEFwaVxWMlxHUEJNZXRhZGF0YeoCE01ldGFsc3RhY2s6OkFwaTo6VjJiBnByb3RvMw", [file_buf_validate_validate, file_metalstack_api_v2_common, file_metalstack_api_v2_predefined_rules]);
/**
* IP is a ip address which can be used as loadbalancer addresses
diff --git a/js/metalstack/api/v2/network_pb.ts b/js/metalstack/api/v2/network_pb.ts
index e76d89a7..5399ca75 100644
--- a/js/metalstack/api/v2/network_pb.ts
+++ b/js/metalstack/api/v2/network_pb.ts
@@ -14,7 +14,7 @@ import type { Message } from "@bufbuild/protobuf";
* Describes the file metalstack/api/v2/network.proto.
*/
export const file_metalstack_api_v2_network: GenFile = /*@__PURE__*/
- fileDesc("Ch9tZXRhbHN0YWNrL2FwaS92Mi9uZXR3b3JrLnByb3RvEhFtZXRhbHN0YWNrLmFwaS52MiJQChhOZXR3b3JrU2VydmljZUdldFJlcXVlc3QSFgoCaWQYASABKAlCCrpIB3IFEAIYgAESHAoHcHJvamVjdBgCIAEoCUILukgI2AEBcgOwAQEiSAoZTmV0d29ya1NlcnZpY2VHZXRSZXNwb25zZRIrCgduZXR3b3JrGAEgASgLMhoubWV0YWxzdGFjay5hcGkudjIuTmV0d29yayLcAwobTmV0d29ya1NlcnZpY2VDcmVhdGVSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBEh4KBG5hbWUYAiABKAlCC7pICHIGwLOusQIBSACIAQESJQoLZGVzY3JpcHRpb24YAyABKAlCC7pICHIGyLOusQIBSAGIAQESIwoJcGFydGl0aW9uGAQgASgJQgu6SAhyBtCzrrECAUgCiAEBEikKBmxhYmVscxgFIAEoCzIZLm1ldGFsc3RhY2suYXBpLnYyLkxhYmVscxIoCg5wYXJlbnRfbmV0d29yaxgGIAEoCUILukgIcgbAs66xAgFIA4gBARI5CgZsZW5ndGgYByABKAsyJC5tZXRhbHN0YWNrLmFwaS52Mi5DaGlsZFByZWZpeExlbmd0aEgEiAEBEk4KDmFkZHJlc3NfZmFtaWx5GAggASgOMicubWV0YWxzdGFjay5hcGkudjIuTmV0d29ya0FkZHJlc3NGYW1pbHlCCLpIBYIBAhABSAWIAQFCBwoFX25hbWVCDgoMX2Rlc2NyaXB0aW9uQgwKCl9wYXJ0aXRpb25CEQoPX3BhcmVudF9uZXR3b3JrQgkKB19sZW5ndGhCEQoPX2FkZHJlc3NfZmFtaWx5IksKHE5ldHdvcmtTZXJ2aWNlQ3JlYXRlUmVzcG9uc2USKwoHbmV0d29yaxgBIAEoCzIaLm1ldGFsc3RhY2suYXBpLnYyLk5ldHdvcmsirgIKG05ldHdvcmtTZXJ2aWNlVXBkYXRlUmVxdWVzdBIXCgJpZBgBIAEoCUILukgIcgbAs66xAgESOgoLdXBkYXRlX21ldGEYAiABKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5VcGRhdGVNZXRhQga6SAPIAQESGQoHcHJvamVjdBgDIAEoCUIIukgFcgOwAQESHgoEbmFtZRgEIAEoCUILukgIcgbAs66xAgFIAIgBARIlCgtkZXNjcmlwdGlvbhgFIAEoCUILukgIcgbIs66xAgFIAYgBARI0CgZsYWJlbHMYBiABKAsyHy5tZXRhbHN0YWNrLmFwaS52Mi5VcGRhdGVMYWJlbHNIAogBAUIHCgVfbmFtZUIOCgxfZGVzY3JpcHRpb25CCQoHX2xhYmVscyJLChxOZXR3b3JrU2VydmljZVVwZGF0ZVJlc3BvbnNlEisKB25ldHdvcmsYASABKAsyGi5tZXRhbHN0YWNrLmFwaS52Mi5OZXR3b3JrImkKGU5ldHdvcmtTZXJ2aWNlTGlzdFJlcXVlc3QSHAoHcHJvamVjdBgBIAEoCUILukgI2AEBcgOwAQESLgoFcXVlcnkYAiABKAsyHy5tZXRhbHN0YWNrLmFwaS52Mi5OZXR3b3JrUXVlcnkiSgoaTmV0d29ya1NlcnZpY2VMaXN0UmVzcG9uc2USLAoIbmV0d29ya3MYASADKAsyGi5tZXRhbHN0YWNrLmFwaS52Mi5OZXR3b3JrInUKJU5ldHdvcmtTZXJ2aWNlTGlzdEJhc2VOZXR3b3Jrc1JlcXVlc3QSHAoHcHJvamVjdBgBIAEoCUILukgI2AEBcgOwAQESLgoFcXVlcnkYAiABKAsyHy5tZXRhbHN0YWNrLmFwaS52Mi5OZXR3b3JrUXVlcnkiVgomTmV0d29ya1NlcnZpY2VMaXN0QmFzZU5ldHdvcmtzUmVzcG9uc2USLAoIbmV0d29ya3MYASADKAsyGi5tZXRhbHN0YWNrLmFwaS52Mi5OZXR3b3JrIlEKG05ldHdvcmtTZXJ2aWNlRGVsZXRlUmVxdWVzdBIXCgJpZBgBIAEoCUILukgIcgbAs66xAgESGQoHcHJvamVjdBgCIAEoCUIIukgFcgOwAQEiSwocTmV0d29ya1NlcnZpY2VEZWxldGVSZXNwb25zZRIrCgduZXR3b3JrGAEgASgLMhoubWV0YWxzdGFjay5hcGkudjIuTmV0d29yayLtBgoHTmV0d29yaxIXCgJpZBgBIAEoCUILukgIcgbAs66xAgESJQoEbWV0YRgCIAEoCzIXLm1ldGFsc3RhY2suYXBpLnYyLk1ldGESHgoEbmFtZRgDIAEoCUILukgIcgbAs66xAgFIAIgBARIlCgtkZXNjcmlwdGlvbhgEIAEoCUILukgIcgbIs66xAgFIAYgBARIjCglwYXJ0aXRpb24YBSABKAlCC7pICHIG0LOusQIBSAKIAQESHgoHcHJvamVjdBgGIAEoCUIIukgFcgOwAQFIA4gBARIgCgluYW1lc3BhY2UYByABKAlCCLpIBXIDsAEBSASIAQESHgoIcHJlZml4ZXMYCCADKAlCDLpICZIBBriks7ECARIqChRkZXN0aW5hdGlvbl9wcmVmaXhlcxgJIAMoCUIMukgJkgEGuKSzsQIBEkkKG2RlZmF1bHRfY2hpbGRfcHJlZml4X2xlbmd0aBgKIAEoCzIkLm1ldGFsc3RhY2suYXBpLnYyLkNoaWxkUHJlZml4TGVuZ3RoEkUKF21pbl9jaGlsZF9wcmVmaXhfbGVuZ3RoGAsgASgLMiQubWV0YWxzdGFjay5hcGkudjIuQ2hpbGRQcmVmaXhMZW5ndGgSOwoEdHlwZRgMIAEoDjIeLm1ldGFsc3RhY2suYXBpLnYyLk5ldHdvcmtUeXBlQgi6SAWCAQIQAUgFiAEBEjsKCG5hdF90eXBlGA0gASgOMhoubWV0YWxzdGFjay5hcGkudjIuTkFUVHlwZUIIukgFggECEAFIBogBARIQCgN2cmYYDiABKA1IB4gBARIoCg5wYXJlbnRfbmV0d29yaxgPIAEoCUILukgIcgbAs66xAgFICIgBARIyChxhZGRpdGlvbmFsX2Fubm91bmNhYmxlX2NpZHJzGBAgAygJQgy6SAmSAQa4pLOxAgESOgoLY29uc3VtcHRpb24YESABKAsyJS5tZXRhbHN0YWNrLmFwaS52Mi5OZXR3b3JrQ29uc3VtcHRpb25CBwoFX25hbWVCDgoMX2Rlc2NyaXB0aW9uQgwKCl9wYXJ0aXRpb25CCgoIX3Byb2plY3RCDAoKX25hbWVzcGFjZUIHCgVfdHlwZUILCglfbmF0X3R5cGVCBgoEX3ZyZkIRCg9fcGFyZW50X25ldHdvcmsi8gUKDE5ldHdvcmtRdWVyeRIbCgJpZBgBIAEoCUIKukgHcgUQAhiAAUgAiAEBEh4KBG5hbWUYAiABKAlCC7pICHIGwLOusQIBSAGIAQESJQoLZGVzY3JpcHRpb24YAyABKAlCC7pICHIGyLOusQIBSAKIAQESIwoJcGFydGl0aW9uGAQgASgJQgu6SAhyBtCzrrECAUgDiAEBEh4KB3Byb2plY3QYBSABKAlCCLpIBXIDsAEBSASIAQESIAoJbmFtZXNwYWNlGAYgASgJQgi6SAVyA7ABAUgFiAEBEh4KCHByZWZpeGVzGAcgAygJQgy6SAmSAQa4pLOxAgESKgoUZGVzdGluYXRpb25fcHJlZml4ZXMYCCADKAlCDLpICZIBBriks7ECARIQCgN2cmYYCSABKA1IBogBARIoCg5wYXJlbnRfbmV0d29yaxgKIAEoCUILukgIcgbAs66xAgFIB4gBARJOCg5hZGRyZXNzX2ZhbWlseRgLIAEoDjInLm1ldGFsc3RhY2suYXBpLnYyLk5ldHdvcmtBZGRyZXNzRmFtaWx5Qgi6SAWCAQIQAUgIiAEBEjsKBHR5cGUYDCABKA4yHi5tZXRhbHN0YWNrLmFwaS52Mi5OZXR3b3JrVHlwZUIIukgFggECEAFICYgBARI7CghuYXRfdHlwZRgNIAEoDjIaLm1ldGFsc3RhY2suYXBpLnYyLk5BVFR5cGVCCLpIBYIBAhABSAqIAQESLgoGbGFiZWxzGA4gASgLMhkubWV0YWxzdGFjay5hcGkudjIuTGFiZWxzSAuIAQFCBQoDX2lkQgcKBV9uYW1lQg4KDF9kZXNjcmlwdGlvbkIMCgpfcGFydGl0aW9uQgoKCF9wcm9qZWN0QgwKCl9uYW1lc3BhY2VCBgoEX3ZyZkIRCg9fcGFyZW50X25ldHdvcmtCEQoPX2FkZHJlc3NfZmFtaWx5QgcKBV90eXBlQgsKCV9uYXRfdHlwZUIJCgdfbGFiZWxzImIKEUNoaWxkUHJlZml4TGVuZ3RoEhwKBGlwdjQYASABKA1CCbpIBioEGCAgAEgAiAEBEh0KBGlwdjYYAiABKA1CCrpIByoFGIABIABIAYgBAUIHCgVfaXB2NEIHCgVfaXB2NiJyChJOZXR3b3JrQ29uc3VtcHRpb24SLQoEaXB2NBgBIAEoCzIfLm1ldGFsc3RhY2suYXBpLnYyLk5ldHdvcmtVc2FnZRItCgRpcHY2GAIgASgLMh8ubWV0YWxzdGFjay5hcGkudjIuTmV0d29ya1VzYWdlImoKDE5ldHdvcmtVc2FnZRIVCg1hdmFpbGFibGVfaXBzGAIgASgEEhAKCHVzZWRfaXBzGAMgASgEEhoKEmF2YWlsYWJsZV9wcmVmaXhlcxgEIAEoBBIVCg11c2VkX3ByZWZpeGVzGAUgASgEKm0KB05BVFR5cGUSGAoUTkFUX1RZUEVfVU5TUEVDSUZJRUQQABIbCg1OQVRfVFlQRV9OT05FEAEaCIKyGQRub25lEisKGE5BVF9UWVBFX0lQVjRfTUFTUVVFUkFERRACGg2CshkJaXB2NC1tYXNxKq0CCgtOZXR3b3JrVHlwZRIcChhORVRXT1JLX1RZUEVfVU5TUEVDSUZJRUQQABInChVORVRXT1JLX1RZUEVfRVhURVJOQUwQARoMgrIZCGV4dGVybmFsEicKFU5FVFdPUktfVFlQRV9VTkRFUkxBWRACGgyCshkIdW5kZXJsYXkSIQoSTkVUV09SS19UWVBFX1NVUEVSEAMaCYKyGQVzdXBlchI3Ch1ORVRXT1JLX1RZUEVfU1VQRVJfTkFNRVNQQUNFRBAEGhSCshkQc3VwZXItbmFtZXNwYWNlZBIhChJORVRXT1JLX1RZUEVfQ0hJTEQQBRoJgrIZBWNoaWxkEi8KGU5FVFdPUktfVFlQRV9DSElMRF9TSEFSRUQQBhoQgrIZDGNoaWxkLXNoYXJlZCrHAQoUTmV0d29ya0FkZHJlc3NGYW1pbHkSJgoiTkVUV09SS19BRERSRVNTX0ZBTUlMWV9VTlNQRUNJRklFRBAAEicKGU5FVFdPUktfQUREUkVTU19GQU1JTFlfVjQQARoIgrIZBGlwdjQSJwoZTkVUV09SS19BRERSRVNTX0ZBTUlMWV9WNhACGgiCshkEaXB2NhI1CiFORVRXT1JLX0FERFJFU1NfRkFNSUxZX0RVQUxfU1RBQ0sQAxoOgrIZCmR1YWwtc3RhY2sy4QUKDk5ldHdvcmtTZXJ2aWNlEm0KA0dldBIrLm1ldGFsc3RhY2suYXBpLnYyLk5ldHdvcmtTZXJ2aWNlR2V0UmVxdWVzdBosLm1ldGFsc3RhY2suYXBpLnYyLk5ldHdvcmtTZXJ2aWNlR2V0UmVzcG9uc2UiC8rzGAMBAgPg8xgCEnEKBkNyZWF0ZRIuLm1ldGFsc3RhY2suYXBpLnYyLk5ldHdvcmtTZXJ2aWNlQ3JlYXRlUmVxdWVzdBovLm1ldGFsc3RhY2suYXBpLnYyLk5ldHdvcmtTZXJ2aWNlQ3JlYXRlUmVzcG9uc2UiBsrzGAIBAhJxCgZVcGRhdGUSLi5tZXRhbHN0YWNrLmFwaS52Mi5OZXR3b3JrU2VydmljZVVwZGF0ZVJlcXVlc3QaLy5tZXRhbHN0YWNrLmFwaS52Mi5OZXR3b3JrU2VydmljZVVwZGF0ZVJlc3BvbnNlIgbK8xgCAQIScAoETGlzdBIsLm1ldGFsc3RhY2suYXBpLnYyLk5ldHdvcmtTZXJ2aWNlTGlzdFJlcXVlc3QaLS5tZXRhbHN0YWNrLmFwaS52Mi5OZXR3b3JrU2VydmljZUxpc3RSZXNwb25zZSILyvMYAwECA+DzGAISlAEKEExpc3RCYXNlTmV0d29ya3MSOC5tZXRhbHN0YWNrLmFwaS52Mi5OZXR3b3JrU2VydmljZUxpc3RCYXNlTmV0d29ya3NSZXF1ZXN0GjkubWV0YWxzdGFjay5hcGkudjIuTmV0d29ya1NlcnZpY2VMaXN0QmFzZU5ldHdvcmtzUmVzcG9uc2UiC8rzGAMBAgPg8xgCEnEKBkRlbGV0ZRIuLm1ldGFsc3RhY2suYXBpLnYyLk5ldHdvcmtTZXJ2aWNlRGVsZXRlUmVxdWVzdBovLm1ldGFsc3RhY2suYXBpLnYyLk5ldHdvcmtTZXJ2aWNlRGVsZXRlUmVzcG9uc2UiBsrzGAIBAkLCAQoVY29tLm1ldGFsc3RhY2suYXBpLnYyQgxOZXR3b3JrUHJvdG9QAVo1Z2l0aHViLmNvbS9tZXRhbC1zdGFjay9hcGkvZ28vbWV0YWxzdGFjay9hcGkvdjI7YXBpdjKiAgNNQViqAhFNZXRhbHN0YWNrLkFwaS5WMsoCEU1ldGFsc3RhY2tcQXBpXFYy4gIdTWV0YWxzdGFja1xBcGlcVjJcR1BCTWV0YWRhdGHqAhNNZXRhbHN0YWNrOjpBcGk6OlYyYgZwcm90bzM", [file_buf_validate_validate, file_metalstack_api_v2_common, file_metalstack_api_v2_predefined_rules]);
+ fileDesc("Ch9tZXRhbHN0YWNrL2FwaS92Mi9uZXR3b3JrLnByb3RvEhFtZXRhbHN0YWNrLmFwaS52MiJRChhOZXR3b3JrU2VydmljZUdldFJlcXVlc3QSFwoCaWQYASABKAlCC7pICHIGwLOusQIBEhwKB3Byb2plY3QYAiABKAlCC7pICNgBAXIDsAEBIkgKGU5ldHdvcmtTZXJ2aWNlR2V0UmVzcG9uc2USKwoHbmV0d29yaxgBIAEoCzIaLm1ldGFsc3RhY2suYXBpLnYyLk5ldHdvcmsi3AMKG05ldHdvcmtTZXJ2aWNlQ3JlYXRlUmVxdWVzdBIZCgdwcm9qZWN0GAEgASgJQgi6SAVyA7ABARIeCgRuYW1lGAIgASgJQgu6SAhyBsCzrrECAUgAiAEBEiUKC2Rlc2NyaXB0aW9uGAMgASgJQgu6SAhyBsizrrECAUgBiAEBEiMKCXBhcnRpdGlvbhgEIAEoCUILukgIcgbQs66xAgFIAogBARIpCgZsYWJlbHMYBSABKAsyGS5tZXRhbHN0YWNrLmFwaS52Mi5MYWJlbHMSKAoOcGFyZW50X25ldHdvcmsYBiABKAlCC7pICHIGwLOusQIBSAOIAQESOQoGbGVuZ3RoGAcgASgLMiQubWV0YWxzdGFjay5hcGkudjIuQ2hpbGRQcmVmaXhMZW5ndGhIBIgBARJOCg5hZGRyZXNzX2ZhbWlseRgIIAEoDjInLm1ldGFsc3RhY2suYXBpLnYyLk5ldHdvcmtBZGRyZXNzRmFtaWx5Qgi6SAWCAQIQAUgFiAEBQgcKBV9uYW1lQg4KDF9kZXNjcmlwdGlvbkIMCgpfcGFydGl0aW9uQhEKD19wYXJlbnRfbmV0d29ya0IJCgdfbGVuZ3RoQhEKD19hZGRyZXNzX2ZhbWlseSJLChxOZXR3b3JrU2VydmljZUNyZWF0ZVJlc3BvbnNlEisKB25ldHdvcmsYASABKAsyGi5tZXRhbHN0YWNrLmFwaS52Mi5OZXR3b3JrIq4CChtOZXR3b3JrU2VydmljZVVwZGF0ZVJlcXVlc3QSFwoCaWQYASABKAlCC7pICHIGwLOusQIBEjoKC3VwZGF0ZV9tZXRhGAIgASgLMh0ubWV0YWxzdGFjay5hcGkudjIuVXBkYXRlTWV0YUIGukgDyAEBEhkKB3Byb2plY3QYAyABKAlCCLpIBXIDsAEBEh4KBG5hbWUYBCABKAlCC7pICHIGwLOusQIBSACIAQESJQoLZGVzY3JpcHRpb24YBSABKAlCC7pICHIGyLOusQIBSAGIAQESNAoGbGFiZWxzGAYgASgLMh8ubWV0YWxzdGFjay5hcGkudjIuVXBkYXRlTGFiZWxzSAKIAQFCBwoFX25hbWVCDgoMX2Rlc2NyaXB0aW9uQgkKB19sYWJlbHMiSwocTmV0d29ya1NlcnZpY2VVcGRhdGVSZXNwb25zZRIrCgduZXR3b3JrGAEgASgLMhoubWV0YWxzdGFjay5hcGkudjIuTmV0d29yayJpChlOZXR3b3JrU2VydmljZUxpc3RSZXF1ZXN0EhwKB3Byb2plY3QYASABKAlCC7pICNgBAXIDsAEBEi4KBXF1ZXJ5GAIgASgLMh8ubWV0YWxzdGFjay5hcGkudjIuTmV0d29ya1F1ZXJ5IkoKGk5ldHdvcmtTZXJ2aWNlTGlzdFJlc3BvbnNlEiwKCG5ldHdvcmtzGAEgAygLMhoubWV0YWxzdGFjay5hcGkudjIuTmV0d29yayJ1CiVOZXR3b3JrU2VydmljZUxpc3RCYXNlTmV0d29ya3NSZXF1ZXN0EhwKB3Byb2plY3QYASABKAlCC7pICNgBAXIDsAEBEi4KBXF1ZXJ5GAIgASgLMh8ubWV0YWxzdGFjay5hcGkudjIuTmV0d29ya1F1ZXJ5IlYKJk5ldHdvcmtTZXJ2aWNlTGlzdEJhc2VOZXR3b3Jrc1Jlc3BvbnNlEiwKCG5ldHdvcmtzGAEgAygLMhoubWV0YWxzdGFjay5hcGkudjIuTmV0d29yayJRChtOZXR3b3JrU2VydmljZURlbGV0ZVJlcXVlc3QSFwoCaWQYASABKAlCC7pICHIGwLOusQIBEhkKB3Byb2plY3QYAiABKAlCCLpIBXIDsAEBIksKHE5ldHdvcmtTZXJ2aWNlRGVsZXRlUmVzcG9uc2USKwoHbmV0d29yaxgBIAEoCzIaLm1ldGFsc3RhY2suYXBpLnYyLk5ldHdvcmsi7QYKB05ldHdvcmsSFwoCaWQYASABKAlCC7pICHIGwLOusQIBEiUKBG1ldGEYAiABKAsyFy5tZXRhbHN0YWNrLmFwaS52Mi5NZXRhEh4KBG5hbWUYAyABKAlCC7pICHIGwLOusQIBSACIAQESJQoLZGVzY3JpcHRpb24YBCABKAlCC7pICHIGyLOusQIBSAGIAQESIwoJcGFydGl0aW9uGAUgASgJQgu6SAhyBtCzrrECAUgCiAEBEh4KB3Byb2plY3QYBiABKAlCCLpIBXIDsAEBSAOIAQESIAoJbmFtZXNwYWNlGAcgASgJQgi6SAVyA7ABAUgEiAEBEh4KCHByZWZpeGVzGAggAygJQgy6SAmSAQa4pLOxAgESKgoUZGVzdGluYXRpb25fcHJlZml4ZXMYCSADKAlCDLpICZIBBriks7ECARJJChtkZWZhdWx0X2NoaWxkX3ByZWZpeF9sZW5ndGgYCiABKAsyJC5tZXRhbHN0YWNrLmFwaS52Mi5DaGlsZFByZWZpeExlbmd0aBJFChdtaW5fY2hpbGRfcHJlZml4X2xlbmd0aBgLIAEoCzIkLm1ldGFsc3RhY2suYXBpLnYyLkNoaWxkUHJlZml4TGVuZ3RoEjsKBHR5cGUYDCABKA4yHi5tZXRhbHN0YWNrLmFwaS52Mi5OZXR3b3JrVHlwZUIIukgFggECEAFIBYgBARI7CghuYXRfdHlwZRgNIAEoDjIaLm1ldGFsc3RhY2suYXBpLnYyLk5BVFR5cGVCCLpIBYIBAhABSAaIAQESEAoDdnJmGA4gASgNSAeIAQESKAoOcGFyZW50X25ldHdvcmsYDyABKAlCC7pICHIGwLOusQIBSAiIAQESMgocYWRkaXRpb25hbF9hbm5vdW5jYWJsZV9jaWRycxgQIAMoCUIMukgJkgEGuKSzsQIBEjoKC2NvbnN1bXB0aW9uGBEgASgLMiUubWV0YWxzdGFjay5hcGkudjIuTmV0d29ya0NvbnN1bXB0aW9uQgcKBV9uYW1lQg4KDF9kZXNjcmlwdGlvbkIMCgpfcGFydGl0aW9uQgoKCF9wcm9qZWN0QgwKCl9uYW1lc3BhY2VCBwoFX3R5cGVCCwoJX25hdF90eXBlQgYKBF92cmZCEQoPX3BhcmVudF9uZXR3b3JrIvMFCgxOZXR3b3JrUXVlcnkSHAoCaWQYASABKAlCC7pICHIGwLOusQIBSACIAQESHgoEbmFtZRgCIAEoCUILukgIcgbAs66xAgFIAYgBARIlCgtkZXNjcmlwdGlvbhgDIAEoCUILukgIcgbIs66xAgFIAogBARIjCglwYXJ0aXRpb24YBCABKAlCC7pICHIG0LOusQIBSAOIAQESHgoHcHJvamVjdBgFIAEoCUIIukgFcgOwAQFIBIgBARIgCgluYW1lc3BhY2UYBiABKAlCCLpIBXIDsAEBSAWIAQESHgoIcHJlZml4ZXMYByADKAlCDLpICZIBBriks7ECARIqChRkZXN0aW5hdGlvbl9wcmVmaXhlcxgIIAMoCUIMukgJkgEGuKSzsQIBEhAKA3ZyZhgJIAEoDUgGiAEBEigKDnBhcmVudF9uZXR3b3JrGAogASgJQgu6SAhyBsCzrrECAUgHiAEBEk4KDmFkZHJlc3NfZmFtaWx5GAsgASgOMicubWV0YWxzdGFjay5hcGkudjIuTmV0d29ya0FkZHJlc3NGYW1pbHlCCLpIBYIBAhABSAiIAQESOwoEdHlwZRgMIAEoDjIeLm1ldGFsc3RhY2suYXBpLnYyLk5ldHdvcmtUeXBlQgi6SAWCAQIQAUgJiAEBEjsKCG5hdF90eXBlGA0gASgOMhoubWV0YWxzdGFjay5hcGkudjIuTkFUVHlwZUIIukgFggECEAFICogBARIuCgZsYWJlbHMYDiABKAsyGS5tZXRhbHN0YWNrLmFwaS52Mi5MYWJlbHNIC4gBAUIFCgNfaWRCBwoFX25hbWVCDgoMX2Rlc2NyaXB0aW9uQgwKCl9wYXJ0aXRpb25CCgoIX3Byb2plY3RCDAoKX25hbWVzcGFjZUIGCgRfdnJmQhEKD19wYXJlbnRfbmV0d29ya0IRCg9fYWRkcmVzc19mYW1pbHlCBwoFX3R5cGVCCwoJX25hdF90eXBlQgkKB19sYWJlbHMiYgoRQ2hpbGRQcmVmaXhMZW5ndGgSHAoEaXB2NBgBIAEoDUIJukgGKgQYICAASACIAQESHQoEaXB2NhgCIAEoDUIKukgHKgUYgAEgAEgBiAEBQgcKBV9pcHY0QgcKBV9pcHY2InIKEk5ldHdvcmtDb25zdW1wdGlvbhItCgRpcHY0GAEgASgLMh8ubWV0YWxzdGFjay5hcGkudjIuTmV0d29ya1VzYWdlEi0KBGlwdjYYAiABKAsyHy5tZXRhbHN0YWNrLmFwaS52Mi5OZXR3b3JrVXNhZ2UiagoMTmV0d29ya1VzYWdlEhUKDWF2YWlsYWJsZV9pcHMYAiABKAQSEAoIdXNlZF9pcHMYAyABKAQSGgoSYXZhaWxhYmxlX3ByZWZpeGVzGAQgASgEEhUKDXVzZWRfcHJlZml4ZXMYBSABKAQqbQoHTkFUVHlwZRIYChROQVRfVFlQRV9VTlNQRUNJRklFRBAAEhsKDU5BVF9UWVBFX05PTkUQARoIgrIZBG5vbmUSKwoYTkFUX1RZUEVfSVBWNF9NQVNRVUVSQURFEAIaDYKyGQlpcHY0LW1hc3EqrQIKC05ldHdvcmtUeXBlEhwKGE5FVFdPUktfVFlQRV9VTlNQRUNJRklFRBAAEicKFU5FVFdPUktfVFlQRV9FWFRFUk5BTBABGgyCshkIZXh0ZXJuYWwSJwoVTkVUV09SS19UWVBFX1VOREVSTEFZEAIaDIKyGQh1bmRlcmxheRIhChJORVRXT1JLX1RZUEVfU1VQRVIQAxoJgrIZBXN1cGVyEjcKHU5FVFdPUktfVFlQRV9TVVBFUl9OQU1FU1BBQ0VEEAQaFIKyGRBzdXBlci1uYW1lc3BhY2VkEiEKEk5FVFdPUktfVFlQRV9DSElMRBAFGgmCshkFY2hpbGQSLwoZTkVUV09SS19UWVBFX0NISUxEX1NIQVJFRBAGGhCCshkMY2hpbGQtc2hhcmVkKscBChROZXR3b3JrQWRkcmVzc0ZhbWlseRImCiJORVRXT1JLX0FERFJFU1NfRkFNSUxZX1VOU1BFQ0lGSUVEEAASJwoZTkVUV09SS19BRERSRVNTX0ZBTUlMWV9WNBABGgiCshkEaXB2NBInChlORVRXT1JLX0FERFJFU1NfRkFNSUxZX1Y2EAIaCIKyGQRpcHY2EjUKIU5FVFdPUktfQUREUkVTU19GQU1JTFlfRFVBTF9TVEFDSxADGg6CshkKZHVhbC1zdGFjazLhBQoOTmV0d29ya1NlcnZpY2USbQoDR2V0EisubWV0YWxzdGFjay5hcGkudjIuTmV0d29ya1NlcnZpY2VHZXRSZXF1ZXN0GiwubWV0YWxzdGFjay5hcGkudjIuTmV0d29ya1NlcnZpY2VHZXRSZXNwb25zZSILyvMYAwECA+DzGAIScQoGQ3JlYXRlEi4ubWV0YWxzdGFjay5hcGkudjIuTmV0d29ya1NlcnZpY2VDcmVhdGVSZXF1ZXN0Gi8ubWV0YWxzdGFjay5hcGkudjIuTmV0d29ya1NlcnZpY2VDcmVhdGVSZXNwb25zZSIGyvMYAgECEnEKBlVwZGF0ZRIuLm1ldGFsc3RhY2suYXBpLnYyLk5ldHdvcmtTZXJ2aWNlVXBkYXRlUmVxdWVzdBovLm1ldGFsc3RhY2suYXBpLnYyLk5ldHdvcmtTZXJ2aWNlVXBkYXRlUmVzcG9uc2UiBsrzGAIBAhJwCgRMaXN0EiwubWV0YWxzdGFjay5hcGkudjIuTmV0d29ya1NlcnZpY2VMaXN0UmVxdWVzdBotLm1ldGFsc3RhY2suYXBpLnYyLk5ldHdvcmtTZXJ2aWNlTGlzdFJlc3BvbnNlIgvK8xgDAQID4PMYAhKUAQoQTGlzdEJhc2VOZXR3b3JrcxI4Lm1ldGFsc3RhY2suYXBpLnYyLk5ldHdvcmtTZXJ2aWNlTGlzdEJhc2VOZXR3b3Jrc1JlcXVlc3QaOS5tZXRhbHN0YWNrLmFwaS52Mi5OZXR3b3JrU2VydmljZUxpc3RCYXNlTmV0d29ya3NSZXNwb25zZSILyvMYAwECA+DzGAIScQoGRGVsZXRlEi4ubWV0YWxzdGFjay5hcGkudjIuTmV0d29ya1NlcnZpY2VEZWxldGVSZXF1ZXN0Gi8ubWV0YWxzdGFjay5hcGkudjIuTmV0d29ya1NlcnZpY2VEZWxldGVSZXNwb25zZSIGyvMYAgECQsIBChVjb20ubWV0YWxzdGFjay5hcGkudjJCDE5ldHdvcmtQcm90b1ABWjVnaXRodWIuY29tL21ldGFsLXN0YWNrL2FwaS9nby9tZXRhbHN0YWNrL2FwaS92MjthcGl2MqICA01BWKoCEU1ldGFsc3RhY2suQXBpLlYyygIRTWV0YWxzdGFja1xBcGlcVjLiAh1NZXRhbHN0YWNrXEFwaVxWMlxHUEJNZXRhZGF0YeoCE01ldGFsc3RhY2s6OkFwaTo6VjJiBnByb3RvMw", [file_buf_validate_validate, file_metalstack_api_v2_common, file_metalstack_api_v2_predefined_rules]);
/**
* NetworkServiceGetRequest
diff --git a/js/metalstack/api/v2/partition_pb.ts b/js/metalstack/api/v2/partition_pb.ts
index bf426240..ef221359 100644
--- a/js/metalstack/api/v2/partition_pb.ts
+++ b/js/metalstack/api/v2/partition_pb.ts
@@ -14,7 +14,7 @@ import type { Message } from "@bufbuild/protobuf";
* Describes the file metalstack/api/v2/partition.proto.
*/
export const file_metalstack_api_v2_partition: GenFile = /*@__PURE__*/
- fileDesc("CiFtZXRhbHN0YWNrL2FwaS92Mi9wYXJ0aXRpb24ucHJvdG8SEW1ldGFsc3RhY2suYXBpLnYyItACCglQYXJ0aXRpb24SFwoCaWQYASABKAlCC7pICHIG0LOusQIBEiUKBG1ldGEYAiABKAsyFy5tZXRhbHN0YWNrLmFwaS52Mi5NZXRhEiAKC2Rlc2NyaXB0aW9uGAMgASgJQgu6SAhyBsizrrECARJJChJib290X2NvbmZpZ3VyYXRpb24YBCABKAsyLS5tZXRhbHN0YWNrLmFwaS52Mi5QYXJ0aXRpb25Cb290Q29uZmlndXJhdGlvbhI6CgpkbnNfc2VydmVyGAUgAygLMhwubWV0YWxzdGFjay5hcGkudjIuRE5TU2VydmVyQgi6SAWSAQIQAxI6CgpudHBfc2VydmVyGAYgAygLMhwubWV0YWxzdGFjay5hcGkudjIuTlRQU2VydmVyQgi6SAWSAQIQChIeChZtZ210X3NlcnZpY2VfYWRkcmVzc2VzGAcgAygJInAKDlBhcnRpdGlvblF1ZXJ5EhwKAmlkGAEgASgJQgu6SAhyBtCzrrECAUgAiAEBEi4KBmxhYmVscxgCIAEoCzIZLm1ldGFsc3RhY2suYXBpLnYyLkxhYmVsc0gBiAEBQgUKA19pZEIJCgdfbGFiZWxzInIKGlBhcnRpdGlvbkJvb3RDb25maWd1cmF0aW9uEh4KCWltYWdlX3VybBgBIAEoCUILukgIcgbgs66xAgESHwoKa2VybmVsX3VybBgCIAEoCUILukgIcgbgs66xAgESEwoLY29tbWFuZGxpbmUYAyABKAkiIAoJRE5TU2VydmVyEhMKAmlwGAEgASgJQge6SARyAnABIiYKCU5UUFNlcnZlchIZCgdhZGRyZXNzGAEgASgJQgi6SAVyAxiAAiI1ChpQYXJ0aXRpb25TZXJ2aWNlR2V0UmVxdWVzdBIXCgJpZBgBIAEoCUILukgIcgbQs66xAgEiTwobUGFydGl0aW9uU2VydmljZUxpc3RSZXF1ZXN0EjAKBXF1ZXJ5GAEgASgLMiEubWV0YWxzdGFjay5hcGkudjIuUGFydGl0aW9uUXVlcnkiTgobUGFydGl0aW9uU2VydmljZUdldFJlc3BvbnNlEi8KCXBhcnRpdGlvbhgBIAEoCzIcLm1ldGFsc3RhY2suYXBpLnYyLlBhcnRpdGlvbiJQChxQYXJ0aXRpb25TZXJ2aWNlTGlzdFJlc3BvbnNlEjAKCnBhcnRpdGlvbnMYASADKAsyHC5tZXRhbHN0YWNrLmFwaS52Mi5QYXJ0aXRpb24y9QEKEFBhcnRpdGlvblNlcnZpY2USbgoDR2V0Ei0ubWV0YWxzdGFjay5hcGkudjIuUGFydGl0aW9uU2VydmljZUdldFJlcXVlc3QaLi5tZXRhbHN0YWNrLmFwaS52Mi5QYXJ0aXRpb25TZXJ2aWNlR2V0UmVzcG9uc2UiCNjzGAPg8xgCEnEKBExpc3QSLi5tZXRhbHN0YWNrLmFwaS52Mi5QYXJ0aXRpb25TZXJ2aWNlTGlzdFJlcXVlc3QaLy5tZXRhbHN0YWNrLmFwaS52Mi5QYXJ0aXRpb25TZXJ2aWNlTGlzdFJlc3BvbnNlIgjY8xgD4PMYAkLEAQoVY29tLm1ldGFsc3RhY2suYXBpLnYyQg5QYXJ0aXRpb25Qcm90b1ABWjVnaXRodWIuY29tL21ldGFsLXN0YWNrL2FwaS9nby9tZXRhbHN0YWNrL2FwaS92MjthcGl2MqICA01BWKoCEU1ldGFsc3RhY2suQXBpLlYyygIRTWV0YWxzdGFja1xBcGlcVjLiAh1NZXRhbHN0YWNrXEFwaVxWMlxHUEJNZXRhZGF0YeoCE01ldGFsc3RhY2s6OkFwaTo6VjJiBnByb3RvMw", [file_buf_validate_validate, file_metalstack_api_v2_common, file_metalstack_api_v2_predefined_rules]);
+ fileDesc("CiFtZXRhbHN0YWNrL2FwaS92Mi9wYXJ0aXRpb24ucHJvdG8SEW1ldGFsc3RhY2suYXBpLnYyItACCglQYXJ0aXRpb24SFwoCaWQYASABKAlCC7pICHIG0LOusQIBEiUKBG1ldGEYAiABKAsyFy5tZXRhbHN0YWNrLmFwaS52Mi5NZXRhEiAKC2Rlc2NyaXB0aW9uGAMgASgJQgu6SAhyBsizrrECARJJChJib290X2NvbmZpZ3VyYXRpb24YBCABKAsyLS5tZXRhbHN0YWNrLmFwaS52Mi5QYXJ0aXRpb25Cb290Q29uZmlndXJhdGlvbhI6CgpkbnNfc2VydmVyGAUgAygLMhwubWV0YWxzdGFjay5hcGkudjIuRE5TU2VydmVyQgi6SAWSAQIQAxI6CgpudHBfc2VydmVyGAYgAygLMhwubWV0YWxzdGFjay5hcGkudjIuTlRQU2VydmVyQgi6SAWSAQIQChIeChZtZ210X3NlcnZpY2VfYWRkcmVzc2VzGAcgAygJInAKDlBhcnRpdGlvblF1ZXJ5EhwKAmlkGAEgASgJQgu6SAhyBtCzrrECAUgAiAEBEi4KBmxhYmVscxgCIAEoCzIZLm1ldGFsc3RhY2suYXBpLnYyLkxhYmVsc0gBiAEBQgUKA19pZEIJCgdfbGFiZWxzInIKGlBhcnRpdGlvbkJvb3RDb25maWd1cmF0aW9uEh4KCWltYWdlX3VybBgBIAEoCUILukgIcgbgs66xAgESHwoKa2VybmVsX3VybBgCIAEoCUILukgIcgbgs66xAgESEwoLY29tbWFuZGxpbmUYAyABKAkiIAoJRE5TU2VydmVyEhMKAmlwGAEgASgJQge6SARyAnABIikKCU5UUFNlcnZlchIcCgdhZGRyZXNzGAEgASgJQgu6SAhyBuizrrECASI1ChpQYXJ0aXRpb25TZXJ2aWNlR2V0UmVxdWVzdBIXCgJpZBgBIAEoCUILukgIcgbQs66xAgEiTwobUGFydGl0aW9uU2VydmljZUxpc3RSZXF1ZXN0EjAKBXF1ZXJ5GAEgASgLMiEubWV0YWxzdGFjay5hcGkudjIuUGFydGl0aW9uUXVlcnkiTgobUGFydGl0aW9uU2VydmljZUdldFJlc3BvbnNlEi8KCXBhcnRpdGlvbhgBIAEoCzIcLm1ldGFsc3RhY2suYXBpLnYyLlBhcnRpdGlvbiJQChxQYXJ0aXRpb25TZXJ2aWNlTGlzdFJlc3BvbnNlEjAKCnBhcnRpdGlvbnMYASADKAsyHC5tZXRhbHN0YWNrLmFwaS52Mi5QYXJ0aXRpb24y9QEKEFBhcnRpdGlvblNlcnZpY2USbgoDR2V0Ei0ubWV0YWxzdGFjay5hcGkudjIuUGFydGl0aW9uU2VydmljZUdldFJlcXVlc3QaLi5tZXRhbHN0YWNrLmFwaS52Mi5QYXJ0aXRpb25TZXJ2aWNlR2V0UmVzcG9uc2UiCNjzGAPg8xgCEnEKBExpc3QSLi5tZXRhbHN0YWNrLmFwaS52Mi5QYXJ0aXRpb25TZXJ2aWNlTGlzdFJlcXVlc3QaLy5tZXRhbHN0YWNrLmFwaS52Mi5QYXJ0aXRpb25TZXJ2aWNlTGlzdFJlc3BvbnNlIgjY8xgD4PMYAkLEAQoVY29tLm1ldGFsc3RhY2suYXBpLnYyQg5QYXJ0aXRpb25Qcm90b1ABWjVnaXRodWIuY29tL21ldGFsLXN0YWNrL2FwaS9nby9tZXRhbHN0YWNrL2FwaS92MjthcGl2MqICA01BWKoCEU1ldGFsc3RhY2suQXBpLlYyygIRTWV0YWxzdGFja1xBcGlcVjLiAh1NZXRhbHN0YWNrXEFwaVxWMlxHUEJNZXRhZGF0YeoCE01ldGFsc3RhY2s6OkFwaTo6VjJiBnByb3RvMw", [file_buf_validate_validate, file_metalstack_api_v2_common, file_metalstack_api_v2_predefined_rules]);
/**
* Partition is a failure domain with machines and switches
diff --git a/js/metalstack/api/v2/predefined_rules_pb.ts b/js/metalstack/api/v2/predefined_rules_pb.ts
index 84c1a7fb..3645869a 100644
--- a/js/metalstack/api/v2/predefined_rules_pb.ts
+++ b/js/metalstack/api/v2/predefined_rules_pb.ts
@@ -11,7 +11,7 @@ import { file_buf_validate_validate } from "../../../buf/validate/validate_pb";
* Describes the file metalstack/api/v2/predefined_rules.proto.
*/
export const file_metalstack_api_v2_predefined_rules: GenFile = /*@__PURE__*/
- fileDesc("CihtZXRhbHN0YWNrL2FwaS92Mi9wcmVkZWZpbmVkX3J1bGVzLnByb3RvEhFtZXRhbHN0YWNrLmFwaS52Mjq4AQoKbWFjYWRkcmVzcxIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcxi35pUmIAEoCEJ6wkh3CnUKEXN0cmluZy5tYWNhZGRyZXNzEiZ0aGlzIHN0cmluZyBtdXN0IGJlIGEgdmFsaWQgbWFjYWRkcmVzcxo4dGhpcy5tYXRjaGVzKCdeKFswLTlBLUZhLWZdezJ9WzpdKXs1fShbMC05QS1GYS1mXXsyfSkkJylSCm1hY2FkZHJlc3M6mQEKB2lzX25hbWUSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYuOaVJiABKAhCYsJIXwpdCg5zdHJpbmcuaXNfbmFtZRIjbXVzdCBiZSB3aXRoaW4gMiBhbmQgMTI4IGNoYXJhY3RlcnMaJnRoaXMuc2l6ZSgpID49IDIgJiYgdGhpcy5zaXplKCkgPD0gMTI4UgZpc05hbWU6mgEKDmlzX2Rlc2NyaXB0aW9uEhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGLnmlSYgASgIQlXCSFIKUAoVc3RyaW5nLmlzX2Rlc2NyaXB0aW9uEiNtdXN0IGJlIHNob3J0ZXIgdGhhbiAyNTYgY2hhcmFjdGVycxoSdGhpcy5zaXplKCkgPD0gMjU2Ug1pc0Rlc2NyaXB0aW9uOqgBCgxpc19wYXJ0aXRpb24SGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYuuaVJiABKAhCZ8JIZApiChNzdHJpbmcuaXNfcGFydGl0aW9uEiNtdXN0IGJlIHdpdGhpbiAyIGFuZCAxMjggY2hhcmFjdGVycxomdGhpcy5zaXplKCkgPj0gMiAmJiB0aGlzLnNpemUoKSA8PSAxMjhSC2lzUGFydGl0aW9uOoIBCglpc19wcmVmaXgSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYu+aVJiABKAhCR8JIRApCCg9zdHJpbmcucHJlZml4ZXMSHGdpdmVuIHByZWZpeGVzIG11c3QgYmUgdmFsaWQaEXRoaXMuaXNJcFByZWZpeCgpUghpc1ByZWZpeDptCgZpc191cmkSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYvOaVJiABKAhCOMJINQozCgpzdHJpbmcudXJpEhdnaXZlbiB1cmkgbXVzdCBiZSB2YWxpZBoMdGhpcy5pc1VyaSgpUgVpc1VyaTqPAQoIcHJlZml4ZXMSGy5idWYudmFsaWRhdGUuUmVwZWF0ZWRSdWxlcxjHtJYmIAEoCEJTwkhQCk4KEXJlcGVhdGVkLnByZWZpeGVzEhxnaXZlbiBwcmVmaXhlcyBtdXN0IGJlIHZhbGlkGht0aGlzLmFsbChtLCBtLmlzSXBQcmVmaXgoKSlSCHByZWZpeGVzOnUKA2lwcxIbLmJ1Zi52YWxpZGF0ZS5SZXBlYXRlZFJ1bGVzGMi0liYgASgIQkPCSEAKPgoMcmVwZWF0ZWQuaXBzEhdnaXZlbiBpcHMgbXVzdCBiZSB2YWxpZBoVdGhpcy5hbGwobSwgbS5pc0lwKCkpUgNpcHNCygEKFWNvbS5tZXRhbHN0YWNrLmFwaS52MkIUUHJlZGVmaW5lZFJ1bGVzUHJvdG9QAVo1Z2l0aHViLmNvbS9tZXRhbC1zdGFjay9hcGkvZ28vbWV0YWxzdGFjay9hcGkvdjI7YXBpdjKiAgNNQViqAhFNZXRhbHN0YWNrLkFwaS5WMsoCEU1ldGFsc3RhY2tcQXBpXFYy4gIdTWV0YWxzdGFja1xBcGlcVjJcR1BCTWV0YWRhdGHqAhNNZXRhbHN0YWNrOjpBcGk6OlYy", [file_buf_validate_validate]);
+ fileDesc("CihtZXRhbHN0YWNrL2FwaS92Mi9wcmVkZWZpbmVkX3J1bGVzLnByb3RvEhFtZXRhbHN0YWNrLmFwaS52Mjq4AQoKbWFjYWRkcmVzcxIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlcxi35pUmIAEoCEJ6wkh3CnUKEXN0cmluZy5tYWNhZGRyZXNzEiZ0aGlzIHN0cmluZyBtdXN0IGJlIGEgdmFsaWQgbWFjYWRkcmVzcxo4dGhpcy5tYXRjaGVzKCdeKFswLTlBLUZhLWZdezJ9WzpdKXs1fShbMC05QS1GYS1mXXsyfSkkJylSCm1hY2FkZHJlc3M6mQEKB2lzX25hbWUSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYuOaVJiABKAhCYsJIXwpdCg5zdHJpbmcuaXNfbmFtZRIjbXVzdCBiZSB3aXRoaW4gMiBhbmQgMTI4IGNoYXJhY3RlcnMaJnRoaXMuc2l6ZSgpID49IDIgJiYgdGhpcy5zaXplKCkgPD0gMTI4UgZpc05hbWU6mgEKDmlzX2Rlc2NyaXB0aW9uEhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzGLnmlSYgASgIQlXCSFIKUAoVc3RyaW5nLmlzX2Rlc2NyaXB0aW9uEiNtdXN0IGJlIHNob3J0ZXIgdGhhbiAyNTYgY2hhcmFjdGVycxoSdGhpcy5zaXplKCkgPD0gMjU2Ug1pc0Rlc2NyaXB0aW9uOqgBCgxpc19wYXJ0aXRpb24SGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYuuaVJiABKAhCZ8JIZApiChNzdHJpbmcuaXNfcGFydGl0aW9uEiNtdXN0IGJlIHdpdGhpbiAyIGFuZCAxMjggY2hhcmFjdGVycxomdGhpcy5zaXplKCkgPj0gMiAmJiB0aGlzLnNpemUoKSA8PSAxMjhSC2lzUGFydGl0aW9uOoIBCglpc19wcmVmaXgSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYu+aVJiABKAhCR8JIRApCCg9zdHJpbmcucHJlZml4ZXMSHGdpdmVuIHByZWZpeGVzIG11c3QgYmUgdmFsaWQaEXRoaXMuaXNJcFByZWZpeCgpUghpc1ByZWZpeDptCgZpc191cmkSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYvOaVJiABKAhCOMJINQozCgpzdHJpbmcudXJpEhdnaXZlbiB1cmkgbXVzdCBiZSB2YWxpZBoMdGhpcy5pc1VyaSgpUgVpc1VyaTqnAQoRaXNfaXBfb3JfaG9zdG5hbWUSGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXMYveaVJiABKAhCXsJIWwpZCg12YWxpZF9hZGRyZXNzEiZtdXN0IGJlIGEgdmFsaWQgSVAgYWRkcmVzcyBvciBob3N0bmFtZRogdGhpcy5pc0lwKCkgfHwgdGhpcy5pc0hvc3RuYW1lKClSDmlzSXBPckhvc3RuYW1lOo8BCghwcmVmaXhlcxIbLmJ1Zi52YWxpZGF0ZS5SZXBlYXRlZFJ1bGVzGMe0liYgASgIQlPCSFAKTgoRcmVwZWF0ZWQucHJlZml4ZXMSHGdpdmVuIHByZWZpeGVzIG11c3QgYmUgdmFsaWQaG3RoaXMuYWxsKG0sIG0uaXNJcFByZWZpeCgpKVIIcHJlZml4ZXM6dQoDaXBzEhsuYnVmLnZhbGlkYXRlLlJlcGVhdGVkUnVsZXMYyLSWJiABKAhCQ8JIQAo+CgxyZXBlYXRlZC5pcHMSF2dpdmVuIGlwcyBtdXN0IGJlIHZhbGlkGhV0aGlzLmFsbChtLCBtLmlzSXAoKSlSA2lwc0LKAQoVY29tLm1ldGFsc3RhY2suYXBpLnYyQhRQcmVkZWZpbmVkUnVsZXNQcm90b1ABWjVnaXRodWIuY29tL21ldGFsLXN0YWNrL2FwaS9nby9tZXRhbHN0YWNrL2FwaS92MjthcGl2MqICA01BWKoCEU1ldGFsc3RhY2suQXBpLlYyygIRTWV0YWxzdGFja1xBcGlcVjLiAh1NZXRhbHN0YWNrXEFwaVxWMlxHUEJNZXRhZGF0YeoCE01ldGFsc3RhY2s6OkFwaTo6VjI", [file_buf_validate_validate]);
/**
* Macaddress returns true if the given string is a valid macadress
@@ -61,13 +61,21 @@ export const is_prefix: GenExtension = /*@__PURE__*/
export const is_uri: GenExtension = /*@__PURE__*/
extDesc(file_metalstack_api_v2_predefined_rules, 5);
+/**
+ * IsIpOrHostname validates that the given string is either a ip or a hostname
+ *
+ * @generated from extension: optional bool is_ip_or_hostname = 80048957;
+ */
+export const is_ip_or_hostname: GenExtension = /*@__PURE__*/
+ extDesc(file_metalstack_api_v2_predefined_rules, 6);
+
/**
* Prefixes validates if a slice of prefixes in string form are valid
*
* @generated from extension: optional bool prefixes = 80058951;
*/
export const prefixes: GenExtension = /*@__PURE__*/
- extDesc(file_metalstack_api_v2_predefined_rules, 6);
+ extDesc(file_metalstack_api_v2_predefined_rules, 7);
/**
* Ips validates if a slice of ips in string form are valid
@@ -75,5 +83,5 @@ export const prefixes: GenExtension = /*@__PURE__*/
* @generated from extension: optional bool ips = 80058952;
*/
export const ips: GenExtension = /*@__PURE__*/
- extDesc(file_metalstack_api_v2_predefined_rules, 7);
+ extDesc(file_metalstack_api_v2_predefined_rules, 8);
diff --git a/js/metalstack/api/v2/project_pb.ts b/js/metalstack/api/v2/project_pb.ts
index 465cf9e2..0f425f2c 100644
--- a/js/metalstack/api/v2/project_pb.ts
+++ b/js/metalstack/api/v2/project_pb.ts
@@ -16,7 +16,7 @@ import type { Message } from "@bufbuild/protobuf";
* Describes the file metalstack/api/v2/project.proto.
*/
export const file_metalstack_api_v2_project: GenFile = /*@__PURE__*/
- fileDesc("Ch9tZXRhbHN0YWNrL2FwaS92Mi9wcm9qZWN0LnByb3RvEhFtZXRhbHN0YWNrLmFwaS52MiKzAQoHUHJvamVjdBIMCgR1dWlkGAEgASgJEiUKBG1ldGEYAiABKAsyFy5tZXRhbHN0YWNrLmFwaS52Mi5NZXRhEhkKBG5hbWUYAyABKAlCC7pICHIGwLOusQIBEiAKC2Rlc2NyaXB0aW9uGAQgASgJQgu6SAhyBsizrrECARIOCgZ0ZW5hbnQYBSABKAkSFwoKYXZhdGFyX3VybBgGIAEoCUgAiAEBQg0KC19hdmF0YXJfdXJsIqEBCg1Qcm9qZWN0TWVtYmVyEgoKAmlkGAEgASgJEjYKBHJvbGUYAiABKA4yHi5tZXRhbHN0YWNrLmFwaS52Mi5Qcm9qZWN0Um9sZUIIukgFggECEAESHAoUaW5oZXJpdGVkX21lbWJlcnNoaXAYAyABKAgSLgoKY3JlYXRlZF9hdBgKIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAikgIKDVByb2plY3RJbnZpdGUSDgoGc2VjcmV0GAEgASgJEg8KB3Byb2plY3QYAiABKAkSNgoEcm9sZRgDIAEoDjIeLm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3RSb2xlQgi6SAWCAQIQARIOCgZqb2luZWQYBCABKAgSFAoMcHJvamVjdF9uYW1lGAUgASgJEg4KBnRlbmFudBgGIAEoCRITCgt0ZW5hbnRfbmFtZRgHIAEoCRIuCgpleHBpcmVzX2F0GAogASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBItCglqb2luZWRfYXQYCyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIsMBChlQcm9qZWN0U2VydmljZUxpc3RSZXF1ZXN0Eg8KAmlkGAEgASgJSACIAQESHgoEbmFtZRgCIAEoCUILukgIcgbAs66xAgFIAYgBARIfCgZ0ZW5hbnQYAyABKAlCCrpIB3IFEAIYgAFIAogBARIuCgZsYWJlbHMYBiABKAsyGS5tZXRhbHN0YWNrLmFwaS52Mi5MYWJlbHNIA4gBAUIFCgNfaWRCBwoFX25hbWVCCQoHX3RlbmFudEIJCgdfbGFiZWxzIkoKGlByb2plY3RTZXJ2aWNlTGlzdFJlc3BvbnNlEiwKCHByb2plY3RzGAEgAygLMhoubWV0YWxzdGFjay5hcGkudjIuUHJvamVjdCI1ChhQcm9qZWN0U2VydmljZUdldFJlcXVlc3QSGQoHcHJvamVjdBgBIAEoCUIIukgFcgOwAQEigwEKGVByb2plY3RTZXJ2aWNlR2V0UmVzcG9uc2USKwoHcHJvamVjdBgBIAEoCzIaLm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3QSOQoPcHJvamVjdF9tZW1iZXJzGAIgAygLMiAubWV0YWxzdGFjay5hcGkudjIuUHJvamVjdE1lbWJlciLIAQobUHJvamVjdFNlcnZpY2VDcmVhdGVSZXF1ZXN0EhkKBWxvZ2luGAEgASgJQgq6SAdyBRACGIABEhkKBG5hbWUYAiABKAlCC7pICHIGwLOusQIBEiAKC2Rlc2NyaXB0aW9uGAMgASgJQgu6SAhyBsizrrECARIXCgphdmF0YXJfdXJsGAQgASgJSACIAQESKQoGbGFiZWxzGAUgASgLMhkubWV0YWxzdGFjay5hcGkudjIuTGFiZWxzQg0KC19hdmF0YXJfdXJsIksKHFByb2plY3RTZXJ2aWNlQ3JlYXRlUmVzcG9uc2USKwoHcHJvamVjdBgBIAEoCzIaLm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3QiOAobUHJvamVjdFNlcnZpY2VEZWxldGVSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBIksKHFByb2plY3RTZXJ2aWNlRGVsZXRlUmVzcG9uc2USKwoHcHJvamVjdBgBIAEoCzIaLm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3QivQIKG1Byb2plY3RTZXJ2aWNlVXBkYXRlUmVxdWVzdBIZCgdwcm9qZWN0GAEgASgJQgi6SAVyA7ABARI6Cgt1cGRhdGVfbWV0YRgCIAEoCzIdLm1ldGFsc3RhY2suYXBpLnYyLlVwZGF0ZU1ldGFCBrpIA8gBARIeCgRuYW1lGAMgASgJQgu6SAhyBsCzrrECAUgAiAEBEiUKC2Rlc2NyaXB0aW9uGAQgASgJQgu6SAhyBsizrrECAUgBiAEBEhcKCmF2YXRhcl91cmwYBSABKAlIAogBARI0CgZsYWJlbHMYBiABKAsyHy5tZXRhbHN0YWNrLmFwaS52Mi5VcGRhdGVMYWJlbHNIA4gBAUIHCgVfbmFtZUIOCgxfZGVzY3JpcHRpb25CDQoLX2F2YXRhcl91cmxCCQoHX2xhYmVscyJLChxQcm9qZWN0U2VydmljZVVwZGF0ZVJlc3BvbnNlEisKB3Byb2plY3QYASABKAsyGi5tZXRhbHN0YWNrLmFwaS52Mi5Qcm9qZWN0InAKG1Byb2plY3RTZXJ2aWNlSW52aXRlUmVxdWVzdBIZCgdwcm9qZWN0GAEgASgJQgi6SAVyA7ABARI2CgRyb2xlGAMgASgOMh4ubWV0YWxzdGFjay5hcGkudjIuUHJvamVjdFJvbGVCCLpIBYIBAhABIlAKHFByb2plY3RTZXJ2aWNlSW52aXRlUmVzcG9uc2USMAoGaW52aXRlGAEgASgLMiAubWV0YWxzdGFjay5hcGkudjIuUHJvamVjdEludml0ZSI9CiBQcm9qZWN0U2VydmljZUludml0ZXNMaXN0UmVxdWVzdBIZCgdwcm9qZWN0GAEgASgJQgi6SAVyA7ABASJWCiFQcm9qZWN0U2VydmljZUludml0ZXNMaXN0UmVzcG9uc2USMQoHaW52aXRlcxgBIAMoCzIgLm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3RJbnZpdGUiMAoeUHJvamVjdFNlcnZpY2VJbnZpdGVHZXRSZXF1ZXN0Eg4KBnNlY3JldBgBIAEoCSJTCh9Qcm9qZWN0U2VydmljZUludml0ZUdldFJlc3BvbnNlEjAKBmludml0ZRgBIAEoCzIgLm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3RJbnZpdGUiNwoaUHJvamVjdFNlcnZpY2VMZWF2ZVJlcXVlc3QSGQoHcHJvamVjdBgBIAEoCUIIukgFcgOwAQEiHQobUHJvamVjdFNlcnZpY2VMZWF2ZVJlc3BvbnNlIk4KIVByb2plY3RTZXJ2aWNlUmVtb3ZlTWVtYmVyUmVxdWVzdBIZCgdwcm9qZWN0GAEgASgJQgi6SAVyA7ABARIOCgZtZW1iZXIYAiABKAkiJAoiUHJvamVjdFNlcnZpY2VSZW1vdmVNZW1iZXJSZXNwb25zZSKGAQohUHJvamVjdFNlcnZpY2VVcGRhdGVNZW1iZXJSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBEg4KBm1lbWJlchgCIAEoCRI2CgRyb2xlGAMgASgOMh4ubWV0YWxzdGFjay5hcGkudjIuUHJvamVjdFJvbGVCCLpIBYIBAhABIl4KIlByb2plY3RTZXJ2aWNlVXBkYXRlTWVtYmVyUmVzcG9uc2USOAoOcHJvamVjdF9tZW1iZXIYBSABKAsyIC5tZXRhbHN0YWNrLmFwaS52Mi5Qcm9qZWN0TWVtYmVyIjMKIVByb2plY3RTZXJ2aWNlSW52aXRlQWNjZXB0UmVxdWVzdBIOCgZzZWNyZXQYASABKAkiSwoiUHJvamVjdFNlcnZpY2VJbnZpdGVBY2NlcHRSZXNwb25zZRIPCgdwcm9qZWN0GAEgASgJEhQKDHByb2plY3RfbmFtZRgCIAEoCSJOCiFQcm9qZWN0U2VydmljZUludml0ZURlbGV0ZVJlcXVlc3QSGQoHcHJvamVjdBgBIAEoCUIIukgFcgOwAQESDgoGc2VjcmV0GAIgASgJIiQKIlByb2plY3RTZXJ2aWNlSW52aXRlRGVsZXRlUmVzcG9uc2Uy4gwKDlByb2plY3RTZXJ2aWNlEm0KBExpc3QSLC5tZXRhbHN0YWNrLmFwaS52Mi5Qcm9qZWN0U2VydmljZUxpc3RSZXF1ZXN0Gi0ubWV0YWxzdGFjay5hcGkudjIuUHJvamVjdFNlcnZpY2VMaXN0UmVzcG9uc2UiCNjzGAPg8xgCEm0KA0dldBIrLm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3RTZXJ2aWNlR2V0UmVxdWVzdBosLm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3RTZXJ2aWNlR2V0UmVzcG9uc2UiC8rzGAMBAgPg8xgCEnUKBkNyZWF0ZRIuLm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3RTZXJ2aWNlQ3JlYXRlUmVxdWVzdBovLm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3RTZXJ2aWNlQ3JlYXRlUmVzcG9uc2UiCsLzGAIBAuDzGAESdAoGRGVsZXRlEi4ubWV0YWxzdGFjay5hcGkudjIuUHJvamVjdFNlcnZpY2VEZWxldGVSZXF1ZXN0Gi8ubWV0YWxzdGFjay5hcGkudjIuUHJvamVjdFNlcnZpY2VEZWxldGVSZXNwb25zZSIJyvMYAQHg8xgBEnUKBlVwZGF0ZRIuLm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3RTZXJ2aWNlVXBkYXRlUmVxdWVzdBovLm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3RTZXJ2aWNlVXBkYXRlUmVzcG9uc2UiCsrzGAIBAuDzGAEScQoFTGVhdmUSLS5tZXRhbHN0YWNrLmFwaS52Mi5Qcm9qZWN0U2VydmljZUxlYXZlUmVxdWVzdBouLm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3RTZXJ2aWNlTGVhdmVSZXNwb25zZSIJyvMYAQPg8xgBEoYBCgxSZW1vdmVNZW1iZXISNC5tZXRhbHN0YWNrLmFwaS52Mi5Qcm9qZWN0U2VydmljZVJlbW92ZU1lbWJlclJlcXVlc3QaNS5tZXRhbHN0YWNrLmFwaS52Mi5Qcm9qZWN0U2VydmljZVJlbW92ZU1lbWJlclJlc3BvbnNlIgnK8xgBAeDzGAEShgEKDFVwZGF0ZU1lbWJlchI0Lm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3RTZXJ2aWNlVXBkYXRlTWVtYmVyUmVxdWVzdBo1Lm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3RTZXJ2aWNlVXBkYXRlTWVtYmVyUmVzcG9uc2UiCcrzGAEB4PMYARJ0CgZJbnZpdGUSLi5tZXRhbHN0YWNrLmFwaS52Mi5Qcm9qZWN0U2VydmljZUludml0ZVJlcXVlc3QaLy5tZXRhbHN0YWNrLmFwaS52Mi5Qcm9qZWN0U2VydmljZUludml0ZVJlc3BvbnNlIgnK8xgBAeDzGAEShQEKDEludml0ZUFjY2VwdBI0Lm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3RTZXJ2aWNlSW52aXRlQWNjZXB0UmVxdWVzdBo1Lm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3RTZXJ2aWNlSW52aXRlQWNjZXB0UmVzcG9uc2UiCNjzGAPg8xgBEoYBCgxJbnZpdGVEZWxldGUSNC5tZXRhbHN0YWNrLmFwaS52Mi5Qcm9qZWN0U2VydmljZUludml0ZURlbGV0ZVJlcXVlc3QaNS5tZXRhbHN0YWNrLmFwaS52Mi5Qcm9qZWN0U2VydmljZUludml0ZURlbGV0ZVJlc3BvbnNlIgnK8xgBAeDzGAESgwEKC0ludml0ZXNMaXN0EjMubWV0YWxzdGFjay5hcGkudjIuUHJvamVjdFNlcnZpY2VJbnZpdGVzTGlzdFJlcXVlc3QaNC5tZXRhbHN0YWNrLmFwaS52Mi5Qcm9qZWN0U2VydmljZUludml0ZXNMaXN0UmVzcG9uc2UiCcrzGAEB4PMYAhJ8CglJbnZpdGVHZXQSMS5tZXRhbHN0YWNrLmFwaS52Mi5Qcm9qZWN0U2VydmljZUludml0ZUdldFJlcXVlc3QaMi5tZXRhbHN0YWNrLmFwaS52Mi5Qcm9qZWN0U2VydmljZUludml0ZUdldFJlc3BvbnNlIgjY8xgD4PMYAkLCAQoVY29tLm1ldGFsc3RhY2suYXBpLnYyQgxQcm9qZWN0UHJvdG9QAVo1Z2l0aHViLmNvbS9tZXRhbC1zdGFjay9hcGkvZ28vbWV0YWxzdGFjay9hcGkvdjI7YXBpdjKiAgNNQViqAhFNZXRhbHN0YWNrLkFwaS5WMsoCEU1ldGFsc3RhY2tcQXBpXFYy4gIdTWV0YWxzdGFja1xBcGlcVjJcR1BCTWV0YWRhdGHqAhNNZXRhbHN0YWNrOjpBcGk6OlYyYgZwcm90bzM", [file_buf_validate_validate, file_google_protobuf_timestamp, file_metalstack_api_v2_common, file_metalstack_api_v2_predefined_rules]);
+ fileDesc("Ch9tZXRhbHN0YWNrL2FwaS92Mi9wcm9qZWN0LnByb3RvEhFtZXRhbHN0YWNrLmFwaS52MiKzAQoHUHJvamVjdBIMCgR1dWlkGAEgASgJEiUKBG1ldGEYAiABKAsyFy5tZXRhbHN0YWNrLmFwaS52Mi5NZXRhEhkKBG5hbWUYAyABKAlCC7pICHIGwLOusQIBEiAKC2Rlc2NyaXB0aW9uGAQgASgJQgu6SAhyBsizrrECARIOCgZ0ZW5hbnQYBSABKAkSFwoKYXZhdGFyX3VybBgGIAEoCUgAiAEBQg0KC19hdmF0YXJfdXJsIqEBCg1Qcm9qZWN0TWVtYmVyEgoKAmlkGAEgASgJEjYKBHJvbGUYAiABKA4yHi5tZXRhbHN0YWNrLmFwaS52Mi5Qcm9qZWN0Um9sZUIIukgFggECEAESHAoUaW5oZXJpdGVkX21lbWJlcnNoaXAYAyABKAgSLgoKY3JlYXRlZF9hdBgKIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAikgIKDVByb2plY3RJbnZpdGUSDgoGc2VjcmV0GAEgASgJEg8KB3Byb2plY3QYAiABKAkSNgoEcm9sZRgDIAEoDjIeLm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3RSb2xlQgi6SAWCAQIQARIOCgZqb2luZWQYBCABKAgSFAoMcHJvamVjdF9uYW1lGAUgASgJEg4KBnRlbmFudBgGIAEoCRITCgt0ZW5hbnRfbmFtZRgHIAEoCRIuCgpleHBpcmVzX2F0GAogASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBItCglqb2luZWRfYXQYCyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIsQBChlQcm9qZWN0U2VydmljZUxpc3RSZXF1ZXN0Eg8KAmlkGAEgASgJSACIAQESHgoEbmFtZRgCIAEoCUILukgIcgbAs66xAgFIAYgBARIgCgZ0ZW5hbnQYAyABKAlCC7pICHIGwLOusQIBSAKIAQESLgoGbGFiZWxzGAYgASgLMhkubWV0YWxzdGFjay5hcGkudjIuTGFiZWxzSAOIAQFCBQoDX2lkQgcKBV9uYW1lQgkKB190ZW5hbnRCCQoHX2xhYmVscyJKChpQcm9qZWN0U2VydmljZUxpc3RSZXNwb25zZRIsCghwcm9qZWN0cxgBIAMoCzIaLm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3QiNQoYUHJvamVjdFNlcnZpY2VHZXRSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBIoMBChlQcm9qZWN0U2VydmljZUdldFJlc3BvbnNlEisKB3Byb2plY3QYASABKAsyGi5tZXRhbHN0YWNrLmFwaS52Mi5Qcm9qZWN0EjkKD3Byb2plY3RfbWVtYmVycxgCIAMoCzIgLm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3RNZW1iZXIiyQEKG1Byb2plY3RTZXJ2aWNlQ3JlYXRlUmVxdWVzdBIaCgVsb2dpbhgBIAEoCUILukgIcgbAs66xAgESGQoEbmFtZRgCIAEoCUILukgIcgbAs66xAgESIAoLZGVzY3JpcHRpb24YAyABKAlCC7pICHIGyLOusQIBEhcKCmF2YXRhcl91cmwYBCABKAlIAIgBARIpCgZsYWJlbHMYBSABKAsyGS5tZXRhbHN0YWNrLmFwaS52Mi5MYWJlbHNCDQoLX2F2YXRhcl91cmwiSwocUHJvamVjdFNlcnZpY2VDcmVhdGVSZXNwb25zZRIrCgdwcm9qZWN0GAEgASgLMhoubWV0YWxzdGFjay5hcGkudjIuUHJvamVjdCI4ChtQcm9qZWN0U2VydmljZURlbGV0ZVJlcXVlc3QSGQoHcHJvamVjdBgBIAEoCUIIukgFcgOwAQEiSwocUHJvamVjdFNlcnZpY2VEZWxldGVSZXNwb25zZRIrCgdwcm9qZWN0GAEgASgLMhoubWV0YWxzdGFjay5hcGkudjIuUHJvamVjdCK9AgobUHJvamVjdFNlcnZpY2VVcGRhdGVSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBEjoKC3VwZGF0ZV9tZXRhGAIgASgLMh0ubWV0YWxzdGFjay5hcGkudjIuVXBkYXRlTWV0YUIGukgDyAEBEh4KBG5hbWUYAyABKAlCC7pICHIGwLOusQIBSACIAQESJQoLZGVzY3JpcHRpb24YBCABKAlCC7pICHIGyLOusQIBSAGIAQESFwoKYXZhdGFyX3VybBgFIAEoCUgCiAEBEjQKBmxhYmVscxgGIAEoCzIfLm1ldGFsc3RhY2suYXBpLnYyLlVwZGF0ZUxhYmVsc0gDiAEBQgcKBV9uYW1lQg4KDF9kZXNjcmlwdGlvbkINCgtfYXZhdGFyX3VybEIJCgdfbGFiZWxzIksKHFByb2plY3RTZXJ2aWNlVXBkYXRlUmVzcG9uc2USKwoHcHJvamVjdBgBIAEoCzIaLm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3QicAobUHJvamVjdFNlcnZpY2VJbnZpdGVSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBEjYKBHJvbGUYAyABKA4yHi5tZXRhbHN0YWNrLmFwaS52Mi5Qcm9qZWN0Um9sZUIIukgFggECEAEiUAocUHJvamVjdFNlcnZpY2VJbnZpdGVSZXNwb25zZRIwCgZpbnZpdGUYASABKAsyIC5tZXRhbHN0YWNrLmFwaS52Mi5Qcm9qZWN0SW52aXRlIj0KIFByb2plY3RTZXJ2aWNlSW52aXRlc0xpc3RSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBIlYKIVByb2plY3RTZXJ2aWNlSW52aXRlc0xpc3RSZXNwb25zZRIxCgdpbnZpdGVzGAEgAygLMiAubWV0YWxzdGFjay5hcGkudjIuUHJvamVjdEludml0ZSIwCh5Qcm9qZWN0U2VydmljZUludml0ZUdldFJlcXVlc3QSDgoGc2VjcmV0GAEgASgJIlMKH1Byb2plY3RTZXJ2aWNlSW52aXRlR2V0UmVzcG9uc2USMAoGaW52aXRlGAEgASgLMiAubWV0YWxzdGFjay5hcGkudjIuUHJvamVjdEludml0ZSI3ChpQcm9qZWN0U2VydmljZUxlYXZlUmVxdWVzdBIZCgdwcm9qZWN0GAEgASgJQgi6SAVyA7ABASIdChtQcm9qZWN0U2VydmljZUxlYXZlUmVzcG9uc2UiTgohUHJvamVjdFNlcnZpY2VSZW1vdmVNZW1iZXJSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBEg4KBm1lbWJlchgCIAEoCSIkCiJQcm9qZWN0U2VydmljZVJlbW92ZU1lbWJlclJlc3BvbnNlIoYBCiFQcm9qZWN0U2VydmljZVVwZGF0ZU1lbWJlclJlcXVlc3QSGQoHcHJvamVjdBgBIAEoCUIIukgFcgOwAQESDgoGbWVtYmVyGAIgASgJEjYKBHJvbGUYAyABKA4yHi5tZXRhbHN0YWNrLmFwaS52Mi5Qcm9qZWN0Um9sZUIIukgFggECEAEiXgoiUHJvamVjdFNlcnZpY2VVcGRhdGVNZW1iZXJSZXNwb25zZRI4Cg5wcm9qZWN0X21lbWJlchgFIAEoCzIgLm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3RNZW1iZXIiMwohUHJvamVjdFNlcnZpY2VJbnZpdGVBY2NlcHRSZXF1ZXN0Eg4KBnNlY3JldBgBIAEoCSJLCiJQcm9qZWN0U2VydmljZUludml0ZUFjY2VwdFJlc3BvbnNlEg8KB3Byb2plY3QYASABKAkSFAoMcHJvamVjdF9uYW1lGAIgASgJIk4KIVByb2plY3RTZXJ2aWNlSW52aXRlRGVsZXRlUmVxdWVzdBIZCgdwcm9qZWN0GAEgASgJQgi6SAVyA7ABARIOCgZzZWNyZXQYAiABKAkiJAoiUHJvamVjdFNlcnZpY2VJbnZpdGVEZWxldGVSZXNwb25zZTLiDAoOUHJvamVjdFNlcnZpY2USbQoETGlzdBIsLm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3RTZXJ2aWNlTGlzdFJlcXVlc3QaLS5tZXRhbHN0YWNrLmFwaS52Mi5Qcm9qZWN0U2VydmljZUxpc3RSZXNwb25zZSII2PMYA+DzGAISbQoDR2V0EisubWV0YWxzdGFjay5hcGkudjIuUHJvamVjdFNlcnZpY2VHZXRSZXF1ZXN0GiwubWV0YWxzdGFjay5hcGkudjIuUHJvamVjdFNlcnZpY2VHZXRSZXNwb25zZSILyvMYAwECA+DzGAISdQoGQ3JlYXRlEi4ubWV0YWxzdGFjay5hcGkudjIuUHJvamVjdFNlcnZpY2VDcmVhdGVSZXF1ZXN0Gi8ubWV0YWxzdGFjay5hcGkudjIuUHJvamVjdFNlcnZpY2VDcmVhdGVSZXNwb25zZSIKwvMYAgEC4PMYARJ0CgZEZWxldGUSLi5tZXRhbHN0YWNrLmFwaS52Mi5Qcm9qZWN0U2VydmljZURlbGV0ZVJlcXVlc3QaLy5tZXRhbHN0YWNrLmFwaS52Mi5Qcm9qZWN0U2VydmljZURlbGV0ZVJlc3BvbnNlIgnK8xgBAeDzGAESdQoGVXBkYXRlEi4ubWV0YWxzdGFjay5hcGkudjIuUHJvamVjdFNlcnZpY2VVcGRhdGVSZXF1ZXN0Gi8ubWV0YWxzdGFjay5hcGkudjIuUHJvamVjdFNlcnZpY2VVcGRhdGVSZXNwb25zZSIKyvMYAgEC4PMYARJxCgVMZWF2ZRItLm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3RTZXJ2aWNlTGVhdmVSZXF1ZXN0Gi4ubWV0YWxzdGFjay5hcGkudjIuUHJvamVjdFNlcnZpY2VMZWF2ZVJlc3BvbnNlIgnK8xgBA+DzGAEShgEKDFJlbW92ZU1lbWJlchI0Lm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3RTZXJ2aWNlUmVtb3ZlTWVtYmVyUmVxdWVzdBo1Lm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3RTZXJ2aWNlUmVtb3ZlTWVtYmVyUmVzcG9uc2UiCcrzGAEB4PMYARKGAQoMVXBkYXRlTWVtYmVyEjQubWV0YWxzdGFjay5hcGkudjIuUHJvamVjdFNlcnZpY2VVcGRhdGVNZW1iZXJSZXF1ZXN0GjUubWV0YWxzdGFjay5hcGkudjIuUHJvamVjdFNlcnZpY2VVcGRhdGVNZW1iZXJSZXNwb25zZSIJyvMYAQHg8xgBEnQKBkludml0ZRIuLm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3RTZXJ2aWNlSW52aXRlUmVxdWVzdBovLm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3RTZXJ2aWNlSW52aXRlUmVzcG9uc2UiCcrzGAEB4PMYARKFAQoMSW52aXRlQWNjZXB0EjQubWV0YWxzdGFjay5hcGkudjIuUHJvamVjdFNlcnZpY2VJbnZpdGVBY2NlcHRSZXF1ZXN0GjUubWV0YWxzdGFjay5hcGkudjIuUHJvamVjdFNlcnZpY2VJbnZpdGVBY2NlcHRSZXNwb25zZSII2PMYA+DzGAEShgEKDEludml0ZURlbGV0ZRI0Lm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3RTZXJ2aWNlSW52aXRlRGVsZXRlUmVxdWVzdBo1Lm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3RTZXJ2aWNlSW52aXRlRGVsZXRlUmVzcG9uc2UiCcrzGAEB4PMYARKDAQoLSW52aXRlc0xpc3QSMy5tZXRhbHN0YWNrLmFwaS52Mi5Qcm9qZWN0U2VydmljZUludml0ZXNMaXN0UmVxdWVzdBo0Lm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3RTZXJ2aWNlSW52aXRlc0xpc3RSZXNwb25zZSIJyvMYAQHg8xgCEnwKCUludml0ZUdldBIxLm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3RTZXJ2aWNlSW52aXRlR2V0UmVxdWVzdBoyLm1ldGFsc3RhY2suYXBpLnYyLlByb2plY3RTZXJ2aWNlSW52aXRlR2V0UmVzcG9uc2UiCNjzGAPg8xgCQsIBChVjb20ubWV0YWxzdGFjay5hcGkudjJCDFByb2plY3RQcm90b1ABWjVnaXRodWIuY29tL21ldGFsLXN0YWNrL2FwaS9nby9tZXRhbHN0YWNrL2FwaS92MjthcGl2MqICA01BWKoCEU1ldGFsc3RhY2suQXBpLlYyygIRTWV0YWxzdGFja1xBcGlcVjLiAh1NZXRhbHN0YWNrXEFwaVxWMlxHUEJNZXRhZGF0YeoCE01ldGFsc3RhY2s6OkFwaTo6VjJiBnByb3RvMw", [file_buf_validate_validate, file_google_protobuf_timestamp, file_metalstack_api_v2_common, file_metalstack_api_v2_predefined_rules]);
/**
* Project defines a group of resources belonging to a tenant
diff --git a/js/metalstack/api/v2/size_pb.ts b/js/metalstack/api/v2/size_pb.ts
index 5737fe29..43e69118 100644
--- a/js/metalstack/api/v2/size_pb.ts
+++ b/js/metalstack/api/v2/size_pb.ts
@@ -14,7 +14,7 @@ import type { Message } from "@bufbuild/protobuf";
* Describes the file metalstack/api/v2/size.proto.
*/
export const file_metalstack_api_v2_size: GenFile = /*@__PURE__*/
- fileDesc("ChxtZXRhbHN0YWNrL2FwaS92Mi9zaXplLnByb3RvEhFtZXRhbHN0YWNrLmFwaS52MiIvChVTaXplU2VydmljZUdldFJlcXVlc3QSFgoCaWQYASABKAlCCrpIB3IFEAIYgAEiRQoWU2l6ZVNlcnZpY2VMaXN0UmVxdWVzdBIrCgVxdWVyeRgBIAEoCzIcLm1ldGFsc3RhY2suYXBpLnYyLlNpemVRdWVyeSI/ChZTaXplU2VydmljZUdldFJlc3BvbnNlEiUKBHNpemUYASABKAsyFy5tZXRhbHN0YWNrLmFwaS52Mi5TaXplIkEKF1NpemVTZXJ2aWNlTGlzdFJlc3BvbnNlEiYKBXNpemVzGAEgAygLMhcubWV0YWxzdGFjay5hcGkudjIuU2l6ZSLdAQoEU2l6ZRIWCgJpZBgBIAEoCUIKukgHcgUQAhiAARIlCgRtZXRhGAIgASgLMhcubWV0YWxzdGFjay5hcGkudjIuTWV0YRIeCgRuYW1lGAQgASgJQgu6SAhyBsCzrrECAUgAiAEBEiUKC2Rlc2NyaXB0aW9uGAUgASgJQgu6SAhyBsizrrECAUgBiAEBEjYKC2NvbnN0cmFpbnRzGAYgAygLMiEubWV0YWxzdGFjay5hcGkudjIuU2l6ZUNvbnN0cmFpbnRCBwoFX25hbWVCDgoMX2Rlc2NyaXB0aW9uIp0BCg5TaXplQ29uc3RyYWludBI9CgR0eXBlGAEgASgOMiUubWV0YWxzdGFjay5hcGkudjIuU2l6ZUNvbnN0cmFpbnRUeXBlQgi6SAWCAQIQARILCgNtaW4YAiABKAQSCwoDbWF4GAMgASgEEiMKCmlkZW50aWZpZXIYBCABKAlCCrpIB3IFEAAYgAFIAIgBAUINCgtfaWRlbnRpZmllciLKAQoJU2l6ZVF1ZXJ5EhsKAmlkGAEgASgJQgq6SAdyBRACGIABSACIAQESHgoEbmFtZRgCIAEoCUILukgIcgbAs66xAgFIAYgBARIlCgtkZXNjcmlwdGlvbhgDIAEoCUILukgIcgbIs66xAgFIAogBARIuCgZsYWJlbHMYBCABKAsyGS5tZXRhbHN0YWNrLmFwaS52Mi5MYWJlbHNIA4gBAUIFCgNfaWRCBwoFX25hbWVCDgoMX2Rlc2NyaXB0aW9uQgkKB19sYWJlbHMq6AEKElNpemVDb25zdHJhaW50VHlwZRIkCiBTSVpFX0NPTlNUUkFJTlRfVFlQRV9VTlNQRUNJRklFRBAAEikKGlNJWkVfQ09OU1RSQUlOVF9UWVBFX0NPUkVTEAEaCYKyGQVjb3JlcxIrChtTSVpFX0NPTlNUUkFJTlRfVFlQRV9NRU1PUlkQAhoKgrIZBm1lbW9yeRItChxTSVpFX0NPTlNUUkFJTlRfVFlQRV9TVE9SQUdFEAMaC4KyGQdzdG9yYWdlEiUKGFNJWkVfQ09OU1RSQUlOVF9UWVBFX0dQVRAEGgeCshkDZ3B1MtwBCgtTaXplU2VydmljZRJkCgNHZXQSKC5tZXRhbHN0YWNrLmFwaS52Mi5TaXplU2VydmljZUdldFJlcXVlc3QaKS5tZXRhbHN0YWNrLmFwaS52Mi5TaXplU2VydmljZUdldFJlc3BvbnNlIgjY8xgD4PMYAhJnCgRMaXN0EikubWV0YWxzdGFjay5hcGkudjIuU2l6ZVNlcnZpY2VMaXN0UmVxdWVzdBoqLm1ldGFsc3RhY2suYXBpLnYyLlNpemVTZXJ2aWNlTGlzdFJlc3BvbnNlIgjY8xgD4PMYAkK/AQoVY29tLm1ldGFsc3RhY2suYXBpLnYyQglTaXplUHJvdG9QAVo1Z2l0aHViLmNvbS9tZXRhbC1zdGFjay9hcGkvZ28vbWV0YWxzdGFjay9hcGkvdjI7YXBpdjKiAgNNQViqAhFNZXRhbHN0YWNrLkFwaS5WMsoCEU1ldGFsc3RhY2tcQXBpXFYy4gIdTWV0YWxzdGFja1xBcGlcVjJcR1BCTWV0YWRhdGHqAhNNZXRhbHN0YWNrOjpBcGk6OlYyYgZwcm90bzM", [file_buf_validate_validate, file_metalstack_api_v2_common, file_metalstack_api_v2_predefined_rules]);
+ fileDesc("ChxtZXRhbHN0YWNrL2FwaS92Mi9zaXplLnByb3RvEhFtZXRhbHN0YWNrLmFwaS52MiIvChVTaXplU2VydmljZUdldFJlcXVlc3QSFgoCaWQYASABKAlCCrpIB3IFEAIYgAEiRQoWU2l6ZVNlcnZpY2VMaXN0UmVxdWVzdBIrCgVxdWVyeRgBIAEoCzIcLm1ldGFsc3RhY2suYXBpLnYyLlNpemVRdWVyeSI/ChZTaXplU2VydmljZUdldFJlc3BvbnNlEiUKBHNpemUYASABKAsyFy5tZXRhbHN0YWNrLmFwaS52Mi5TaXplIkEKF1NpemVTZXJ2aWNlTGlzdFJlc3BvbnNlEiYKBXNpemVzGAEgAygLMhcubWV0YWxzdGFjay5hcGkudjIuU2l6ZSLeAQoEU2l6ZRIXCgJpZBgBIAEoCUILukgIcgbAs66xAgESJQoEbWV0YRgCIAEoCzIXLm1ldGFsc3RhY2suYXBpLnYyLk1ldGESHgoEbmFtZRgEIAEoCUILukgIcgbAs66xAgFIAIgBARIlCgtkZXNjcmlwdGlvbhgFIAEoCUILukgIcgbIs66xAgFIAYgBARI2Cgtjb25zdHJhaW50cxgGIAMoCzIhLm1ldGFsc3RhY2suYXBpLnYyLlNpemVDb25zdHJhaW50QgcKBV9uYW1lQg4KDF9kZXNjcmlwdGlvbiKdAQoOU2l6ZUNvbnN0cmFpbnQSPQoEdHlwZRgBIAEoDjIlLm1ldGFsc3RhY2suYXBpLnYyLlNpemVDb25zdHJhaW50VHlwZUIIukgFggECEAESCwoDbWluGAIgASgEEgsKA21heBgDIAEoBBIjCgppZGVudGlmaWVyGAQgASgJQgq6SAdyBRAAGIABSACIAQFCDQoLX2lkZW50aWZpZXIiywEKCVNpemVRdWVyeRIcCgJpZBgBIAEoCUILukgIcgbAs66xAgFIAIgBARIeCgRuYW1lGAIgASgJQgu6SAhyBsCzrrECAUgBiAEBEiUKC2Rlc2NyaXB0aW9uGAMgASgJQgu6SAhyBsizrrECAUgCiAEBEi4KBmxhYmVscxgEIAEoCzIZLm1ldGFsc3RhY2suYXBpLnYyLkxhYmVsc0gDiAEBQgUKA19pZEIHCgVfbmFtZUIOCgxfZGVzY3JpcHRpb25CCQoHX2xhYmVscyroAQoSU2l6ZUNvbnN0cmFpbnRUeXBlEiQKIFNJWkVfQ09OU1RSQUlOVF9UWVBFX1VOU1BFQ0lGSUVEEAASKQoaU0laRV9DT05TVFJBSU5UX1RZUEVfQ09SRVMQARoJgrIZBWNvcmVzEisKG1NJWkVfQ09OU1RSQUlOVF9UWVBFX01FTU9SWRACGgqCshkGbWVtb3J5Ei0KHFNJWkVfQ09OU1RSQUlOVF9UWVBFX1NUT1JBR0UQAxoLgrIZB3N0b3JhZ2USJQoYU0laRV9DT05TVFJBSU5UX1RZUEVfR1BVEAQaB4KyGQNncHUy3AEKC1NpemVTZXJ2aWNlEmQKA0dldBIoLm1ldGFsc3RhY2suYXBpLnYyLlNpemVTZXJ2aWNlR2V0UmVxdWVzdBopLm1ldGFsc3RhY2suYXBpLnYyLlNpemVTZXJ2aWNlR2V0UmVzcG9uc2UiCNjzGAPg8xgCEmcKBExpc3QSKS5tZXRhbHN0YWNrLmFwaS52Mi5TaXplU2VydmljZUxpc3RSZXF1ZXN0GioubWV0YWxzdGFjay5hcGkudjIuU2l6ZVNlcnZpY2VMaXN0UmVzcG9uc2UiCNjzGAPg8xgCQr8BChVjb20ubWV0YWxzdGFjay5hcGkudjJCCVNpemVQcm90b1ABWjVnaXRodWIuY29tL21ldGFsLXN0YWNrL2FwaS9nby9tZXRhbHN0YWNrL2FwaS92MjthcGl2MqICA01BWKoCEU1ldGFsc3RhY2suQXBpLlYyygIRTWV0YWxzdGFja1xBcGlcVjLiAh1NZXRhbHN0YWNrXEFwaVxWMlxHUEJNZXRhZGF0YeoCE01ldGFsc3RhY2s6OkFwaTo6VjJiBnByb3RvMw", [file_buf_validate_validate, file_metalstack_api_v2_common, file_metalstack_api_v2_predefined_rules]);
/**
* SizeServiceGetRequest is the request payload for a size get request
diff --git a/js/metalstack/api/v2/size_reservation_pb.ts b/js/metalstack/api/v2/size_reservation_pb.ts
new file mode 100644
index 00000000..a5a7fefa
--- /dev/null
+++ b/js/metalstack/api/v2/size_reservation_pb.ts
@@ -0,0 +1,278 @@
+// @generated by protoc-gen-es v2.11.0 with parameter "target=ts"
+// @generated from file metalstack/api/v2/size_reservation.proto (package metalstack.api.v2, syntax proto3)
+/* eslint-disable */
+
+import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2";
+import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2";
+import { file_buf_validate_validate } from "../../../buf/validate/validate_pb";
+import type { Labels, Meta } from "./common_pb";
+import { file_metalstack_api_v2_common } from "./common_pb";
+import { file_metalstack_api_v2_predefined_rules } from "./predefined_rules_pb";
+import type { Message } from "@bufbuild/protobuf";
+
+/**
+ * Describes the file metalstack/api/v2/size_reservation.proto.
+ */
+export const file_metalstack_api_v2_size_reservation: GenFile = /*@__PURE__*/
+ fileDesc("CihtZXRhbHN0YWNrL2FwaS92Mi9zaXplX3Jlc2VydmF0aW9uLnByb3RvEhFtZXRhbHN0YWNrLmFwaS52MiJTCiBTaXplUmVzZXJ2YXRpb25TZXJ2aWNlR2V0UmVxdWVzdBIUCgJpZBgBIAEoCUIIukgFcgOwAQESGQoHcHJvamVjdBgCIAEoCUIIukgFcgOwAQEidgohU2l6ZVJlc2VydmF0aW9uU2VydmljZUxpc3RSZXF1ZXN0EhkKB3Byb2plY3QYASABKAlCCLpIBXIDsAEBEjYKBXF1ZXJ5GAIgASgLMicubWV0YWxzdGFjay5hcGkudjIuU2l6ZVJlc2VydmF0aW9uUXVlcnkiYQohU2l6ZVJlc2VydmF0aW9uU2VydmljZUdldFJlc3BvbnNlEjwKEHNpemVfcmVzZXJ2YXRpb24YASABKAsyIi5tZXRhbHN0YWNrLmFwaS52Mi5TaXplUmVzZXJ2YXRpb24iYwoiU2l6ZVJlc2VydmF0aW9uU2VydmljZUxpc3RSZXNwb25zZRI9ChFzaXplX3Jlc2VydmF0aW9ucxgBIAMoCzIiLm1ldGFsc3RhY2suYXBpLnYyLlNpemVSZXNlcnZhdGlvbiKHAgoPU2l6ZVJlc2VydmF0aW9uEhcKAmlkGAEgASgJQgu6SAjYAQFyA7ABARIlCgRtZXRhGAIgASgLMhcubWV0YWxzdGFjay5hcGkudjIuTWV0YRIZCgRuYW1lGAMgASgJQgu6SAhyBsCzrrECARIgCgtkZXNjcmlwdGlvbhgEIAEoCUILukgIcgbIs66xAgESGQoHcHJvamVjdBgFIAEoCUIIukgFcgOwAQESGQoEc2l6ZRgGIAEoCUILukgIcgbAs66xAgESKAoKcGFydGl0aW9ucxgHIAMoCUIUukgRkgEOCAEYASIIcgbQs66xAgESFwoGYW1vdW50GAggASgFQge6SAQaAiAAItsCChRTaXplUmVzZXJ2YXRpb25RdWVyeRIZCgJpZBgBIAEoCUIIukgFcgOwAQFIAIgBARIeCgRuYW1lGAIgASgJQgu6SAhyBsCzrrECAUgBiAEBEiUKC2Rlc2NyaXB0aW9uGAMgASgJQgu6SAhyBsizrrECAUgCiAEBEh4KBHNpemUYBCABKAlCC7pICHIGwLOusQIBSAOIAQESHgoHcHJvamVjdBgFIAEoCUIIukgFcgOwAQFIBIgBARIjCglwYXJ0aXRpb24YBiABKAlCC7pICHIG0LOusQIBSAWIAQESLgoGbGFiZWxzGAcgASgLMhkubWV0YWxzdGFjay5hcGkudjIuTGFiZWxzSAaIAQFCBQoDX2lkQgcKBV9uYW1lQg4KDF9kZXNjcmlwdGlvbkIHCgVfc2l6ZUIKCghfcHJvamVjdEIMCgpfcGFydGl0aW9uQgkKB19sYWJlbHMymgIKFlNpemVSZXNlcnZhdGlvblNlcnZpY2USfQoDR2V0EjMubWV0YWxzdGFjay5hcGkudjIuU2l6ZVJlc2VydmF0aW9uU2VydmljZUdldFJlcXVlc3QaNC5tZXRhbHN0YWNrLmFwaS52Mi5TaXplUmVzZXJ2YXRpb25TZXJ2aWNlR2V0UmVzcG9uc2UiC8rzGAMBAgPg8xgCEoABCgRMaXN0EjQubWV0YWxzdGFjay5hcGkudjIuU2l6ZVJlc2VydmF0aW9uU2VydmljZUxpc3RSZXF1ZXN0GjUubWV0YWxzdGFjay5hcGkudjIuU2l6ZVJlc2VydmF0aW9uU2VydmljZUxpc3RSZXNwb25zZSILyvMYAwECA+DzGAJCygEKFWNvbS5tZXRhbHN0YWNrLmFwaS52MkIUU2l6ZVJlc2VydmF0aW9uUHJvdG9QAVo1Z2l0aHViLmNvbS9tZXRhbC1zdGFjay9hcGkvZ28vbWV0YWxzdGFjay9hcGkvdjI7YXBpdjKiAgNNQViqAhFNZXRhbHN0YWNrLkFwaS5WMsoCEU1ldGFsc3RhY2tcQXBpXFYy4gIdTWV0YWxzdGFja1xBcGlcVjJcR1BCTWV0YWRhdGHqAhNNZXRhbHN0YWNrOjpBcGk6OlYyYgZwcm90bzM", [file_buf_validate_validate, file_metalstack_api_v2_common, file_metalstack_api_v2_predefined_rules]);
+
+/**
+ * SizeReservationServiceGetRequest is the request payload for a size get request
+ *
+ * @generated from message metalstack.api.v2.SizeReservationServiceGetRequest
+ */
+export type SizeReservationServiceGetRequest = Message<"metalstack.api.v2.SizeReservationServiceGetRequest"> & {
+ /**
+ * ID of the size reservation to get
+ *
+ * @generated from field: string id = 1;
+ */
+ id: string;
+
+ /**
+ * Project of the size reservation
+ *
+ * @generated from field: string project = 2;
+ */
+ project: string;
+};
+
+/**
+ * Describes the message metalstack.api.v2.SizeReservationServiceGetRequest.
+ * Use `create(SizeReservationServiceGetRequestSchema)` to create a new message.
+ */
+export const SizeReservationServiceGetRequestSchema: GenMessage = /*@__PURE__*/
+ messageDesc(file_metalstack_api_v2_size_reservation, 0);
+
+/**
+ * SizeReservationServiceListRequest is the request payload for a size list request
+ *
+ * @generated from message metalstack.api.v2.SizeReservationServiceListRequest
+ */
+export type SizeReservationServiceListRequest = Message<"metalstack.api.v2.SizeReservationServiceListRequest"> & {
+ /**
+ * Project of the size reservation
+ *
+ * @generated from field: string project = 1;
+ */
+ project: string;
+
+ /**
+ * Query for size reservations
+ *
+ * @generated from field: metalstack.api.v2.SizeReservationQuery query = 2;
+ */
+ query?: SizeReservationQuery;
+};
+
+/**
+ * Describes the message metalstack.api.v2.SizeReservationServiceListRequest.
+ * Use `create(SizeReservationServiceListRequestSchema)` to create a new message.
+ */
+export const SizeReservationServiceListRequestSchema: GenMessage = /*@__PURE__*/
+ messageDesc(file_metalstack_api_v2_size_reservation, 1);
+
+/**
+ * SizeReservationServiceGetResponse is the response payload for a size reservation get request
+ *
+ * @generated from message metalstack.api.v2.SizeReservationServiceGetResponse
+ */
+export type SizeReservationServiceGetResponse = Message<"metalstack.api.v2.SizeReservationServiceGetResponse"> & {
+ /**
+ * Size reservation
+ *
+ * @generated from field: metalstack.api.v2.SizeReservation size_reservation = 1;
+ */
+ sizeReservation?: SizeReservation;
+};
+
+/**
+ * Describes the message metalstack.api.v2.SizeReservationServiceGetResponse.
+ * Use `create(SizeReservationServiceGetResponseSchema)` to create a new message.
+ */
+export const SizeReservationServiceGetResponseSchema: GenMessage = /*@__PURE__*/
+ messageDesc(file_metalstack_api_v2_size_reservation, 2);
+
+/**
+ * SizeReservationServiceListResponse is the response payload for a size reservation list request
+ *
+ * @generated from message metalstack.api.v2.SizeReservationServiceListResponse
+ */
+export type SizeReservationServiceListResponse = Message<"metalstack.api.v2.SizeReservationServiceListResponse"> & {
+ /**
+ * Size reservations
+ *
+ * @generated from field: repeated metalstack.api.v2.SizeReservation size_reservations = 1;
+ */
+ sizeReservations: SizeReservation[];
+};
+
+/**
+ * Describes the message metalstack.api.v2.SizeReservationServiceListResponse.
+ * Use `create(SizeReservationServiceListResponseSchema)` to create a new message.
+ */
+export const SizeReservationServiceListResponseSchema: GenMessage = /*@__PURE__*/
+ messageDesc(file_metalstack_api_v2_size_reservation, 3);
+
+/**
+ * SizeReservation
+ *
+ * @generated from message metalstack.api.v2.SizeReservation
+ */
+export type SizeReservation = Message<"metalstack.api.v2.SizeReservation"> & {
+ /**
+ * Id of this size reservation, is generated on creation
+ *
+ * @generated from field: string id = 1;
+ */
+ id: string;
+
+ /**
+ * Meta for this size reservation
+ *
+ * @generated from field: metalstack.api.v2.Meta meta = 2;
+ */
+ meta?: Meta;
+
+ /**
+ * Name of this size reservation
+ *
+ * @generated from field: string name = 3;
+ */
+ name: string;
+
+ /**
+ * Description of this size reservation
+ *
+ * @generated from field: string description = 4;
+ */
+ description: string;
+
+ /**
+ * Project of the size reservation
+ *
+ * @generated from field: string project = 5;
+ */
+ project: string;
+
+ /**
+ * Size id of this size reservation
+ *
+ * @generated from field: string size = 6;
+ */
+ size: string;
+
+ /**
+ * Partition ids of this size reservation
+ *
+ * @generated from field: repeated string partitions = 7;
+ */
+ partitions: string[];
+
+ /**
+ * Amount of reservations of this size reservation
+ *
+ * @generated from field: int32 amount = 8;
+ */
+ amount: number;
+};
+
+/**
+ * Describes the message metalstack.api.v2.SizeReservation.
+ * Use `create(SizeReservationSchema)` to create a new message.
+ */
+export const SizeReservationSchema: GenMessage = /*@__PURE__*/
+ messageDesc(file_metalstack_api_v2_size_reservation, 4);
+
+/**
+ * SizeReservationQuery is used to search size reservations
+ *
+ * @generated from message metalstack.api.v2.SizeReservationQuery
+ */
+export type SizeReservationQuery = Message<"metalstack.api.v2.SizeReservationQuery"> & {
+ /**
+ * ID of the size reservation to get
+ *
+ * @generated from field: optional string id = 1;
+ */
+ id?: string;
+
+ /**
+ * Name of this size reservation
+ *
+ * @generated from field: optional string name = 2;
+ */
+ name?: string;
+
+ /**
+ * Description of this size reservation
+ *
+ * @generated from field: optional string description = 3;
+ */
+ description?: string;
+
+ /**
+ * Size id of this size reservation
+ *
+ * @generated from field: optional string size = 4;
+ */
+ size?: string;
+
+ /**
+ * Project of the size reservation
+ *
+ * @generated from field: optional string project = 5;
+ */
+ project?: string;
+
+ /**
+ * Partition of the size reservation
+ *
+ * @generated from field: optional string partition = 6;
+ */
+ partition?: string;
+
+ /**
+ * Labels lists only size reservations containing the given labels
+ *
+ * @generated from field: optional metalstack.api.v2.Labels labels = 7;
+ */
+ labels?: Labels;
+};
+
+/**
+ * Describes the message metalstack.api.v2.SizeReservationQuery.
+ * Use `create(SizeReservationQuerySchema)` to create a new message.
+ */
+export const SizeReservationQuerySchema: GenMessage = /*@__PURE__*/
+ messageDesc(file_metalstack_api_v2_size_reservation, 5);
+
+/**
+ * SizeReservationService serves size reservation related functions
+ *
+ * @generated from service metalstack.api.v2.SizeReservationService
+ */
+export const SizeReservationService: GenService<{
+ /**
+ * Get a size reservation
+ *
+ * @generated from rpc metalstack.api.v2.SizeReservationService.Get
+ */
+ get: {
+ methodKind: "unary";
+ input: typeof SizeReservationServiceGetRequestSchema;
+ output: typeof SizeReservationServiceGetResponseSchema;
+ },
+ /**
+ * List size reservations
+ *
+ * @generated from rpc metalstack.api.v2.SizeReservationService.List
+ */
+ list: {
+ methodKind: "unary";
+ input: typeof SizeReservationServiceListRequestSchema;
+ output: typeof SizeReservationServiceListResponseSchema;
+ },
+}> = /*@__PURE__*/
+ serviceDesc(file_metalstack_api_v2_size_reservation, 0);
+
diff --git a/proto/buf.lock b/proto/buf.lock
index 069cd88d..d15a1170 100644
--- a/proto/buf.lock
+++ b/proto/buf.lock
@@ -2,5 +2,5 @@
version: v2
deps:
- name: buf.build/bufbuild/protovalidate
- commit: 2a1774d888024a9b93ce7eb4b59f6a83
- digest: b5:6b7f9bc919b65e5b79d7b726ffc03d6f815a412d6b792970fa6f065cae162107bd0a9d47272c8ab1a2c9514e87b13d3fbf71df614374d62d2183afb64be2d30a
+ commit: 80ab13bee0bf4272b6161a72bf7034e0
+ digest: b5:1aa6a965be5d02d64e1d81954fa2e78ef9d1e33a0c30f92bc2626039006a94deb3a5b05f14ed8893f5c3ffce444ac008f7e968188ad225c4c29c813aa5f2daa1
diff --git a/proto/metalstack/admin/v2/filesystem.proto b/proto/metalstack/admin/v2/filesystem.proto
index 2d48014d..96d42cd8 100644
--- a/proto/metalstack/admin/v2/filesystem.proto
+++ b/proto/metalstack/admin/v2/filesystem.proto
@@ -41,10 +41,7 @@ message FilesystemServiceCreateResponse {
// FilesystemServiceUpdateRequest
message FilesystemServiceUpdateRequest {
// Id of this filesystemLayout
- string id = 1 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ string id = 1 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
// UpdateMeta contains the timestamp and strategy to be used in this update request
metalstack.api.v2.UpdateMeta update_meta = 2 [(buf.validate.field).required = true];
// Name of this filesystemLayout
@@ -74,10 +71,7 @@ message FilesystemServiceUpdateResponse {
// FilesystemServiceDeleteRequest
message FilesystemServiceDeleteRequest {
// ID of the filesystem to delete
- string id = 1 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ string id = 1 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
}
// message FilesystemServiceDeleteResponse {
diff --git a/proto/metalstack/admin/v2/image.proto b/proto/metalstack/admin/v2/image.proto
index 2fc4eada..f1bd5c4b 100644
--- a/proto/metalstack/admin/v2/image.proto
+++ b/proto/metalstack/admin/v2/image.proto
@@ -47,10 +47,7 @@ message ImageServiceCreateResponse {
// ImageServiceUpdateRequest
message ImageServiceUpdateRequest {
// Id of this image
- string id = 1 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ string id = 1 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
// UpdateMeta contains the timestamp and strategy to be used in this update request
metalstack.api.v2.UpdateMeta update_meta = 2 [(buf.validate.field).required = true];
// URL where this image is located
@@ -82,10 +79,7 @@ message ImageServiceUpdateResponse {
// ImageServiceDeleteRequest
message ImageServiceDeleteRequest {
// ID of the image to delete
- string id = 1 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ string id = 1 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
}
// message ImageServiceDeleteResponse {
diff --git a/proto/metalstack/admin/v2/network.proto b/proto/metalstack/admin/v2/network.proto
index 0f63e587..0307418b 100644
--- a/proto/metalstack/admin/v2/network.proto
+++ b/proto/metalstack/admin/v2/network.proto
@@ -41,10 +41,7 @@ service NetworkService {
// NetworkServiceGetRequest
message NetworkServiceGetRequest {
// ID of the network to get
- string id = 1 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ string id = 1 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
}
// NetworkServiceGetResponse
@@ -56,10 +53,7 @@ message NetworkServiceGetResponse {
// NetworkServiceCreateRequest
message NetworkServiceCreateRequest {
// Id of this network
- optional string id = 1 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ optional string id = 1 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
// Name of this network
optional string name = 2 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
// Description of this network
@@ -127,10 +121,7 @@ message NetworkServiceUpdateRequest {
// NetworkServiceDeleteRequest is the request payload for a network delete request
message NetworkServiceDeleteRequest {
// ID of the network to get
- string id = 1 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ string id = 1 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
}
// NetworkServiceListRequest
diff --git a/proto/metalstack/admin/v2/partition.proto b/proto/metalstack/admin/v2/partition.proto
index c2788803..6e3b8bdd 100644
--- a/proto/metalstack/admin/v2/partition.proto
+++ b/proto/metalstack/admin/v2/partition.proto
@@ -41,10 +41,7 @@ message PartitionServiceCreateRequest {
// PartitionServiceUpdateRequest is the request payload for a partition update request
message PartitionServiceUpdateRequest {
// ID of this partition
- string id = 1 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ string id = 1 [(buf.validate.field).string.(metalstack.api.v2.is_partition) = true];
// UpdateMeta contains the timestamp and strategy to be used in this update request
metalstack.api.v2.UpdateMeta update_meta = 2 [(buf.validate.field).required = true];
// Description of this partition
@@ -57,6 +54,7 @@ message PartitionServiceUpdateRequest {
repeated metalstack.api.v2.NTPServer ntp_server = 6 [(buf.validate.field).repeated.max_items = 10];
// ManagementServiceAddresses defines where the management is reachable
// should be in the form :
+ // FIXME validation
repeated string mgmt_service_addresses = 7;
// Labels to update on this network
optional metalstack.api.v2.UpdateLabels labels = 8;
@@ -65,10 +63,7 @@ message PartitionServiceUpdateRequest {
// PartitionServiceDeleteRequest is the request payload for a partition delete request
message PartitionServiceDeleteRequest {
// ID of the partition to get
- string id = 1 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ string id = 1 [(buf.validate.field).string.(metalstack.api.v2.is_partition) = true];
}
// PartitionServiceCreateResponse is the response payload for a partition create request
@@ -92,15 +87,9 @@ message PartitionServiceDeleteResponse {
// PartitionServiceListRequest is the request payload for a partition capacity request
message PartitionServiceCapacityRequest {
// ID of the partition to get
- optional string id = 1 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ optional string id = 1 [(buf.validate.field).string.(metalstack.api.v2.is_partition) = true];
// Size of machines to show the capacity
- optional string size = 2 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ optional string size = 2 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
// Project of machines to show the capacity
optional string project = 3 [(buf.validate.field).string.uuid = true];
}
diff --git a/proto/metalstack/admin/v2/project.proto b/proto/metalstack/admin/v2/project.proto
index 1a73f3a8..e99dac11 100644
--- a/proto/metalstack/admin/v2/project.proto
+++ b/proto/metalstack/admin/v2/project.proto
@@ -4,6 +4,7 @@ package metalstack.admin.v2;
import "buf/validate/validate.proto";
import "metalstack/api/v2/common.proto";
+import "metalstack/api/v2/predefined_rules.proto";
import "metalstack/api/v2/project.proto";
// ProjectService serves project related functions
@@ -19,10 +20,7 @@ service ProjectService {
// ProjectServiceListRequest is the request payload for the project list request
message ProjectServiceListRequest {
// Tenant lists only projects of this tenant
- optional string tenant = 1 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ optional string tenant = 1 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
// Labels lists only projects containing the given labels
optional metalstack.api.v2.Labels labels = 2;
}
diff --git a/proto/metalstack/admin/v2/size.proto b/proto/metalstack/admin/v2/size.proto
index e6c671c8..b85b0e85 100644
--- a/proto/metalstack/admin/v2/size.proto
+++ b/proto/metalstack/admin/v2/size.proto
@@ -38,10 +38,7 @@ message SizeServiceCreateResponse {
// SizeServiceUpdateRequest is the request payload for a size update request
message SizeServiceUpdateRequest {
// Id of this size
- string id = 1 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ string id = 1 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
// UpdateMeta contains the timestamp and strategy to be used in this update request
metalstack.api.v2.UpdateMeta update_meta = 2 [(buf.validate.field).required = true];
// Name of this size
@@ -63,10 +60,7 @@ message SizeServiceUpdateResponse {
// SizeServiceDeleteRequest is the request payload for a size delete request
message SizeServiceDeleteRequest {
// ID of the size to delete
- string id = 1 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ string id = 1 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
}
// SizeServiceDeleteResponse is the response payload for a size delete request
diff --git a/proto/metalstack/admin/v2/size_reservation.proto b/proto/metalstack/admin/v2/size_reservation.proto
new file mode 100644
index 00000000..c3c01746
--- /dev/null
+++ b/proto/metalstack/admin/v2/size_reservation.proto
@@ -0,0 +1,96 @@
+syntax = "proto3";
+
+package metalstack.admin.v2;
+
+import "buf/validate/validate.proto";
+import "metalstack/api/v2/common.proto";
+import "metalstack/api/v2/predefined_rules.proto";
+import "metalstack/api/v2/size_reservation.proto";
+
+// SizeReservationService serves size reservation related functions
+service SizeReservationService {
+ // Create a size reservation
+ rpc Create(SizeReservationServiceCreateRequest) returns (SizeReservationServiceCreateResponse) {
+ option (metalstack.api.v2.admin_roles) = ADMIN_ROLE_EDITOR;
+ option (metalstack.api.v2.auditing) = AUDITING_INCLUDED;
+ }
+ // Update a size reservation
+ rpc Update(SizeReservationServiceUpdateRequest) returns (SizeReservationServiceUpdateResponse) {
+ option (metalstack.api.v2.admin_roles) = ADMIN_ROLE_EDITOR;
+ option (metalstack.api.v2.auditing) = AUDITING_INCLUDED;
+ }
+ // Delete a size reservation
+ rpc Delete(SizeReservationServiceDeleteRequest) returns (SizeReservationServiceDeleteResponse) {
+ option (metalstack.api.v2.admin_roles) = ADMIN_ROLE_EDITOR;
+ option (metalstack.api.v2.auditing) = AUDITING_INCLUDED;
+ }
+ // List size reservations
+ rpc List(SizeReservationServiceListRequest) returns (SizeReservationServiceListResponse) {
+ option (metalstack.api.v2.admin_roles) = ADMIN_ROLE_EDITOR;
+ option (metalstack.api.v2.admin_roles) = ADMIN_ROLE_VIEWER;
+ option (metalstack.api.v2.auditing) = AUDITING_EXCLUDED;
+ }
+}
+
+// SizeReservationServiceCreateRequest is the request payload for a size reservation create request
+message SizeReservationServiceCreateRequest {
+ // SizeReservation is the size reservation to create
+ metalstack.api.v2.SizeReservation size_reservation = 1;
+}
+
+// SizeReservationServiceCreateResponse is the response payload for a size reservation create request
+message SizeReservationServiceCreateResponse {
+ // SizeReservation the size reservation
+ metalstack.api.v2.SizeReservation size_reservation = 1;
+}
+
+// SizeReservationServiceUpdateRequest is the request payload for a size reservation update request
+message SizeReservationServiceUpdateRequest {
+ // Id of this size reservation
+ string id = 1 [(buf.validate.field).string.uuid = true];
+ // Name of this size reservation
+ optional string name = 2 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
+ // Description of this size reservation
+ optional string description = 3 [(buf.validate.field).string.(metalstack.api.v2.is_description) = true];
+ // UpdateMeta contains the timestamp and strategy to be used in this update request
+ metalstack.api.v2.UpdateMeta update_meta = 4 [(buf.validate.field).required = true];
+ // Partition ids of this size reservation
+ repeated string partitions = 5 [
+ (buf.validate.field).repeated.unique = true,
+ (buf.validate.field).repeated.items.string.(metalstack.api.v2.is_partition) = true
+ ];
+ // Amount of reservations of this size reservation
+ optional int32 amount = 6 [(buf.validate.field).int32.gt = 0];
+ // Labels to update of this size reservation
+ optional metalstack.api.v2.UpdateLabels labels = 7;
+}
+
+// SizeReservationServiceUpdateResponse is the response payload for a size reservation update request
+message SizeReservationServiceUpdateResponse {
+ // SizeReservation the size reservation
+ metalstack.api.v2.SizeReservation size_reservation = 1;
+}
+
+// SizeReservationServiceDeleteRequest is the request payload for a size reservation delete request
+message SizeReservationServiceDeleteRequest {
+ // ID of the size reservation to delete
+ string id = 1 [(buf.validate.field).string.uuid = true];
+}
+
+// SizeReservationServiceDeleteResponse is the response payload for a size reservation delete request
+message SizeReservationServiceDeleteResponse {
+ // SizeReservation the size reservation
+ metalstack.api.v2.SizeReservation size_reservation = 1;
+}
+
+// SizeReservationServiceListRequest is the request payload for a size list request
+message SizeReservationServiceListRequest {
+ // Query for size reservations
+ metalstack.api.v2.SizeReservationQuery query = 1;
+}
+
+// SizeReservationServiceListResponse is the response payload for a size reservation list request
+message SizeReservationServiceListResponse {
+ // Size reservations
+ repeated metalstack.api.v2.SizeReservation size_reservations = 1;
+}
diff --git a/proto/metalstack/api/v2/filesystem.proto b/proto/metalstack/api/v2/filesystem.proto
index 6412fa8f..f0fc62a8 100644
--- a/proto/metalstack/api/v2/filesystem.proto
+++ b/proto/metalstack/api/v2/filesystem.proto
@@ -28,19 +28,13 @@ service FilesystemService {
// FilesystemServiceGetRequest is the request payload for a filesystem get request
message FilesystemServiceGetRequest {
// ID of the filesystem to get
- string id = 1 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ string id = 1 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
}
// FilesystemServiceListRequest is the request payload for a filesystem list request
message FilesystemServiceListRequest {
// ID of the filesystem to get
- optional string id = 1 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ optional string id = 1 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
}
// FilesystemServiceGetResponse is the response payload for a filesystem get request
@@ -70,15 +64,9 @@ message FilesystemServiceMatchRequest {
// MatchImageAndSize
message MatchImageAndSize {
// Size, machine size to try
- string size = 1 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ string size = 1 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
// Image machine image to try
- string image = 2 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ string image = 2 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
}
// MatchMachine
@@ -86,10 +74,7 @@ message MatchMachine {
// Machine to check
string machine = 1 [(buf.validate.field).string.uuid = true];
// FilesystemLayout to check
- string filesystem_layout = 2 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ string filesystem_layout = 2 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
}
// FilesystemServiceMatchResponse
@@ -101,10 +86,7 @@ message FilesystemServiceMatchResponse {
// FilesystemLayout
message FilesystemLayout {
// Id of this filesystemLayout
- string id = 1 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ string id = 1 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
// Meta for this filesystemLayout
Meta meta = 2;
// Name of this filesystemLayout
@@ -136,10 +118,7 @@ message FilesystemLayoutConstraints {
// Filesystem
message Filesystem {
// Device the underlying device where this filesystem should be created
- string device = 1 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ string device = 1 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
// Format of the filesystem format
Format format = 2 [
(buf.validate.field).enum.defined_only = true,
diff --git a/proto/metalstack/api/v2/image.proto b/proto/metalstack/api/v2/image.proto
index 2e4e37ea..f0d93475 100644
--- a/proto/metalstack/api/v2/image.proto
+++ b/proto/metalstack/api/v2/image.proto
@@ -29,10 +29,7 @@ service ImageService {
// ImageServiceGetRequest is the request payload for a image get request
message ImageServiceGetRequest {
// ID of the image to get
- string id = 1 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ string id = 1 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
}
// ImageServiceListRequest is the request payload for a image list request
@@ -69,10 +66,7 @@ message ImageServiceLatestResponse {
// Image
message Image {
// Id of this imageLayout
- string id = 1 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ string id = 1 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
// Meta for this ip
Meta meta = 2;
// URL where this image is located
@@ -106,10 +100,7 @@ message ImageUsage {
// ImageQuery is used to search images
message ImageQuery {
// ID of the image to get
- optional string id = 1 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ optional string id = 1 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
// OS of the image
optional string os = 2 [(buf.validate.field).string = {
min_len: 2
diff --git a/proto/metalstack/api/v2/ip.proto b/proto/metalstack/api/v2/ip.proto
index de5b6095..f9f43e54 100644
--- a/proto/metalstack/api/v2/ip.proto
+++ b/proto/metalstack/api/v2/ip.proto
@@ -72,10 +72,7 @@ message IP {
// Description of this ip
string description = 5 [(buf.validate.field).string.(metalstack.api.v2.is_description) = true];
// Network is the network this ip belongs to
- string network = 6 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ string network = 6 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
// Project where this ip address belongs to
string project = 7 [(buf.validate.field).string.uuid = true];
// Type of this ip
@@ -98,10 +95,7 @@ message IPServiceGetRequest {
// IPServiceCreateRequest is the request payload for a ip create request
message IPServiceCreateRequest {
// Network from which the IP should be created
- string network = 1 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ string network = 1 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
// Project of the ip
string project = 2 [(buf.validate.field).string.uuid = true];
// Name of the ip
@@ -151,10 +145,7 @@ message IPQuery {
// Ip the ip to list
optional string ip = 1 [(buf.validate.field).string.ip = true];
// Network from where the ips to list
- optional string network = 2 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ optional string network = 2 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
// Project of the ips to list
optional string project = 3 [(buf.validate.field).string.uuid = true];
// Name of this ip
diff --git a/proto/metalstack/api/v2/network.proto b/proto/metalstack/api/v2/network.proto
index efbf27aa..2a575816 100644
--- a/proto/metalstack/api/v2/network.proto
+++ b/proto/metalstack/api/v2/network.proto
@@ -49,10 +49,7 @@ service NetworkService {
// NetworkServiceGetRequest
message NetworkServiceGetRequest {
// ID of the network to get
- string id = 1 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ string id = 1 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
// Project of the network
string project = 2 [
(buf.validate.field).ignore = IGNORE_IF_ZERO_VALUE,
@@ -204,10 +201,7 @@ message Network {
// NetworkQuery defines which networks to query
message NetworkQuery {
// Id of the network to query
- optional string id = 1 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ optional string id = 1 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
// Name of this network
optional string name = 2 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
// Description of this network
diff --git a/proto/metalstack/api/v2/partition.proto b/proto/metalstack/api/v2/partition.proto
index 0bbb9f23..2f38e5b8 100644
--- a/proto/metalstack/api/v2/partition.proto
+++ b/proto/metalstack/api/v2/partition.proto
@@ -66,7 +66,7 @@ message DNSServer {
// NTPServer
message NTPServer {
// Address either as ip or hostname
- string address = 1 [(buf.validate.field).string = {max_len: 256}];
+ string address = 1 [(buf.validate.field).string.(metalstack.api.v2.is_ip_or_hostname) = true];
}
// PartitionServiceGetRequest is the request payload for a partition get request
diff --git a/proto/metalstack/api/v2/predefined_rules.proto b/proto/metalstack/api/v2/predefined_rules.proto
index ef64aa48..7846d17c 100644
--- a/proto/metalstack/api/v2/predefined_rules.proto
+++ b/proto/metalstack/api/v2/predefined_rules.proto
@@ -43,6 +43,12 @@ extend buf.validate.StringRules {
message: "given uri must be valid"
expression: "this.isUri()"
}];
+ // IsIpOrHostname validates that the given string is either a ip or a hostname
+ optional bool is_ip_or_hostname = 80048957 [(buf.validate.predefined).cel = {
+ id: "valid_address"
+ message: "must be a valid IP address or hostname"
+ expression: "this.isIp() || this.isHostname()"
+ }];
}
extend buf.validate.RepeatedRules {
diff --git a/proto/metalstack/api/v2/project.proto b/proto/metalstack/api/v2/project.proto
index f44d2f54..504e5160 100644
--- a/proto/metalstack/api/v2/project.proto
+++ b/proto/metalstack/api/v2/project.proto
@@ -140,10 +140,7 @@ message ProjectServiceListRequest {
// Name lists only projects with this name
optional string name = 2 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
// Tenant lists only projects of this tenant
- optional string tenant = 3 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ optional string tenant = 3 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
// Labels lists only projects containing the given labels
optional Labels labels = 6;
}
@@ -172,10 +169,7 @@ message ProjectServiceGetResponse {
message ProjectServiceCreateRequest {
// Login is the tenant of this project
// TODO: is login really a good name?
- string login = 1 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ string login = 1 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
// Name of this project, unique per tenant
string name = 2 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
// Description of this project
diff --git a/proto/metalstack/api/v2/size.proto b/proto/metalstack/api/v2/size.proto
index 0446f8cd..e012e1dd 100644
--- a/proto/metalstack/api/v2/size.proto
+++ b/proto/metalstack/api/v2/size.proto
@@ -50,10 +50,7 @@ message SizeServiceListResponse {
// Size
message Size {
// Id of this size
- string id = 1 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ string id = 1 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
// Meta for this size
Meta meta = 2;
// Name of this size
@@ -96,10 +93,7 @@ enum SizeConstraintType {
// SizeQuery is used to search sizes
message SizeQuery {
// ID of the size to get
- optional string id = 1 [(buf.validate.field).string = {
- min_len: 2
- max_len: 128
- }];
+ optional string id = 1 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
// Name of the size to query
optional string name = 2 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
// Description of the size to query
diff --git a/proto/metalstack/api/v2/size_reservation.proto b/proto/metalstack/api/v2/size_reservation.proto
new file mode 100644
index 00000000..83b5d94d
--- /dev/null
+++ b/proto/metalstack/api/v2/size_reservation.proto
@@ -0,0 +1,98 @@
+syntax = "proto3";
+
+package metalstack.api.v2;
+
+import "buf/validate/validate.proto";
+import "metalstack/api/v2/common.proto";
+import "metalstack/api/v2/predefined_rules.proto";
+
+// SizeReservationService serves size reservation related functions
+service SizeReservationService {
+ // Get a size reservation
+ rpc Get(SizeReservationServiceGetRequest) returns (SizeReservationServiceGetResponse) {
+ option (project_roles) = PROJECT_ROLE_OWNER;
+ option (project_roles) = PROJECT_ROLE_EDITOR;
+ option (project_roles) = PROJECT_ROLE_VIEWER;
+ option (auditing) = AUDITING_EXCLUDED;
+ }
+ // List size reservations
+ rpc List(SizeReservationServiceListRequest) returns (SizeReservationServiceListResponse) {
+ option (project_roles) = PROJECT_ROLE_OWNER;
+ option (project_roles) = PROJECT_ROLE_EDITOR;
+ option (project_roles) = PROJECT_ROLE_VIEWER;
+ option (auditing) = AUDITING_EXCLUDED;
+ }
+}
+
+// SizeReservationServiceGetRequest is the request payload for a size get request
+message SizeReservationServiceGetRequest {
+ // ID of the size reservation to get
+ string id = 1 [(buf.validate.field).string.uuid = true];
+ // Project of the size reservation
+ string project = 2 [(buf.validate.field).string.uuid = true];
+}
+
+// SizeReservationServiceListRequest is the request payload for a size list request
+message SizeReservationServiceListRequest {
+ // Project of the size reservation
+ string project = 1 [(buf.validate.field).string.uuid = true];
+ // Query for size reservations
+ SizeReservationQuery query = 2;
+}
+
+// SizeReservationServiceGetResponse is the response payload for a size reservation get request
+message SizeReservationServiceGetResponse {
+ // Size reservation
+ SizeReservation size_reservation = 1;
+}
+
+// SizeReservationServiceListResponse is the response payload for a size reservation list request
+message SizeReservationServiceListResponse {
+ // Size reservations
+ repeated SizeReservation size_reservations = 1;
+}
+
+// SizeReservation
+message SizeReservation {
+ // Id of this size reservation, is generated on creation
+ string id = 1 [
+ (buf.validate.field).string.uuid = true,
+ (buf.validate.field).ignore = IGNORE_IF_ZERO_VALUE
+ ];
+ // Meta for this size reservation
+ Meta meta = 2;
+ // Name of this size reservation
+ string name = 3 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
+ // Description of this size reservation
+ string description = 4 [(buf.validate.field).string.(metalstack.api.v2.is_description) = true];
+ // Project of the size reservation
+ string project = 5 [(buf.validate.field).string.uuid = true];
+ // Size id of this size reservation
+ string size = 6 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
+ // Partition ids of this size reservation
+ repeated string partitions = 7 [
+ (buf.validate.field).repeated.min_items = 1,
+ (buf.validate.field).repeated.unique = true,
+ (buf.validate.field).repeated.items.string.(metalstack.api.v2.is_partition) = true
+ ];
+ // Amount of reservations of this size reservation
+ int32 amount = 8 [(buf.validate.field).int32.gt = 0];
+}
+
+// SizeReservationQuery is used to search size reservations
+message SizeReservationQuery {
+ // ID of the size reservation to get
+ optional string id = 1 [(buf.validate.field).string.uuid = true];
+ // Name of this size reservation
+ optional string name = 2 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
+ // Description of this size reservation
+ optional string description = 3 [(buf.validate.field).string.(metalstack.api.v2.is_description) = true];
+ // Size id of this size reservation
+ optional string size = 4 [(buf.validate.field).string.(metalstack.api.v2.is_name) = true];
+ // Project of the size reservation
+ optional string project = 5 [(buf.validate.field).string.uuid = true];
+ // Partition of the size reservation
+ optional string partition = 6 [(buf.validate.field).string.(metalstack.api.v2.is_partition) = true];
+ // Labels lists only size reservations containing the given labels
+ optional Labels labels = 7;
+}
diff --git a/python/metalstack/admin/v2/filesystem_pb2.py b/python/metalstack/admin/v2/filesystem_pb2.py
index a2390ff0..1d73fd4d 100644
--- a/python/metalstack/admin/v2/filesystem_pb2.py
+++ b/python/metalstack/admin/v2/filesystem_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$metalstack/admin/v2/filesystem.proto\x12\x13metalstack.admin.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a\"metalstack/api/v2/filesystem.proto\x1a(metalstack/api/v2/predefined_rules.proto\"r\n\x1e\x46ilesystemServiceCreateRequest\x12P\n\x11\x66ilesystem_layout\x18\x01 \x01(\x0b\x32#.metalstack.api.v2.FilesystemLayoutR\x10\x66ilesystemLayout\"s\n\x1f\x46ilesystemServiceCreateResponse\x12P\n\x11\x66ilesystem_layout\x18\x01 \x01(\x0b\x32#.metalstack.api.v2.FilesystemLayoutR\x10\x66ilesystemLayout\"\xf6\x04\n\x1e\x46ilesystemServiceUpdateRequest\x12\x1a\n\x02id\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01R\x02id\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\x0b\x66ilesystems\x18\x05 \x03(\x0b\x32\x1d.metalstack.api.v2.FilesystemR\x0b\x66ilesystems\x12-\n\x05\x64isks\x18\x06 \x03(\x0b\x32\x17.metalstack.api.v2.DiskR\x05\x64isks\x12+\n\x04raid\x18\x07 \x03(\x0b\x32\x17.metalstack.api.v2.RaidR\x04raid\x12\x43\n\rvolume_groups\x18\x08 \x03(\x0b\x32\x1e.metalstack.api.v2.VolumeGroupR\x0cvolumeGroups\x12I\n\x0flogical_volumes\x18\t \x03(\x0b\x32 .metalstack.api.v2.LogicalVolumeR\x0elogicalVolumes\x12P\n\x0b\x63onstraints\x18\n \x01(\x0b\x32..metalstack.api.v2.FilesystemLayoutConstraintsR\x0b\x63onstraintsB\x07\n\x05_nameB\x0e\n\x0c_description\"s\n\x1f\x46ilesystemServiceUpdateResponse\x12P\n\x11\x66ilesystem_layout\x18\x01 \x01(\x0b\x32#.metalstack.api.v2.FilesystemLayoutR\x10\x66ilesystemLayout\"<\n\x1e\x46ilesystemServiceDeleteRequest\x12\x1a\n\x02id\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01R\x02id\"s\n\x1f\x46ilesystemServiceDeleteResponse\x12P\n\x11\x66ilesystem_layout\x18\x01 \x01(\x0b\x32#.metalstack.api.v2.FilesystemLayoutR\x10\x66ilesystemLayout2\x93\x03\n\x11\x46ilesystemService\x12~\n\x06\x43reate\x12\x33.metalstack.admin.v2.FilesystemServiceCreateRequest\x1a\x34.metalstack.admin.v2.FilesystemServiceCreateResponse\"\t\xd2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12~\n\x06Update\x12\x33.metalstack.admin.v2.FilesystemServiceUpdateRequest\x1a\x34.metalstack.admin.v2.FilesystemServiceUpdateResponse\"\t\xd2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12~\n\x06\x44\x65lete\x12\x33.metalstack.admin.v2.FilesystemServiceDeleteRequest\x1a\x34.metalstack.admin.v2.FilesystemServiceDeleteResponse\"\t\xd2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x42\xd3\x01\n\x17\x63om.metalstack.admin.v2B\x0f\x46ilesystemProtoP\x01Z9github.com/metal-stack/api/go/metalstack/admin/v2;adminv2\xa2\x02\x03MAX\xaa\x02\x13Metalstack.Admin.V2\xca\x02\x13Metalstack\\Admin\\V2\xe2\x02\x1fMetalstack\\Admin\\V2\\GPBMetadata\xea\x02\x15Metalstack::Admin::V2b\x06proto3')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n$metalstack/admin/v2/filesystem.proto\x12\x13metalstack.admin.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a\"metalstack/api/v2/filesystem.proto\x1a(metalstack/api/v2/predefined_rules.proto\"r\n\x1e\x46ilesystemServiceCreateRequest\x12P\n\x11\x66ilesystem_layout\x18\x01 \x01(\x0b\x32#.metalstack.api.v2.FilesystemLayoutR\x10\x66ilesystemLayout\"s\n\x1f\x46ilesystemServiceCreateResponse\x12P\n\x11\x66ilesystem_layout\x18\x01 \x01(\x0b\x32#.metalstack.api.v2.FilesystemLayoutR\x10\x66ilesystemLayout\"\xf7\x04\n\x1e\x46ilesystemServiceUpdateRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\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\x0b\x66ilesystems\x18\x05 \x03(\x0b\x32\x1d.metalstack.api.v2.FilesystemR\x0b\x66ilesystems\x12-\n\x05\x64isks\x18\x06 \x03(\x0b\x32\x17.metalstack.api.v2.DiskR\x05\x64isks\x12+\n\x04raid\x18\x07 \x03(\x0b\x32\x17.metalstack.api.v2.RaidR\x04raid\x12\x43\n\rvolume_groups\x18\x08 \x03(\x0b\x32\x1e.metalstack.api.v2.VolumeGroupR\x0cvolumeGroups\x12I\n\x0flogical_volumes\x18\t \x03(\x0b\x32 .metalstack.api.v2.LogicalVolumeR\x0elogicalVolumes\x12P\n\x0b\x63onstraints\x18\n \x01(\x0b\x32..metalstack.api.v2.FilesystemLayoutConstraintsR\x0b\x63onstraintsB\x07\n\x05_nameB\x0e\n\x0c_description\"s\n\x1f\x46ilesystemServiceUpdateResponse\x12P\n\x11\x66ilesystem_layout\x18\x01 \x01(\x0b\x32#.metalstack.api.v2.FilesystemLayoutR\x10\x66ilesystemLayout\"=\n\x1e\x46ilesystemServiceDeleteRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\"s\n\x1f\x46ilesystemServiceDeleteResponse\x12P\n\x11\x66ilesystem_layout\x18\x01 \x01(\x0b\x32#.metalstack.api.v2.FilesystemLayoutR\x10\x66ilesystemLayout2\x93\x03\n\x11\x46ilesystemService\x12~\n\x06\x43reate\x12\x33.metalstack.admin.v2.FilesystemServiceCreateRequest\x1a\x34.metalstack.admin.v2.FilesystemServiceCreateResponse\"\t\xd2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12~\n\x06Update\x12\x33.metalstack.admin.v2.FilesystemServiceUpdateRequest\x1a\x34.metalstack.admin.v2.FilesystemServiceUpdateResponse\"\t\xd2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12~\n\x06\x44\x65lete\x12\x33.metalstack.admin.v2.FilesystemServiceDeleteRequest\x1a\x34.metalstack.admin.v2.FilesystemServiceDeleteResponse\"\t\xd2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x42\xd3\x01\n\x17\x63om.metalstack.admin.v2B\x0f\x46ilesystemProtoP\x01Z9github.com/metal-stack/api/go/metalstack/admin/v2;adminv2\xa2\x02\x03MAX\xaa\x02\x13Metalstack.Admin.V2\xca\x02\x13Metalstack\\Admin\\V2\xe2\x02\x1fMetalstack\\Admin\\V2\\GPBMetadata\xea\x02\x15Metalstack::Admin::V2b\x06proto3')
_globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -37,7 +37,7 @@
_globals['DESCRIPTOR']._loaded_options = None
_globals['DESCRIPTOR']._serialized_options = b'\n\027com.metalstack.admin.v2B\017FilesystemProtoP\001Z9github.com/metal-stack/api/go/metalstack/admin/v2;adminv2\242\002\003MAX\252\002\023Metalstack.Admin.V2\312\002\023Metalstack\\Admin\\V2\342\002\037Metalstack\\Admin\\V2\\GPBMetadata\352\002\025Metalstack::Admin::V2'
_globals['_FILESYSTEMSERVICEUPDATEREQUEST'].fields_by_name['id']._loaded_options = None
- _globals['_FILESYSTEMSERVICEUPDATEREQUEST'].fields_by_name['id']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_FILESYSTEMSERVICEUPDATEREQUEST'].fields_by_name['id']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_FILESYSTEMSERVICEUPDATEREQUEST'].fields_by_name['update_meta']._loaded_options = None
_globals['_FILESYSTEMSERVICEUPDATEREQUEST'].fields_by_name['update_meta']._serialized_options = b'\272H\003\310\001\001'
_globals['_FILESYSTEMSERVICEUPDATEREQUEST'].fields_by_name['name']._loaded_options = None
@@ -45,7 +45,7 @@
_globals['_FILESYSTEMSERVICEUPDATEREQUEST'].fields_by_name['description']._loaded_options = None
_globals['_FILESYSTEMSERVICEUPDATEREQUEST'].fields_by_name['description']._serialized_options = b'\272H\010r\006\310\263\256\261\002\001'
_globals['_FILESYSTEMSERVICEDELETEREQUEST'].fields_by_name['id']._loaded_options = None
- _globals['_FILESYSTEMSERVICEDELETEREQUEST'].fields_by_name['id']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_FILESYSTEMSERVICEDELETEREQUEST'].fields_by_name['id']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_FILESYSTEMSERVICE'].methods_by_name['Create']._loaded_options = None
_globals['_FILESYSTEMSERVICE'].methods_by_name['Create']._serialized_options = b'\322\363\030\001\001\340\363\030\001'
_globals['_FILESYSTEMSERVICE'].methods_by_name['Update']._loaded_options = None
@@ -57,13 +57,13 @@
_globals['_FILESYSTEMSERVICECREATERESPONSE']._serialized_start=316
_globals['_FILESYSTEMSERVICECREATERESPONSE']._serialized_end=431
_globals['_FILESYSTEMSERVICEUPDATEREQUEST']._serialized_start=434
- _globals['_FILESYSTEMSERVICEUPDATEREQUEST']._serialized_end=1064
- _globals['_FILESYSTEMSERVICEUPDATERESPONSE']._serialized_start=1066
- _globals['_FILESYSTEMSERVICEUPDATERESPONSE']._serialized_end=1181
- _globals['_FILESYSTEMSERVICEDELETEREQUEST']._serialized_start=1183
- _globals['_FILESYSTEMSERVICEDELETEREQUEST']._serialized_end=1243
- _globals['_FILESYSTEMSERVICEDELETERESPONSE']._serialized_start=1245
- _globals['_FILESYSTEMSERVICEDELETERESPONSE']._serialized_end=1360
- _globals['_FILESYSTEMSERVICE']._serialized_start=1363
- _globals['_FILESYSTEMSERVICE']._serialized_end=1766
+ _globals['_FILESYSTEMSERVICEUPDATEREQUEST']._serialized_end=1065
+ _globals['_FILESYSTEMSERVICEUPDATERESPONSE']._serialized_start=1067
+ _globals['_FILESYSTEMSERVICEUPDATERESPONSE']._serialized_end=1182
+ _globals['_FILESYSTEMSERVICEDELETEREQUEST']._serialized_start=1184
+ _globals['_FILESYSTEMSERVICEDELETEREQUEST']._serialized_end=1245
+ _globals['_FILESYSTEMSERVICEDELETERESPONSE']._serialized_start=1247
+ _globals['_FILESYSTEMSERVICEDELETERESPONSE']._serialized_end=1362
+ _globals['_FILESYSTEMSERVICE']._serialized_start=1365
+ _globals['_FILESYSTEMSERVICE']._serialized_end=1768
# @@protoc_insertion_point(module_scope)
diff --git a/python/metalstack/admin/v2/image_pb2.py b/python/metalstack/admin/v2/image_pb2.py
index cf480615..fba751c4 100644
--- a/python/metalstack/admin/v2/image_pb2.py
+++ b/python/metalstack/admin/v2/image_pb2.py
@@ -29,7 +29,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/admin/v2/image.proto\x12\x13metalstack.admin.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1emetalstack/api/v2/common.proto\x1a\x1dmetalstack/api/v2/image.proto\x1a(metalstack/api/v2/predefined_rules.proto\"K\n\x19ImageServiceCreateRequest\x12.\n\x05image\x18\x01 \x01(\x0b\x32\x18.metalstack.api.v2.ImageR\x05image\"L\n\x1aImageServiceCreateResponse\x12.\n\x05image\x18\x01 \x01(\x0b\x32\x18.metalstack.api.v2.ImageR\x05image\"\x81\x04\n\x19ImageServiceUpdateRequest\x12\x1a\n\x02id\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01R\x02id\x12\x46\n\x0bupdate_meta\x18\x02 \x01(\x0b\x32\x1d.metalstack.api.v2.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\x12\"\n\x03url\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xe0\xb3\xae\xb1\x02\x01H\x00R\x03url\x88\x01\x01\x12$\n\x04name\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\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\x12L\n\x08\x66\x65\x61tures\x18\x06 \x03(\x0e\x32\x1f.metalstack.api.v2.ImageFeatureB\x0f\xbaH\x0c\x92\x01\t\x18\x01\"\x05\x82\x01\x02\x10\x01R\x08\x66\x65\x61tures\x12X\n\x0e\x63lassification\x18\x07 \x01(\x0e\x32&.metalstack.api.v2.ImageClassificationB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0e\x63lassification\x12\x39\n\nexpires_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAtB\x06\n\x04_urlB\x07\n\x05_nameB\x0e\n\x0c_description\"L\n\x1aImageServiceUpdateResponse\x12.\n\x05image\x18\x01 \x01(\x0b\x32\x18.metalstack.api.v2.ImageR\x05image\"7\n\x19ImageServiceDeleteRequest\x12\x1a\n\x02id\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01R\x02id\"L\n\x1aImageServiceDeleteResponse\x12.\n\x05image\x18\x01 \x01(\x0b\x32\x18.metalstack.api.v2.ImageR\x05image\"O\n\x18ImageServiceUsageRequest\x12\x33\n\x05query\x18\x01 \x01(\x0b\x32\x1d.metalstack.api.v2.ImageQueryR\x05query\"[\n\x19ImageServiceUsageResponse\x12>\n\x0bimage_usage\x18\x01 \x03(\x0b\x32\x1d.metalstack.api.v2.ImageUsageR\nimageUsage2\xe0\x03\n\x0cImageService\x12t\n\x06\x43reate\x12..metalstack.admin.v2.ImageServiceCreateRequest\x1a/.metalstack.admin.v2.ImageServiceCreateResponse\"\t\xd2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12t\n\x06Update\x12..metalstack.admin.v2.ImageServiceUpdateRequest\x1a/.metalstack.admin.v2.ImageServiceUpdateResponse\"\t\xd2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12t\n\x06\x44\x65lete\x12..metalstack.admin.v2.ImageServiceDeleteRequest\x1a/.metalstack.admin.v2.ImageServiceDeleteResponse\"\t\xd2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12n\n\x05Usage\x12-.metalstack.admin.v2.ImageServiceUsageRequest\x1a..metalstack.admin.v2.ImageServiceUsageResponse\"\x06\xd2\xf3\x18\x02\x01\x02\x42\xce\x01\n\x17\x63om.metalstack.admin.v2B\nImageProtoP\x01Z9github.com/metal-stack/api/go/metalstack/admin/v2;adminv2\xa2\x02\x03MAX\xaa\x02\x13Metalstack.Admin.V2\xca\x02\x13Metalstack\\Admin\\V2\xe2\x02\x1fMetalstack\\Admin\\V2\\GPBMetadata\xea\x02\x15Metalstack::Admin::V2b\x06proto3')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fmetalstack/admin/v2/image.proto\x12\x13metalstack.admin.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1emetalstack/api/v2/common.proto\x1a\x1dmetalstack/api/v2/image.proto\x1a(metalstack/api/v2/predefined_rules.proto\"K\n\x19ImageServiceCreateRequest\x12.\n\x05image\x18\x01 \x01(\x0b\x32\x18.metalstack.api.v2.ImageR\x05image\"L\n\x1aImageServiceCreateResponse\x12.\n\x05image\x18\x01 \x01(\x0b\x32\x18.metalstack.api.v2.ImageR\x05image\"\x82\x04\n\x19ImageServiceUpdateRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\x12\x46\n\x0bupdate_meta\x18\x02 \x01(\x0b\x32\x1d.metalstack.api.v2.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\x12\"\n\x03url\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xe0\xb3\xae\xb1\x02\x01H\x00R\x03url\x88\x01\x01\x12$\n\x04name\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04name\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\x12L\n\x08\x66\x65\x61tures\x18\x06 \x03(\x0e\x32\x1f.metalstack.api.v2.ImageFeatureB\x0f\xbaH\x0c\x92\x01\t\x18\x01\"\x05\x82\x01\x02\x10\x01R\x08\x66\x65\x61tures\x12X\n\x0e\x63lassification\x18\x07 \x01(\x0e\x32&.metalstack.api.v2.ImageClassificationB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0e\x63lassification\x12\x39\n\nexpires_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAtB\x06\n\x04_urlB\x07\n\x05_nameB\x0e\n\x0c_description\"L\n\x1aImageServiceUpdateResponse\x12.\n\x05image\x18\x01 \x01(\x0b\x32\x18.metalstack.api.v2.ImageR\x05image\"8\n\x19ImageServiceDeleteRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\"L\n\x1aImageServiceDeleteResponse\x12.\n\x05image\x18\x01 \x01(\x0b\x32\x18.metalstack.api.v2.ImageR\x05image\"O\n\x18ImageServiceUsageRequest\x12\x33\n\x05query\x18\x01 \x01(\x0b\x32\x1d.metalstack.api.v2.ImageQueryR\x05query\"[\n\x19ImageServiceUsageResponse\x12>\n\x0bimage_usage\x18\x01 \x03(\x0b\x32\x1d.metalstack.api.v2.ImageUsageR\nimageUsage2\xe0\x03\n\x0cImageService\x12t\n\x06\x43reate\x12..metalstack.admin.v2.ImageServiceCreateRequest\x1a/.metalstack.admin.v2.ImageServiceCreateResponse\"\t\xd2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12t\n\x06Update\x12..metalstack.admin.v2.ImageServiceUpdateRequest\x1a/.metalstack.admin.v2.ImageServiceUpdateResponse\"\t\xd2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12t\n\x06\x44\x65lete\x12..metalstack.admin.v2.ImageServiceDeleteRequest\x1a/.metalstack.admin.v2.ImageServiceDeleteResponse\"\t\xd2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12n\n\x05Usage\x12-.metalstack.admin.v2.ImageServiceUsageRequest\x1a..metalstack.admin.v2.ImageServiceUsageResponse\"\x06\xd2\xf3\x18\x02\x01\x02\x42\xce\x01\n\x17\x63om.metalstack.admin.v2B\nImageProtoP\x01Z9github.com/metal-stack/api/go/metalstack/admin/v2;adminv2\xa2\x02\x03MAX\xaa\x02\x13Metalstack.Admin.V2\xca\x02\x13Metalstack\\Admin\\V2\xe2\x02\x1fMetalstack\\Admin\\V2\\GPBMetadata\xea\x02\x15Metalstack::Admin::V2b\x06proto3')
_globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -38,7 +38,7 @@
_globals['DESCRIPTOR']._loaded_options = None
_globals['DESCRIPTOR']._serialized_options = b'\n\027com.metalstack.admin.v2B\nImageProtoP\001Z9github.com/metal-stack/api/go/metalstack/admin/v2;adminv2\242\002\003MAX\252\002\023Metalstack.Admin.V2\312\002\023Metalstack\\Admin\\V2\342\002\037Metalstack\\Admin\\V2\\GPBMetadata\352\002\025Metalstack::Admin::V2'
_globals['_IMAGESERVICEUPDATEREQUEST'].fields_by_name['id']._loaded_options = None
- _globals['_IMAGESERVICEUPDATEREQUEST'].fields_by_name['id']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_IMAGESERVICEUPDATEREQUEST'].fields_by_name['id']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_IMAGESERVICEUPDATEREQUEST'].fields_by_name['update_meta']._loaded_options = None
_globals['_IMAGESERVICEUPDATEREQUEST'].fields_by_name['update_meta']._serialized_options = b'\272H\003\310\001\001'
_globals['_IMAGESERVICEUPDATEREQUEST'].fields_by_name['url']._loaded_options = None
@@ -52,7 +52,7 @@
_globals['_IMAGESERVICEUPDATEREQUEST'].fields_by_name['classification']._loaded_options = None
_globals['_IMAGESERVICEUPDATEREQUEST'].fields_by_name['classification']._serialized_options = b'\272H\005\202\001\002\020\001'
_globals['_IMAGESERVICEDELETEREQUEST'].fields_by_name['id']._loaded_options = None
- _globals['_IMAGESERVICEDELETEREQUEST'].fields_by_name['id']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_IMAGESERVICEDELETEREQUEST'].fields_by_name['id']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_IMAGESERVICE'].methods_by_name['Create']._loaded_options = None
_globals['_IMAGESERVICE'].methods_by_name['Create']._serialized_options = b'\322\363\030\001\001\340\363\030\001'
_globals['_IMAGESERVICE'].methods_by_name['Update']._loaded_options = None
@@ -66,17 +66,17 @@
_globals['_IMAGESERVICECREATERESPONSE']._serialized_start=300
_globals['_IMAGESERVICECREATERESPONSE']._serialized_end=376
_globals['_IMAGESERVICEUPDATEREQUEST']._serialized_start=379
- _globals['_IMAGESERVICEUPDATEREQUEST']._serialized_end=892
- _globals['_IMAGESERVICEUPDATERESPONSE']._serialized_start=894
- _globals['_IMAGESERVICEUPDATERESPONSE']._serialized_end=970
- _globals['_IMAGESERVICEDELETEREQUEST']._serialized_start=972
- _globals['_IMAGESERVICEDELETEREQUEST']._serialized_end=1027
- _globals['_IMAGESERVICEDELETERESPONSE']._serialized_start=1029
- _globals['_IMAGESERVICEDELETERESPONSE']._serialized_end=1105
- _globals['_IMAGESERVICEUSAGEREQUEST']._serialized_start=1107
- _globals['_IMAGESERVICEUSAGEREQUEST']._serialized_end=1186
- _globals['_IMAGESERVICEUSAGERESPONSE']._serialized_start=1188
- _globals['_IMAGESERVICEUSAGERESPONSE']._serialized_end=1279
- _globals['_IMAGESERVICE']._serialized_start=1282
- _globals['_IMAGESERVICE']._serialized_end=1762
+ _globals['_IMAGESERVICEUPDATEREQUEST']._serialized_end=893
+ _globals['_IMAGESERVICEUPDATERESPONSE']._serialized_start=895
+ _globals['_IMAGESERVICEUPDATERESPONSE']._serialized_end=971
+ _globals['_IMAGESERVICEDELETEREQUEST']._serialized_start=973
+ _globals['_IMAGESERVICEDELETEREQUEST']._serialized_end=1029
+ _globals['_IMAGESERVICEDELETERESPONSE']._serialized_start=1031
+ _globals['_IMAGESERVICEDELETERESPONSE']._serialized_end=1107
+ _globals['_IMAGESERVICEUSAGEREQUEST']._serialized_start=1109
+ _globals['_IMAGESERVICEUSAGEREQUEST']._serialized_end=1188
+ _globals['_IMAGESERVICEUSAGERESPONSE']._serialized_start=1190
+ _globals['_IMAGESERVICEUSAGERESPONSE']._serialized_end=1281
+ _globals['_IMAGESERVICE']._serialized_start=1284
+ _globals['_IMAGESERVICE']._serialized_end=1764
# @@protoc_insertion_point(module_scope)
diff --git a/python/metalstack/admin/v2/network_pb2.py b/python/metalstack/admin/v2/network_pb2.py
index 09be3886..cef86413 100644
--- a/python/metalstack/admin/v2/network_pb2.py
+++ b/python/metalstack/admin/v2/network_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!metalstack/admin/v2/network.proto\x12\x13metalstack.admin.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a\x1fmetalstack/api/v2/network.proto\x1a(metalstack/api/v2/predefined_rules.proto\"6\n\x18NetworkServiceGetRequest\x12\x1a\n\x02id\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01R\x02id\"Q\n\x19NetworkServiceGetResponse\x12\x34\n\x07network\x18\x01 \x01(\x0b\x32\x1a.metalstack.api.v2.NetworkR\x07network\"\xa7\t\n\x1bNetworkServiceCreateRequest\x12\x1f\n\x02id\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01H\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\x32\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x02R\x0b\x64\x65scription\x88\x01\x01\x12.\n\tpartition\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xd0\xb3\xae\xb1\x02\x01H\x03R\tpartition\x88\x01\x01\x12\'\n\x07project\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x04R\x07project\x88\x01\x01\x12<\n\x04type\x18\x06 \x01(\x0e\x32\x1e.metalstack.api.v2.NetworkTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x04type\x12\x36\n\x06labels\x18\x07 \x01(\x0b\x32\x19.metalstack.api.v2.LabelsH\x05R\x06labels\x88\x01\x01\x12(\n\x08prefixes\x18\x08 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x08prefixes\x12?\n\x14\x64\x65stination_prefixes\x18\t \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x13\x64\x65stinationPrefixes\x12\x63\n\x1b\x64\x65\x66\x61ult_child_prefix_length\x18\n \x01(\x0b\x32$.metalstack.api.v2.ChildPrefixLengthR\x18\x64\x65\x66\x61ultChildPrefixLength\x12[\n\x17min_child_prefix_length\x18\x0b \x01(\x0b\x32$.metalstack.api.v2.ChildPrefixLengthR\x14minChildPrefixLength\x12\x44\n\x08nat_type\x18\x0c \x01(\x0e\x32\x1a.metalstack.api.v2.NATTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x06R\x07natType\x88\x01\x01\x12\x15\n\x03vrf\x18\r \x01(\rH\x07R\x03vrf\x88\x01\x01\x12\x37\n\x0eparent_network\x18\x0e \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x08R\rparentNetwork\x88\x01\x01\x12N\n\x1c\x61\x64\x64itional_announcable_cidrs\x18\x0f \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x1a\x61\x64\x64itionalAnnouncableCidrs\x12\x41\n\x06length\x18\x10 \x01(\x0b\x32$.metalstack.api.v2.ChildPrefixLengthH\tR\x06length\x88\x01\x01\x12]\n\x0e\x61\x64\x64ress_family\x18\x11 \x01(\x0e\x32\'.metalstack.api.v2.NetworkAddressFamilyB\x08\xbaH\x05\x82\x01\x02\x10\x01H\nR\raddressFamily\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_nameB\x0e\n\x0c_descriptionB\x0c\n\n_partitionB\n\n\x08_projectB\t\n\x07_labelsB\x0b\n\t_nat_typeB\x06\n\x04_vrfB\x11\n\x0f_parent_networkB\t\n\x07_lengthB\x11\n\x0f_address_family\"\xea\x06\n\x1bNetworkServiceUpdateRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\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\x06labels\x18\x05 \x01(\x0b\x32\x1f.metalstack.api.v2.UpdateLabelsH\x02R\x06labels\x88\x01\x01\x12(\n\x08prefixes\x18\x06 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x08prefixes\x12?\n\x14\x64\x65stination_prefixes\x18\x07 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x13\x64\x65stinationPrefixes\x12h\n\x1b\x64\x65\x66\x61ult_child_prefix_length\x18\n \x01(\x0b\x32$.metalstack.api.v2.ChildPrefixLengthH\x03R\x18\x64\x65\x66\x61ultChildPrefixLength\x88\x01\x01\x12`\n\x17min_child_prefix_length\x18\x0b \x01(\x0b\x32$.metalstack.api.v2.ChildPrefixLengthH\x04R\x14minChildPrefixLength\x88\x01\x01\x12\x44\n\x08nat_type\x18\r \x01(\x0e\x32\x1a.metalstack.api.v2.NATTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x05R\x07natType\x88\x01\x01\x12N\n\x1c\x61\x64\x64itional_announcable_cidrs\x18\x10 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x1a\x61\x64\x64itionalAnnouncableCidrs\x12\x14\n\x05\x66orce\x18\x14 \x01(\x08R\x05\x66orceB\x07\n\x05_nameB\x0e\n\x0c_descriptionB\t\n\x07_labelsB\x1e\n\x1c_default_child_prefix_lengthB\x1a\n\x18_min_child_prefix_lengthB\x0b\n\t_nat_type\"9\n\x1bNetworkServiceDeleteRequest\x12\x1a\n\x02id\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01R\x02id\"R\n\x19NetworkServiceListRequest\x12\x35\n\x05query\x18\x02 \x01(\x0b\x32\x1f.metalstack.api.v2.NetworkQueryR\x05query\"T\n\x1cNetworkServiceCreateResponse\x12\x34\n\x07network\x18\x01 \x01(\x0b\x32\x1a.metalstack.api.v2.NetworkR\x07network\"T\n\x1cNetworkServiceUpdateResponse\x12\x34\n\x07network\x18\x01 \x01(\x0b\x32\x1a.metalstack.api.v2.NetworkR\x07network\"T\n\x1cNetworkServiceDeleteResponse\x12\x34\n\x07network\x18\x01 \x01(\x0b\x32\x1a.metalstack.api.v2.NetworkR\x07network\"T\n\x1aNetworkServiceListResponse\x12\x36\n\x08networks\x18\x01 \x03(\x0b\x32\x1a.metalstack.api.v2.NetworkR\x08networks2\xe5\x04\n\x0eNetworkService\x12p\n\x03Get\x12-.metalstack.admin.v2.NetworkServiceGetRequest\x1a..metalstack.admin.v2.NetworkServiceGetResponse\"\n\xd2\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12x\n\x06\x43reate\x12\x30.metalstack.admin.v2.NetworkServiceCreateRequest\x1a\x31.metalstack.admin.v2.NetworkServiceCreateResponse\"\t\xd2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12x\n\x06Update\x12\x30.metalstack.admin.v2.NetworkServiceUpdateRequest\x1a\x31.metalstack.admin.v2.NetworkServiceUpdateResponse\"\t\xd2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12x\n\x06\x44\x65lete\x12\x30.metalstack.admin.v2.NetworkServiceDeleteRequest\x1a\x31.metalstack.admin.v2.NetworkServiceDeleteResponse\"\t\xd2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12s\n\x04List\x12..metalstack.admin.v2.NetworkServiceListRequest\x1a/.metalstack.admin.v2.NetworkServiceListResponse\"\n\xd2\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x42\xd0\x01\n\x17\x63om.metalstack.admin.v2B\x0cNetworkProtoP\x01Z9github.com/metal-stack/api/go/metalstack/admin/v2;adminv2\xa2\x02\x03MAX\xaa\x02\x13Metalstack.Admin.V2\xca\x02\x13Metalstack\\Admin\\V2\xe2\x02\x1fMetalstack\\Admin\\V2\\GPBMetadata\xea\x02\x15Metalstack::Admin::V2b\x06proto3')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!metalstack/admin/v2/network.proto\x12\x13metalstack.admin.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a\x1fmetalstack/api/v2/network.proto\x1a(metalstack/api/v2/predefined_rules.proto\"7\n\x18NetworkServiceGetRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\"Q\n\x19NetworkServiceGetResponse\x12\x34\n\x07network\x18\x01 \x01(\x0b\x32\x1a.metalstack.api.v2.NetworkR\x07network\"\xa8\t\n\x1bNetworkServiceCreateRequest\x12 \n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\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\x32\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x02R\x0b\x64\x65scription\x88\x01\x01\x12.\n\tpartition\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xd0\xb3\xae\xb1\x02\x01H\x03R\tpartition\x88\x01\x01\x12\'\n\x07project\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x04R\x07project\x88\x01\x01\x12<\n\x04type\x18\x06 \x01(\x0e\x32\x1e.metalstack.api.v2.NetworkTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x04type\x12\x36\n\x06labels\x18\x07 \x01(\x0b\x32\x19.metalstack.api.v2.LabelsH\x05R\x06labels\x88\x01\x01\x12(\n\x08prefixes\x18\x08 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x08prefixes\x12?\n\x14\x64\x65stination_prefixes\x18\t \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x13\x64\x65stinationPrefixes\x12\x63\n\x1b\x64\x65\x66\x61ult_child_prefix_length\x18\n \x01(\x0b\x32$.metalstack.api.v2.ChildPrefixLengthR\x18\x64\x65\x66\x61ultChildPrefixLength\x12[\n\x17min_child_prefix_length\x18\x0b \x01(\x0b\x32$.metalstack.api.v2.ChildPrefixLengthR\x14minChildPrefixLength\x12\x44\n\x08nat_type\x18\x0c \x01(\x0e\x32\x1a.metalstack.api.v2.NATTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x06R\x07natType\x88\x01\x01\x12\x15\n\x03vrf\x18\r \x01(\rH\x07R\x03vrf\x88\x01\x01\x12\x37\n\x0eparent_network\x18\x0e \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x08R\rparentNetwork\x88\x01\x01\x12N\n\x1c\x61\x64\x64itional_announcable_cidrs\x18\x0f \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x1a\x61\x64\x64itionalAnnouncableCidrs\x12\x41\n\x06length\x18\x10 \x01(\x0b\x32$.metalstack.api.v2.ChildPrefixLengthH\tR\x06length\x88\x01\x01\x12]\n\x0e\x61\x64\x64ress_family\x18\x11 \x01(\x0e\x32\'.metalstack.api.v2.NetworkAddressFamilyB\x08\xbaH\x05\x82\x01\x02\x10\x01H\nR\raddressFamily\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_nameB\x0e\n\x0c_descriptionB\x0c\n\n_partitionB\n\n\x08_projectB\t\n\x07_labelsB\x0b\n\t_nat_typeB\x06\n\x04_vrfB\x11\n\x0f_parent_networkB\t\n\x07_lengthB\x11\n\x0f_address_family\"\xea\x06\n\x1bNetworkServiceUpdateRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\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\x06labels\x18\x05 \x01(\x0b\x32\x1f.metalstack.api.v2.UpdateLabelsH\x02R\x06labels\x88\x01\x01\x12(\n\x08prefixes\x18\x06 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x08prefixes\x12?\n\x14\x64\x65stination_prefixes\x18\x07 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x13\x64\x65stinationPrefixes\x12h\n\x1b\x64\x65\x66\x61ult_child_prefix_length\x18\n \x01(\x0b\x32$.metalstack.api.v2.ChildPrefixLengthH\x03R\x18\x64\x65\x66\x61ultChildPrefixLength\x88\x01\x01\x12`\n\x17min_child_prefix_length\x18\x0b \x01(\x0b\x32$.metalstack.api.v2.ChildPrefixLengthH\x04R\x14minChildPrefixLength\x88\x01\x01\x12\x44\n\x08nat_type\x18\r \x01(\x0e\x32\x1a.metalstack.api.v2.NATTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x05R\x07natType\x88\x01\x01\x12N\n\x1c\x61\x64\x64itional_announcable_cidrs\x18\x10 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x1a\x61\x64\x64itionalAnnouncableCidrs\x12\x14\n\x05\x66orce\x18\x14 \x01(\x08R\x05\x66orceB\x07\n\x05_nameB\x0e\n\x0c_descriptionB\t\n\x07_labelsB\x1e\n\x1c_default_child_prefix_lengthB\x1a\n\x18_min_child_prefix_lengthB\x0b\n\t_nat_type\":\n\x1bNetworkServiceDeleteRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\"R\n\x19NetworkServiceListRequest\x12\x35\n\x05query\x18\x02 \x01(\x0b\x32\x1f.metalstack.api.v2.NetworkQueryR\x05query\"T\n\x1cNetworkServiceCreateResponse\x12\x34\n\x07network\x18\x01 \x01(\x0b\x32\x1a.metalstack.api.v2.NetworkR\x07network\"T\n\x1cNetworkServiceUpdateResponse\x12\x34\n\x07network\x18\x01 \x01(\x0b\x32\x1a.metalstack.api.v2.NetworkR\x07network\"T\n\x1cNetworkServiceDeleteResponse\x12\x34\n\x07network\x18\x01 \x01(\x0b\x32\x1a.metalstack.api.v2.NetworkR\x07network\"T\n\x1aNetworkServiceListResponse\x12\x36\n\x08networks\x18\x01 \x03(\x0b\x32\x1a.metalstack.api.v2.NetworkR\x08networks2\xe5\x04\n\x0eNetworkService\x12p\n\x03Get\x12-.metalstack.admin.v2.NetworkServiceGetRequest\x1a..metalstack.admin.v2.NetworkServiceGetResponse\"\n\xd2\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x12x\n\x06\x43reate\x12\x30.metalstack.admin.v2.NetworkServiceCreateRequest\x1a\x31.metalstack.admin.v2.NetworkServiceCreateResponse\"\t\xd2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12x\n\x06Update\x12\x30.metalstack.admin.v2.NetworkServiceUpdateRequest\x1a\x31.metalstack.admin.v2.NetworkServiceUpdateResponse\"\t\xd2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12x\n\x06\x44\x65lete\x12\x30.metalstack.admin.v2.NetworkServiceDeleteRequest\x1a\x31.metalstack.admin.v2.NetworkServiceDeleteResponse\"\t\xd2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12s\n\x04List\x12..metalstack.admin.v2.NetworkServiceListRequest\x1a/.metalstack.admin.v2.NetworkServiceListResponse\"\n\xd2\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x42\xd0\x01\n\x17\x63om.metalstack.admin.v2B\x0cNetworkProtoP\x01Z9github.com/metal-stack/api/go/metalstack/admin/v2;adminv2\xa2\x02\x03MAX\xaa\x02\x13Metalstack.Admin.V2\xca\x02\x13Metalstack\\Admin\\V2\xe2\x02\x1fMetalstack\\Admin\\V2\\GPBMetadata\xea\x02\x15Metalstack::Admin::V2b\x06proto3')
_globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -37,9 +37,9 @@
_globals['DESCRIPTOR']._loaded_options = None
_globals['DESCRIPTOR']._serialized_options = b'\n\027com.metalstack.admin.v2B\014NetworkProtoP\001Z9github.com/metal-stack/api/go/metalstack/admin/v2;adminv2\242\002\003MAX\252\002\023Metalstack.Admin.V2\312\002\023Metalstack\\Admin\\V2\342\002\037Metalstack\\Admin\\V2\\GPBMetadata\352\002\025Metalstack::Admin::V2'
_globals['_NETWORKSERVICEGETREQUEST'].fields_by_name['id']._loaded_options = None
- _globals['_NETWORKSERVICEGETREQUEST'].fields_by_name['id']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_NETWORKSERVICEGETREQUEST'].fields_by_name['id']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_NETWORKSERVICECREATEREQUEST'].fields_by_name['id']._loaded_options = None
- _globals['_NETWORKSERVICECREATEREQUEST'].fields_by_name['id']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_NETWORKSERVICECREATEREQUEST'].fields_by_name['id']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_NETWORKSERVICECREATEREQUEST'].fields_by_name['name']._loaded_options = None
_globals['_NETWORKSERVICECREATEREQUEST'].fields_by_name['name']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_NETWORKSERVICECREATEREQUEST'].fields_by_name['description']._loaded_options = None
@@ -79,7 +79,7 @@
_globals['_NETWORKSERVICEUPDATEREQUEST'].fields_by_name['additional_announcable_cidrs']._loaded_options = None
_globals['_NETWORKSERVICEUPDATEREQUEST'].fields_by_name['additional_announcable_cidrs']._serialized_options = b'\272H\t\222\001\006\270\244\263\261\002\001'
_globals['_NETWORKSERVICEDELETEREQUEST'].fields_by_name['id']._loaded_options = None
- _globals['_NETWORKSERVICEDELETEREQUEST'].fields_by_name['id']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_NETWORKSERVICEDELETEREQUEST'].fields_by_name['id']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_NETWORKSERVICE'].methods_by_name['Get']._loaded_options = None
_globals['_NETWORKSERVICE'].methods_by_name['Get']._serialized_options = b'\322\363\030\002\001\002\340\363\030\002'
_globals['_NETWORKSERVICE'].methods_by_name['Create']._loaded_options = None
@@ -91,25 +91,25 @@
_globals['_NETWORKSERVICE'].methods_by_name['List']._loaded_options = None
_globals['_NETWORKSERVICE'].methods_by_name['List']._serialized_options = b'\322\363\030\002\001\002\340\363\030\002'
_globals['_NETWORKSERVICEGETREQUEST']._serialized_start=194
- _globals['_NETWORKSERVICEGETREQUEST']._serialized_end=248
- _globals['_NETWORKSERVICEGETRESPONSE']._serialized_start=250
- _globals['_NETWORKSERVICEGETRESPONSE']._serialized_end=331
- _globals['_NETWORKSERVICECREATEREQUEST']._serialized_start=334
- _globals['_NETWORKSERVICECREATEREQUEST']._serialized_end=1525
- _globals['_NETWORKSERVICEUPDATEREQUEST']._serialized_start=1528
- _globals['_NETWORKSERVICEUPDATEREQUEST']._serialized_end=2402
- _globals['_NETWORKSERVICEDELETEREQUEST']._serialized_start=2404
- _globals['_NETWORKSERVICEDELETEREQUEST']._serialized_end=2461
- _globals['_NETWORKSERVICELISTREQUEST']._serialized_start=2463
- _globals['_NETWORKSERVICELISTREQUEST']._serialized_end=2545
- _globals['_NETWORKSERVICECREATERESPONSE']._serialized_start=2547
- _globals['_NETWORKSERVICECREATERESPONSE']._serialized_end=2631
- _globals['_NETWORKSERVICEUPDATERESPONSE']._serialized_start=2633
- _globals['_NETWORKSERVICEUPDATERESPONSE']._serialized_end=2717
- _globals['_NETWORKSERVICEDELETERESPONSE']._serialized_start=2719
- _globals['_NETWORKSERVICEDELETERESPONSE']._serialized_end=2803
- _globals['_NETWORKSERVICELISTRESPONSE']._serialized_start=2805
- _globals['_NETWORKSERVICELISTRESPONSE']._serialized_end=2889
- _globals['_NETWORKSERVICE']._serialized_start=2892
- _globals['_NETWORKSERVICE']._serialized_end=3505
+ _globals['_NETWORKSERVICEGETREQUEST']._serialized_end=249
+ _globals['_NETWORKSERVICEGETRESPONSE']._serialized_start=251
+ _globals['_NETWORKSERVICEGETRESPONSE']._serialized_end=332
+ _globals['_NETWORKSERVICECREATEREQUEST']._serialized_start=335
+ _globals['_NETWORKSERVICECREATEREQUEST']._serialized_end=1527
+ _globals['_NETWORKSERVICEUPDATEREQUEST']._serialized_start=1530
+ _globals['_NETWORKSERVICEUPDATEREQUEST']._serialized_end=2404
+ _globals['_NETWORKSERVICEDELETEREQUEST']._serialized_start=2406
+ _globals['_NETWORKSERVICEDELETEREQUEST']._serialized_end=2464
+ _globals['_NETWORKSERVICELISTREQUEST']._serialized_start=2466
+ _globals['_NETWORKSERVICELISTREQUEST']._serialized_end=2548
+ _globals['_NETWORKSERVICECREATERESPONSE']._serialized_start=2550
+ _globals['_NETWORKSERVICECREATERESPONSE']._serialized_end=2634
+ _globals['_NETWORKSERVICEUPDATERESPONSE']._serialized_start=2636
+ _globals['_NETWORKSERVICEUPDATERESPONSE']._serialized_end=2720
+ _globals['_NETWORKSERVICEDELETERESPONSE']._serialized_start=2722
+ _globals['_NETWORKSERVICEDELETERESPONSE']._serialized_end=2806
+ _globals['_NETWORKSERVICELISTRESPONSE']._serialized_start=2808
+ _globals['_NETWORKSERVICELISTRESPONSE']._serialized_end=2892
+ _globals['_NETWORKSERVICE']._serialized_start=2895
+ _globals['_NETWORKSERVICE']._serialized_end=3508
# @@protoc_insertion_point(module_scope)
diff --git a/python/metalstack/admin/v2/partition_pb2.py b/python/metalstack/admin/v2/partition_pb2.py
index 26e769e0..53f35e8f 100644
--- a/python/metalstack/admin/v2/partition_pb2.py
+++ b/python/metalstack/admin/v2/partition_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#metalstack/admin/v2/partition.proto\x12\x13metalstack.admin.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a!metalstack/api/v2/partition.proto\x1a(metalstack/api/v2/predefined_rules.proto\"[\n\x1dPartitionServiceCreateRequest\x12:\n\tpartition\x18\x01 \x01(\x0b\x32\x1c.metalstack.api.v2.PartitionR\tpartition\"\xb2\x04\n\x1dPartitionServiceUpdateRequest\x12\x1a\n\x02id\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01R\x02id\x12\x46\n\x0bupdate_meta\x18\x02 \x01(\x0b\x32\x1d.metalstack.api.v2.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\x12\x32\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x00R\x0b\x64\x65scription\x88\x01\x01\x12\\\n\x12\x62oot_configuration\x18\x04 \x01(\x0b\x32-.metalstack.api.v2.PartitionBootConfigurationR\x11\x62ootConfiguration\x12\x45\n\ndns_server\x18\x05 \x03(\x0b\x32\x1c.metalstack.api.v2.DNSServerB\x08\xbaH\x05\x92\x01\x02\x10\x03R\tdnsServer\x12\x45\n\nntp_server\x18\x06 \x03(\x0b\x32\x1c.metalstack.api.v2.NTPServerB\x08\xbaH\x05\x92\x01\x02\x10\nR\tntpServer\x12\x34\n\x16mgmt_service_addresses\x18\x07 \x03(\tR\x14mgmtServiceAddresses\x12<\n\x06labels\x18\x08 \x01(\x0b\x32\x1f.metalstack.api.v2.UpdateLabelsH\x01R\x06labels\x88\x01\x01\x42\x0e\n\x0c_descriptionB\t\n\x07_labels\";\n\x1dPartitionServiceDeleteRequest\x12\x1a\n\x02id\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01R\x02id\"\\\n\x1ePartitionServiceCreateResponse\x12:\n\tpartition\x18\x01 \x01(\x0b\x32\x1c.metalstack.api.v2.PartitionR\tpartition\"\\\n\x1ePartitionServiceUpdateResponse\x12:\n\tpartition\x18\x01 \x01(\x0b\x32\x1c.metalstack.api.v2.PartitionR\tpartition\"\\\n\x1ePartitionServiceDeleteResponse\x12:\n\tpartition\x18\x01 \x01(\x0b\x32\x1c.metalstack.api.v2.PartitionR\tpartition\"\xac\x01\n\x1fPartitionServiceCapacityRequest\x12\x1f\n\x02id\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01H\x00R\x02id\x88\x01\x01\x12#\n\x04size\x18\x02 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01H\x01R\x04size\x88\x01\x01\x12\'\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x02R\x07project\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_sizeB\n\n\x08_project\"\x83\x04\n PartitionServiceCapacityResponse\x12\x12\n\x04size\x18\x01 \x01(\tR\x04size\x12\x14\n\x05total\x18\x02 \x01(\x03R\x05total\x12\x1f\n\x0bphoned_home\x18\x03 \x01(\x03R\nphonedHome\x12\x18\n\x07waiting\x18\x04 \x01(\x03R\x07waiting\x12\x14\n\x05other\x18\x05 \x01(\x03R\x05other\x12%\n\x0eother_machines\x18\x06 \x03(\tR\rotherMachines\x12\x1c\n\tallocated\x18\x07 \x01(\x03R\tallocated\x12 \n\x0b\x61llocatable\x18\x08 \x01(\x03R\x0b\x61llocatable\x12\x12\n\x04\x66ree\x18\t \x01(\x03R\x04\x66ree\x12 \n\x0bunavailable\x18\n \x01(\x03R\x0bunavailable\x12\x16\n\x06\x66\x61ulty\x18\x0b \x01(\x03R\x06\x66\x61ulty\x12\'\n\x0f\x66\x61ulty_machines\x18\x0c \x03(\tR\x0e\x66\x61ultyMachines\x12\"\n\x0creservations\x18\r \x01(\x03R\x0creservations\x12+\n\x11used_reservations\x18\x0e \x01(\x03R\x10usedReservations\x12\x35\n\x16remaining_reservations\x18\x0f \x01(\x03R\x15remainingReservations2\x92\x04\n\x10PartitionService\x12|\n\x06\x43reate\x12\x32.metalstack.admin.v2.PartitionServiceCreateRequest\x1a\x33.metalstack.admin.v2.PartitionServiceCreateResponse\"\t\xd2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12|\n\x06Update\x12\x32.metalstack.admin.v2.PartitionServiceUpdateRequest\x1a\x33.metalstack.admin.v2.PartitionServiceUpdateResponse\"\t\xd2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12|\n\x06\x44\x65lete\x12\x32.metalstack.admin.v2.PartitionServiceDeleteRequest\x1a\x33.metalstack.admin.v2.PartitionServiceDeleteResponse\"\t\xd2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12\x83\x01\n\x08\x43\x61pacity\x12\x34.metalstack.admin.v2.PartitionServiceCapacityRequest\x1a\x35.metalstack.admin.v2.PartitionServiceCapacityResponse\"\n\xd2\xf3\x18\x02\x02\x01\xe0\xf3\x18\x02\x42\xd2\x01\n\x17\x63om.metalstack.admin.v2B\x0ePartitionProtoP\x01Z9github.com/metal-stack/api/go/metalstack/admin/v2;adminv2\xa2\x02\x03MAX\xaa\x02\x13Metalstack.Admin.V2\xca\x02\x13Metalstack\\Admin\\V2\xe2\x02\x1fMetalstack\\Admin\\V2\\GPBMetadata\xea\x02\x15Metalstack::Admin::V2b\x06proto3')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n#metalstack/admin/v2/partition.proto\x12\x13metalstack.admin.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a!metalstack/api/v2/partition.proto\x1a(metalstack/api/v2/predefined_rules.proto\"[\n\x1dPartitionServiceCreateRequest\x12:\n\tpartition\x18\x01 \x01(\x0b\x32\x1c.metalstack.api.v2.PartitionR\tpartition\"\xb3\x04\n\x1dPartitionServiceUpdateRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xd0\xb3\xae\xb1\x02\x01R\x02id\x12\x46\n\x0bupdate_meta\x18\x02 \x01(\x0b\x32\x1d.metalstack.api.v2.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\x12\x32\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x00R\x0b\x64\x65scription\x88\x01\x01\x12\\\n\x12\x62oot_configuration\x18\x04 \x01(\x0b\x32-.metalstack.api.v2.PartitionBootConfigurationR\x11\x62ootConfiguration\x12\x45\n\ndns_server\x18\x05 \x03(\x0b\x32\x1c.metalstack.api.v2.DNSServerB\x08\xbaH\x05\x92\x01\x02\x10\x03R\tdnsServer\x12\x45\n\nntp_server\x18\x06 \x03(\x0b\x32\x1c.metalstack.api.v2.NTPServerB\x08\xbaH\x05\x92\x01\x02\x10\nR\tntpServer\x12\x34\n\x16mgmt_service_addresses\x18\x07 \x03(\tR\x14mgmtServiceAddresses\x12<\n\x06labels\x18\x08 \x01(\x0b\x32\x1f.metalstack.api.v2.UpdateLabelsH\x01R\x06labels\x88\x01\x01\x42\x0e\n\x0c_descriptionB\t\n\x07_labels\"<\n\x1dPartitionServiceDeleteRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xd0\xb3\xae\xb1\x02\x01R\x02id\"\\\n\x1ePartitionServiceCreateResponse\x12:\n\tpartition\x18\x01 \x01(\x0b\x32\x1c.metalstack.api.v2.PartitionR\tpartition\"\\\n\x1ePartitionServiceUpdateResponse\x12:\n\tpartition\x18\x01 \x01(\x0b\x32\x1c.metalstack.api.v2.PartitionR\tpartition\"\\\n\x1ePartitionServiceDeleteResponse\x12:\n\tpartition\x18\x01 \x01(\x0b\x32\x1c.metalstack.api.v2.PartitionR\tpartition\"\xae\x01\n\x1fPartitionServiceCapacityRequest\x12 \n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xd0\xb3\xae\xb1\x02\x01H\x00R\x02id\x88\x01\x01\x12$\n\x04size\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x04size\x88\x01\x01\x12\'\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x02R\x07project\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_sizeB\n\n\x08_project\"\x83\x04\n PartitionServiceCapacityResponse\x12\x12\n\x04size\x18\x01 \x01(\tR\x04size\x12\x14\n\x05total\x18\x02 \x01(\x03R\x05total\x12\x1f\n\x0bphoned_home\x18\x03 \x01(\x03R\nphonedHome\x12\x18\n\x07waiting\x18\x04 \x01(\x03R\x07waiting\x12\x14\n\x05other\x18\x05 \x01(\x03R\x05other\x12%\n\x0eother_machines\x18\x06 \x03(\tR\rotherMachines\x12\x1c\n\tallocated\x18\x07 \x01(\x03R\tallocated\x12 \n\x0b\x61llocatable\x18\x08 \x01(\x03R\x0b\x61llocatable\x12\x12\n\x04\x66ree\x18\t \x01(\x03R\x04\x66ree\x12 \n\x0bunavailable\x18\n \x01(\x03R\x0bunavailable\x12\x16\n\x06\x66\x61ulty\x18\x0b \x01(\x03R\x06\x66\x61ulty\x12\'\n\x0f\x66\x61ulty_machines\x18\x0c \x03(\tR\x0e\x66\x61ultyMachines\x12\"\n\x0creservations\x18\r \x01(\x03R\x0creservations\x12+\n\x11used_reservations\x18\x0e \x01(\x03R\x10usedReservations\x12\x35\n\x16remaining_reservations\x18\x0f \x01(\x03R\x15remainingReservations2\x92\x04\n\x10PartitionService\x12|\n\x06\x43reate\x12\x32.metalstack.admin.v2.PartitionServiceCreateRequest\x1a\x33.metalstack.admin.v2.PartitionServiceCreateResponse\"\t\xd2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12|\n\x06Update\x12\x32.metalstack.admin.v2.PartitionServiceUpdateRequest\x1a\x33.metalstack.admin.v2.PartitionServiceUpdateResponse\"\t\xd2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12|\n\x06\x44\x65lete\x12\x32.metalstack.admin.v2.PartitionServiceDeleteRequest\x1a\x33.metalstack.admin.v2.PartitionServiceDeleteResponse\"\t\xd2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12\x83\x01\n\x08\x43\x61pacity\x12\x34.metalstack.admin.v2.PartitionServiceCapacityRequest\x1a\x35.metalstack.admin.v2.PartitionServiceCapacityResponse\"\n\xd2\xf3\x18\x02\x02\x01\xe0\xf3\x18\x02\x42\xd2\x01\n\x17\x63om.metalstack.admin.v2B\x0ePartitionProtoP\x01Z9github.com/metal-stack/api/go/metalstack/admin/v2;adminv2\xa2\x02\x03MAX\xaa\x02\x13Metalstack.Admin.V2\xca\x02\x13Metalstack\\Admin\\V2\xe2\x02\x1fMetalstack\\Admin\\V2\\GPBMetadata\xea\x02\x15Metalstack::Admin::V2b\x06proto3')
_globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -37,7 +37,7 @@
_globals['DESCRIPTOR']._loaded_options = None
_globals['DESCRIPTOR']._serialized_options = b'\n\027com.metalstack.admin.v2B\016PartitionProtoP\001Z9github.com/metal-stack/api/go/metalstack/admin/v2;adminv2\242\002\003MAX\252\002\023Metalstack.Admin.V2\312\002\023Metalstack\\Admin\\V2\342\002\037Metalstack\\Admin\\V2\\GPBMetadata\352\002\025Metalstack::Admin::V2'
_globals['_PARTITIONSERVICEUPDATEREQUEST'].fields_by_name['id']._loaded_options = None
- _globals['_PARTITIONSERVICEUPDATEREQUEST'].fields_by_name['id']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_PARTITIONSERVICEUPDATEREQUEST'].fields_by_name['id']._serialized_options = b'\272H\010r\006\320\263\256\261\002\001'
_globals['_PARTITIONSERVICEUPDATEREQUEST'].fields_by_name['update_meta']._loaded_options = None
_globals['_PARTITIONSERVICEUPDATEREQUEST'].fields_by_name['update_meta']._serialized_options = b'\272H\003\310\001\001'
_globals['_PARTITIONSERVICEUPDATEREQUEST'].fields_by_name['description']._loaded_options = None
@@ -47,11 +47,11 @@
_globals['_PARTITIONSERVICEUPDATEREQUEST'].fields_by_name['ntp_server']._loaded_options = None
_globals['_PARTITIONSERVICEUPDATEREQUEST'].fields_by_name['ntp_server']._serialized_options = b'\272H\005\222\001\002\020\n'
_globals['_PARTITIONSERVICEDELETEREQUEST'].fields_by_name['id']._loaded_options = None
- _globals['_PARTITIONSERVICEDELETEREQUEST'].fields_by_name['id']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_PARTITIONSERVICEDELETEREQUEST'].fields_by_name['id']._serialized_options = b'\272H\010r\006\320\263\256\261\002\001'
_globals['_PARTITIONSERVICECAPACITYREQUEST'].fields_by_name['id']._loaded_options = None
- _globals['_PARTITIONSERVICECAPACITYREQUEST'].fields_by_name['id']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_PARTITIONSERVICECAPACITYREQUEST'].fields_by_name['id']._serialized_options = b'\272H\010r\006\320\263\256\261\002\001'
_globals['_PARTITIONSERVICECAPACITYREQUEST'].fields_by_name['size']._loaded_options = None
- _globals['_PARTITIONSERVICECAPACITYREQUEST'].fields_by_name['size']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_PARTITIONSERVICECAPACITYREQUEST'].fields_by_name['size']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_PARTITIONSERVICECAPACITYREQUEST'].fields_by_name['project']._loaded_options = None
_globals['_PARTITIONSERVICECAPACITYREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001'
_globals['_PARTITIONSERVICE'].methods_by_name['Create']._loaded_options = None
@@ -65,19 +65,19 @@
_globals['_PARTITIONSERVICECREATEREQUEST']._serialized_start=198
_globals['_PARTITIONSERVICECREATEREQUEST']._serialized_end=289
_globals['_PARTITIONSERVICEUPDATEREQUEST']._serialized_start=292
- _globals['_PARTITIONSERVICEUPDATEREQUEST']._serialized_end=854
- _globals['_PARTITIONSERVICEDELETEREQUEST']._serialized_start=856
- _globals['_PARTITIONSERVICEDELETEREQUEST']._serialized_end=915
- _globals['_PARTITIONSERVICECREATERESPONSE']._serialized_start=917
- _globals['_PARTITIONSERVICECREATERESPONSE']._serialized_end=1009
- _globals['_PARTITIONSERVICEUPDATERESPONSE']._serialized_start=1011
- _globals['_PARTITIONSERVICEUPDATERESPONSE']._serialized_end=1103
- _globals['_PARTITIONSERVICEDELETERESPONSE']._serialized_start=1105
- _globals['_PARTITIONSERVICEDELETERESPONSE']._serialized_end=1197
- _globals['_PARTITIONSERVICECAPACITYREQUEST']._serialized_start=1200
- _globals['_PARTITIONSERVICECAPACITYREQUEST']._serialized_end=1372
- _globals['_PARTITIONSERVICECAPACITYRESPONSE']._serialized_start=1375
- _globals['_PARTITIONSERVICECAPACITYRESPONSE']._serialized_end=1890
- _globals['_PARTITIONSERVICE']._serialized_start=1893
- _globals['_PARTITIONSERVICE']._serialized_end=2423
+ _globals['_PARTITIONSERVICEUPDATEREQUEST']._serialized_end=855
+ _globals['_PARTITIONSERVICEDELETEREQUEST']._serialized_start=857
+ _globals['_PARTITIONSERVICEDELETEREQUEST']._serialized_end=917
+ _globals['_PARTITIONSERVICECREATERESPONSE']._serialized_start=919
+ _globals['_PARTITIONSERVICECREATERESPONSE']._serialized_end=1011
+ _globals['_PARTITIONSERVICEUPDATERESPONSE']._serialized_start=1013
+ _globals['_PARTITIONSERVICEUPDATERESPONSE']._serialized_end=1105
+ _globals['_PARTITIONSERVICEDELETERESPONSE']._serialized_start=1107
+ _globals['_PARTITIONSERVICEDELETERESPONSE']._serialized_end=1199
+ _globals['_PARTITIONSERVICECAPACITYREQUEST']._serialized_start=1202
+ _globals['_PARTITIONSERVICECAPACITYREQUEST']._serialized_end=1376
+ _globals['_PARTITIONSERVICECAPACITYRESPONSE']._serialized_start=1379
+ _globals['_PARTITIONSERVICECAPACITYRESPONSE']._serialized_end=1894
+ _globals['_PARTITIONSERVICE']._serialized_start=1897
+ _globals['_PARTITIONSERVICE']._serialized_end=2427
# @@protoc_insertion_point(module_scope)
diff --git a/python/metalstack/admin/v2/project_pb2.py b/python/metalstack/admin/v2/project_pb2.py
index b928e8c4..40b406a4 100644
--- a/python/metalstack/admin/v2/project_pb2.py
+++ b/python/metalstack/admin/v2/project_pb2.py
@@ -24,10 +24,11 @@
from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2
from metalstack.api.v2 import common_pb2 as metalstack_dot_api_dot_v2_dot_common__pb2
+from metalstack.api.v2 import predefined_rules_pb2 as metalstack_dot_api_dot_v2_dot_predefined__rules__pb2
from metalstack.api.v2 import project_pb2 as metalstack_dot_api_dot_v2_dot_project__pb2
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!metalstack/admin/v2/project.proto\x12\x13metalstack.admin.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a\x1fmetalstack/api/v2/project.proto\"\x92\x01\n\x19ProjectServiceListRequest\x12\'\n\x06tenant\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01H\x00R\x06tenant\x88\x01\x01\x12\x36\n\x06labels\x18\x02 \x01(\x0b\x32\x19.metalstack.api.v2.LabelsH\x01R\x06labels\x88\x01\x01\x42\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\x08projects2\x85\x01\n\x0eProjectService\x12s\n\x04List\x12..metalstack.admin.v2.ProjectServiceListRequest\x1a/.metalstack.admin.v2.ProjectServiceListResponse\"\n\xd2\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x42\xd0\x01\n\x17\x63om.metalstack.admin.v2B\x0cProjectProtoP\x01Z9github.com/metal-stack/api/go/metalstack/admin/v2;adminv2\xa2\x02\x03MAX\xaa\x02\x13Metalstack.Admin.V2\xca\x02\x13Metalstack\\Admin\\V2\xe2\x02\x1fMetalstack\\Admin\\V2\\GPBMetadata\xea\x02\x15Metalstack::Admin::V2b\x06proto3')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!metalstack/admin/v2/project.proto\x12\x13metalstack.admin.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a(metalstack/api/v2/predefined_rules.proto\x1a\x1fmetalstack/api/v2/project.proto\"\x93\x01\n\x19ProjectServiceListRequest\x12(\n\x06tenant\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x06tenant\x88\x01\x01\x12\x36\n\x06labels\x18\x02 \x01(\x0b\x32\x19.metalstack.api.v2.LabelsH\x01R\x06labels\x88\x01\x01\x42\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\x08projects2\x85\x01\n\x0eProjectService\x12s\n\x04List\x12..metalstack.admin.v2.ProjectServiceListRequest\x1a/.metalstack.admin.v2.ProjectServiceListResponse\"\n\xd2\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x42\xd0\x01\n\x17\x63om.metalstack.admin.v2B\x0cProjectProtoP\x01Z9github.com/metal-stack/api/go/metalstack/admin/v2;adminv2\xa2\x02\x03MAX\xaa\x02\x13Metalstack.Admin.V2\xca\x02\x13Metalstack\\Admin\\V2\xe2\x02\x1fMetalstack\\Admin\\V2\\GPBMetadata\xea\x02\x15Metalstack::Admin::V2b\x06proto3')
_globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -36,13 +37,13 @@
_globals['DESCRIPTOR']._loaded_options = None
_globals['DESCRIPTOR']._serialized_options = b'\n\027com.metalstack.admin.v2B\014ProjectProtoP\001Z9github.com/metal-stack/api/go/metalstack/admin/v2;adminv2\242\002\003MAX\252\002\023Metalstack.Admin.V2\312\002\023Metalstack\\Admin\\V2\342\002\037Metalstack\\Admin\\V2\\GPBMetadata\352\002\025Metalstack::Admin::V2'
_globals['_PROJECTSERVICELISTREQUEST'].fields_by_name['tenant']._loaded_options = None
- _globals['_PROJECTSERVICELISTREQUEST'].fields_by_name['tenant']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_PROJECTSERVICELISTREQUEST'].fields_by_name['tenant']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_PROJECTSERVICE'].methods_by_name['List']._loaded_options = None
_globals['_PROJECTSERVICE'].methods_by_name['List']._serialized_options = b'\322\363\030\002\001\002\340\363\030\002'
- _globals['_PROJECTSERVICELISTREQUEST']._serialized_start=153
- _globals['_PROJECTSERVICELISTREQUEST']._serialized_end=299
- _globals['_PROJECTSERVICELISTRESPONSE']._serialized_start=301
- _globals['_PROJECTSERVICELISTRESPONSE']._serialized_end=385
- _globals['_PROJECTSERVICE']._serialized_start=388
- _globals['_PROJECTSERVICE']._serialized_end=521
+ _globals['_PROJECTSERVICELISTREQUEST']._serialized_start=195
+ _globals['_PROJECTSERVICELISTREQUEST']._serialized_end=342
+ _globals['_PROJECTSERVICELISTRESPONSE']._serialized_start=344
+ _globals['_PROJECTSERVICELISTRESPONSE']._serialized_end=428
+ _globals['_PROJECTSERVICE']._serialized_start=431
+ _globals['_PROJECTSERVICE']._serialized_end=564
# @@protoc_insertion_point(module_scope)
diff --git a/python/metalstack/admin/v2/project_pb2.pyi b/python/metalstack/admin/v2/project_pb2.pyi
index 0e89c975..03fdeb21 100644
--- a/python/metalstack/admin/v2/project_pb2.pyi
+++ b/python/metalstack/admin/v2/project_pb2.pyi
@@ -1,5 +1,6 @@
from buf.validate import validate_pb2 as _validate_pb2
from metalstack.api.v2 import common_pb2 as _common_pb2
+from metalstack.api.v2 import predefined_rules_pb2 as _predefined_rules_pb2
from metalstack.api.v2 import project_pb2 as _project_pb2
from google.protobuf.internal import containers as _containers
from google.protobuf import descriptor as _descriptor
diff --git a/python/metalstack/admin/v2/size_pb2.py b/python/metalstack/admin/v2/size_pb2.py
index 7f50efd9..8b63d472 100644
--- a/python/metalstack/admin/v2/size_pb2.py
+++ b/python/metalstack/admin/v2/size_pb2.py
@@ -28,7 +28,7 @@
from metalstack.api.v2 import size_pb2 as metalstack_dot_api_dot_v2_dot_size__pb2
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1emetalstack/admin/v2/size.proto\x12\x13metalstack.admin.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a(metalstack/api/v2/predefined_rules.proto\x1a\x1cmetalstack/api/v2/size.proto\"G\n\x18SizeServiceCreateRequest\x12+\n\x04size\x18\x01 \x01(\x0b\x32\x17.metalstack.api.v2.SizeR\x04size\"H\n\x19SizeServiceCreateResponse\x12+\n\x04size\x18\x01 \x01(\x0b\x32\x17.metalstack.api.v2.SizeR\x04size\"\xff\x02\n\x18SizeServiceUpdateRequest\x12\x1a\n\x02id\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01R\x02id\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\x43\n\x0b\x63onstraints\x18\x05 \x03(\x0b\x32!.metalstack.api.v2.SizeConstraintR\x0b\x63onstraints\x12<\n\x06labels\x18\x06 \x01(\x0b\x32\x1f.metalstack.api.v2.UpdateLabelsH\x02R\x06labels\x88\x01\x01\x42\x07\n\x05_nameB\x0e\n\x0c_descriptionB\t\n\x07_labels\"H\n\x19SizeServiceUpdateResponse\x12+\n\x04size\x18\x01 \x01(\x0b\x32\x17.metalstack.api.v2.SizeR\x04size\"6\n\x18SizeServiceDeleteRequest\x12\x1a\n\x02id\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01R\x02id\"H\n\x19SizeServiceDeleteResponse\x12+\n\x04size\x18\x01 \x01(\x0b\x32\x17.metalstack.api.v2.SizeR\x04size2\xdd\x02\n\x0bSizeService\x12n\n\x06\x43reate\x12-.metalstack.admin.v2.SizeServiceCreateRequest\x1a..metalstack.admin.v2.SizeServiceCreateResponse\"\x05\xd2\xf3\x18\x01\x01\x12n\n\x06Update\x12-.metalstack.admin.v2.SizeServiceUpdateRequest\x1a..metalstack.admin.v2.SizeServiceUpdateResponse\"\x05\xd2\xf3\x18\x01\x01\x12n\n\x06\x44\x65lete\x12-.metalstack.admin.v2.SizeServiceDeleteRequest\x1a..metalstack.admin.v2.SizeServiceDeleteResponse\"\x05\xd2\xf3\x18\x01\x01\x42\xcd\x01\n\x17\x63om.metalstack.admin.v2B\tSizeProtoP\x01Z9github.com/metal-stack/api/go/metalstack/admin/v2;adminv2\xa2\x02\x03MAX\xaa\x02\x13Metalstack.Admin.V2\xca\x02\x13Metalstack\\Admin\\V2\xe2\x02\x1fMetalstack\\Admin\\V2\\GPBMetadata\xea\x02\x15Metalstack::Admin::V2b\x06proto3')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1emetalstack/admin/v2/size.proto\x12\x13metalstack.admin.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a(metalstack/api/v2/predefined_rules.proto\x1a\x1cmetalstack/api/v2/size.proto\"G\n\x18SizeServiceCreateRequest\x12+\n\x04size\x18\x01 \x01(\x0b\x32\x17.metalstack.api.v2.SizeR\x04size\"H\n\x19SizeServiceCreateResponse\x12+\n\x04size\x18\x01 \x01(\x0b\x32\x17.metalstack.api.v2.SizeR\x04size\"\x80\x03\n\x18SizeServiceUpdateRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\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\x43\n\x0b\x63onstraints\x18\x05 \x03(\x0b\x32!.metalstack.api.v2.SizeConstraintR\x0b\x63onstraints\x12<\n\x06labels\x18\x06 \x01(\x0b\x32\x1f.metalstack.api.v2.UpdateLabelsH\x02R\x06labels\x88\x01\x01\x42\x07\n\x05_nameB\x0e\n\x0c_descriptionB\t\n\x07_labels\"H\n\x19SizeServiceUpdateResponse\x12+\n\x04size\x18\x01 \x01(\x0b\x32\x17.metalstack.api.v2.SizeR\x04size\"7\n\x18SizeServiceDeleteRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\"H\n\x19SizeServiceDeleteResponse\x12+\n\x04size\x18\x01 \x01(\x0b\x32\x17.metalstack.api.v2.SizeR\x04size2\xdd\x02\n\x0bSizeService\x12n\n\x06\x43reate\x12-.metalstack.admin.v2.SizeServiceCreateRequest\x1a..metalstack.admin.v2.SizeServiceCreateResponse\"\x05\xd2\xf3\x18\x01\x01\x12n\n\x06Update\x12-.metalstack.admin.v2.SizeServiceUpdateRequest\x1a..metalstack.admin.v2.SizeServiceUpdateResponse\"\x05\xd2\xf3\x18\x01\x01\x12n\n\x06\x44\x65lete\x12-.metalstack.admin.v2.SizeServiceDeleteRequest\x1a..metalstack.admin.v2.SizeServiceDeleteResponse\"\x05\xd2\xf3\x18\x01\x01\x42\xcd\x01\n\x17\x63om.metalstack.admin.v2B\tSizeProtoP\x01Z9github.com/metal-stack/api/go/metalstack/admin/v2;adminv2\xa2\x02\x03MAX\xaa\x02\x13Metalstack.Admin.V2\xca\x02\x13Metalstack\\Admin\\V2\xe2\x02\x1fMetalstack\\Admin\\V2\\GPBMetadata\xea\x02\x15Metalstack::Admin::V2b\x06proto3')
_globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -37,7 +37,7 @@
_globals['DESCRIPTOR']._loaded_options = None
_globals['DESCRIPTOR']._serialized_options = b'\n\027com.metalstack.admin.v2B\tSizeProtoP\001Z9github.com/metal-stack/api/go/metalstack/admin/v2;adminv2\242\002\003MAX\252\002\023Metalstack.Admin.V2\312\002\023Metalstack\\Admin\\V2\342\002\037Metalstack\\Admin\\V2\\GPBMetadata\352\002\025Metalstack::Admin::V2'
_globals['_SIZESERVICEUPDATEREQUEST'].fields_by_name['id']._loaded_options = None
- _globals['_SIZESERVICEUPDATEREQUEST'].fields_by_name['id']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_SIZESERVICEUPDATEREQUEST'].fields_by_name['id']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_SIZESERVICEUPDATEREQUEST'].fields_by_name['update_meta']._loaded_options = None
_globals['_SIZESERVICEUPDATEREQUEST'].fields_by_name['update_meta']._serialized_options = b'\272H\003\310\001\001'
_globals['_SIZESERVICEUPDATEREQUEST'].fields_by_name['name']._loaded_options = None
@@ -45,7 +45,7 @@
_globals['_SIZESERVICEUPDATEREQUEST'].fields_by_name['description']._loaded_options = None
_globals['_SIZESERVICEUPDATEREQUEST'].fields_by_name['description']._serialized_options = b'\272H\010r\006\310\263\256\261\002\001'
_globals['_SIZESERVICEDELETEREQUEST'].fields_by_name['id']._loaded_options = None
- _globals['_SIZESERVICEDELETEREQUEST'].fields_by_name['id']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_SIZESERVICEDELETEREQUEST'].fields_by_name['id']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_SIZESERVICE'].methods_by_name['Create']._loaded_options = None
_globals['_SIZESERVICE'].methods_by_name['Create']._serialized_options = b'\322\363\030\001\001'
_globals['_SIZESERVICE'].methods_by_name['Update']._loaded_options = None
@@ -57,13 +57,13 @@
_globals['_SIZESERVICECREATERESPONSE']._serialized_start=261
_globals['_SIZESERVICECREATERESPONSE']._serialized_end=333
_globals['_SIZESERVICEUPDATEREQUEST']._serialized_start=336
- _globals['_SIZESERVICEUPDATEREQUEST']._serialized_end=719
- _globals['_SIZESERVICEUPDATERESPONSE']._serialized_start=721
- _globals['_SIZESERVICEUPDATERESPONSE']._serialized_end=793
- _globals['_SIZESERVICEDELETEREQUEST']._serialized_start=795
- _globals['_SIZESERVICEDELETEREQUEST']._serialized_end=849
- _globals['_SIZESERVICEDELETERESPONSE']._serialized_start=851
- _globals['_SIZESERVICEDELETERESPONSE']._serialized_end=923
- _globals['_SIZESERVICE']._serialized_start=926
- _globals['_SIZESERVICE']._serialized_end=1275
+ _globals['_SIZESERVICEUPDATEREQUEST']._serialized_end=720
+ _globals['_SIZESERVICEUPDATERESPONSE']._serialized_start=722
+ _globals['_SIZESERVICEUPDATERESPONSE']._serialized_end=794
+ _globals['_SIZESERVICEDELETEREQUEST']._serialized_start=796
+ _globals['_SIZESERVICEDELETEREQUEST']._serialized_end=851
+ _globals['_SIZESERVICEDELETERESPONSE']._serialized_start=853
+ _globals['_SIZESERVICEDELETERESPONSE']._serialized_end=925
+ _globals['_SIZESERVICE']._serialized_start=928
+ _globals['_SIZESERVICE']._serialized_end=1277
# @@protoc_insertion_point(module_scope)
diff --git a/python/metalstack/admin/v2/size_reservation_connect.py b/python/metalstack/admin/v2/size_reservation_connect.py
new file mode 100644
index 00000000..e4c22017
--- /dev/null
+++ b/python/metalstack/admin/v2/size_reservation_connect.py
@@ -0,0 +1,315 @@
+# -*- coding: utf-8 -*-
+# Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT!
+# source: metalstack/admin/v2/size_reservation.proto
+
+from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping
+from typing import Protocol
+
+from connectrpc.client import ConnectClient, ConnectClientSync
+from connectrpc.code import Code
+from connectrpc.errors import ConnectError
+from connectrpc.interceptor import Interceptor, InterceptorSync
+from connectrpc.method import IdempotencyLevel, MethodInfo
+from connectrpc.request import Headers, RequestContext
+from connectrpc.server import ConnectASGIApplication, ConnectWSGIApplication, Endpoint, EndpointSync
+import metalstack.admin.v2.size_reservation_pb2 as metalstack_dot_admin_dot_v2_dot_size__reservation__pb2
+
+
+class SizeReservationService(Protocol):
+ async def create(self, request: metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceCreateRequest, ctx: RequestContext) -> metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceCreateResponse:
+ raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
+
+ async def update(self, request: metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceUpdateRequest, ctx: RequestContext) -> metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceUpdateResponse:
+ raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
+
+ async def delete(self, request: metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceDeleteRequest, ctx: RequestContext) -> metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceDeleteResponse:
+ raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
+
+ async def list(self, request: metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceListRequest, ctx: RequestContext) -> metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceListResponse:
+ raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
+
+
+class SizeReservationServiceASGIApplication(ConnectASGIApplication[SizeReservationService]):
+ def __init__(self, service: SizeReservationService | AsyncGenerator[SizeReservationService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None:
+ super().__init__(
+ service=service,
+ endpoints=lambda svc: {
+ "/metalstack.admin.v2.SizeReservationService/Create": Endpoint.unary(
+ method=MethodInfo(
+ name="Create",
+ service_name="metalstack.admin.v2.SizeReservationService",
+ input=metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceCreateRequest,
+ output=metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceCreateResponse,
+ idempotency_level=IdempotencyLevel.UNKNOWN,
+ ),
+ function=svc.create,
+ ),
+ "/metalstack.admin.v2.SizeReservationService/Update": Endpoint.unary(
+ method=MethodInfo(
+ name="Update",
+ service_name="metalstack.admin.v2.SizeReservationService",
+ input=metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceUpdateRequest,
+ output=metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceUpdateResponse,
+ idempotency_level=IdempotencyLevel.UNKNOWN,
+ ),
+ function=svc.update,
+ ),
+ "/metalstack.admin.v2.SizeReservationService/Delete": Endpoint.unary(
+ method=MethodInfo(
+ name="Delete",
+ service_name="metalstack.admin.v2.SizeReservationService",
+ input=metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceDeleteRequest,
+ output=metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceDeleteResponse,
+ idempotency_level=IdempotencyLevel.UNKNOWN,
+ ),
+ function=svc.delete,
+ ),
+ "/metalstack.admin.v2.SizeReservationService/List": Endpoint.unary(
+ method=MethodInfo(
+ name="List",
+ service_name="metalstack.admin.v2.SizeReservationService",
+ input=metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceListRequest,
+ output=metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceListResponse,
+ idempotency_level=IdempotencyLevel.UNKNOWN,
+ ),
+ function=svc.list,
+ ),
+ },
+ interceptors=interceptors,
+ read_max_bytes=read_max_bytes,
+ )
+
+ @property
+ def path(self) -> str:
+ """Returns the URL path to mount the application to when serving multiple applications."""
+ return "/metalstack.admin.v2.SizeReservationService"
+
+
+class SizeReservationServiceClient(ConnectClient):
+ async def create(
+ self,
+ request: metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceCreateRequest,
+ *,
+ headers: Headers | Mapping[str, str] | None = None,
+ timeout_ms: int | None = None,
+ ) -> metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceCreateResponse:
+ return await self.execute_unary(
+ request=request,
+ method=MethodInfo(
+ name="Create",
+ service_name="metalstack.admin.v2.SizeReservationService",
+ input=metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceCreateRequest,
+ output=metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceCreateResponse,
+ idempotency_level=IdempotencyLevel.UNKNOWN,
+ ),
+ headers=headers,
+ timeout_ms=timeout_ms,
+ )
+
+ async def update(
+ self,
+ request: metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceUpdateRequest,
+ *,
+ headers: Headers | Mapping[str, str] | None = None,
+ timeout_ms: int | None = None,
+ ) -> metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceUpdateResponse:
+ return await self.execute_unary(
+ request=request,
+ method=MethodInfo(
+ name="Update",
+ service_name="metalstack.admin.v2.SizeReservationService",
+ input=metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceUpdateRequest,
+ output=metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceUpdateResponse,
+ idempotency_level=IdempotencyLevel.UNKNOWN,
+ ),
+ headers=headers,
+ timeout_ms=timeout_ms,
+ )
+
+ async def delete(
+ self,
+ request: metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceDeleteRequest,
+ *,
+ headers: Headers | Mapping[str, str] | None = None,
+ timeout_ms: int | None = None,
+ ) -> metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceDeleteResponse:
+ return await self.execute_unary(
+ request=request,
+ method=MethodInfo(
+ name="Delete",
+ service_name="metalstack.admin.v2.SizeReservationService",
+ input=metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceDeleteRequest,
+ output=metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceDeleteResponse,
+ idempotency_level=IdempotencyLevel.UNKNOWN,
+ ),
+ headers=headers,
+ timeout_ms=timeout_ms,
+ )
+
+ async def list(
+ self,
+ request: metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceListRequest,
+ *,
+ headers: Headers | Mapping[str, str] | None = None,
+ timeout_ms: int | None = None,
+ ) -> metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceListResponse:
+ return await self.execute_unary(
+ request=request,
+ method=MethodInfo(
+ name="List",
+ service_name="metalstack.admin.v2.SizeReservationService",
+ input=metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceListRequest,
+ output=metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceListResponse,
+ idempotency_level=IdempotencyLevel.UNKNOWN,
+ ),
+ headers=headers,
+ timeout_ms=timeout_ms,
+ )
+
+
+class SizeReservationServiceSync(Protocol):
+ def create(self, request: metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceCreateRequest, ctx: RequestContext) -> metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceCreateResponse:
+ raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
+ def update(self, request: metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceUpdateRequest, ctx: RequestContext) -> metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceUpdateResponse:
+ raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
+ def delete(self, request: metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceDeleteRequest, ctx: RequestContext) -> metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceDeleteResponse:
+ raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
+ def list(self, request: metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceListRequest, ctx: RequestContext) -> metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceListResponse:
+ raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
+
+
+class SizeReservationServiceWSGIApplication(ConnectWSGIApplication):
+ def __init__(self, service: SizeReservationServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None) -> None:
+ super().__init__(
+ endpoints={
+ "/metalstack.admin.v2.SizeReservationService/Create": EndpointSync.unary(
+ method=MethodInfo(
+ name="Create",
+ service_name="metalstack.admin.v2.SizeReservationService",
+ input=metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceCreateRequest,
+ output=metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceCreateResponse,
+ idempotency_level=IdempotencyLevel.UNKNOWN,
+ ),
+ function=service.create,
+ ),
+ "/metalstack.admin.v2.SizeReservationService/Update": EndpointSync.unary(
+ method=MethodInfo(
+ name="Update",
+ service_name="metalstack.admin.v2.SizeReservationService",
+ input=metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceUpdateRequest,
+ output=metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceUpdateResponse,
+ idempotency_level=IdempotencyLevel.UNKNOWN,
+ ),
+ function=service.update,
+ ),
+ "/metalstack.admin.v2.SizeReservationService/Delete": EndpointSync.unary(
+ method=MethodInfo(
+ name="Delete",
+ service_name="metalstack.admin.v2.SizeReservationService",
+ input=metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceDeleteRequest,
+ output=metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceDeleteResponse,
+ idempotency_level=IdempotencyLevel.UNKNOWN,
+ ),
+ function=service.delete,
+ ),
+ "/metalstack.admin.v2.SizeReservationService/List": EndpointSync.unary(
+ method=MethodInfo(
+ name="List",
+ service_name="metalstack.admin.v2.SizeReservationService",
+ input=metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceListRequest,
+ output=metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceListResponse,
+ idempotency_level=IdempotencyLevel.UNKNOWN,
+ ),
+ function=service.list,
+ ),
+ },
+ interceptors=interceptors,
+ read_max_bytes=read_max_bytes,
+ )
+
+ @property
+ def path(self) -> str:
+ """Returns the URL path to mount the application to when serving multiple applications."""
+ return "/metalstack.admin.v2.SizeReservationService"
+
+
+class SizeReservationServiceClientSync(ConnectClientSync):
+ def create(
+ self,
+ request: metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceCreateRequest,
+ *,
+ headers: Headers | Mapping[str, str] | None = None,
+ timeout_ms: int | None = None,
+ ) -> metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceCreateResponse:
+ return self.execute_unary(
+ request=request,
+ method=MethodInfo(
+ name="Create",
+ service_name="metalstack.admin.v2.SizeReservationService",
+ input=metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceCreateRequest,
+ output=metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceCreateResponse,
+ idempotency_level=IdempotencyLevel.UNKNOWN,
+ ),
+ headers=headers,
+ timeout_ms=timeout_ms,
+ )
+
+ def update(
+ self,
+ request: metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceUpdateRequest,
+ *,
+ headers: Headers | Mapping[str, str] | None = None,
+ timeout_ms: int | None = None,
+ ) -> metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceUpdateResponse:
+ return self.execute_unary(
+ request=request,
+ method=MethodInfo(
+ name="Update",
+ service_name="metalstack.admin.v2.SizeReservationService",
+ input=metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceUpdateRequest,
+ output=metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceUpdateResponse,
+ idempotency_level=IdempotencyLevel.UNKNOWN,
+ ),
+ headers=headers,
+ timeout_ms=timeout_ms,
+ )
+
+ def delete(
+ self,
+ request: metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceDeleteRequest,
+ *,
+ headers: Headers | Mapping[str, str] | None = None,
+ timeout_ms: int | None = None,
+ ) -> metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceDeleteResponse:
+ return self.execute_unary(
+ request=request,
+ method=MethodInfo(
+ name="Delete",
+ service_name="metalstack.admin.v2.SizeReservationService",
+ input=metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceDeleteRequest,
+ output=metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceDeleteResponse,
+ idempotency_level=IdempotencyLevel.UNKNOWN,
+ ),
+ headers=headers,
+ timeout_ms=timeout_ms,
+ )
+
+ def list(
+ self,
+ request: metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceListRequest,
+ *,
+ headers: Headers | Mapping[str, str] | None = None,
+ timeout_ms: int | None = None,
+ ) -> metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceListResponse:
+ return self.execute_unary(
+ request=request,
+ method=MethodInfo(
+ name="List",
+ service_name="metalstack.admin.v2.SizeReservationService",
+ input=metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceListRequest,
+ output=metalstack_dot_admin_dot_v2_dot_size__reservation__pb2.SizeReservationServiceListResponse,
+ idempotency_level=IdempotencyLevel.UNKNOWN,
+ ),
+ headers=headers,
+ timeout_ms=timeout_ms,
+ )
diff --git a/python/metalstack/admin/v2/size_reservation_pb2.py b/python/metalstack/admin/v2/size_reservation_pb2.py
new file mode 100644
index 00000000..ad31ec40
--- /dev/null
+++ b/python/metalstack/admin/v2/size_reservation_pb2.py
@@ -0,0 +1,79 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# NO CHECKED-IN PROTOBUF GENCODE
+# source: metalstack/admin/v2/size_reservation.proto
+# Protobuf Python Version: 6.33.5
+"""Generated protocol buffer code."""
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import runtime_version as _runtime_version
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf.internal import builder as _builder
+_runtime_version.ValidateProtobufRuntimeVersion(
+ _runtime_version.Domain.PUBLIC,
+ 6,
+ 33,
+ 5,
+ '',
+ 'metalstack/admin/v2/size_reservation.proto'
+)
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2
+from metalstack.api.v2 import common_pb2 as metalstack_dot_api_dot_v2_dot_common__pb2
+from metalstack.api.v2 import predefined_rules_pb2 as metalstack_dot_api_dot_v2_dot_predefined__rules__pb2
+from metalstack.api.v2 import size_reservation_pb2 as metalstack_dot_api_dot_v2_dot_size__reservation__pb2
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n*metalstack/admin/v2/size_reservation.proto\x12\x13metalstack.admin.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a(metalstack/api/v2/predefined_rules.proto\x1a(metalstack/api/v2/size_reservation.proto\"t\n#SizeReservationServiceCreateRequest\x12M\n\x10size_reservation\x18\x01 \x01(\x0b\x32\".metalstack.api.v2.SizeReservationR\x0fsizeReservation\"u\n$SizeReservationServiceCreateResponse\x12M\n\x10size_reservation\x18\x01 \x01(\x0b\x32\".metalstack.api.v2.SizeReservationR\x0fsizeReservation\"\xa8\x03\n#SizeReservationServiceUpdateRequest\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x12\x32\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x01R\x0b\x64\x65scription\x88\x01\x01\x12\x46\n\x0bupdate_meta\x18\x04 \x01(\x0b\x32\x1d.metalstack.api.v2.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\x12\x32\n\npartitions\x18\x05 \x03(\tB\x12\xbaH\x0f\x92\x01\x0c\x18\x01\"\x08r\x06\xd0\xb3\xae\xb1\x02\x01R\npartitions\x12$\n\x06\x61mount\x18\x06 \x01(\x05\x42\x07\xbaH\x04\x1a\x02 \x00H\x02R\x06\x61mount\x88\x01\x01\x12<\n\x06labels\x18\x07 \x01(\x0b\x32\x1f.metalstack.api.v2.UpdateLabelsH\x03R\x06labels\x88\x01\x01\x42\x07\n\x05_nameB\x0e\n\x0c_descriptionB\t\n\x07_amountB\t\n\x07_labels\"u\n$SizeReservationServiceUpdateResponse\x12M\n\x10size_reservation\x18\x01 \x01(\x0b\x32\".metalstack.api.v2.SizeReservationR\x0fsizeReservation\"?\n#SizeReservationServiceDeleteRequest\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\"u\n$SizeReservationServiceDeleteResponse\x12M\n\x10size_reservation\x18\x01 \x01(\x0b\x32\".metalstack.api.v2.SizeReservationR\x0fsizeReservation\"b\n!SizeReservationServiceListRequest\x12=\n\x05query\x18\x01 \x01(\x0b\x32\'.metalstack.api.v2.SizeReservationQueryR\x05query\"u\n\"SizeReservationServiceListResponse\x12O\n\x11size_reservations\x18\x01 \x03(\x0b\x32\".metalstack.api.v2.SizeReservationR\x10sizeReservations2\xbf\x04\n\x16SizeReservationService\x12\x88\x01\n\x06\x43reate\x12\x38.metalstack.admin.v2.SizeReservationServiceCreateRequest\x1a\x39.metalstack.admin.v2.SizeReservationServiceCreateResponse\"\t\xd2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12\x88\x01\n\x06Update\x12\x38.metalstack.admin.v2.SizeReservationServiceUpdateRequest\x1a\x39.metalstack.admin.v2.SizeReservationServiceUpdateResponse\"\t\xd2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12\x88\x01\n\x06\x44\x65lete\x12\x38.metalstack.admin.v2.SizeReservationServiceDeleteRequest\x1a\x39.metalstack.admin.v2.SizeReservationServiceDeleteResponse\"\t\xd2\xf3\x18\x01\x01\xe0\xf3\x18\x01\x12\x83\x01\n\x04List\x12\x36.metalstack.admin.v2.SizeReservationServiceListRequest\x1a\x37.metalstack.admin.v2.SizeReservationServiceListResponse\"\n\xd2\xf3\x18\x02\x01\x02\xe0\xf3\x18\x02\x42\xd8\x01\n\x17\x63om.metalstack.admin.v2B\x14SizeReservationProtoP\x01Z9github.com/metal-stack/api/go/metalstack/admin/v2;adminv2\xa2\x02\x03MAX\xaa\x02\x13Metalstack.Admin.V2\xca\x02\x13Metalstack\\Admin\\V2\xe2\x02\x1fMetalstack\\Admin\\V2\\GPBMetadata\xea\x02\x15Metalstack::Admin::V2b\x06proto3')
+
+_globals = globals()
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'metalstack.admin.v2.size_reservation_pb2', _globals)
+if not _descriptor._USE_C_DESCRIPTORS:
+ _globals['DESCRIPTOR']._loaded_options = None
+ _globals['DESCRIPTOR']._serialized_options = b'\n\027com.metalstack.admin.v2B\024SizeReservationProtoP\001Z9github.com/metal-stack/api/go/metalstack/admin/v2;adminv2\242\002\003MAX\252\002\023Metalstack.Admin.V2\312\002\023Metalstack\\Admin\\V2\342\002\037Metalstack\\Admin\\V2\\GPBMetadata\352\002\025Metalstack::Admin::V2'
+ _globals['_SIZERESERVATIONSERVICEUPDATEREQUEST'].fields_by_name['id']._loaded_options = None
+ _globals['_SIZERESERVATIONSERVICEUPDATEREQUEST'].fields_by_name['id']._serialized_options = b'\272H\005r\003\260\001\001'
+ _globals['_SIZERESERVATIONSERVICEUPDATEREQUEST'].fields_by_name['name']._loaded_options = None
+ _globals['_SIZERESERVATIONSERVICEUPDATEREQUEST'].fields_by_name['name']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
+ _globals['_SIZERESERVATIONSERVICEUPDATEREQUEST'].fields_by_name['description']._loaded_options = None
+ _globals['_SIZERESERVATIONSERVICEUPDATEREQUEST'].fields_by_name['description']._serialized_options = b'\272H\010r\006\310\263\256\261\002\001'
+ _globals['_SIZERESERVATIONSERVICEUPDATEREQUEST'].fields_by_name['update_meta']._loaded_options = None
+ _globals['_SIZERESERVATIONSERVICEUPDATEREQUEST'].fields_by_name['update_meta']._serialized_options = b'\272H\003\310\001\001'
+ _globals['_SIZERESERVATIONSERVICEUPDATEREQUEST'].fields_by_name['partitions']._loaded_options = None
+ _globals['_SIZERESERVATIONSERVICEUPDATEREQUEST'].fields_by_name['partitions']._serialized_options = b'\272H\017\222\001\014\030\001\"\010r\006\320\263\256\261\002\001'
+ _globals['_SIZERESERVATIONSERVICEUPDATEREQUEST'].fields_by_name['amount']._loaded_options = None
+ _globals['_SIZERESERVATIONSERVICEUPDATEREQUEST'].fields_by_name['amount']._serialized_options = b'\272H\004\032\002 \000'
+ _globals['_SIZERESERVATIONSERVICEDELETEREQUEST'].fields_by_name['id']._loaded_options = None
+ _globals['_SIZERESERVATIONSERVICEDELETEREQUEST'].fields_by_name['id']._serialized_options = b'\272H\005r\003\260\001\001'
+ _globals['_SIZERESERVATIONSERVICE'].methods_by_name['Create']._loaded_options = None
+ _globals['_SIZERESERVATIONSERVICE'].methods_by_name['Create']._serialized_options = b'\322\363\030\001\001\340\363\030\001'
+ _globals['_SIZERESERVATIONSERVICE'].methods_by_name['Update']._loaded_options = None
+ _globals['_SIZERESERVATIONSERVICE'].methods_by_name['Update']._serialized_options = b'\322\363\030\001\001\340\363\030\001'
+ _globals['_SIZERESERVATIONSERVICE'].methods_by_name['Delete']._loaded_options = None
+ _globals['_SIZERESERVATIONSERVICE'].methods_by_name['Delete']._serialized_options = b'\322\363\030\001\001\340\363\030\001'
+ _globals['_SIZERESERVATIONSERVICE'].methods_by_name['List']._loaded_options = None
+ _globals['_SIZERESERVATIONSERVICE'].methods_by_name['List']._serialized_options = b'\322\363\030\002\001\002\340\363\030\002'
+ _globals['_SIZERESERVATIONSERVICECREATEREQUEST']._serialized_start=212
+ _globals['_SIZERESERVATIONSERVICECREATEREQUEST']._serialized_end=328
+ _globals['_SIZERESERVATIONSERVICECREATERESPONSE']._serialized_start=330
+ _globals['_SIZERESERVATIONSERVICECREATERESPONSE']._serialized_end=447
+ _globals['_SIZERESERVATIONSERVICEUPDATEREQUEST']._serialized_start=450
+ _globals['_SIZERESERVATIONSERVICEUPDATEREQUEST']._serialized_end=874
+ _globals['_SIZERESERVATIONSERVICEUPDATERESPONSE']._serialized_start=876
+ _globals['_SIZERESERVATIONSERVICEUPDATERESPONSE']._serialized_end=993
+ _globals['_SIZERESERVATIONSERVICEDELETEREQUEST']._serialized_start=995
+ _globals['_SIZERESERVATIONSERVICEDELETEREQUEST']._serialized_end=1058
+ _globals['_SIZERESERVATIONSERVICEDELETERESPONSE']._serialized_start=1060
+ _globals['_SIZERESERVATIONSERVICEDELETERESPONSE']._serialized_end=1177
+ _globals['_SIZERESERVATIONSERVICELISTREQUEST']._serialized_start=1179
+ _globals['_SIZERESERVATIONSERVICELISTREQUEST']._serialized_end=1277
+ _globals['_SIZERESERVATIONSERVICELISTRESPONSE']._serialized_start=1279
+ _globals['_SIZERESERVATIONSERVICELISTRESPONSE']._serialized_end=1396
+ _globals['_SIZERESERVATIONSERVICE']._serialized_start=1399
+ _globals['_SIZERESERVATIONSERVICE']._serialized_end=1974
+# @@protoc_insertion_point(module_scope)
diff --git a/python/metalstack/admin/v2/size_reservation_pb2.pyi b/python/metalstack/admin/v2/size_reservation_pb2.pyi
new file mode 100644
index 00000000..0bc8ad94
--- /dev/null
+++ b/python/metalstack/admin/v2/size_reservation_pb2.pyi
@@ -0,0 +1,71 @@
+from buf.validate import validate_pb2 as _validate_pb2
+from metalstack.api.v2 import common_pb2 as _common_pb2
+from metalstack.api.v2 import predefined_rules_pb2 as _predefined_rules_pb2
+from metalstack.api.v2 import size_reservation_pb2 as _size_reservation_pb2
+from google.protobuf.internal import containers as _containers
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from collections.abc import Iterable as _Iterable, Mapping as _Mapping
+from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union
+
+DESCRIPTOR: _descriptor.FileDescriptor
+
+class SizeReservationServiceCreateRequest(_message.Message):
+ __slots__ = ("size_reservation",)
+ SIZE_RESERVATION_FIELD_NUMBER: _ClassVar[int]
+ size_reservation: _size_reservation_pb2.SizeReservation
+ def __init__(self, size_reservation: _Optional[_Union[_size_reservation_pb2.SizeReservation, _Mapping]] = ...) -> None: ...
+
+class SizeReservationServiceCreateResponse(_message.Message):
+ __slots__ = ("size_reservation",)
+ SIZE_RESERVATION_FIELD_NUMBER: _ClassVar[int]
+ size_reservation: _size_reservation_pb2.SizeReservation
+ def __init__(self, size_reservation: _Optional[_Union[_size_reservation_pb2.SizeReservation, _Mapping]] = ...) -> None: ...
+
+class SizeReservationServiceUpdateRequest(_message.Message):
+ __slots__ = ("id", "name", "description", "update_meta", "partitions", "amount", "labels")
+ ID_FIELD_NUMBER: _ClassVar[int]
+ NAME_FIELD_NUMBER: _ClassVar[int]
+ DESCRIPTION_FIELD_NUMBER: _ClassVar[int]
+ UPDATE_META_FIELD_NUMBER: _ClassVar[int]
+ PARTITIONS_FIELD_NUMBER: _ClassVar[int]
+ AMOUNT_FIELD_NUMBER: _ClassVar[int]
+ LABELS_FIELD_NUMBER: _ClassVar[int]
+ id: str
+ name: str
+ description: str
+ update_meta: _common_pb2.UpdateMeta
+ partitions: _containers.RepeatedScalarFieldContainer[str]
+ amount: int
+ labels: _common_pb2.UpdateLabels
+ def __init__(self, id: _Optional[str] = ..., name: _Optional[str] = ..., description: _Optional[str] = ..., update_meta: _Optional[_Union[_common_pb2.UpdateMeta, _Mapping]] = ..., partitions: _Optional[_Iterable[str]] = ..., amount: _Optional[int] = ..., labels: _Optional[_Union[_common_pb2.UpdateLabels, _Mapping]] = ...) -> None: ...
+
+class SizeReservationServiceUpdateResponse(_message.Message):
+ __slots__ = ("size_reservation",)
+ SIZE_RESERVATION_FIELD_NUMBER: _ClassVar[int]
+ size_reservation: _size_reservation_pb2.SizeReservation
+ def __init__(self, size_reservation: _Optional[_Union[_size_reservation_pb2.SizeReservation, _Mapping]] = ...) -> None: ...
+
+class SizeReservationServiceDeleteRequest(_message.Message):
+ __slots__ = ("id",)
+ ID_FIELD_NUMBER: _ClassVar[int]
+ id: str
+ def __init__(self, id: _Optional[str] = ...) -> None: ...
+
+class SizeReservationServiceDeleteResponse(_message.Message):
+ __slots__ = ("size_reservation",)
+ SIZE_RESERVATION_FIELD_NUMBER: _ClassVar[int]
+ size_reservation: _size_reservation_pb2.SizeReservation
+ def __init__(self, size_reservation: _Optional[_Union[_size_reservation_pb2.SizeReservation, _Mapping]] = ...) -> None: ...
+
+class SizeReservationServiceListRequest(_message.Message):
+ __slots__ = ("query",)
+ QUERY_FIELD_NUMBER: _ClassVar[int]
+ query: _size_reservation_pb2.SizeReservationQuery
+ def __init__(self, query: _Optional[_Union[_size_reservation_pb2.SizeReservationQuery, _Mapping]] = ...) -> None: ...
+
+class SizeReservationServiceListResponse(_message.Message):
+ __slots__ = ("size_reservations",)
+ SIZE_RESERVATIONS_FIELD_NUMBER: _ClassVar[int]
+ size_reservations: _containers.RepeatedCompositeFieldContainer[_size_reservation_pb2.SizeReservation]
+ def __init__(self, size_reservations: _Optional[_Iterable[_Union[_size_reservation_pb2.SizeReservation, _Mapping]]] = ...) -> None: ...
diff --git a/python/metalstack/api/v2/filesystem_pb2.py b/python/metalstack/api/v2/filesystem_pb2.py
index c6a69b3a..de0b3a10 100644
--- a/python/metalstack/api/v2/filesystem_pb2.py
+++ b/python/metalstack/api/v2/filesystem_pb2.py
@@ -27,7 +27,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\"metalstack/api/v2/filesystem.proto\x12\x11metalstack.api.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a(metalstack/api/v2/predefined_rules.proto\"9\n\x1b\x46ilesystemServiceGetRequest\x12\x1a\n\x02id\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01R\x02id\"F\n\x1c\x46ilesystemServiceListRequest\x12\x1f\n\x02id\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01H\x00R\x02id\x88\x01\x01\x42\x05\n\x03_id\"p\n\x1c\x46ilesystemServiceGetResponse\x12P\n\x11\x66ilesystem_layout\x18\x01 \x01(\x0b\x32#.metalstack.api.v2.FilesystemLayoutR\x10\x66ilesystemLayout\"s\n\x1d\x46ilesystemServiceListResponse\x12R\n\x12\x66ilesystem_layouts\x18\x01 \x03(\x0b\x32#.metalstack.api.v2.FilesystemLayoutR\x11\x66ilesystemLayouts\"\xdb\x01\n\x1d\x46ilesystemServiceMatchRequest\x12L\n\x0esize_and_image\x18\x01 \x01(\x0b\x32$.metalstack.api.v2.MatchImageAndSizeH\x00R\x0csizeAndImage\x12\x63\n\x1cmachine_and_filesystemlayout\x18\x02 \x01(\x0b\x32\x1f.metalstack.api.v2.MatchMachineH\x00R\x1amachineAndFilesystemlayoutB\x07\n\x05match\"U\n\x11MatchImageAndSize\x12\x1e\n\x04size\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01R\x04size\x12 \n\x05image\x18\x02 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01R\x05image\"k\n\x0cMatchMachine\x12\"\n\x07machine\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07machine\x12\x37\n\x11\x66ilesystem_layout\x18\x02 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01R\x10\x66ilesystemLayout\"r\n\x1e\x46ilesystemServiceMatchResponse\x12P\n\x11\x66ilesystem_layout\x18\x01 \x01(\x0b\x32#.metalstack.api.v2.FilesystemLayoutR\x10\x66ilesystemLayout\"\xcd\x04\n\x10\x46ilesystemLayout\x12\x1a\n\x02id\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01R\x02id\x12+\n\x04meta\x18\x02 \x01(\x0b\x32\x17.metalstack.api.v2.MetaR\x04meta\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\x0b\x66ilesystems\x18\x05 \x03(\x0b\x32\x1d.metalstack.api.v2.FilesystemR\x0b\x66ilesystems\x12-\n\x05\x64isks\x18\x06 \x03(\x0b\x32\x17.metalstack.api.v2.DiskR\x05\x64isks\x12+\n\x04raid\x18\x07 \x03(\x0b\x32\x17.metalstack.api.v2.RaidR\x04raid\x12\x43\n\rvolume_groups\x18\x08 \x03(\x0b\x32\x1e.metalstack.api.v2.VolumeGroupR\x0cvolumeGroups\x12I\n\x0flogical_volumes\x18\t \x03(\x0b\x32 .metalstack.api.v2.LogicalVolumeR\x0elogicalVolumes\x12P\n\x0b\x63onstraints\x18\n \x01(\x0b\x32..metalstack.api.v2.FilesystemLayoutConstraintsR\x0b\x63onstraintsB\x07\n\x05_nameB\x0e\n\x0c_description\"\xc2\x01\n\x1b\x46ilesystemLayoutConstraints\x12\x14\n\x05sizes\x18\x01 \x03(\tR\x05sizes\x12R\n\x06images\x18\x02 \x03(\x0b\x32:.metalstack.api.v2.FilesystemLayoutConstraints.ImagesEntryR\x06images\x1a\x39\n\x0bImagesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xb8\x03\n\nFilesystem\x12\"\n\x06\x64\x65vice\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01R\x06\x64\x65vice\x12>\n\x06\x66ormat\x18\x02 \x01(\x0e\x32\x19.metalstack.api.v2.FormatB\x0b\xbaH\x08\x82\x01\x02\x10\x01\xc8\x01\x01R\x06\x66ormat\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\x04path\x18\x05 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80 H\x02R\x04path\x88\x01\x01\x12%\n\x05label\x18\x06 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01H\x03R\x05label\x88\x01\x01\x12\x38\n\rmount_options\x18\x07 \x03(\tB\x13\xbaH\x10\x92\x01\r\x10 \x18\x01\"\x07r\x05\x10\x01\x18\x80\x01R\x0cmountOptions\x12:\n\x0e\x63reate_options\x18\x08 \x03(\tB\x13\xbaH\x10\x92\x01\r\x10 \x18\x01\"\x07r\x05\x10\x01\x18\x80\x01R\rcreateOptionsB\x07\n\x05_nameB\x0e\n\x0c_descriptionB\x07\n\x05_pathB\x08\n\x06_label\"l\n\x04\x44isk\x12\"\n\x06\x64\x65vice\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01R\x06\x64\x65vice\x12@\n\npartitions\x18\x02 \x03(\x0b\x32 .metalstack.api.v2.DiskPartitionR\npartitions\"\xd4\x01\n\x04Raid\x12\x1d\n\narray_name\x18\x01 \x01(\tR\tarrayName\x12\x18\n\x07\x64\x65vices\x18\x02 \x03(\tR\x07\x64\x65vices\x12?\n\x05level\x18\x03 \x01(\x0e\x32\x1c.metalstack.api.v2.RaidLevelB\x0b\xbaH\x08\x82\x01\x02\x10\x01\xc8\x01\x01R\x05level\x12:\n\x0e\x63reate_options\x18\x04 \x03(\tB\x13\xbaH\x10\x92\x01\r\x10 \x18\x01\"\x07r\x05\x10\x01\x18\x80\x01R\rcreateOptions\x12\x16\n\x06spares\x18\x05 \x01(\x05R\x06spares\"\xb6\x01\n\rDiskPartition\x12\x16\n\x06number\x18\x01 \x01(\rR\x06number\x12\x19\n\x05label\x18\x02 \x01(\tH\x00R\x05label\x88\x01\x01\x12\x12\n\x04size\x18\x03 \x01(\x04R\x04size\x12G\n\x08gpt_type\x18\x04 \x01(\x0e\x32\x1a.metalstack.api.v2.GPTTypeB\x0b\xbaH\x08\x82\x01\x02\x10\x01\xc8\x01\x01H\x01R\x07gptType\x88\x01\x01\x42\x08\n\x06_labelB\x0b\n\t_gpt_type\"\\\n\x0bVolumeGroup\x12\x1f\n\x04name\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12\x18\n\x07\x64\x65vices\x18\x02 \x03(\tR\x07\x64\x65vices\x12\x12\n\x04tags\x18\x03 \x03(\tR\x04tags\"\xb4\x01\n\rLogicalVolume\x12\x1f\n\x04name\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12-\n\x0cvolume_group\x18\x02 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01R\x0bvolumeGroup\x12\x12\n\x04size\x18\x03 \x01(\x04R\x04size\x12?\n\x08lvm_type\x18\x04 \x01(\x0e\x32\x1a.metalstack.api.v2.LVMTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x07lvmType*\x86\x01\n\x07LVMType\x12\x18\n\x14LVM_TYPE_UNSPECIFIED\x10\x00\x12\x1f\n\x0fLVM_TYPE_LINEAR\x10\x01\x1a\n\x82\xb2\x19\x06linear\x12!\n\x10LVM_TYPE_STRIPED\x10\x02\x1a\x0b\x82\xb2\x19\x07striped\x12\x1d\n\x0eLVM_TYPE_RAID1\x10\x03\x1a\t\x82\xb2\x19\x05raid1*\xc4\x01\n\x06\x46ormat\x12\x16\n\x12\x46ORMAT_UNSPECIFIED\x10\x00\x12\x19\n\x0b\x46ORMAT_VFAT\x10\x01\x1a\x08\x82\xb2\x19\x04vfat\x12\x19\n\x0b\x46ORMAT_EXT3\x10\x02\x1a\x08\x82\xb2\x19\x04\x65xt3\x12\x19\n\x0b\x46ORMAT_EXT4\x10\x03\x1a\x08\x82\xb2\x19\x04\x65xt4\x12\x19\n\x0b\x46ORMAT_SWAP\x10\x04\x1a\x08\x82\xb2\x19\x04swap\x12\x1b\n\x0c\x46ORMAT_TMPFS\x10\x05\x1a\t\x82\xb2\x19\x05tmpfs\x12\x19\n\x0b\x46ORMAT_NONE\x10\x06\x1a\x08\x82\xb2\x19\x04none*\xa3\x01\n\x07GPTType\x12\x18\n\x14GPT_TYPE_UNSPECIFIED\x10\x00\x12\x1b\n\rGPT_TYPE_BOOT\x10\x01\x1a\x08\x82\xb2\x19\x04\x65\x66\x30\x30\x12\x1c\n\x0eGPT_TYPE_LINUX\x10\x02\x1a\x08\x82\xb2\x19\x04\x38\x33\x30\x30\x12!\n\x13GPT_TYPE_LINUX_RAID\x10\x03\x1a\x08\x82\xb2\x19\x04\x66\x64\x30\x30\x12 \n\x12GPT_TYPE_LINUX_LVM\x10\x04\x1a\x08\x82\xb2\x19\x04\x38\x65\x30\x30*K\n\tRaidLevel\x12\x1a\n\x16RAID_LEVEL_UNSPECIFIED\x10\x00\x12\x10\n\x0cRAID_LEVEL_0\x10\x01\x12\x10\n\x0cRAID_LEVEL_1\x10\x02\x32\xf2\x02\n\x11\x46ilesystemService\x12p\n\x03Get\x12..metalstack.api.v2.FilesystemServiceGetRequest\x1a/.metalstack.api.v2.FilesystemServiceGetResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x02\x12s\n\x04List\x12/.metalstack.api.v2.FilesystemServiceListRequest\x1a\x30.metalstack.api.v2.FilesystemServiceListResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x02\x12v\n\x05Match\x12\x30.metalstack.api.v2.FilesystemServiceMatchRequest\x1a\x31.metalstack.api.v2.FilesystemServiceMatchResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x02\x42\xc5\x01\n\x15\x63om.metalstack.api.v2B\x0f\x46ilesystemProtoP\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\"metalstack/api/v2/filesystem.proto\x12\x11metalstack.api.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a(metalstack/api/v2/predefined_rules.proto\":\n\x1b\x46ilesystemServiceGetRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\"G\n\x1c\x46ilesystemServiceListRequest\x12 \n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x02id\x88\x01\x01\x42\x05\n\x03_id\"p\n\x1c\x46ilesystemServiceGetResponse\x12P\n\x11\x66ilesystem_layout\x18\x01 \x01(\x0b\x32#.metalstack.api.v2.FilesystemLayoutR\x10\x66ilesystemLayout\"s\n\x1d\x46ilesystemServiceListResponse\x12R\n\x12\x66ilesystem_layouts\x18\x01 \x03(\x0b\x32#.metalstack.api.v2.FilesystemLayoutR\x11\x66ilesystemLayouts\"\xdb\x01\n\x1d\x46ilesystemServiceMatchRequest\x12L\n\x0esize_and_image\x18\x01 \x01(\x0b\x32$.metalstack.api.v2.MatchImageAndSizeH\x00R\x0csizeAndImage\x12\x63\n\x1cmachine_and_filesystemlayout\x18\x02 \x01(\x0b\x32\x1f.metalstack.api.v2.MatchMachineH\x00R\x1amachineAndFilesystemlayoutB\x07\n\x05match\"W\n\x11MatchImageAndSize\x12\x1f\n\x04size\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04size\x12!\n\x05image\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x05image\"l\n\x0cMatchMachine\x12\"\n\x07machine\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07machine\x12\x38\n\x11\x66ilesystem_layout\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x10\x66ilesystemLayout\"r\n\x1e\x46ilesystemServiceMatchResponse\x12P\n\x11\x66ilesystem_layout\x18\x01 \x01(\x0b\x32#.metalstack.api.v2.FilesystemLayoutR\x10\x66ilesystemLayout\"\xce\x04\n\x10\x46ilesystemLayout\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\x12+\n\x04meta\x18\x02 \x01(\x0b\x32\x17.metalstack.api.v2.MetaR\x04meta\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\x0b\x66ilesystems\x18\x05 \x03(\x0b\x32\x1d.metalstack.api.v2.FilesystemR\x0b\x66ilesystems\x12-\n\x05\x64isks\x18\x06 \x03(\x0b\x32\x17.metalstack.api.v2.DiskR\x05\x64isks\x12+\n\x04raid\x18\x07 \x03(\x0b\x32\x17.metalstack.api.v2.RaidR\x04raid\x12\x43\n\rvolume_groups\x18\x08 \x03(\x0b\x32\x1e.metalstack.api.v2.VolumeGroupR\x0cvolumeGroups\x12I\n\x0flogical_volumes\x18\t \x03(\x0b\x32 .metalstack.api.v2.LogicalVolumeR\x0elogicalVolumes\x12P\n\x0b\x63onstraints\x18\n \x01(\x0b\x32..metalstack.api.v2.FilesystemLayoutConstraintsR\x0b\x63onstraintsB\x07\n\x05_nameB\x0e\n\x0c_description\"\xc2\x01\n\x1b\x46ilesystemLayoutConstraints\x12\x14\n\x05sizes\x18\x01 \x03(\tR\x05sizes\x12R\n\x06images\x18\x02 \x03(\x0b\x32:.metalstack.api.v2.FilesystemLayoutConstraints.ImagesEntryR\x06images\x1a\x39\n\x0bImagesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xb9\x03\n\nFilesystem\x12#\n\x06\x64\x65vice\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x06\x64\x65vice\x12>\n\x06\x66ormat\x18\x02 \x01(\x0e\x32\x19.metalstack.api.v2.FormatB\x0b\xbaH\x08\x82\x01\x02\x10\x01\xc8\x01\x01R\x06\x66ormat\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\x04path\x18\x05 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80 H\x02R\x04path\x88\x01\x01\x12%\n\x05label\x18\x06 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01H\x03R\x05label\x88\x01\x01\x12\x38\n\rmount_options\x18\x07 \x03(\tB\x13\xbaH\x10\x92\x01\r\x10 \x18\x01\"\x07r\x05\x10\x01\x18\x80\x01R\x0cmountOptions\x12:\n\x0e\x63reate_options\x18\x08 \x03(\tB\x13\xbaH\x10\x92\x01\r\x10 \x18\x01\"\x07r\x05\x10\x01\x18\x80\x01R\rcreateOptionsB\x07\n\x05_nameB\x0e\n\x0c_descriptionB\x07\n\x05_pathB\x08\n\x06_label\"l\n\x04\x44isk\x12\"\n\x06\x64\x65vice\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01R\x06\x64\x65vice\x12@\n\npartitions\x18\x02 \x03(\x0b\x32 .metalstack.api.v2.DiskPartitionR\npartitions\"\xd4\x01\n\x04Raid\x12\x1d\n\narray_name\x18\x01 \x01(\tR\tarrayName\x12\x18\n\x07\x64\x65vices\x18\x02 \x03(\tR\x07\x64\x65vices\x12?\n\x05level\x18\x03 \x01(\x0e\x32\x1c.metalstack.api.v2.RaidLevelB\x0b\xbaH\x08\x82\x01\x02\x10\x01\xc8\x01\x01R\x05level\x12:\n\x0e\x63reate_options\x18\x04 \x03(\tB\x13\xbaH\x10\x92\x01\r\x10 \x18\x01\"\x07r\x05\x10\x01\x18\x80\x01R\rcreateOptions\x12\x16\n\x06spares\x18\x05 \x01(\x05R\x06spares\"\xb6\x01\n\rDiskPartition\x12\x16\n\x06number\x18\x01 \x01(\rR\x06number\x12\x19\n\x05label\x18\x02 \x01(\tH\x00R\x05label\x88\x01\x01\x12\x12\n\x04size\x18\x03 \x01(\x04R\x04size\x12G\n\x08gpt_type\x18\x04 \x01(\x0e\x32\x1a.metalstack.api.v2.GPTTypeB\x0b\xbaH\x08\x82\x01\x02\x10\x01\xc8\x01\x01H\x01R\x07gptType\x88\x01\x01\x42\x08\n\x06_labelB\x0b\n\t_gpt_type\"\\\n\x0bVolumeGroup\x12\x1f\n\x04name\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12\x18\n\x07\x64\x65vices\x18\x02 \x03(\tR\x07\x64\x65vices\x12\x12\n\x04tags\x18\x03 \x03(\tR\x04tags\"\xb4\x01\n\rLogicalVolume\x12\x1f\n\x04name\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12-\n\x0cvolume_group\x18\x02 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01R\x0bvolumeGroup\x12\x12\n\x04size\x18\x03 \x01(\x04R\x04size\x12?\n\x08lvm_type\x18\x04 \x01(\x0e\x32\x1a.metalstack.api.v2.LVMTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x07lvmType*\x86\x01\n\x07LVMType\x12\x18\n\x14LVM_TYPE_UNSPECIFIED\x10\x00\x12\x1f\n\x0fLVM_TYPE_LINEAR\x10\x01\x1a\n\x82\xb2\x19\x06linear\x12!\n\x10LVM_TYPE_STRIPED\x10\x02\x1a\x0b\x82\xb2\x19\x07striped\x12\x1d\n\x0eLVM_TYPE_RAID1\x10\x03\x1a\t\x82\xb2\x19\x05raid1*\xc4\x01\n\x06\x46ormat\x12\x16\n\x12\x46ORMAT_UNSPECIFIED\x10\x00\x12\x19\n\x0b\x46ORMAT_VFAT\x10\x01\x1a\x08\x82\xb2\x19\x04vfat\x12\x19\n\x0b\x46ORMAT_EXT3\x10\x02\x1a\x08\x82\xb2\x19\x04\x65xt3\x12\x19\n\x0b\x46ORMAT_EXT4\x10\x03\x1a\x08\x82\xb2\x19\x04\x65xt4\x12\x19\n\x0b\x46ORMAT_SWAP\x10\x04\x1a\x08\x82\xb2\x19\x04swap\x12\x1b\n\x0c\x46ORMAT_TMPFS\x10\x05\x1a\t\x82\xb2\x19\x05tmpfs\x12\x19\n\x0b\x46ORMAT_NONE\x10\x06\x1a\x08\x82\xb2\x19\x04none*\xa3\x01\n\x07GPTType\x12\x18\n\x14GPT_TYPE_UNSPECIFIED\x10\x00\x12\x1b\n\rGPT_TYPE_BOOT\x10\x01\x1a\x08\x82\xb2\x19\x04\x65\x66\x30\x30\x12\x1c\n\x0eGPT_TYPE_LINUX\x10\x02\x1a\x08\x82\xb2\x19\x04\x38\x33\x30\x30\x12!\n\x13GPT_TYPE_LINUX_RAID\x10\x03\x1a\x08\x82\xb2\x19\x04\x66\x64\x30\x30\x12 \n\x12GPT_TYPE_LINUX_LVM\x10\x04\x1a\x08\x82\xb2\x19\x04\x38\x65\x30\x30*K\n\tRaidLevel\x12\x1a\n\x16RAID_LEVEL_UNSPECIFIED\x10\x00\x12\x10\n\x0cRAID_LEVEL_0\x10\x01\x12\x10\n\x0cRAID_LEVEL_1\x10\x02\x32\xf2\x02\n\x11\x46ilesystemService\x12p\n\x03Get\x12..metalstack.api.v2.FilesystemServiceGetRequest\x1a/.metalstack.api.v2.FilesystemServiceGetResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x02\x12s\n\x04List\x12/.metalstack.api.v2.FilesystemServiceListRequest\x1a\x30.metalstack.api.v2.FilesystemServiceListResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x02\x12v\n\x05Match\x12\x30.metalstack.api.v2.FilesystemServiceMatchRequest\x1a\x31.metalstack.api.v2.FilesystemServiceMatchResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x02\x42\xc5\x01\n\x15\x63om.metalstack.api.v2B\x0f\x46ilesystemProtoP\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)
@@ -62,19 +62,19 @@
_globals['_GPTTYPE'].values_by_name["GPT_TYPE_LINUX_LVM"]._loaded_options = None
_globals['_GPTTYPE'].values_by_name["GPT_TYPE_LINUX_LVM"]._serialized_options = b'\202\262\031\0048e00'
_globals['_FILESYSTEMSERVICEGETREQUEST'].fields_by_name['id']._loaded_options = None
- _globals['_FILESYSTEMSERVICEGETREQUEST'].fields_by_name['id']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_FILESYSTEMSERVICEGETREQUEST'].fields_by_name['id']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_FILESYSTEMSERVICELISTREQUEST'].fields_by_name['id']._loaded_options = None
- _globals['_FILESYSTEMSERVICELISTREQUEST'].fields_by_name['id']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_FILESYSTEMSERVICELISTREQUEST'].fields_by_name['id']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_MATCHIMAGEANDSIZE'].fields_by_name['size']._loaded_options = None
- _globals['_MATCHIMAGEANDSIZE'].fields_by_name['size']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_MATCHIMAGEANDSIZE'].fields_by_name['size']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_MATCHIMAGEANDSIZE'].fields_by_name['image']._loaded_options = None
- _globals['_MATCHIMAGEANDSIZE'].fields_by_name['image']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_MATCHIMAGEANDSIZE'].fields_by_name['image']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_MATCHMACHINE'].fields_by_name['machine']._loaded_options = None
_globals['_MATCHMACHINE'].fields_by_name['machine']._serialized_options = b'\272H\005r\003\260\001\001'
_globals['_MATCHMACHINE'].fields_by_name['filesystem_layout']._loaded_options = None
- _globals['_MATCHMACHINE'].fields_by_name['filesystem_layout']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_MATCHMACHINE'].fields_by_name['filesystem_layout']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_FILESYSTEMLAYOUT'].fields_by_name['id']._loaded_options = None
- _globals['_FILESYSTEMLAYOUT'].fields_by_name['id']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_FILESYSTEMLAYOUT'].fields_by_name['id']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_FILESYSTEMLAYOUT'].fields_by_name['name']._loaded_options = None
_globals['_FILESYSTEMLAYOUT'].fields_by_name['name']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_FILESYSTEMLAYOUT'].fields_by_name['description']._loaded_options = None
@@ -82,7 +82,7 @@
_globals['_FILESYSTEMLAYOUTCONSTRAINTS_IMAGESENTRY']._loaded_options = None
_globals['_FILESYSTEMLAYOUTCONSTRAINTS_IMAGESENTRY']._serialized_options = b'8\001'
_globals['_FILESYSTEM'].fields_by_name['device']._loaded_options = None
- _globals['_FILESYSTEM'].fields_by_name['device']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_FILESYSTEM'].fields_by_name['device']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_FILESYSTEM'].fields_by_name['format']._loaded_options = None
_globals['_FILESYSTEM'].fields_by_name['format']._serialized_options = b'\272H\010\202\001\002\020\001\310\001\001'
_globals['_FILESYSTEM'].fields_by_name['name']._loaded_options = None
@@ -119,48 +119,48 @@
_globals['_FILESYSTEMSERVICE'].methods_by_name['List']._serialized_options = b'\330\363\030\003\340\363\030\002'
_globals['_FILESYSTEMSERVICE'].methods_by_name['Match']._loaded_options = None
_globals['_FILESYSTEMSERVICE'].methods_by_name['Match']._serialized_options = b'\330\363\030\003\340\363\030\002'
- _globals['_LVMTYPE']._serialized_start=3076
- _globals['_LVMTYPE']._serialized_end=3210
- _globals['_FORMAT']._serialized_start=3213
- _globals['_FORMAT']._serialized_end=3409
- _globals['_GPTTYPE']._serialized_start=3412
- _globals['_GPTTYPE']._serialized_end=3575
- _globals['_RAIDLEVEL']._serialized_start=3577
- _globals['_RAIDLEVEL']._serialized_end=3652
+ _globals['_LVMTYPE']._serialized_start=3083
+ _globals['_LVMTYPE']._serialized_end=3217
+ _globals['_FORMAT']._serialized_start=3220
+ _globals['_FORMAT']._serialized_end=3416
+ _globals['_GPTTYPE']._serialized_start=3419
+ _globals['_GPTTYPE']._serialized_end=3582
+ _globals['_RAIDLEVEL']._serialized_start=3584
+ _globals['_RAIDLEVEL']._serialized_end=3659
_globals['_FILESYSTEMSERVICEGETREQUEST']._serialized_start=160
- _globals['_FILESYSTEMSERVICEGETREQUEST']._serialized_end=217
- _globals['_FILESYSTEMSERVICELISTREQUEST']._serialized_start=219
- _globals['_FILESYSTEMSERVICELISTREQUEST']._serialized_end=289
- _globals['_FILESYSTEMSERVICEGETRESPONSE']._serialized_start=291
- _globals['_FILESYSTEMSERVICEGETRESPONSE']._serialized_end=403
- _globals['_FILESYSTEMSERVICELISTRESPONSE']._serialized_start=405
- _globals['_FILESYSTEMSERVICELISTRESPONSE']._serialized_end=520
- _globals['_FILESYSTEMSERVICEMATCHREQUEST']._serialized_start=523
- _globals['_FILESYSTEMSERVICEMATCHREQUEST']._serialized_end=742
- _globals['_MATCHIMAGEANDSIZE']._serialized_start=744
- _globals['_MATCHIMAGEANDSIZE']._serialized_end=829
- _globals['_MATCHMACHINE']._serialized_start=831
- _globals['_MATCHMACHINE']._serialized_end=938
- _globals['_FILESYSTEMSERVICEMATCHRESPONSE']._serialized_start=940
- _globals['_FILESYSTEMSERVICEMATCHRESPONSE']._serialized_end=1054
- _globals['_FILESYSTEMLAYOUT']._serialized_start=1057
- _globals['_FILESYSTEMLAYOUT']._serialized_end=1646
- _globals['_FILESYSTEMLAYOUTCONSTRAINTS']._serialized_start=1649
- _globals['_FILESYSTEMLAYOUTCONSTRAINTS']._serialized_end=1843
- _globals['_FILESYSTEMLAYOUTCONSTRAINTS_IMAGESENTRY']._serialized_start=1786
- _globals['_FILESYSTEMLAYOUTCONSTRAINTS_IMAGESENTRY']._serialized_end=1843
- _globals['_FILESYSTEM']._serialized_start=1846
- _globals['_FILESYSTEM']._serialized_end=2286
- _globals['_DISK']._serialized_start=2288
- _globals['_DISK']._serialized_end=2396
- _globals['_RAID']._serialized_start=2399
- _globals['_RAID']._serialized_end=2611
- _globals['_DISKPARTITION']._serialized_start=2614
- _globals['_DISKPARTITION']._serialized_end=2796
- _globals['_VOLUMEGROUP']._serialized_start=2798
- _globals['_VOLUMEGROUP']._serialized_end=2890
- _globals['_LOGICALVOLUME']._serialized_start=2893
- _globals['_LOGICALVOLUME']._serialized_end=3073
- _globals['_FILESYSTEMSERVICE']._serialized_start=3655
- _globals['_FILESYSTEMSERVICE']._serialized_end=4025
+ _globals['_FILESYSTEMSERVICEGETREQUEST']._serialized_end=218
+ _globals['_FILESYSTEMSERVICELISTREQUEST']._serialized_start=220
+ _globals['_FILESYSTEMSERVICELISTREQUEST']._serialized_end=291
+ _globals['_FILESYSTEMSERVICEGETRESPONSE']._serialized_start=293
+ _globals['_FILESYSTEMSERVICEGETRESPONSE']._serialized_end=405
+ _globals['_FILESYSTEMSERVICELISTRESPONSE']._serialized_start=407
+ _globals['_FILESYSTEMSERVICELISTRESPONSE']._serialized_end=522
+ _globals['_FILESYSTEMSERVICEMATCHREQUEST']._serialized_start=525
+ _globals['_FILESYSTEMSERVICEMATCHREQUEST']._serialized_end=744
+ _globals['_MATCHIMAGEANDSIZE']._serialized_start=746
+ _globals['_MATCHIMAGEANDSIZE']._serialized_end=833
+ _globals['_MATCHMACHINE']._serialized_start=835
+ _globals['_MATCHMACHINE']._serialized_end=943
+ _globals['_FILESYSTEMSERVICEMATCHRESPONSE']._serialized_start=945
+ _globals['_FILESYSTEMSERVICEMATCHRESPONSE']._serialized_end=1059
+ _globals['_FILESYSTEMLAYOUT']._serialized_start=1062
+ _globals['_FILESYSTEMLAYOUT']._serialized_end=1652
+ _globals['_FILESYSTEMLAYOUTCONSTRAINTS']._serialized_start=1655
+ _globals['_FILESYSTEMLAYOUTCONSTRAINTS']._serialized_end=1849
+ _globals['_FILESYSTEMLAYOUTCONSTRAINTS_IMAGESENTRY']._serialized_start=1792
+ _globals['_FILESYSTEMLAYOUTCONSTRAINTS_IMAGESENTRY']._serialized_end=1849
+ _globals['_FILESYSTEM']._serialized_start=1852
+ _globals['_FILESYSTEM']._serialized_end=2293
+ _globals['_DISK']._serialized_start=2295
+ _globals['_DISK']._serialized_end=2403
+ _globals['_RAID']._serialized_start=2406
+ _globals['_RAID']._serialized_end=2618
+ _globals['_DISKPARTITION']._serialized_start=2621
+ _globals['_DISKPARTITION']._serialized_end=2803
+ _globals['_VOLUMEGROUP']._serialized_start=2805
+ _globals['_VOLUMEGROUP']._serialized_end=2897
+ _globals['_LOGICALVOLUME']._serialized_start=2900
+ _globals['_LOGICALVOLUME']._serialized_end=3080
+ _globals['_FILESYSTEMSERVICE']._serialized_start=3662
+ _globals['_FILESYSTEMSERVICE']._serialized_end=4032
# @@protoc_insertion_point(module_scope)
diff --git a/python/metalstack/api/v2/image_pb2.py b/python/metalstack/api/v2/image_pb2.py
index 8263981c..211d7701 100644
--- a/python/metalstack/api/v2/image_pb2.py
+++ b/python/metalstack/api/v2/image_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\x1dmetalstack/api/v2/image.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\"4\n\x16ImageServiceGetRequest\x12\x1a\n\x02id\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01R\x02id\"N\n\x17ImageServiceListRequest\x12\x33\n\x05query\x18\x01 \x01(\x0b\x32\x1d.metalstack.api.v2.ImageQueryR\x05query\"+\n\x19ImageServiceLatestRequest\x12\x0e\n\x02os\x18\x01 \x01(\tR\x02os\"I\n\x17ImageServiceGetResponse\x12.\n\x05image\x18\x01 \x01(\x0b\x32\x18.metalstack.api.v2.ImageR\x05image\"L\n\x18ImageServiceListResponse\x12\x30\n\x06images\x18\x01 \x03(\x0b\x32\x18.metalstack.api.v2.ImageR\x06images\"L\n\x1aImageServiceLatestResponse\x12.\n\x05image\x18\x01 \x01(\x0b\x32\x18.metalstack.api.v2.ImageR\x05image\"\xc5\x03\n\x05Image\x12\x1a\n\x02id\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01R\x02id\x12+\n\x04meta\x18\x02 \x01(\x0b\x32\x17.metalstack.api.v2.MetaR\x04meta\x12\x1d\n\x03url\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xe0\xb3\xae\xb1\x02\x01R\x03url\x12$\n\x04name\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x12\x32\n\x0b\x64\x65scription\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x01R\x0b\x64\x65scription\x88\x01\x01\x12L\n\x08\x66\x65\x61tures\x18\x06 \x03(\x0e\x32\x1f.metalstack.api.v2.ImageFeatureB\x0f\xbaH\x0c\x92\x01\t\x18\x01\"\x05\x82\x01\x02\x10\x01R\x08\x66\x65\x61tures\x12X\n\x0e\x63lassification\x18\x07 \x01(\x0e\x32&.metalstack.api.v2.ImageClassificationB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0e\x63lassification\x12\x39\n\nexpires_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAtB\x07\n\x05_nameB\x0e\n\x0c_description\"U\n\nImageUsage\x12.\n\x05image\x18\x01 \x01(\x0b\x32\x18.metalstack.api.v2.ImageR\x05image\x12\x17\n\x07used_by\x18\x02 \x03(\tR\x06usedBy\"\xbd\x04\n\nImageQuery\x12\x1f\n\x02id\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01H\x00R\x02id\x88\x01\x01\x12\x1f\n\x02os\x18\x02 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01H\x01R\x02os\x88\x01\x01\x12)\n\x07version\x18\x03 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80\x01H\x02R\x07version\x88\x01\x01\x12$\n\x04name\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x03R\x04name\x88\x01\x01\x12\x32\n\x0b\x64\x65scription\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x04R\x0b\x64\x65scription\x88\x01\x01\x12\"\n\x03url\x18\x06 \x01(\tB\x0b\xbaH\x08r\x06\xe0\xb3\xae\xb1\x02\x01H\x05R\x03url\x88\x01\x01\x12H\n\x07\x66\x65\x61ture\x18\x07 \x01(\x0e\x32\x1f.metalstack.api.v2.ImageFeatureB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x06R\x07\x66\x65\x61ture\x88\x01\x01\x12]\n\x0e\x63lassification\x18\x08 \x01(\x0e\x32&.metalstack.api.v2.ImageClassificationB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x07R\x0e\x63lassification\x88\x01\x01\x12\x36\n\x06labels\x18\t \x01(\x0b\x32\x19.metalstack.api.v2.LabelsH\x08R\x06labels\x88\x01\x01\x42\x05\n\x03_idB\x05\n\x03_osB\n\n\x08_versionB\x07\n\x05_nameB\x0e\n\x0c_descriptionB\x06\n\x04_urlB\n\n\x08_featureB\x11\n\x0f_classificationB\t\n\x07_labels*\x7f\n\x0cImageFeature\x12\x1d\n\x19IMAGE_FEATURE_UNSPECIFIED\x10\x00\x12&\n\x15IMAGE_FEATURE_MACHINE\x10\x01\x1a\x0b\x82\xb2\x19\x07machine\x12(\n\x16IMAGE_FEATURE_FIREWALL\x10\x02\x1a\x0c\x82\xb2\x19\x08\x66irewall*\xd2\x01\n\x13ImageClassification\x12$\n IMAGE_CLASSIFICATION_UNSPECIFIED\x10\x00\x12-\n\x1cIMAGE_CLASSIFICATION_PREVIEW\x10\x01\x1a\x0b\x82\xb2\x19\x07preview\x12\x31\n\x1eIMAGE_CLASSIFICATION_SUPPORTED\x10\x02\x1a\r\x82\xb2\x19\tsupported\x12\x33\n\x1fIMAGE_CLASSIFICATION_DEPRECATED\x10\x03\x1a\x0e\x82\xb2\x19\ndeprecated2\xd2\x02\n\x0cImageService\x12\x66\n\x03Get\x12).metalstack.api.v2.ImageServiceGetRequest\x1a*.metalstack.api.v2.ImageServiceGetResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x02\x12i\n\x04List\x12*.metalstack.api.v2.ImageServiceListRequest\x1a+.metalstack.api.v2.ImageServiceListResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x02\x12o\n\x06Latest\x12,.metalstack.api.v2.ImageServiceLatestRequest\x1a-.metalstack.api.v2.ImageServiceLatestResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x02\x42\xc0\x01\n\x15\x63om.metalstack.api.v2B\nImageProtoP\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\x1dmetalstack/api/v2/image.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\"5\n\x16ImageServiceGetRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\"N\n\x17ImageServiceListRequest\x12\x33\n\x05query\x18\x01 \x01(\x0b\x32\x1d.metalstack.api.v2.ImageQueryR\x05query\"+\n\x19ImageServiceLatestRequest\x12\x0e\n\x02os\x18\x01 \x01(\tR\x02os\"I\n\x17ImageServiceGetResponse\x12.\n\x05image\x18\x01 \x01(\x0b\x32\x18.metalstack.api.v2.ImageR\x05image\"L\n\x18ImageServiceListResponse\x12\x30\n\x06images\x18\x01 \x03(\x0b\x32\x18.metalstack.api.v2.ImageR\x06images\"L\n\x1aImageServiceLatestResponse\x12.\n\x05image\x18\x01 \x01(\x0b\x32\x18.metalstack.api.v2.ImageR\x05image\"\xc6\x03\n\x05Image\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\x12+\n\x04meta\x18\x02 \x01(\x0b\x32\x17.metalstack.api.v2.MetaR\x04meta\x12\x1d\n\x03url\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xe0\xb3\xae\xb1\x02\x01R\x03url\x12$\n\x04name\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x12\x32\n\x0b\x64\x65scription\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x01R\x0b\x64\x65scription\x88\x01\x01\x12L\n\x08\x66\x65\x61tures\x18\x06 \x03(\x0e\x32\x1f.metalstack.api.v2.ImageFeatureB\x0f\xbaH\x0c\x92\x01\t\x18\x01\"\x05\x82\x01\x02\x10\x01R\x08\x66\x65\x61tures\x12X\n\x0e\x63lassification\x18\x07 \x01(\x0e\x32&.metalstack.api.v2.ImageClassificationB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x0e\x63lassification\x12\x39\n\nexpires_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAtB\x07\n\x05_nameB\x0e\n\x0c_description\"U\n\nImageUsage\x12.\n\x05image\x18\x01 \x01(\x0b\x32\x18.metalstack.api.v2.ImageR\x05image\x12\x17\n\x07used_by\x18\x02 \x03(\tR\x06usedBy\"\xbe\x04\n\nImageQuery\x12 \n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x02id\x88\x01\x01\x12\x1f\n\x02os\x18\x02 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01H\x01R\x02os\x88\x01\x01\x12)\n\x07version\x18\x03 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\x80\x01H\x02R\x07version\x88\x01\x01\x12$\n\x04name\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x03R\x04name\x88\x01\x01\x12\x32\n\x0b\x64\x65scription\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x04R\x0b\x64\x65scription\x88\x01\x01\x12\"\n\x03url\x18\x06 \x01(\tB\x0b\xbaH\x08r\x06\xe0\xb3\xae\xb1\x02\x01H\x05R\x03url\x88\x01\x01\x12H\n\x07\x66\x65\x61ture\x18\x07 \x01(\x0e\x32\x1f.metalstack.api.v2.ImageFeatureB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x06R\x07\x66\x65\x61ture\x88\x01\x01\x12]\n\x0e\x63lassification\x18\x08 \x01(\x0e\x32&.metalstack.api.v2.ImageClassificationB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x07R\x0e\x63lassification\x88\x01\x01\x12\x36\n\x06labels\x18\t \x01(\x0b\x32\x19.metalstack.api.v2.LabelsH\x08R\x06labels\x88\x01\x01\x42\x05\n\x03_idB\x05\n\x03_osB\n\n\x08_versionB\x07\n\x05_nameB\x0e\n\x0c_descriptionB\x06\n\x04_urlB\n\n\x08_featureB\x11\n\x0f_classificationB\t\n\x07_labels*\x7f\n\x0cImageFeature\x12\x1d\n\x19IMAGE_FEATURE_UNSPECIFIED\x10\x00\x12&\n\x15IMAGE_FEATURE_MACHINE\x10\x01\x1a\x0b\x82\xb2\x19\x07machine\x12(\n\x16IMAGE_FEATURE_FIREWALL\x10\x02\x1a\x0c\x82\xb2\x19\x08\x66irewall*\xd2\x01\n\x13ImageClassification\x12$\n IMAGE_CLASSIFICATION_UNSPECIFIED\x10\x00\x12-\n\x1cIMAGE_CLASSIFICATION_PREVIEW\x10\x01\x1a\x0b\x82\xb2\x19\x07preview\x12\x31\n\x1eIMAGE_CLASSIFICATION_SUPPORTED\x10\x02\x1a\r\x82\xb2\x19\tsupported\x12\x33\n\x1fIMAGE_CLASSIFICATION_DEPRECATED\x10\x03\x1a\x0e\x82\xb2\x19\ndeprecated2\xd2\x02\n\x0cImageService\x12\x66\n\x03Get\x12).metalstack.api.v2.ImageServiceGetRequest\x1a*.metalstack.api.v2.ImageServiceGetResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x02\x12i\n\x04List\x12*.metalstack.api.v2.ImageServiceListRequest\x1a+.metalstack.api.v2.ImageServiceListResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x02\x12o\n\x06Latest\x12,.metalstack.api.v2.ImageServiceLatestRequest\x1a-.metalstack.api.v2.ImageServiceLatestResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x02\x42\xc0\x01\n\x15\x63om.metalstack.api.v2B\nImageProtoP\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)
@@ -47,9 +47,9 @@
_globals['_IMAGECLASSIFICATION'].values_by_name["IMAGE_CLASSIFICATION_DEPRECATED"]._loaded_options = None
_globals['_IMAGECLASSIFICATION'].values_by_name["IMAGE_CLASSIFICATION_DEPRECATED"]._serialized_options = b'\202\262\031\ndeprecated'
_globals['_IMAGESERVICEGETREQUEST'].fields_by_name['id']._loaded_options = None
- _globals['_IMAGESERVICEGETREQUEST'].fields_by_name['id']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_IMAGESERVICEGETREQUEST'].fields_by_name['id']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_IMAGE'].fields_by_name['id']._loaded_options = None
- _globals['_IMAGE'].fields_by_name['id']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_IMAGE'].fields_by_name['id']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_IMAGE'].fields_by_name['url']._loaded_options = None
_globals['_IMAGE'].fields_by_name['url']._serialized_options = b'\272H\010r\006\340\263\256\261\002\001'
_globals['_IMAGE'].fields_by_name['name']._loaded_options = None
@@ -61,7 +61,7 @@
_globals['_IMAGE'].fields_by_name['classification']._loaded_options = None
_globals['_IMAGE'].fields_by_name['classification']._serialized_options = b'\272H\005\202\001\002\020\001'
_globals['_IMAGEQUERY'].fields_by_name['id']._loaded_options = None
- _globals['_IMAGEQUERY'].fields_by_name['id']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_IMAGEQUERY'].fields_by_name['id']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_IMAGEQUERY'].fields_by_name['os']._loaded_options = None
_globals['_IMAGEQUERY'].fields_by_name['os']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
_globals['_IMAGEQUERY'].fields_by_name['version']._loaded_options = None
@@ -82,28 +82,28 @@
_globals['_IMAGESERVICE'].methods_by_name['List']._serialized_options = b'\330\363\030\003\340\363\030\002'
_globals['_IMAGESERVICE'].methods_by_name['Latest']._loaded_options = None
_globals['_IMAGESERVICE'].methods_by_name['Latest']._serialized_options = b'\330\363\030\003\340\363\030\002'
- _globals['_IMAGEFEATURE']._serialized_start=1717
- _globals['_IMAGEFEATURE']._serialized_end=1844
- _globals['_IMAGECLASSIFICATION']._serialized_start=1847
- _globals['_IMAGECLASSIFICATION']._serialized_end=2057
+ _globals['_IMAGEFEATURE']._serialized_start=1720
+ _globals['_IMAGEFEATURE']._serialized_end=1847
+ _globals['_IMAGECLASSIFICATION']._serialized_start=1850
+ _globals['_IMAGECLASSIFICATION']._serialized_end=2060
_globals['_IMAGESERVICEGETREQUEST']._serialized_start=188
- _globals['_IMAGESERVICEGETREQUEST']._serialized_end=240
- _globals['_IMAGESERVICELISTREQUEST']._serialized_start=242
- _globals['_IMAGESERVICELISTREQUEST']._serialized_end=320
- _globals['_IMAGESERVICELATESTREQUEST']._serialized_start=322
- _globals['_IMAGESERVICELATESTREQUEST']._serialized_end=365
- _globals['_IMAGESERVICEGETRESPONSE']._serialized_start=367
- _globals['_IMAGESERVICEGETRESPONSE']._serialized_end=440
- _globals['_IMAGESERVICELISTRESPONSE']._serialized_start=442
- _globals['_IMAGESERVICELISTRESPONSE']._serialized_end=518
- _globals['_IMAGESERVICELATESTRESPONSE']._serialized_start=520
- _globals['_IMAGESERVICELATESTRESPONSE']._serialized_end=596
- _globals['_IMAGE']._serialized_start=599
- _globals['_IMAGE']._serialized_end=1052
- _globals['_IMAGEUSAGE']._serialized_start=1054
- _globals['_IMAGEUSAGE']._serialized_end=1139
- _globals['_IMAGEQUERY']._serialized_start=1142
- _globals['_IMAGEQUERY']._serialized_end=1715
- _globals['_IMAGESERVICE']._serialized_start=2060
- _globals['_IMAGESERVICE']._serialized_end=2398
+ _globals['_IMAGESERVICEGETREQUEST']._serialized_end=241
+ _globals['_IMAGESERVICELISTREQUEST']._serialized_start=243
+ _globals['_IMAGESERVICELISTREQUEST']._serialized_end=321
+ _globals['_IMAGESERVICELATESTREQUEST']._serialized_start=323
+ _globals['_IMAGESERVICELATESTREQUEST']._serialized_end=366
+ _globals['_IMAGESERVICEGETRESPONSE']._serialized_start=368
+ _globals['_IMAGESERVICEGETRESPONSE']._serialized_end=441
+ _globals['_IMAGESERVICELISTRESPONSE']._serialized_start=443
+ _globals['_IMAGESERVICELISTRESPONSE']._serialized_end=519
+ _globals['_IMAGESERVICELATESTRESPONSE']._serialized_start=521
+ _globals['_IMAGESERVICELATESTRESPONSE']._serialized_end=597
+ _globals['_IMAGE']._serialized_start=600
+ _globals['_IMAGE']._serialized_end=1054
+ _globals['_IMAGEUSAGE']._serialized_start=1056
+ _globals['_IMAGEUSAGE']._serialized_end=1141
+ _globals['_IMAGEQUERY']._serialized_start=1144
+ _globals['_IMAGEQUERY']._serialized_end=1718
+ _globals['_IMAGESERVICE']._serialized_start=2063
+ _globals['_IMAGESERVICE']._serialized_end=2401
# @@protoc_insertion_point(module_scope)
diff --git a/python/metalstack/api/v2/ip_pb2.py b/python/metalstack/api/v2/ip_pb2.py
index 385b493c..a9e437ca 100644
--- a/python/metalstack/api/v2/ip_pb2.py
+++ b/python/metalstack/api/v2/ip_pb2.py
@@ -27,7 +27,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\x1ametalstack/api/v2/ip.proto\x12\x11metalstack.api.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a(metalstack/api/v2/predefined_rules.proto\"\xf6\x02\n\x02IP\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12+\n\x04meta\x18\x02 \x01(\x0b\x32\x17.metalstack.api.v2.MetaR\x04meta\x12\x17\n\x02ip\x18\x03 \x01(\tB\x07\xbaH\x04r\x02p\x01R\x02ip\x12\x1f\n\x04name\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12-\n\x0b\x64\x65scription\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x0b\x64\x65scription\x12$\n\x07network\x18\x06 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01R\x07network\x12\"\n\x07project\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12\x37\n\x04type\x18\x08 \x01(\x0e\x32\x19.metalstack.api.v2.IPTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x04type\x12+\n\tnamespace\x18\t \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\tnamespace\x88\x01\x01\x42\x0c\n\n_namespace\"\x8d\x01\n\x13IPServiceGetRequest\x12\x17\n\x02ip\x18\x01 \x01(\tB\x07\xbaH\x04r\x02p\x01R\x02ip\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12+\n\tnamespace\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\tnamespace\x88\x01\x01\x42\x0c\n\n_namespace\"\xa6\x04\n\x16IPServiceCreateRequest\x12$\n\x07network\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01R\x07network\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\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\x1c\n\x02ip\x18\x05 \x01(\tB\x07\xbaH\x04r\x02p\x01H\x02R\x02ip\x88\x01\x01\x12\'\n\x07machine\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x03R\x07machine\x88\x01\x01\x12\x36\n\x06labels\x18\x07 \x01(\x0b\x32\x19.metalstack.api.v2.LabelsH\x04R\x06labels\x88\x01\x01\x12<\n\x04type\x18\x08 \x01(\x0e\x32\x19.metalstack.api.v2.IPTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x05R\x04type\x88\x01\x01\x12X\n\x0e\x61\x64\x64ress_family\x18\t \x01(\x0e\x32\".metalstack.api.v2.IPAddressFamilyB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x06R\raddressFamily\x88\x01\x01\x42\x07\n\x05_nameB\x0e\n\x0c_descriptionB\x05\n\x03_ipB\n\n\x08_machineB\t\n\x07_labelsB\x07\n\x05_typeB\x11\n\x0f_address_family\"\xa0\x03\n\x16IPServiceUpdateRequest\x12\x17\n\x02ip\x18\x01 \x01(\tB\x07\xbaH\x04r\x02p\x01R\x02ip\x12\x46\n\x0bupdate_meta\x18\x02 \x01(\x0b\x32\x1d.metalstack.api.v2.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12$\n\x04name\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x12\x32\n\x0b\x64\x65scription\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x01R\x0b\x64\x65scription\x88\x01\x01\x12<\n\x04type\x18\x06 \x01(\x0e\x32\x19.metalstack.api.v2.IPTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x02R\x04type\x88\x01\x01\x12<\n\x06labels\x18\x07 \x01(\x0b\x32\x1f.metalstack.api.v2.UpdateLabelsH\x03R\x06labels\x88\x01\x01\x42\x07\n\x05_nameB\x0e\n\x0c_descriptionB\x07\n\x05_typeB\t\n\x07_labels\"l\n\x14IPServiceListRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12\x30\n\x05query\x18\x02 \x01(\x0b\x32\x1a.metalstack.api.v2.IPQueryR\x05query\"\xb0\x05\n\x07IPQuery\x12\x1c\n\x02ip\x18\x01 \x01(\tB\x07\xbaH\x04r\x02p\x01H\x00R\x02ip\x88\x01\x01\x12)\n\x07network\x18\x02 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01H\x01R\x07network\x88\x01\x01\x12\'\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x02R\x07project\x88\x01\x01\x12$\n\x04name\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x03R\x04name\x88\x01\x01\x12!\n\x04uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x04R\x04uuid\x88\x01\x01\x12\'\n\x07machine\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x05R\x07machine\x88\x01\x01\x12;\n\x12parent_prefix_cidr\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\xe8\x01\x01H\x06R\x10parentPrefixCidr\x88\x01\x01\x12\x36\n\x06labels\x18\x08 \x01(\x0b\x32\x19.metalstack.api.v2.LabelsH\x07R\x06labels\x88\x01\x01\x12<\n\x04type\x18\t \x01(\x0e\x32\x19.metalstack.api.v2.IPTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x08R\x04type\x88\x01\x01\x12X\n\x0e\x61\x64\x64ress_family\x18\n \x01(\x0e\x32\".metalstack.api.v2.IPAddressFamilyB\x08\xbaH\x05\x82\x01\x02\x10\x01H\tR\raddressFamily\x88\x01\x01\x12+\n\tnamespace\x18\x0b \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\nR\tnamespace\x88\x01\x01\x42\x05\n\x03_ipB\n\n\x08_networkB\n\n\x08_projectB\x07\n\x05_nameB\x07\n\x05_uuidB\n\n\x08_machineB\x15\n\x13_parent_prefix_cidrB\t\n\x07_labelsB\x07\n\x05_typeB\x11\n\x0f_address_familyB\x0c\n\n_namespace\"U\n\x16IPServiceDeleteRequest\x12\x17\n\x02ip\x18\x01 \x01(\tB\x07\xbaH\x04r\x02p\x01R\x02ip\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"=\n\x14IPServiceGetResponse\x12%\n\x02ip\x18\x01 \x01(\x0b\x32\x15.metalstack.api.v2.IPR\x02ip\"@\n\x17IPServiceUpdateResponse\x12%\n\x02ip\x18\x01 \x01(\x0b\x32\x15.metalstack.api.v2.IPR\x02ip\"@\n\x17IPServiceCreateResponse\x12%\n\x02ip\x18\x01 \x01(\x0b\x32\x15.metalstack.api.v2.IPR\x02ip\"@\n\x15IPServiceListResponse\x12\'\n\x03ips\x18\x01 \x03(\x0b\x32\x15.metalstack.api.v2.IPR\x03ips\"@\n\x17IPServiceDeleteResponse\x12%\n\x02ip\x18\x01 \x01(\x0b\x32\x15.metalstack.api.v2.IPR\x02ip*g\n\x06IPType\x12\x17\n\x13IP_TYPE_UNSPECIFIED\x10\x00\x12$\n\x11IP_TYPE_EPHEMERAL\x10\x01\x1a\r\x82\xb2\x19\tephemeral\x12\x1e\n\x0eIP_TYPE_STATIC\x10\x02\x1a\n\x82\xb2\x19\x06static*|\n\x0fIPAddressFamily\x12!\n\x1dIP_ADDRESS_FAMILY_UNSPECIFIED\x10\x00\x12\"\n\x14IP_ADDRESS_FAMILY_V4\x10\x01\x1a\x08\x82\xb2\x19\x04ipv4\x12\"\n\x14IP_ADDRESS_FAMILY_V6\x10\x02\x1a\x08\x82\xb2\x19\x04ipv62\x93\x04\n\tIPService\x12\x63\n\x03Get\x12&.metalstack.api.v2.IPServiceGetRequest\x1a\'.metalstack.api.v2.IPServiceGetResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12g\n\x06\x43reate\x12).metalstack.api.v2.IPServiceCreateRequest\x1a*.metalstack.api.v2.IPServiceCreateResponse\"\x06\xca\xf3\x18\x02\x01\x02\x12g\n\x06Update\x12).metalstack.api.v2.IPServiceUpdateRequest\x1a*.metalstack.api.v2.IPServiceUpdateResponse\"\x06\xca\xf3\x18\x02\x01\x02\x12\x66\n\x04List\x12\'.metalstack.api.v2.IPServiceListRequest\x1a(.metalstack.api.v2.IPServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12g\n\x06\x44\x65lete\x12).metalstack.api.v2.IPServiceDeleteRequest\x1a*.metalstack.api.v2.IPServiceDeleteResponse\"\x06\xca\xf3\x18\x02\x01\x02\x42\xbd\x01\n\x15\x63om.metalstack.api.v2B\x07IpProtoP\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\x1ametalstack/api/v2/ip.proto\x12\x11metalstack.api.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a(metalstack/api/v2/predefined_rules.proto\"\xf7\x02\n\x02IP\x12\x1c\n\x04uuid\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x04uuid\x12+\n\x04meta\x18\x02 \x01(\x0b\x32\x17.metalstack.api.v2.MetaR\x04meta\x12\x17\n\x02ip\x18\x03 \x01(\tB\x07\xbaH\x04r\x02p\x01R\x02ip\x12\x1f\n\x04name\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04name\x12-\n\x0b\x64\x65scription\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x0b\x64\x65scription\x12%\n\x07network\x18\x06 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x07network\x12\"\n\x07project\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12\x37\n\x04type\x18\x08 \x01(\x0e\x32\x19.metalstack.api.v2.IPTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x04type\x12+\n\tnamespace\x18\t \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\tnamespace\x88\x01\x01\x42\x0c\n\n_namespace\"\x8d\x01\n\x13IPServiceGetRequest\x12\x17\n\x02ip\x18\x01 \x01(\tB\x07\xbaH\x04r\x02p\x01R\x02ip\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12+\n\tnamespace\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\tnamespace\x88\x01\x01\x42\x0c\n\n_namespace\"\xa7\x04\n\x16IPServiceCreateRequest\x12%\n\x07network\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x07network\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\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\x1c\n\x02ip\x18\x05 \x01(\tB\x07\xbaH\x04r\x02p\x01H\x02R\x02ip\x88\x01\x01\x12\'\n\x07machine\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x03R\x07machine\x88\x01\x01\x12\x36\n\x06labels\x18\x07 \x01(\x0b\x32\x19.metalstack.api.v2.LabelsH\x04R\x06labels\x88\x01\x01\x12<\n\x04type\x18\x08 \x01(\x0e\x32\x19.metalstack.api.v2.IPTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x05R\x04type\x88\x01\x01\x12X\n\x0e\x61\x64\x64ress_family\x18\t \x01(\x0e\x32\".metalstack.api.v2.IPAddressFamilyB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x06R\raddressFamily\x88\x01\x01\x42\x07\n\x05_nameB\x0e\n\x0c_descriptionB\x05\n\x03_ipB\n\n\x08_machineB\t\n\x07_labelsB\x07\n\x05_typeB\x11\n\x0f_address_family\"\xa0\x03\n\x16IPServiceUpdateRequest\x12\x17\n\x02ip\x18\x01 \x01(\tB\x07\xbaH\x04r\x02p\x01R\x02ip\x12\x46\n\x0bupdate_meta\x18\x02 \x01(\x0b\x32\x1d.metalstack.api.v2.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12$\n\x04name\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x12\x32\n\x0b\x64\x65scription\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x01R\x0b\x64\x65scription\x88\x01\x01\x12<\n\x04type\x18\x06 \x01(\x0e\x32\x19.metalstack.api.v2.IPTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x02R\x04type\x88\x01\x01\x12<\n\x06labels\x18\x07 \x01(\x0b\x32\x1f.metalstack.api.v2.UpdateLabelsH\x03R\x06labels\x88\x01\x01\x42\x07\n\x05_nameB\x0e\n\x0c_descriptionB\x07\n\x05_typeB\t\n\x07_labels\"l\n\x14IPServiceListRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12\x30\n\x05query\x18\x02 \x01(\x0b\x32\x1a.metalstack.api.v2.IPQueryR\x05query\"\xb1\x05\n\x07IPQuery\x12\x1c\n\x02ip\x18\x01 \x01(\tB\x07\xbaH\x04r\x02p\x01H\x00R\x02ip\x88\x01\x01\x12*\n\x07network\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x01R\x07network\x88\x01\x01\x12\'\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x02R\x07project\x88\x01\x01\x12$\n\x04name\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x03R\x04name\x88\x01\x01\x12!\n\x04uuid\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x04R\x04uuid\x88\x01\x01\x12\'\n\x07machine\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x05R\x07machine\x88\x01\x01\x12;\n\x12parent_prefix_cidr\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\xe8\x01\x01H\x06R\x10parentPrefixCidr\x88\x01\x01\x12\x36\n\x06labels\x18\x08 \x01(\x0b\x32\x19.metalstack.api.v2.LabelsH\x07R\x06labels\x88\x01\x01\x12<\n\x04type\x18\t \x01(\x0e\x32\x19.metalstack.api.v2.IPTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x08R\x04type\x88\x01\x01\x12X\n\x0e\x61\x64\x64ress_family\x18\n \x01(\x0e\x32\".metalstack.api.v2.IPAddressFamilyB\x08\xbaH\x05\x82\x01\x02\x10\x01H\tR\raddressFamily\x88\x01\x01\x12+\n\tnamespace\x18\x0b \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\nR\tnamespace\x88\x01\x01\x42\x05\n\x03_ipB\n\n\x08_networkB\n\n\x08_projectB\x07\n\x05_nameB\x07\n\x05_uuidB\n\n\x08_machineB\x15\n\x13_parent_prefix_cidrB\t\n\x07_labelsB\x07\n\x05_typeB\x11\n\x0f_address_familyB\x0c\n\n_namespace\"U\n\x16IPServiceDeleteRequest\x12\x17\n\x02ip\x18\x01 \x01(\tB\x07\xbaH\x04r\x02p\x01R\x02ip\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"=\n\x14IPServiceGetResponse\x12%\n\x02ip\x18\x01 \x01(\x0b\x32\x15.metalstack.api.v2.IPR\x02ip\"@\n\x17IPServiceUpdateResponse\x12%\n\x02ip\x18\x01 \x01(\x0b\x32\x15.metalstack.api.v2.IPR\x02ip\"@\n\x17IPServiceCreateResponse\x12%\n\x02ip\x18\x01 \x01(\x0b\x32\x15.metalstack.api.v2.IPR\x02ip\"@\n\x15IPServiceListResponse\x12\'\n\x03ips\x18\x01 \x03(\x0b\x32\x15.metalstack.api.v2.IPR\x03ips\"@\n\x17IPServiceDeleteResponse\x12%\n\x02ip\x18\x01 \x01(\x0b\x32\x15.metalstack.api.v2.IPR\x02ip*g\n\x06IPType\x12\x17\n\x13IP_TYPE_UNSPECIFIED\x10\x00\x12$\n\x11IP_TYPE_EPHEMERAL\x10\x01\x1a\r\x82\xb2\x19\tephemeral\x12\x1e\n\x0eIP_TYPE_STATIC\x10\x02\x1a\n\x82\xb2\x19\x06static*|\n\x0fIPAddressFamily\x12!\n\x1dIP_ADDRESS_FAMILY_UNSPECIFIED\x10\x00\x12\"\n\x14IP_ADDRESS_FAMILY_V4\x10\x01\x1a\x08\x82\xb2\x19\x04ipv4\x12\"\n\x14IP_ADDRESS_FAMILY_V6\x10\x02\x1a\x08\x82\xb2\x19\x04ipv62\x93\x04\n\tIPService\x12\x63\n\x03Get\x12&.metalstack.api.v2.IPServiceGetRequest\x1a\'.metalstack.api.v2.IPServiceGetResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12g\n\x06\x43reate\x12).metalstack.api.v2.IPServiceCreateRequest\x1a*.metalstack.api.v2.IPServiceCreateResponse\"\x06\xca\xf3\x18\x02\x01\x02\x12g\n\x06Update\x12).metalstack.api.v2.IPServiceUpdateRequest\x1a*.metalstack.api.v2.IPServiceUpdateResponse\"\x06\xca\xf3\x18\x02\x01\x02\x12\x66\n\x04List\x12\'.metalstack.api.v2.IPServiceListRequest\x1a(.metalstack.api.v2.IPServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12g\n\x06\x44\x65lete\x12).metalstack.api.v2.IPServiceDeleteRequest\x1a*.metalstack.api.v2.IPServiceDeleteResponse\"\x06\xca\xf3\x18\x02\x01\x02\x42\xbd\x01\n\x15\x63om.metalstack.api.v2B\x07IpProtoP\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)
@@ -52,7 +52,7 @@
_globals['_IP'].fields_by_name['description']._loaded_options = None
_globals['_IP'].fields_by_name['description']._serialized_options = b'\272H\010r\006\310\263\256\261\002\001'
_globals['_IP'].fields_by_name['network']._loaded_options = None
- _globals['_IP'].fields_by_name['network']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_IP'].fields_by_name['network']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_IP'].fields_by_name['project']._loaded_options = None
_globals['_IP'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001'
_globals['_IP'].fields_by_name['type']._loaded_options = None
@@ -66,7 +66,7 @@
_globals['_IPSERVICEGETREQUEST'].fields_by_name['namespace']._loaded_options = None
_globals['_IPSERVICEGETREQUEST'].fields_by_name['namespace']._serialized_options = b'\272H\005r\003\260\001\001'
_globals['_IPSERVICECREATEREQUEST'].fields_by_name['network']._loaded_options = None
- _globals['_IPSERVICECREATEREQUEST'].fields_by_name['network']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_IPSERVICECREATEREQUEST'].fields_by_name['network']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_IPSERVICECREATEREQUEST'].fields_by_name['project']._loaded_options = None
_globals['_IPSERVICECREATEREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001'
_globals['_IPSERVICECREATEREQUEST'].fields_by_name['name']._loaded_options = None
@@ -98,7 +98,7 @@
_globals['_IPQUERY'].fields_by_name['ip']._loaded_options = None
_globals['_IPQUERY'].fields_by_name['ip']._serialized_options = b'\272H\004r\002p\001'
_globals['_IPQUERY'].fields_by_name['network']._loaded_options = None
- _globals['_IPQUERY'].fields_by_name['network']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_IPQUERY'].fields_by_name['network']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_IPQUERY'].fields_by_name['project']._loaded_options = None
_globals['_IPQUERY'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001'
_globals['_IPQUERY'].fields_by_name['name']._loaded_options = None
@@ -129,34 +129,34 @@
_globals['_IPSERVICE'].methods_by_name['List']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002'
_globals['_IPSERVICE'].methods_by_name['Delete']._loaded_options = None
_globals['_IPSERVICE'].methods_by_name['Delete']._serialized_options = b'\312\363\030\002\001\002'
- _globals['_IPTYPE']._serialized_start=2860
- _globals['_IPTYPE']._serialized_end=2963
- _globals['_IPADDRESSFAMILY']._serialized_start=2965
- _globals['_IPADDRESSFAMILY']._serialized_end=3089
+ _globals['_IPTYPE']._serialized_start=2863
+ _globals['_IPTYPE']._serialized_end=2966
+ _globals['_IPADDRESSFAMILY']._serialized_start=2968
+ _globals['_IPADDRESSFAMILY']._serialized_end=3092
_globals['_IP']._serialized_start=153
- _globals['_IP']._serialized_end=527
- _globals['_IPSERVICEGETREQUEST']._serialized_start=530
- _globals['_IPSERVICEGETREQUEST']._serialized_end=671
- _globals['_IPSERVICECREATEREQUEST']._serialized_start=674
- _globals['_IPSERVICECREATEREQUEST']._serialized_end=1224
- _globals['_IPSERVICEUPDATEREQUEST']._serialized_start=1227
- _globals['_IPSERVICEUPDATEREQUEST']._serialized_end=1643
- _globals['_IPSERVICELISTREQUEST']._serialized_start=1645
- _globals['_IPSERVICELISTREQUEST']._serialized_end=1753
- _globals['_IPQUERY']._serialized_start=1756
- _globals['_IPQUERY']._serialized_end=2444
- _globals['_IPSERVICEDELETEREQUEST']._serialized_start=2446
- _globals['_IPSERVICEDELETEREQUEST']._serialized_end=2531
- _globals['_IPSERVICEGETRESPONSE']._serialized_start=2533
- _globals['_IPSERVICEGETRESPONSE']._serialized_end=2594
- _globals['_IPSERVICEUPDATERESPONSE']._serialized_start=2596
- _globals['_IPSERVICEUPDATERESPONSE']._serialized_end=2660
- _globals['_IPSERVICECREATERESPONSE']._serialized_start=2662
- _globals['_IPSERVICECREATERESPONSE']._serialized_end=2726
- _globals['_IPSERVICELISTRESPONSE']._serialized_start=2728
- _globals['_IPSERVICELISTRESPONSE']._serialized_end=2792
- _globals['_IPSERVICEDELETERESPONSE']._serialized_start=2794
- _globals['_IPSERVICEDELETERESPONSE']._serialized_end=2858
- _globals['_IPSERVICE']._serialized_start=3092
- _globals['_IPSERVICE']._serialized_end=3623
+ _globals['_IP']._serialized_end=528
+ _globals['_IPSERVICEGETREQUEST']._serialized_start=531
+ _globals['_IPSERVICEGETREQUEST']._serialized_end=672
+ _globals['_IPSERVICECREATEREQUEST']._serialized_start=675
+ _globals['_IPSERVICECREATEREQUEST']._serialized_end=1226
+ _globals['_IPSERVICEUPDATEREQUEST']._serialized_start=1229
+ _globals['_IPSERVICEUPDATEREQUEST']._serialized_end=1645
+ _globals['_IPSERVICELISTREQUEST']._serialized_start=1647
+ _globals['_IPSERVICELISTREQUEST']._serialized_end=1755
+ _globals['_IPQUERY']._serialized_start=1758
+ _globals['_IPQUERY']._serialized_end=2447
+ _globals['_IPSERVICEDELETEREQUEST']._serialized_start=2449
+ _globals['_IPSERVICEDELETEREQUEST']._serialized_end=2534
+ _globals['_IPSERVICEGETRESPONSE']._serialized_start=2536
+ _globals['_IPSERVICEGETRESPONSE']._serialized_end=2597
+ _globals['_IPSERVICEUPDATERESPONSE']._serialized_start=2599
+ _globals['_IPSERVICEUPDATERESPONSE']._serialized_end=2663
+ _globals['_IPSERVICECREATERESPONSE']._serialized_start=2665
+ _globals['_IPSERVICECREATERESPONSE']._serialized_end=2729
+ _globals['_IPSERVICELISTRESPONSE']._serialized_start=2731
+ _globals['_IPSERVICELISTRESPONSE']._serialized_end=2795
+ _globals['_IPSERVICEDELETERESPONSE']._serialized_start=2797
+ _globals['_IPSERVICEDELETERESPONSE']._serialized_end=2861
+ _globals['_IPSERVICE']._serialized_start=3095
+ _globals['_IPSERVICE']._serialized_end=3626
# @@protoc_insertion_point(module_scope)
diff --git a/python/metalstack/api/v2/network_pb2.py b/python/metalstack/api/v2/network_pb2.py
index f6a57d30..848c5b2d 100644
--- a/python/metalstack/api/v2/network_pb2.py
+++ b/python/metalstack/api/v2/network_pb2.py
@@ -27,7 +27,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/network.proto\x12\x11metalstack.api.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a(metalstack/api/v2/predefined_rules.proto\"]\n\x18NetworkServiceGetRequest\x12\x1a\n\x02id\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01R\x02id\x12%\n\x07project\x18\x02 \x01(\tB\x0b\xbaH\x08r\x03\xb0\x01\x01\xd8\x01\x01R\x07project\"Q\n\x19NetworkServiceGetResponse\x12\x34\n\x07network\x18\x01 \x01(\x0b\x32\x1a.metalstack.api.v2.NetworkR\x07network\"\xb1\x04\n\x1bNetworkServiceCreateRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x12\x32\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x01R\x0b\x64\x65scription\x88\x01\x01\x12.\n\tpartition\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xd0\xb3\xae\xb1\x02\x01H\x02R\tpartition\x88\x01\x01\x12\x31\n\x06labels\x18\x05 \x01(\x0b\x32\x19.metalstack.api.v2.LabelsR\x06labels\x12\x37\n\x0eparent_network\x18\x06 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x03R\rparentNetwork\x88\x01\x01\x12\x41\n\x06length\x18\x07 \x01(\x0b\x32$.metalstack.api.v2.ChildPrefixLengthH\x04R\x06length\x88\x01\x01\x12]\n\x0e\x61\x64\x64ress_family\x18\x08 \x01(\x0e\x32\'.metalstack.api.v2.NetworkAddressFamilyB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x05R\raddressFamily\x88\x01\x01\x42\x07\n\x05_nameB\x0e\n\x0c_descriptionB\x0c\n\n_partitionB\x11\n\x0f_parent_networkB\t\n\x07_lengthB\x11\n\x0f_address_family\"T\n\x1cNetworkServiceCreateResponse\x12\x34\n\x07network\x18\x01 \x01(\x0b\x32\x1a.metalstack.api.v2.NetworkR\x07network\"\xe2\x02\n\x1bNetworkServiceUpdateRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\x12\x46\n\x0bupdate_meta\x18\x02 \x01(\x0b\x32\x1d.metalstack.api.v2.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12$\n\x04name\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x12\x32\n\x0b\x64\x65scription\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x01R\x0b\x64\x65scription\x88\x01\x01\x12<\n\x06labels\x18\x06 \x01(\x0b\x32\x1f.metalstack.api.v2.UpdateLabelsH\x02R\x06labels\x88\x01\x01\x42\x07\n\x05_nameB\x0e\n\x0c_descriptionB\t\n\x07_labels\"T\n\x1cNetworkServiceUpdateResponse\x12\x34\n\x07network\x18\x01 \x01(\x0b\x32\x1a.metalstack.api.v2.NetworkR\x07network\"y\n\x19NetworkServiceListRequest\x12%\n\x07project\x18\x01 \x01(\tB\x0b\xbaH\x08r\x03\xb0\x01\x01\xd8\x01\x01R\x07project\x12\x35\n\x05query\x18\x02 \x01(\x0b\x32\x1f.metalstack.api.v2.NetworkQueryR\x05query\"T\n\x1aNetworkServiceListResponse\x12\x36\n\x08networks\x18\x01 \x03(\x0b\x32\x1a.metalstack.api.v2.NetworkR\x08networks\"\x85\x01\n%NetworkServiceListBaseNetworksRequest\x12%\n\x07project\x18\x01 \x01(\tB\x0b\xbaH\x08r\x03\xb0\x01\x01\xd8\x01\x01R\x07project\x12\x35\n\x05query\x18\x02 \x01(\x0b\x32\x1f.metalstack.api.v2.NetworkQueryR\x05query\"`\n&NetworkServiceListBaseNetworksResponse\x12\x36\n\x08networks\x18\x01 \x03(\x0b\x32\x1a.metalstack.api.v2.NetworkR\x08networks\"^\n\x1bNetworkServiceDeleteRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"T\n\x1cNetworkServiceDeleteResponse\x12\x34\n\x07network\x18\x01 \x01(\x0b\x32\x1a.metalstack.api.v2.NetworkR\x07network\"\xc4\x08\n\x07Network\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\x12+\n\x04meta\x18\x02 \x01(\x0b\x32\x17.metalstack.api.v2.MetaR\x04meta\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\tpartition\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xd0\xb3\xae\xb1\x02\x01H\x02R\tpartition\x88\x01\x01\x12\'\n\x07project\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x03R\x07project\x88\x01\x01\x12+\n\tnamespace\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x04R\tnamespace\x88\x01\x01\x12(\n\x08prefixes\x18\x08 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x08prefixes\x12?\n\x14\x64\x65stination_prefixes\x18\t \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x13\x64\x65stinationPrefixes\x12\x63\n\x1b\x64\x65\x66\x61ult_child_prefix_length\x18\n \x01(\x0b\x32$.metalstack.api.v2.ChildPrefixLengthR\x18\x64\x65\x66\x61ultChildPrefixLength\x12[\n\x17min_child_prefix_length\x18\x0b \x01(\x0b\x32$.metalstack.api.v2.ChildPrefixLengthR\x14minChildPrefixLength\x12\x41\n\x04type\x18\x0c \x01(\x0e\x32\x1e.metalstack.api.v2.NetworkTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x05R\x04type\x88\x01\x01\x12\x44\n\x08nat_type\x18\r \x01(\x0e\x32\x1a.metalstack.api.v2.NATTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x06R\x07natType\x88\x01\x01\x12\x15\n\x03vrf\x18\x0e \x01(\rH\x07R\x03vrf\x88\x01\x01\x12\x37\n\x0eparent_network\x18\x0f \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x08R\rparentNetwork\x88\x01\x01\x12N\n\x1c\x61\x64\x64itional_announcable_cidrs\x18\x10 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x1a\x61\x64\x64itionalAnnouncableCidrs\x12G\n\x0b\x63onsumption\x18\x11 \x01(\x0b\x32%.metalstack.api.v2.NetworkConsumptionR\x0b\x63onsumptionB\x07\n\x05_nameB\x0e\n\x0c_descriptionB\x0c\n\n_partitionB\n\n\x08_projectB\x0c\n\n_namespaceB\x07\n\x05_typeB\x0b\n\t_nat_typeB\x06\n\x04_vrfB\x11\n\x0f_parent_network\"\x81\x07\n\x0cNetworkQuery\x12\x1f\n\x02id\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01H\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\x32\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x02R\x0b\x64\x65scription\x88\x01\x01\x12.\n\tpartition\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xd0\xb3\xae\xb1\x02\x01H\x03R\tpartition\x88\x01\x01\x12\'\n\x07project\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x04R\x07project\x88\x01\x01\x12+\n\tnamespace\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x05R\tnamespace\x88\x01\x01\x12(\n\x08prefixes\x18\x07 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x08prefixes\x12?\n\x14\x64\x65stination_prefixes\x18\x08 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x13\x64\x65stinationPrefixes\x12\x15\n\x03vrf\x18\t \x01(\rH\x06R\x03vrf\x88\x01\x01\x12\x37\n\x0eparent_network\x18\n \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x07R\rparentNetwork\x88\x01\x01\x12]\n\x0e\x61\x64\x64ress_family\x18\x0b \x01(\x0e\x32\'.metalstack.api.v2.NetworkAddressFamilyB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x08R\raddressFamily\x88\x01\x01\x12\x41\n\x04type\x18\x0c \x01(\x0e\x32\x1e.metalstack.api.v2.NetworkTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\tR\x04type\x88\x01\x01\x12\x44\n\x08nat_type\x18\r \x01(\x0e\x32\x1a.metalstack.api.v2.NATTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\nR\x07natType\x88\x01\x01\x12\x36\n\x06labels\x18\x0e \x01(\x0b\x32\x19.metalstack.api.v2.LabelsH\x0bR\x06labels\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_nameB\x0e\n\x0c_descriptionB\x0c\n\n_partitionB\n\n\x08_projectB\x0c\n\n_namespaceB\x06\n\x04_vrfB\x11\n\x0f_parent_networkB\x11\n\x0f_address_familyB\x07\n\x05_typeB\x0b\n\t_nat_typeB\t\n\x07_labels\"n\n\x11\x43hildPrefixLength\x12\"\n\x04ipv4\x18\x01 \x01(\rB\t\xbaH\x06*\x04\x18 \x00H\x00R\x04ipv4\x88\x01\x01\x12#\n\x04ipv6\x18\x02 \x01(\rB\n\xbaH\x07*\x05\x18\x80\x01 \x00H\x01R\x04ipv6\x88\x01\x01\x42\x07\n\x05_ipv4B\x07\n\x05_ipv6\"~\n\x12NetworkConsumption\x12\x33\n\x04ipv4\x18\x01 \x01(\x0b\x32\x1f.metalstack.api.v2.NetworkUsageR\x04ipv4\x12\x33\n\x04ipv6\x18\x02 \x01(\x0b\x32\x1f.metalstack.api.v2.NetworkUsageR\x04ipv6\"\xa2\x01\n\x0cNetworkUsage\x12#\n\ravailable_ips\x18\x02 \x01(\x04R\x0c\x61vailableIps\x12\x19\n\x08used_ips\x18\x03 \x01(\x04R\x07usedIps\x12-\n\x12\x61vailable_prefixes\x18\x04 \x01(\x04R\x11\x61vailablePrefixes\x12#\n\rused_prefixes\x18\x05 \x01(\x04R\x0cusedPrefixes*m\n\x07NATType\x12\x18\n\x14NAT_TYPE_UNSPECIFIED\x10\x00\x12\x1b\n\rNAT_TYPE_NONE\x10\x01\x1a\x08\x82\xb2\x19\x04none\x12+\n\x18NAT_TYPE_IPV4_MASQUERADE\x10\x02\x1a\r\x82\xb2\x19\tipv4-masq*\xad\x02\n\x0bNetworkType\x12\x1c\n\x18NETWORK_TYPE_UNSPECIFIED\x10\x00\x12\'\n\x15NETWORK_TYPE_EXTERNAL\x10\x01\x1a\x0c\x82\xb2\x19\x08\x65xternal\x12\'\n\x15NETWORK_TYPE_UNDERLAY\x10\x02\x1a\x0c\x82\xb2\x19\x08underlay\x12!\n\x12NETWORK_TYPE_SUPER\x10\x03\x1a\t\x82\xb2\x19\x05super\x12\x37\n\x1dNETWORK_TYPE_SUPER_NAMESPACED\x10\x04\x1a\x14\x82\xb2\x19\x10super-namespaced\x12!\n\x12NETWORK_TYPE_CHILD\x10\x05\x1a\t\x82\xb2\x19\x05\x63hild\x12/\n\x19NETWORK_TYPE_CHILD_SHARED\x10\x06\x1a\x10\x82\xb2\x19\x0c\x63hild-shared*\xc7\x01\n\x14NetworkAddressFamily\x12&\n\"NETWORK_ADDRESS_FAMILY_UNSPECIFIED\x10\x00\x12\'\n\x19NETWORK_ADDRESS_FAMILY_V4\x10\x01\x1a\x08\x82\xb2\x19\x04ipv4\x12\'\n\x19NETWORK_ADDRESS_FAMILY_V6\x10\x02\x1a\x08\x82\xb2\x19\x04ipv6\x12\x35\n!NETWORK_ADDRESS_FAMILY_DUAL_STACK\x10\x03\x1a\x0e\x82\xb2\x19\ndual-stack2\xe1\x05\n\x0eNetworkService\x12m\n\x03Get\x12+.metalstack.api.v2.NetworkServiceGetRequest\x1a,.metalstack.api.v2.NetworkServiceGetResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12q\n\x06\x43reate\x12..metalstack.api.v2.NetworkServiceCreateRequest\x1a/.metalstack.api.v2.NetworkServiceCreateResponse\"\x06\xca\xf3\x18\x02\x01\x02\x12q\n\x06Update\x12..metalstack.api.v2.NetworkServiceUpdateRequest\x1a/.metalstack.api.v2.NetworkServiceUpdateResponse\"\x06\xca\xf3\x18\x02\x01\x02\x12p\n\x04List\x12,.metalstack.api.v2.NetworkServiceListRequest\x1a-.metalstack.api.v2.NetworkServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12\x94\x01\n\x10ListBaseNetworks\x12\x38.metalstack.api.v2.NetworkServiceListBaseNetworksRequest\x1a\x39.metalstack.api.v2.NetworkServiceListBaseNetworksResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12q\n\x06\x44\x65lete\x12..metalstack.api.v2.NetworkServiceDeleteRequest\x1a/.metalstack.api.v2.NetworkServiceDeleteResponse\"\x06\xca\xf3\x18\x02\x01\x02\x42\xc2\x01\n\x15\x63om.metalstack.api.v2B\x0cNetworkProtoP\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/network.proto\x12\x11metalstack.api.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a(metalstack/api/v2/predefined_rules.proto\"^\n\x18NetworkServiceGetRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\x12%\n\x07project\x18\x02 \x01(\tB\x0b\xbaH\x08r\x03\xb0\x01\x01\xd8\x01\x01R\x07project\"Q\n\x19NetworkServiceGetResponse\x12\x34\n\x07network\x18\x01 \x01(\x0b\x32\x1a.metalstack.api.v2.NetworkR\x07network\"\xb1\x04\n\x1bNetworkServiceCreateRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12$\n\x04name\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x12\x32\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x01R\x0b\x64\x65scription\x88\x01\x01\x12.\n\tpartition\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xd0\xb3\xae\xb1\x02\x01H\x02R\tpartition\x88\x01\x01\x12\x31\n\x06labels\x18\x05 \x01(\x0b\x32\x19.metalstack.api.v2.LabelsR\x06labels\x12\x37\n\x0eparent_network\x18\x06 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x03R\rparentNetwork\x88\x01\x01\x12\x41\n\x06length\x18\x07 \x01(\x0b\x32$.metalstack.api.v2.ChildPrefixLengthH\x04R\x06length\x88\x01\x01\x12]\n\x0e\x61\x64\x64ress_family\x18\x08 \x01(\x0e\x32\'.metalstack.api.v2.NetworkAddressFamilyB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x05R\raddressFamily\x88\x01\x01\x42\x07\n\x05_nameB\x0e\n\x0c_descriptionB\x0c\n\n_partitionB\x11\n\x0f_parent_networkB\t\n\x07_lengthB\x11\n\x0f_address_family\"T\n\x1cNetworkServiceCreateResponse\x12\x34\n\x07network\x18\x01 \x01(\x0b\x32\x1a.metalstack.api.v2.NetworkR\x07network\"\xe2\x02\n\x1bNetworkServiceUpdateRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\x12\x46\n\x0bupdate_meta\x18\x02 \x01(\x0b\x32\x1d.metalstack.api.v2.UpdateMetaB\x06\xbaH\x03\xc8\x01\x01R\nupdateMeta\x12\"\n\x07project\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12$\n\x04name\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x12\x32\n\x0b\x64\x65scription\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x01R\x0b\x64\x65scription\x88\x01\x01\x12<\n\x06labels\x18\x06 \x01(\x0b\x32\x1f.metalstack.api.v2.UpdateLabelsH\x02R\x06labels\x88\x01\x01\x42\x07\n\x05_nameB\x0e\n\x0c_descriptionB\t\n\x07_labels\"T\n\x1cNetworkServiceUpdateResponse\x12\x34\n\x07network\x18\x01 \x01(\x0b\x32\x1a.metalstack.api.v2.NetworkR\x07network\"y\n\x19NetworkServiceListRequest\x12%\n\x07project\x18\x01 \x01(\tB\x0b\xbaH\x08r\x03\xb0\x01\x01\xd8\x01\x01R\x07project\x12\x35\n\x05query\x18\x02 \x01(\x0b\x32\x1f.metalstack.api.v2.NetworkQueryR\x05query\"T\n\x1aNetworkServiceListResponse\x12\x36\n\x08networks\x18\x01 \x03(\x0b\x32\x1a.metalstack.api.v2.NetworkR\x08networks\"\x85\x01\n%NetworkServiceListBaseNetworksRequest\x12%\n\x07project\x18\x01 \x01(\tB\x0b\xbaH\x08r\x03\xb0\x01\x01\xd8\x01\x01R\x07project\x12\x35\n\x05query\x18\x02 \x01(\x0b\x32\x1f.metalstack.api.v2.NetworkQueryR\x05query\"`\n&NetworkServiceListBaseNetworksResponse\x12\x36\n\x08networks\x18\x01 \x03(\x0b\x32\x1a.metalstack.api.v2.NetworkR\x08networks\"^\n\x1bNetworkServiceDeleteRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"T\n\x1cNetworkServiceDeleteResponse\x12\x34\n\x07network\x18\x01 \x01(\x0b\x32\x1a.metalstack.api.v2.NetworkR\x07network\"\xc4\x08\n\x07Network\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\x12+\n\x04meta\x18\x02 \x01(\x0b\x32\x17.metalstack.api.v2.MetaR\x04meta\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\tpartition\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xd0\xb3\xae\xb1\x02\x01H\x02R\tpartition\x88\x01\x01\x12\'\n\x07project\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x03R\x07project\x88\x01\x01\x12+\n\tnamespace\x18\x07 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x04R\tnamespace\x88\x01\x01\x12(\n\x08prefixes\x18\x08 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x08prefixes\x12?\n\x14\x64\x65stination_prefixes\x18\t \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x13\x64\x65stinationPrefixes\x12\x63\n\x1b\x64\x65\x66\x61ult_child_prefix_length\x18\n \x01(\x0b\x32$.metalstack.api.v2.ChildPrefixLengthR\x18\x64\x65\x66\x61ultChildPrefixLength\x12[\n\x17min_child_prefix_length\x18\x0b \x01(\x0b\x32$.metalstack.api.v2.ChildPrefixLengthR\x14minChildPrefixLength\x12\x41\n\x04type\x18\x0c \x01(\x0e\x32\x1e.metalstack.api.v2.NetworkTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x05R\x04type\x88\x01\x01\x12\x44\n\x08nat_type\x18\r \x01(\x0e\x32\x1a.metalstack.api.v2.NATTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x06R\x07natType\x88\x01\x01\x12\x15\n\x03vrf\x18\x0e \x01(\rH\x07R\x03vrf\x88\x01\x01\x12\x37\n\x0eparent_network\x18\x0f \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x08R\rparentNetwork\x88\x01\x01\x12N\n\x1c\x61\x64\x64itional_announcable_cidrs\x18\x10 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x1a\x61\x64\x64itionalAnnouncableCidrs\x12G\n\x0b\x63onsumption\x18\x11 \x01(\x0b\x32%.metalstack.api.v2.NetworkConsumptionR\x0b\x63onsumptionB\x07\n\x05_nameB\x0e\n\x0c_descriptionB\x0c\n\n_partitionB\n\n\x08_projectB\x0c\n\n_namespaceB\x07\n\x05_typeB\x0b\n\t_nat_typeB\x06\n\x04_vrfB\x11\n\x0f_parent_network\"\x82\x07\n\x0cNetworkQuery\x12 \n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\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\x32\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x02R\x0b\x64\x65scription\x88\x01\x01\x12.\n\tpartition\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xd0\xb3\xae\xb1\x02\x01H\x03R\tpartition\x88\x01\x01\x12\'\n\x07project\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x04R\x07project\x88\x01\x01\x12+\n\tnamespace\x18\x06 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x05R\tnamespace\x88\x01\x01\x12(\n\x08prefixes\x18\x07 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x08prefixes\x12?\n\x14\x64\x65stination_prefixes\x18\x08 \x03(\tB\x0c\xbaH\t\x92\x01\x06\xb8\xa4\xb3\xb1\x02\x01R\x13\x64\x65stinationPrefixes\x12\x15\n\x03vrf\x18\t \x01(\rH\x06R\x03vrf\x88\x01\x01\x12\x37\n\x0eparent_network\x18\n \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x07R\rparentNetwork\x88\x01\x01\x12]\n\x0e\x61\x64\x64ress_family\x18\x0b \x01(\x0e\x32\'.metalstack.api.v2.NetworkAddressFamilyB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x08R\raddressFamily\x88\x01\x01\x12\x41\n\x04type\x18\x0c \x01(\x0e\x32\x1e.metalstack.api.v2.NetworkTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\tR\x04type\x88\x01\x01\x12\x44\n\x08nat_type\x18\r \x01(\x0e\x32\x1a.metalstack.api.v2.NATTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01H\nR\x07natType\x88\x01\x01\x12\x36\n\x06labels\x18\x0e \x01(\x0b\x32\x19.metalstack.api.v2.LabelsH\x0bR\x06labels\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_nameB\x0e\n\x0c_descriptionB\x0c\n\n_partitionB\n\n\x08_projectB\x0c\n\n_namespaceB\x06\n\x04_vrfB\x11\n\x0f_parent_networkB\x11\n\x0f_address_familyB\x07\n\x05_typeB\x0b\n\t_nat_typeB\t\n\x07_labels\"n\n\x11\x43hildPrefixLength\x12\"\n\x04ipv4\x18\x01 \x01(\rB\t\xbaH\x06*\x04\x18 \x00H\x00R\x04ipv4\x88\x01\x01\x12#\n\x04ipv6\x18\x02 \x01(\rB\n\xbaH\x07*\x05\x18\x80\x01 \x00H\x01R\x04ipv6\x88\x01\x01\x42\x07\n\x05_ipv4B\x07\n\x05_ipv6\"~\n\x12NetworkConsumption\x12\x33\n\x04ipv4\x18\x01 \x01(\x0b\x32\x1f.metalstack.api.v2.NetworkUsageR\x04ipv4\x12\x33\n\x04ipv6\x18\x02 \x01(\x0b\x32\x1f.metalstack.api.v2.NetworkUsageR\x04ipv6\"\xa2\x01\n\x0cNetworkUsage\x12#\n\ravailable_ips\x18\x02 \x01(\x04R\x0c\x61vailableIps\x12\x19\n\x08used_ips\x18\x03 \x01(\x04R\x07usedIps\x12-\n\x12\x61vailable_prefixes\x18\x04 \x01(\x04R\x11\x61vailablePrefixes\x12#\n\rused_prefixes\x18\x05 \x01(\x04R\x0cusedPrefixes*m\n\x07NATType\x12\x18\n\x14NAT_TYPE_UNSPECIFIED\x10\x00\x12\x1b\n\rNAT_TYPE_NONE\x10\x01\x1a\x08\x82\xb2\x19\x04none\x12+\n\x18NAT_TYPE_IPV4_MASQUERADE\x10\x02\x1a\r\x82\xb2\x19\tipv4-masq*\xad\x02\n\x0bNetworkType\x12\x1c\n\x18NETWORK_TYPE_UNSPECIFIED\x10\x00\x12\'\n\x15NETWORK_TYPE_EXTERNAL\x10\x01\x1a\x0c\x82\xb2\x19\x08\x65xternal\x12\'\n\x15NETWORK_TYPE_UNDERLAY\x10\x02\x1a\x0c\x82\xb2\x19\x08underlay\x12!\n\x12NETWORK_TYPE_SUPER\x10\x03\x1a\t\x82\xb2\x19\x05super\x12\x37\n\x1dNETWORK_TYPE_SUPER_NAMESPACED\x10\x04\x1a\x14\x82\xb2\x19\x10super-namespaced\x12!\n\x12NETWORK_TYPE_CHILD\x10\x05\x1a\t\x82\xb2\x19\x05\x63hild\x12/\n\x19NETWORK_TYPE_CHILD_SHARED\x10\x06\x1a\x10\x82\xb2\x19\x0c\x63hild-shared*\xc7\x01\n\x14NetworkAddressFamily\x12&\n\"NETWORK_ADDRESS_FAMILY_UNSPECIFIED\x10\x00\x12\'\n\x19NETWORK_ADDRESS_FAMILY_V4\x10\x01\x1a\x08\x82\xb2\x19\x04ipv4\x12\'\n\x19NETWORK_ADDRESS_FAMILY_V6\x10\x02\x1a\x08\x82\xb2\x19\x04ipv6\x12\x35\n!NETWORK_ADDRESS_FAMILY_DUAL_STACK\x10\x03\x1a\x0e\x82\xb2\x19\ndual-stack2\xe1\x05\n\x0eNetworkService\x12m\n\x03Get\x12+.metalstack.api.v2.NetworkServiceGetRequest\x1a,.metalstack.api.v2.NetworkServiceGetResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12q\n\x06\x43reate\x12..metalstack.api.v2.NetworkServiceCreateRequest\x1a/.metalstack.api.v2.NetworkServiceCreateResponse\"\x06\xca\xf3\x18\x02\x01\x02\x12q\n\x06Update\x12..metalstack.api.v2.NetworkServiceUpdateRequest\x1a/.metalstack.api.v2.NetworkServiceUpdateResponse\"\x06\xca\xf3\x18\x02\x01\x02\x12p\n\x04List\x12,.metalstack.api.v2.NetworkServiceListRequest\x1a-.metalstack.api.v2.NetworkServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12\x94\x01\n\x10ListBaseNetworks\x12\x38.metalstack.api.v2.NetworkServiceListBaseNetworksRequest\x1a\x39.metalstack.api.v2.NetworkServiceListBaseNetworksResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12q\n\x06\x44\x65lete\x12..metalstack.api.v2.NetworkServiceDeleteRequest\x1a/.metalstack.api.v2.NetworkServiceDeleteResponse\"\x06\xca\xf3\x18\x02\x01\x02\x42\xc2\x01\n\x15\x63om.metalstack.api.v2B\x0cNetworkProtoP\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)
@@ -58,7 +58,7 @@
_globals['_NETWORKADDRESSFAMILY'].values_by_name["NETWORK_ADDRESS_FAMILY_DUAL_STACK"]._loaded_options = None
_globals['_NETWORKADDRESSFAMILY'].values_by_name["NETWORK_ADDRESS_FAMILY_DUAL_STACK"]._serialized_options = b'\202\262\031\ndual-stack'
_globals['_NETWORKSERVICEGETREQUEST'].fields_by_name['id']._loaded_options = None
- _globals['_NETWORKSERVICEGETREQUEST'].fields_by_name['id']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_NETWORKSERVICEGETREQUEST'].fields_by_name['id']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_NETWORKSERVICEGETREQUEST'].fields_by_name['project']._loaded_options = None
_globals['_NETWORKSERVICEGETREQUEST'].fields_by_name['project']._serialized_options = b'\272H\010r\003\260\001\001\330\001\001'
_globals['_NETWORKSERVICECREATEREQUEST'].fields_by_name['project']._loaded_options = None
@@ -116,7 +116,7 @@
_globals['_NETWORK'].fields_by_name['additional_announcable_cidrs']._loaded_options = None
_globals['_NETWORK'].fields_by_name['additional_announcable_cidrs']._serialized_options = b'\272H\t\222\001\006\270\244\263\261\002\001'
_globals['_NETWORKQUERY'].fields_by_name['id']._loaded_options = None
- _globals['_NETWORKQUERY'].fields_by_name['id']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_NETWORKQUERY'].fields_by_name['id']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_NETWORKQUERY'].fields_by_name['name']._loaded_options = None
_globals['_NETWORKQUERY'].fields_by_name['name']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_NETWORKQUERY'].fields_by_name['description']._loaded_options = None
@@ -155,46 +155,46 @@
_globals['_NETWORKSERVICE'].methods_by_name['ListBaseNetworks']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002'
_globals['_NETWORKSERVICE'].methods_by_name['Delete']._loaded_options = None
_globals['_NETWORKSERVICE'].methods_by_name['Delete']._serialized_options = b'\312\363\030\002\001\002'
- _globals['_NATTYPE']._serialized_start=4453
- _globals['_NATTYPE']._serialized_end=4562
- _globals['_NETWORKTYPE']._serialized_start=4565
- _globals['_NETWORKTYPE']._serialized_end=4866
- _globals['_NETWORKADDRESSFAMILY']._serialized_start=4869
- _globals['_NETWORKADDRESSFAMILY']._serialized_end=5068
+ _globals['_NATTYPE']._serialized_start=4455
+ _globals['_NATTYPE']._serialized_end=4564
+ _globals['_NETWORKTYPE']._serialized_start=4567
+ _globals['_NETWORKTYPE']._serialized_end=4868
+ _globals['_NETWORKADDRESSFAMILY']._serialized_start=4871
+ _globals['_NETWORKADDRESSFAMILY']._serialized_end=5070
_globals['_NETWORKSERVICEGETREQUEST']._serialized_start=157
- _globals['_NETWORKSERVICEGETREQUEST']._serialized_end=250
- _globals['_NETWORKSERVICEGETRESPONSE']._serialized_start=252
- _globals['_NETWORKSERVICEGETRESPONSE']._serialized_end=333
- _globals['_NETWORKSERVICECREATEREQUEST']._serialized_start=336
- _globals['_NETWORKSERVICECREATEREQUEST']._serialized_end=897
- _globals['_NETWORKSERVICECREATERESPONSE']._serialized_start=899
- _globals['_NETWORKSERVICECREATERESPONSE']._serialized_end=983
- _globals['_NETWORKSERVICEUPDATEREQUEST']._serialized_start=986
- _globals['_NETWORKSERVICEUPDATEREQUEST']._serialized_end=1340
- _globals['_NETWORKSERVICEUPDATERESPONSE']._serialized_start=1342
- _globals['_NETWORKSERVICEUPDATERESPONSE']._serialized_end=1426
- _globals['_NETWORKSERVICELISTREQUEST']._serialized_start=1428
- _globals['_NETWORKSERVICELISTREQUEST']._serialized_end=1549
- _globals['_NETWORKSERVICELISTRESPONSE']._serialized_start=1551
- _globals['_NETWORKSERVICELISTRESPONSE']._serialized_end=1635
- _globals['_NETWORKSERVICELISTBASENETWORKSREQUEST']._serialized_start=1638
- _globals['_NETWORKSERVICELISTBASENETWORKSREQUEST']._serialized_end=1771
- _globals['_NETWORKSERVICELISTBASENETWORKSRESPONSE']._serialized_start=1773
- _globals['_NETWORKSERVICELISTBASENETWORKSRESPONSE']._serialized_end=1869
- _globals['_NETWORKSERVICEDELETEREQUEST']._serialized_start=1871
- _globals['_NETWORKSERVICEDELETEREQUEST']._serialized_end=1965
- _globals['_NETWORKSERVICEDELETERESPONSE']._serialized_start=1967
- _globals['_NETWORKSERVICEDELETERESPONSE']._serialized_end=2051
- _globals['_NETWORK']._serialized_start=2054
- _globals['_NETWORK']._serialized_end=3146
- _globals['_NETWORKQUERY']._serialized_start=3149
- _globals['_NETWORKQUERY']._serialized_end=4046
- _globals['_CHILDPREFIXLENGTH']._serialized_start=4048
- _globals['_CHILDPREFIXLENGTH']._serialized_end=4158
- _globals['_NETWORKCONSUMPTION']._serialized_start=4160
- _globals['_NETWORKCONSUMPTION']._serialized_end=4286
- _globals['_NETWORKUSAGE']._serialized_start=4289
- _globals['_NETWORKUSAGE']._serialized_end=4451
- _globals['_NETWORKSERVICE']._serialized_start=5071
- _globals['_NETWORKSERVICE']._serialized_end=5808
+ _globals['_NETWORKSERVICEGETREQUEST']._serialized_end=251
+ _globals['_NETWORKSERVICEGETRESPONSE']._serialized_start=253
+ _globals['_NETWORKSERVICEGETRESPONSE']._serialized_end=334
+ _globals['_NETWORKSERVICECREATEREQUEST']._serialized_start=337
+ _globals['_NETWORKSERVICECREATEREQUEST']._serialized_end=898
+ _globals['_NETWORKSERVICECREATERESPONSE']._serialized_start=900
+ _globals['_NETWORKSERVICECREATERESPONSE']._serialized_end=984
+ _globals['_NETWORKSERVICEUPDATEREQUEST']._serialized_start=987
+ _globals['_NETWORKSERVICEUPDATEREQUEST']._serialized_end=1341
+ _globals['_NETWORKSERVICEUPDATERESPONSE']._serialized_start=1343
+ _globals['_NETWORKSERVICEUPDATERESPONSE']._serialized_end=1427
+ _globals['_NETWORKSERVICELISTREQUEST']._serialized_start=1429
+ _globals['_NETWORKSERVICELISTREQUEST']._serialized_end=1550
+ _globals['_NETWORKSERVICELISTRESPONSE']._serialized_start=1552
+ _globals['_NETWORKSERVICELISTRESPONSE']._serialized_end=1636
+ _globals['_NETWORKSERVICELISTBASENETWORKSREQUEST']._serialized_start=1639
+ _globals['_NETWORKSERVICELISTBASENETWORKSREQUEST']._serialized_end=1772
+ _globals['_NETWORKSERVICELISTBASENETWORKSRESPONSE']._serialized_start=1774
+ _globals['_NETWORKSERVICELISTBASENETWORKSRESPONSE']._serialized_end=1870
+ _globals['_NETWORKSERVICEDELETEREQUEST']._serialized_start=1872
+ _globals['_NETWORKSERVICEDELETEREQUEST']._serialized_end=1966
+ _globals['_NETWORKSERVICEDELETERESPONSE']._serialized_start=1968
+ _globals['_NETWORKSERVICEDELETERESPONSE']._serialized_end=2052
+ _globals['_NETWORK']._serialized_start=2055
+ _globals['_NETWORK']._serialized_end=3147
+ _globals['_NETWORKQUERY']._serialized_start=3150
+ _globals['_NETWORKQUERY']._serialized_end=4048
+ _globals['_CHILDPREFIXLENGTH']._serialized_start=4050
+ _globals['_CHILDPREFIXLENGTH']._serialized_end=4160
+ _globals['_NETWORKCONSUMPTION']._serialized_start=4162
+ _globals['_NETWORKCONSUMPTION']._serialized_end=4288
+ _globals['_NETWORKUSAGE']._serialized_start=4291
+ _globals['_NETWORKUSAGE']._serialized_end=4453
+ _globals['_NETWORKSERVICE']._serialized_start=5073
+ _globals['_NETWORKSERVICE']._serialized_end=5810
# @@protoc_insertion_point(module_scope)
diff --git a/python/metalstack/api/v2/partition_pb2.py b/python/metalstack/api/v2/partition_pb2.py
index 31195cbb..2525dcff 100644
--- a/python/metalstack/api/v2/partition_pb2.py
+++ b/python/metalstack/api/v2/partition_pb2.py
@@ -27,7 +27,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!metalstack/api/v2/partition.proto\x12\x11metalstack.api.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a(metalstack/api/v2/predefined_rules.proto\"\xa6\x03\n\tPartition\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xd0\xb3\xae\xb1\x02\x01R\x02id\x12+\n\x04meta\x18\x02 \x01(\x0b\x32\x17.metalstack.api.v2.MetaR\x04meta\x12-\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x0b\x64\x65scription\x12\\\n\x12\x62oot_configuration\x18\x04 \x01(\x0b\x32-.metalstack.api.v2.PartitionBootConfigurationR\x11\x62ootConfiguration\x12\x45\n\ndns_server\x18\x05 \x03(\x0b\x32\x1c.metalstack.api.v2.DNSServerB\x08\xbaH\x05\x92\x01\x02\x10\x03R\tdnsServer\x12\x45\n\nntp_server\x18\x06 \x03(\x0b\x32\x1c.metalstack.api.v2.NTPServerB\x08\xbaH\x05\x92\x01\x02\x10\nR\tntpServer\x12\x34\n\x16mgmt_service_addresses\x18\x07 \x03(\tR\x14mgmtServiceAddresses\"|\n\x0ePartitionQuery\x12 \n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xd0\xb3\xae\xb1\x02\x01H\x00R\x02id\x88\x01\x01\x12\x36\n\x06labels\x18\x02 \x01(\x0b\x32\x19.metalstack.api.v2.LabelsH\x01R\x06labels\x88\x01\x01\x42\x05\n\x03_idB\t\n\x07_labels\"\x94\x01\n\x1aPartitionBootConfiguration\x12(\n\timage_url\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xe0\xb3\xae\xb1\x02\x01R\x08imageUrl\x12*\n\nkernel_url\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xe0\xb3\xae\xb1\x02\x01R\tkernelUrl\x12 \n\x0b\x63ommandline\x18\x03 \x01(\tR\x0b\x63ommandline\"$\n\tDNSServer\x12\x17\n\x02ip\x18\x01 \x01(\tB\x07\xbaH\x04r\x02p\x01R\x02ip\"/\n\tNTPServer\x12\"\n\x07\x61\x64\x64ress\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\x18\x80\x02R\x07\x61\x64\x64ress\"9\n\x1aPartitionServiceGetRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xd0\xb3\xae\xb1\x02\x01R\x02id\"V\n\x1bPartitionServiceListRequest\x12\x37\n\x05query\x18\x01 \x01(\x0b\x32!.metalstack.api.v2.PartitionQueryR\x05query\"Y\n\x1bPartitionServiceGetResponse\x12:\n\tpartition\x18\x01 \x01(\x0b\x32\x1c.metalstack.api.v2.PartitionR\tpartition\"\\\n\x1cPartitionServiceListResponse\x12<\n\npartitions\x18\x01 \x03(\x0b\x32\x1c.metalstack.api.v2.PartitionR\npartitions2\xf5\x01\n\x10PartitionService\x12n\n\x03Get\x12-.metalstack.api.v2.PartitionServiceGetRequest\x1a..metalstack.api.v2.PartitionServiceGetResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x02\x12q\n\x04List\x12..metalstack.api.v2.PartitionServiceListRequest\x1a/.metalstack.api.v2.PartitionServiceListResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x02\x42\xc4\x01\n\x15\x63om.metalstack.api.v2B\x0ePartitionProtoP\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!metalstack/api/v2/partition.proto\x12\x11metalstack.api.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a(metalstack/api/v2/predefined_rules.proto\"\xa6\x03\n\tPartition\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xd0\xb3\xae\xb1\x02\x01R\x02id\x12+\n\x04meta\x18\x02 \x01(\x0b\x32\x17.metalstack.api.v2.MetaR\x04meta\x12-\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01R\x0b\x64\x65scription\x12\\\n\x12\x62oot_configuration\x18\x04 \x01(\x0b\x32-.metalstack.api.v2.PartitionBootConfigurationR\x11\x62ootConfiguration\x12\x45\n\ndns_server\x18\x05 \x03(\x0b\x32\x1c.metalstack.api.v2.DNSServerB\x08\xbaH\x05\x92\x01\x02\x10\x03R\tdnsServer\x12\x45\n\nntp_server\x18\x06 \x03(\x0b\x32\x1c.metalstack.api.v2.NTPServerB\x08\xbaH\x05\x92\x01\x02\x10\nR\tntpServer\x12\x34\n\x16mgmt_service_addresses\x18\x07 \x03(\tR\x14mgmtServiceAddresses\"|\n\x0ePartitionQuery\x12 \n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xd0\xb3\xae\xb1\x02\x01H\x00R\x02id\x88\x01\x01\x12\x36\n\x06labels\x18\x02 \x01(\x0b\x32\x19.metalstack.api.v2.LabelsH\x01R\x06labels\x88\x01\x01\x42\x05\n\x03_idB\t\n\x07_labels\"\x94\x01\n\x1aPartitionBootConfiguration\x12(\n\timage_url\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xe0\xb3\xae\xb1\x02\x01R\x08imageUrl\x12*\n\nkernel_url\x18\x02 \x01(\tB\x0b\xbaH\x08r\x06\xe0\xb3\xae\xb1\x02\x01R\tkernelUrl\x12 \n\x0b\x63ommandline\x18\x03 \x01(\tR\x0b\x63ommandline\"$\n\tDNSServer\x12\x17\n\x02ip\x18\x01 \x01(\tB\x07\xbaH\x04r\x02p\x01R\x02ip\"2\n\tNTPServer\x12%\n\x07\x61\x64\x64ress\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xe8\xb3\xae\xb1\x02\x01R\x07\x61\x64\x64ress\"9\n\x1aPartitionServiceGetRequest\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xd0\xb3\xae\xb1\x02\x01R\x02id\"V\n\x1bPartitionServiceListRequest\x12\x37\n\x05query\x18\x01 \x01(\x0b\x32!.metalstack.api.v2.PartitionQueryR\x05query\"Y\n\x1bPartitionServiceGetResponse\x12:\n\tpartition\x18\x01 \x01(\x0b\x32\x1c.metalstack.api.v2.PartitionR\tpartition\"\\\n\x1cPartitionServiceListResponse\x12<\n\npartitions\x18\x01 \x03(\x0b\x32\x1c.metalstack.api.v2.PartitionR\npartitions2\xf5\x01\n\x10PartitionService\x12n\n\x03Get\x12-.metalstack.api.v2.PartitionServiceGetRequest\x1a..metalstack.api.v2.PartitionServiceGetResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x02\x12q\n\x04List\x12..metalstack.api.v2.PartitionServiceListRequest\x1a/.metalstack.api.v2.PartitionServiceListResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x02\x42\xc4\x01\n\x15\x63om.metalstack.api.v2B\x0ePartitionProtoP\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)
@@ -52,7 +52,7 @@
_globals['_DNSSERVER'].fields_by_name['ip']._loaded_options = None
_globals['_DNSSERVER'].fields_by_name['ip']._serialized_options = b'\272H\004r\002p\001'
_globals['_NTPSERVER'].fields_by_name['address']._loaded_options = None
- _globals['_NTPSERVER'].fields_by_name['address']._serialized_options = b'\272H\005r\003\030\200\002'
+ _globals['_NTPSERVER'].fields_by_name['address']._serialized_options = b'\272H\010r\006\350\263\256\261\002\001'
_globals['_PARTITIONSERVICEGETREQUEST'].fields_by_name['id']._loaded_options = None
_globals['_PARTITIONSERVICEGETREQUEST'].fields_by_name['id']._serialized_options = b'\272H\010r\006\320\263\256\261\002\001'
_globals['_PARTITIONSERVICE'].methods_by_name['Get']._loaded_options = None
@@ -68,15 +68,15 @@
_globals['_DNSSERVER']._serialized_start=861
_globals['_DNSSERVER']._serialized_end=897
_globals['_NTPSERVER']._serialized_start=899
- _globals['_NTPSERVER']._serialized_end=946
- _globals['_PARTITIONSERVICEGETREQUEST']._serialized_start=948
- _globals['_PARTITIONSERVICEGETREQUEST']._serialized_end=1005
- _globals['_PARTITIONSERVICELISTREQUEST']._serialized_start=1007
- _globals['_PARTITIONSERVICELISTREQUEST']._serialized_end=1093
- _globals['_PARTITIONSERVICEGETRESPONSE']._serialized_start=1095
- _globals['_PARTITIONSERVICEGETRESPONSE']._serialized_end=1184
- _globals['_PARTITIONSERVICELISTRESPONSE']._serialized_start=1186
- _globals['_PARTITIONSERVICELISTRESPONSE']._serialized_end=1278
- _globals['_PARTITIONSERVICE']._serialized_start=1281
- _globals['_PARTITIONSERVICE']._serialized_end=1526
+ _globals['_NTPSERVER']._serialized_end=949
+ _globals['_PARTITIONSERVICEGETREQUEST']._serialized_start=951
+ _globals['_PARTITIONSERVICEGETREQUEST']._serialized_end=1008
+ _globals['_PARTITIONSERVICELISTREQUEST']._serialized_start=1010
+ _globals['_PARTITIONSERVICELISTREQUEST']._serialized_end=1096
+ _globals['_PARTITIONSERVICEGETRESPONSE']._serialized_start=1098
+ _globals['_PARTITIONSERVICEGETRESPONSE']._serialized_end=1187
+ _globals['_PARTITIONSERVICELISTRESPONSE']._serialized_start=1189
+ _globals['_PARTITIONSERVICELISTRESPONSE']._serialized_end=1281
+ _globals['_PARTITIONSERVICE']._serialized_start=1284
+ _globals['_PARTITIONSERVICE']._serialized_end=1529
# @@protoc_insertion_point(module_scope)
diff --git a/python/metalstack/api/v2/predefined_rules_pb2.py b/python/metalstack/api/v2/predefined_rules_pb2.py
index 76270f9b..e6353d15 100644
--- a/python/metalstack/api/v2/predefined_rules_pb2.py
+++ b/python/metalstack/api/v2/predefined_rules_pb2.py
@@ -25,7 +25,7 @@
from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n(metalstack/api/v2/predefined_rules.proto\x12\x11metalstack.api.v2\x1a\x1b\x62uf/validate/validate.proto:\xb8\x01\n\nmacaddress\x12\x19.buf.validate.StringRules\x18\xb7\xe6\x95& \x01(\x08\x42z\xc2Hw\nu\n\x11string.macaddress\x12&this string must be a valid macaddress\x1a\x38this.matches(\'^([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})$\')R\nmacaddress:\x99\x01\n\x07is_name\x12\x19.buf.validate.StringRules\x18\xb8\xe6\x95& \x01(\x08\x42\x62\xc2H_\n]\n\x0estring.is_name\x12#must be within 2 and 128 characters\x1a&this.size() >= 2 && this.size() <= 128R\x06isName:\x9a\x01\n\x0eis_description\x12\x19.buf.validate.StringRules\x18\xb9\xe6\x95& \x01(\x08\x42U\xc2HR\nP\n\x15string.is_description\x12#must be shorter than 256 characters\x1a\x12this.size() <= 256R\risDescription:\xa8\x01\n\x0cis_partition\x12\x19.buf.validate.StringRules\x18\xba\xe6\x95& \x01(\x08\x42g\xc2Hd\nb\n\x13string.is_partition\x12#must be within 2 and 128 characters\x1a&this.size() >= 2 && this.size() <= 128R\x0bisPartition:\x82\x01\n\tis_prefix\x12\x19.buf.validate.StringRules\x18\xbb\xe6\x95& \x01(\x08\x42G\xc2HD\nB\n\x0fstring.prefixes\x12\x1cgiven prefixes must be valid\x1a\x11this.isIpPrefix()R\x08isPrefix:m\n\x06is_uri\x12\x19.buf.validate.StringRules\x18\xbc\xe6\x95& \x01(\x08\x42\x38\xc2H5\n3\n\nstring.uri\x12\x17given uri must be valid\x1a\x0cthis.isUri()R\x05isUri:\x8f\x01\n\x08prefixes\x12\x1b.buf.validate.RepeatedRules\x18\xc7\xb4\x96& \x01(\x08\x42S\xc2HP\nN\n\x11repeated.prefixes\x12\x1cgiven prefixes must be valid\x1a\x1bthis.all(m, m.isIpPrefix())R\x08prefixes:u\n\x03ips\x12\x1b.buf.validate.RepeatedRules\x18\xc8\xb4\x96& \x01(\x08\x42\x43\xc2H@\n>\n\x0crepeated.ips\x12\x17given ips must be valid\x1a\x15this.all(m, m.isIp())R\x03ipsB\xca\x01\n\x15\x63om.metalstack.api.v2B\x14PredefinedRulesProtoP\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::V2')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n(metalstack/api/v2/predefined_rules.proto\x12\x11metalstack.api.v2\x1a\x1b\x62uf/validate/validate.proto:\xb8\x01\n\nmacaddress\x12\x19.buf.validate.StringRules\x18\xb7\xe6\x95& \x01(\x08\x42z\xc2Hw\nu\n\x11string.macaddress\x12&this string must be a valid macaddress\x1a\x38this.matches(\'^([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})$\')R\nmacaddress:\x99\x01\n\x07is_name\x12\x19.buf.validate.StringRules\x18\xb8\xe6\x95& \x01(\x08\x42\x62\xc2H_\n]\n\x0estring.is_name\x12#must be within 2 and 128 characters\x1a&this.size() >= 2 && this.size() <= 128R\x06isName:\x9a\x01\n\x0eis_description\x12\x19.buf.validate.StringRules\x18\xb9\xe6\x95& \x01(\x08\x42U\xc2HR\nP\n\x15string.is_description\x12#must be shorter than 256 characters\x1a\x12this.size() <= 256R\risDescription:\xa8\x01\n\x0cis_partition\x12\x19.buf.validate.StringRules\x18\xba\xe6\x95& \x01(\x08\x42g\xc2Hd\nb\n\x13string.is_partition\x12#must be within 2 and 128 characters\x1a&this.size() >= 2 && this.size() <= 128R\x0bisPartition:\x82\x01\n\tis_prefix\x12\x19.buf.validate.StringRules\x18\xbb\xe6\x95& \x01(\x08\x42G\xc2HD\nB\n\x0fstring.prefixes\x12\x1cgiven prefixes must be valid\x1a\x11this.isIpPrefix()R\x08isPrefix:m\n\x06is_uri\x12\x19.buf.validate.StringRules\x18\xbc\xe6\x95& \x01(\x08\x42\x38\xc2H5\n3\n\nstring.uri\x12\x17given uri must be valid\x1a\x0cthis.isUri()R\x05isUri:\xa7\x01\n\x11is_ip_or_hostname\x12\x19.buf.validate.StringRules\x18\xbd\xe6\x95& \x01(\x08\x42^\xc2H[\nY\n\rvalid_address\x12&must be a valid IP address or hostname\x1a this.isIp() || this.isHostname()R\x0eisIpOrHostname:\x8f\x01\n\x08prefixes\x12\x1b.buf.validate.RepeatedRules\x18\xc7\xb4\x96& \x01(\x08\x42S\xc2HP\nN\n\x11repeated.prefixes\x12\x1cgiven prefixes must be valid\x1a\x1bthis.all(m, m.isIpPrefix())R\x08prefixes:u\n\x03ips\x12\x1b.buf.validate.RepeatedRules\x18\xc8\xb4\x96& \x01(\x08\x42\x43\xc2H@\n>\n\x0crepeated.ips\x12\x17given ips must be valid\x1a\x15this.all(m, m.isIp())R\x03ipsB\xca\x01\n\x15\x63om.metalstack.api.v2B\x14PredefinedRulesProtoP\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::V2')
_globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -45,6 +45,8 @@
_globals['is_prefix']._serialized_options = b'\302HD\nB\n\017string.prefixes\022\034given prefixes must be valid\032\021this.isIpPrefix()'
_globals['is_uri']._loaded_options = None
_globals['is_uri']._serialized_options = b'\302H5\n3\n\nstring.uri\022\027given uri must be valid\032\014this.isUri()'
+ _globals['is_ip_or_hostname']._loaded_options = None
+ _globals['is_ip_or_hostname']._serialized_options = b'\302H[\nY\n\rvalid_address\022&must be a valid IP address or hostname\032 this.isIp() || this.isHostname()'
_globals['prefixes']._loaded_options = None
_globals['prefixes']._serialized_options = b'\302HP\nN\n\021repeated.prefixes\022\034given prefixes must be valid\032\033this.all(m, m.isIpPrefix())'
_globals['ips']._loaded_options = None
diff --git a/python/metalstack/api/v2/predefined_rules_pb2.pyi b/python/metalstack/api/v2/predefined_rules_pb2.pyi
index 462b1597..fcbf8847 100644
--- a/python/metalstack/api/v2/predefined_rules_pb2.pyi
+++ b/python/metalstack/api/v2/predefined_rules_pb2.pyi
@@ -15,6 +15,8 @@ IS_PREFIX_FIELD_NUMBER: _ClassVar[int]
is_prefix: _descriptor.FieldDescriptor
IS_URI_FIELD_NUMBER: _ClassVar[int]
is_uri: _descriptor.FieldDescriptor
+IS_IP_OR_HOSTNAME_FIELD_NUMBER: _ClassVar[int]
+is_ip_or_hostname: _descriptor.FieldDescriptor
PREFIXES_FIELD_NUMBER: _ClassVar[int]
prefixes: _descriptor.FieldDescriptor
IPS_FIELD_NUMBER: _ClassVar[int]
diff --git a/python/metalstack/api/v2/project_pb2.py b/python/metalstack/api/v2/project_pb2.py
index 1c9d9186..bc05bc33 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\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')
+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\"\xde\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\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\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\"\xf6\x01\n\x1bProjectServiceCreateRequest\x12!\n\x05login\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\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)
@@ -47,11 +47,11 @@
_globals['_PROJECTSERVICELISTREQUEST'].fields_by_name['name']._loaded_options = None
_globals['_PROJECTSERVICELISTREQUEST'].fields_by_name['name']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_PROJECTSERVICELISTREQUEST'].fields_by_name['tenant']._loaded_options = None
- _globals['_PROJECTSERVICELISTREQUEST'].fields_by_name['tenant']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_PROJECTSERVICELISTREQUEST'].fields_by_name['tenant']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_PROJECTSERVICEGETREQUEST'].fields_by_name['project']._loaded_options = None
_globals['_PROJECTSERVICEGETREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001'
_globals['_PROJECTSERVICECREATEREQUEST'].fields_by_name['login']._loaded_options = None
- _globals['_PROJECTSERVICECREATEREQUEST'].fields_by_name['login']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_PROJECTSERVICECREATEREQUEST'].fields_by_name['login']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_PROJECTSERVICECREATEREQUEST'].fields_by_name['name']._loaded_options = None
_globals['_PROJECTSERVICECREATEREQUEST'].fields_by_name['name']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_PROJECTSERVICECREATEREQUEST'].fields_by_name['description']._loaded_options = None
@@ -115,57 +115,57 @@
_globals['_PROJECTINVITE']._serialized_start=629
_globals['_PROJECTINVITE']._serialized_end=988
_globals['_PROJECTSERVICELISTREQUEST']._serialized_start=991
- _globals['_PROJECTSERVICELISTREQUEST']._serialized_end=1212
- _globals['_PROJECTSERVICELISTRESPONSE']._serialized_start=1214
- _globals['_PROJECTSERVICELISTRESPONSE']._serialized_end=1298
- _globals['_PROJECTSERVICEGETREQUEST']._serialized_start=1300
- _globals['_PROJECTSERVICEGETREQUEST']._serialized_end=1362
- _globals['_PROJECTSERVICEGETRESPONSE']._serialized_start=1365
- _globals['_PROJECTSERVICEGETRESPONSE']._serialized_end=1521
- _globals['_PROJECTSERVICECREATEREQUEST']._serialized_start=1524
- _globals['_PROJECTSERVICECREATEREQUEST']._serialized_end=1769
- _globals['_PROJECTSERVICECREATERESPONSE']._serialized_start=1771
- _globals['_PROJECTSERVICECREATERESPONSE']._serialized_end=1855
- _globals['_PROJECTSERVICEDELETEREQUEST']._serialized_start=1857
- _globals['_PROJECTSERVICEDELETEREQUEST']._serialized_end=1922
- _globals['_PROJECTSERVICEDELETERESPONSE']._serialized_start=1924
- _globals['_PROJECTSERVICEDELETERESPONSE']._serialized_end=2008
- _globals['_PROJECTSERVICEUPDATEREQUEST']._serialized_start=2011
- _globals['_PROJECTSERVICEUPDATEREQUEST']._serialized_end=2387
- _globals['_PROJECTSERVICEUPDATERESPONSE']._serialized_start=2389
- _globals['_PROJECTSERVICEUPDATERESPONSE']._serialized_end=2473
- _globals['_PROJECTSERVICEINVITEREQUEST']._serialized_start=2475
- _globals['_PROJECTSERVICEINVITEREQUEST']._serialized_end=2602
- _globals['_PROJECTSERVICEINVITERESPONSE']._serialized_start=2604
- _globals['_PROJECTSERVICEINVITERESPONSE']._serialized_end=2692
- _globals['_PROJECTSERVICEINVITESLISTREQUEST']._serialized_start=2694
- _globals['_PROJECTSERVICEINVITESLISTREQUEST']._serialized_end=2764
- _globals['_PROJECTSERVICEINVITESLISTRESPONSE']._serialized_start=2766
- _globals['_PROJECTSERVICEINVITESLISTRESPONSE']._serialized_end=2861
- _globals['_PROJECTSERVICEINVITEGETREQUEST']._serialized_start=2863
- _globals['_PROJECTSERVICEINVITEGETREQUEST']._serialized_end=2919
- _globals['_PROJECTSERVICEINVITEGETRESPONSE']._serialized_start=2921
- _globals['_PROJECTSERVICEINVITEGETRESPONSE']._serialized_end=3012
- _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
+ _globals['_PROJECTSERVICELISTREQUEST']._serialized_end=1213
+ _globals['_PROJECTSERVICELISTRESPONSE']._serialized_start=1215
+ _globals['_PROJECTSERVICELISTRESPONSE']._serialized_end=1299
+ _globals['_PROJECTSERVICEGETREQUEST']._serialized_start=1301
+ _globals['_PROJECTSERVICEGETREQUEST']._serialized_end=1363
+ _globals['_PROJECTSERVICEGETRESPONSE']._serialized_start=1366
+ _globals['_PROJECTSERVICEGETRESPONSE']._serialized_end=1522
+ _globals['_PROJECTSERVICECREATEREQUEST']._serialized_start=1525
+ _globals['_PROJECTSERVICECREATEREQUEST']._serialized_end=1771
+ _globals['_PROJECTSERVICECREATERESPONSE']._serialized_start=1773
+ _globals['_PROJECTSERVICECREATERESPONSE']._serialized_end=1857
+ _globals['_PROJECTSERVICEDELETEREQUEST']._serialized_start=1859
+ _globals['_PROJECTSERVICEDELETEREQUEST']._serialized_end=1924
+ _globals['_PROJECTSERVICEDELETERESPONSE']._serialized_start=1926
+ _globals['_PROJECTSERVICEDELETERESPONSE']._serialized_end=2010
+ _globals['_PROJECTSERVICEUPDATEREQUEST']._serialized_start=2013
+ _globals['_PROJECTSERVICEUPDATEREQUEST']._serialized_end=2389
+ _globals['_PROJECTSERVICEUPDATERESPONSE']._serialized_start=2391
+ _globals['_PROJECTSERVICEUPDATERESPONSE']._serialized_end=2475
+ _globals['_PROJECTSERVICEINVITEREQUEST']._serialized_start=2477
+ _globals['_PROJECTSERVICEINVITEREQUEST']._serialized_end=2604
+ _globals['_PROJECTSERVICEINVITERESPONSE']._serialized_start=2606
+ _globals['_PROJECTSERVICEINVITERESPONSE']._serialized_end=2694
+ _globals['_PROJECTSERVICEINVITESLISTREQUEST']._serialized_start=2696
+ _globals['_PROJECTSERVICEINVITESLISTREQUEST']._serialized_end=2766
+ _globals['_PROJECTSERVICEINVITESLISTRESPONSE']._serialized_start=2768
+ _globals['_PROJECTSERVICEINVITESLISTRESPONSE']._serialized_end=2863
+ _globals['_PROJECTSERVICEINVITEGETREQUEST']._serialized_start=2865
+ _globals['_PROJECTSERVICEINVITEGETREQUEST']._serialized_end=2921
+ _globals['_PROJECTSERVICEINVITEGETRESPONSE']._serialized_start=2923
+ _globals['_PROJECTSERVICEINVITEGETRESPONSE']._serialized_end=3014
+ _globals['_PROJECTSERVICELEAVEREQUEST']._serialized_start=3016
+ _globals['_PROJECTSERVICELEAVEREQUEST']._serialized_end=3080
+ _globals['_PROJECTSERVICELEAVERESPONSE']._serialized_start=3082
+ _globals['_PROJECTSERVICELEAVERESPONSE']._serialized_end=3111
+ _globals['_PROJECTSERVICEREMOVEMEMBERREQUEST']._serialized_start=3113
+ _globals['_PROJECTSERVICEREMOVEMEMBERREQUEST']._serialized_end=3208
+ _globals['_PROJECTSERVICEREMOVEMEMBERRESPONSE']._serialized_start=3210
+ _globals['_PROJECTSERVICEREMOVEMEMBERRESPONSE']._serialized_end=3246
+ _globals['_PROJECTSERVICEUPDATEMEMBERREQUEST']._serialized_start=3249
+ _globals['_PROJECTSERVICEUPDATEMEMBERREQUEST']._serialized_end=3406
+ _globals['_PROJECTSERVICEUPDATEMEMBERRESPONSE']._serialized_start=3408
+ _globals['_PROJECTSERVICEUPDATEMEMBERRESPONSE']._serialized_end=3517
+ _globals['_PROJECTSERVICEINVITEACCEPTREQUEST']._serialized_start=3519
+ _globals['_PROJECTSERVICEINVITEACCEPTREQUEST']._serialized_end=3578
+ _globals['_PROJECTSERVICEINVITEACCEPTRESPONSE']._serialized_start=3580
+ _globals['_PROJECTSERVICEINVITEACCEPTRESPONSE']._serialized_end=3677
+ _globals['_PROJECTSERVICEINVITEDELETEREQUEST']._serialized_start=3679
+ _globals['_PROJECTSERVICEINVITEDELETEREQUEST']._serialized_end=3774
+ _globals['_PROJECTSERVICEINVITEDELETERESPONSE']._serialized_start=3776
+ _globals['_PROJECTSERVICEINVITEDELETERESPONSE']._serialized_end=3812
+ _globals['_PROJECTSERVICE']._serialized_start=3815
+ _globals['_PROJECTSERVICE']._serialized_end=5449
# @@protoc_insertion_point(module_scope)
diff --git a/python/metalstack/api/v2/size_pb2.py b/python/metalstack/api/v2/size_pb2.py
index 82d18675..f39aad2c 100644
--- a/python/metalstack/api/v2/size_pb2.py
+++ b/python/metalstack/api/v2/size_pb2.py
@@ -27,7 +27,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\x1cmetalstack/api/v2/size.proto\x12\x11metalstack.api.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a(metalstack/api/v2/predefined_rules.proto\"3\n\x15SizeServiceGetRequest\x12\x1a\n\x02id\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01R\x02id\"L\n\x16SizeServiceListRequest\x12\x32\n\x05query\x18\x01 \x01(\x0b\x32\x1c.metalstack.api.v2.SizeQueryR\x05query\"E\n\x16SizeServiceGetResponse\x12+\n\x04size\x18\x01 \x01(\x0b\x32\x17.metalstack.api.v2.SizeR\x04size\"H\n\x17SizeServiceListResponse\x12-\n\x05sizes\x18\x01 \x03(\x0b\x32\x17.metalstack.api.v2.SizeR\x05sizes\"\x87\x02\n\x04Size\x12\x1a\n\x02id\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01R\x02id\x12+\n\x04meta\x18\x02 \x01(\x0b\x32\x17.metalstack.api.v2.MetaR\x04meta\x12$\n\x04name\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x12\x32\n\x0b\x64\x65scription\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x01R\x0b\x64\x65scription\x88\x01\x01\x12\x43\n\x0b\x63onstraints\x18\x06 \x03(\x0b\x32!.metalstack.api.v2.SizeConstraintR\x0b\x63onstraintsB\x07\n\x05_nameB\x0e\n\x0c_description\"\xb9\x01\n\x0eSizeConstraint\x12\x43\n\x04type\x18\x01 \x01(\x0e\x32%.metalstack.api.v2.SizeConstraintTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x04type\x12\x10\n\x03min\x18\x02 \x01(\x04R\x03min\x12\x10\n\x03max\x18\x03 \x01(\x04R\x03max\x12/\n\nidentifier\x18\x04 \x01(\tB\n\xbaH\x07r\x05\x10\x00\x18\x80\x01H\x00R\nidentifier\x88\x01\x01\x42\r\n\x0b_identifier\"\xe9\x01\n\tSizeQuery\x12\x1f\n\x02id\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01H\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\x32\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x02R\x0b\x64\x65scription\x88\x01\x01\x12\x36\n\x06labels\x18\x04 \x01(\x0b\x32\x19.metalstack.api.v2.LabelsH\x03R\x06labels\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_nameB\x0e\n\x0c_descriptionB\t\n\x07_labels*\xe8\x01\n\x12SizeConstraintType\x12$\n SIZE_CONSTRAINT_TYPE_UNSPECIFIED\x10\x00\x12)\n\x1aSIZE_CONSTRAINT_TYPE_CORES\x10\x01\x1a\t\x82\xb2\x19\x05\x63ores\x12+\n\x1bSIZE_CONSTRAINT_TYPE_MEMORY\x10\x02\x1a\n\x82\xb2\x19\x06memory\x12-\n\x1cSIZE_CONSTRAINT_TYPE_STORAGE\x10\x03\x1a\x0b\x82\xb2\x19\x07storage\x12%\n\x18SIZE_CONSTRAINT_TYPE_GPU\x10\x04\x1a\x07\x82\xb2\x19\x03gpu2\xdc\x01\n\x0bSizeService\x12\x64\n\x03Get\x12(.metalstack.api.v2.SizeServiceGetRequest\x1a).metalstack.api.v2.SizeServiceGetResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x02\x12g\n\x04List\x12).metalstack.api.v2.SizeServiceListRequest\x1a*.metalstack.api.v2.SizeServiceListResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x02\x42\xbf\x01\n\x15\x63om.metalstack.api.v2B\tSizeProtoP\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\x1cmetalstack/api/v2/size.proto\x12\x11metalstack.api.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a(metalstack/api/v2/predefined_rules.proto\"3\n\x15SizeServiceGetRequest\x12\x1a\n\x02id\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x02\x18\x80\x01R\x02id\"L\n\x16SizeServiceListRequest\x12\x32\n\x05query\x18\x01 \x01(\x0b\x32\x1c.metalstack.api.v2.SizeQueryR\x05query\"E\n\x16SizeServiceGetResponse\x12+\n\x04size\x18\x01 \x01(\x0b\x32\x17.metalstack.api.v2.SizeR\x04size\"H\n\x17SizeServiceListResponse\x12-\n\x05sizes\x18\x01 \x03(\x0b\x32\x17.metalstack.api.v2.SizeR\x05sizes\"\x88\x02\n\x04Size\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x02id\x12+\n\x04meta\x18\x02 \x01(\x0b\x32\x17.metalstack.api.v2.MetaR\x04meta\x12$\n\x04name\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x00R\x04name\x88\x01\x01\x12\x32\n\x0b\x64\x65scription\x18\x05 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x01R\x0b\x64\x65scription\x88\x01\x01\x12\x43\n\x0b\x63onstraints\x18\x06 \x03(\x0b\x32!.metalstack.api.v2.SizeConstraintR\x0b\x63onstraintsB\x07\n\x05_nameB\x0e\n\x0c_description\"\xb9\x01\n\x0eSizeConstraint\x12\x43\n\x04type\x18\x01 \x01(\x0e\x32%.metalstack.api.v2.SizeConstraintTypeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x04type\x12\x10\n\x03min\x18\x02 \x01(\x04R\x03min\x12\x10\n\x03max\x18\x03 \x01(\x04R\x03max\x12/\n\nidentifier\x18\x04 \x01(\tB\n\xbaH\x07r\x05\x10\x00\x18\x80\x01H\x00R\nidentifier\x88\x01\x01\x42\r\n\x0b_identifier\"\xea\x01\n\tSizeQuery\x12 \n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\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\x32\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x02R\x0b\x64\x65scription\x88\x01\x01\x12\x36\n\x06labels\x18\x04 \x01(\x0b\x32\x19.metalstack.api.v2.LabelsH\x03R\x06labels\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_nameB\x0e\n\x0c_descriptionB\t\n\x07_labels*\xe8\x01\n\x12SizeConstraintType\x12$\n SIZE_CONSTRAINT_TYPE_UNSPECIFIED\x10\x00\x12)\n\x1aSIZE_CONSTRAINT_TYPE_CORES\x10\x01\x1a\t\x82\xb2\x19\x05\x63ores\x12+\n\x1bSIZE_CONSTRAINT_TYPE_MEMORY\x10\x02\x1a\n\x82\xb2\x19\x06memory\x12-\n\x1cSIZE_CONSTRAINT_TYPE_STORAGE\x10\x03\x1a\x0b\x82\xb2\x19\x07storage\x12%\n\x18SIZE_CONSTRAINT_TYPE_GPU\x10\x04\x1a\x07\x82\xb2\x19\x03gpu2\xdc\x01\n\x0bSizeService\x12\x64\n\x03Get\x12(.metalstack.api.v2.SizeServiceGetRequest\x1a).metalstack.api.v2.SizeServiceGetResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x02\x12g\n\x04List\x12).metalstack.api.v2.SizeServiceListRequest\x1a*.metalstack.api.v2.SizeServiceListResponse\"\x08\xd8\xf3\x18\x03\xe0\xf3\x18\x02\x42\xbf\x01\n\x15\x63om.metalstack.api.v2B\tSizeProtoP\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)
@@ -46,7 +46,7 @@
_globals['_SIZESERVICEGETREQUEST'].fields_by_name['id']._loaded_options = None
_globals['_SIZESERVICEGETREQUEST'].fields_by_name['id']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
_globals['_SIZE'].fields_by_name['id']._loaded_options = None
- _globals['_SIZE'].fields_by_name['id']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_SIZE'].fields_by_name['id']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_SIZE'].fields_by_name['name']._loaded_options = None
_globals['_SIZE'].fields_by_name['name']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_SIZE'].fields_by_name['description']._loaded_options = None
@@ -56,7 +56,7 @@
_globals['_SIZECONSTRAINT'].fields_by_name['identifier']._loaded_options = None
_globals['_SIZECONSTRAINT'].fields_by_name['identifier']._serialized_options = b'\272H\007r\005\020\000\030\200\001'
_globals['_SIZEQUERY'].fields_by_name['id']._loaded_options = None
- _globals['_SIZEQUERY'].fields_by_name['id']._serialized_options = b'\272H\007r\005\020\002\030\200\001'
+ _globals['_SIZEQUERY'].fields_by_name['id']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_SIZEQUERY'].fields_by_name['name']._loaded_options = None
_globals['_SIZEQUERY'].fields_by_name['name']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
_globals['_SIZEQUERY'].fields_by_name['description']._loaded_options = None
@@ -65,8 +65,8 @@
_globals['_SIZESERVICE'].methods_by_name['Get']._serialized_options = b'\330\363\030\003\340\363\030\002'
_globals['_SIZESERVICE'].methods_by_name['List']._loaded_options = None
_globals['_SIZESERVICE'].methods_by_name['List']._serialized_options = b'\330\363\030\003\340\363\030\002'
- _globals['_SIZECONSTRAINTTYPE']._serialized_start=1121
- _globals['_SIZECONSTRAINTTYPE']._serialized_end=1353
+ _globals['_SIZECONSTRAINTTYPE']._serialized_start=1123
+ _globals['_SIZECONSTRAINTTYPE']._serialized_end=1355
_globals['_SIZESERVICEGETREQUEST']._serialized_start=154
_globals['_SIZESERVICEGETREQUEST']._serialized_end=205
_globals['_SIZESERVICELISTREQUEST']._serialized_start=207
@@ -76,11 +76,11 @@
_globals['_SIZESERVICELISTRESPONSE']._serialized_start=356
_globals['_SIZESERVICELISTRESPONSE']._serialized_end=428
_globals['_SIZE']._serialized_start=431
- _globals['_SIZE']._serialized_end=694
- _globals['_SIZECONSTRAINT']._serialized_start=697
- _globals['_SIZECONSTRAINT']._serialized_end=882
- _globals['_SIZEQUERY']._serialized_start=885
- _globals['_SIZEQUERY']._serialized_end=1118
- _globals['_SIZESERVICE']._serialized_start=1356
- _globals['_SIZESERVICE']._serialized_end=1576
+ _globals['_SIZE']._serialized_end=695
+ _globals['_SIZECONSTRAINT']._serialized_start=698
+ _globals['_SIZECONSTRAINT']._serialized_end=883
+ _globals['_SIZEQUERY']._serialized_start=886
+ _globals['_SIZEQUERY']._serialized_end=1120
+ _globals['_SIZESERVICE']._serialized_start=1358
+ _globals['_SIZESERVICE']._serialized_end=1578
# @@protoc_insertion_point(module_scope)
diff --git a/python/metalstack/api/v2/size_reservation_connect.py b/python/metalstack/api/v2/size_reservation_connect.py
new file mode 100644
index 00000000..21699f85
--- /dev/null
+++ b/python/metalstack/api/v2/size_reservation_connect.py
@@ -0,0 +1,185 @@
+# -*- coding: utf-8 -*-
+# Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT!
+# source: metalstack/api/v2/size_reservation.proto
+
+from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping
+from typing import Protocol
+
+from connectrpc.client import ConnectClient, ConnectClientSync
+from connectrpc.code import Code
+from connectrpc.errors import ConnectError
+from connectrpc.interceptor import Interceptor, InterceptorSync
+from connectrpc.method import IdempotencyLevel, MethodInfo
+from connectrpc.request import Headers, RequestContext
+from connectrpc.server import ConnectASGIApplication, ConnectWSGIApplication, Endpoint, EndpointSync
+import metalstack.api.v2.size_reservation_pb2 as metalstack_dot_api_dot_v2_dot_size__reservation__pb2
+
+
+class SizeReservationService(Protocol):
+ async def get(self, request: metalstack_dot_api_dot_v2_dot_size__reservation__pb2.SizeReservationServiceGetRequest, ctx: RequestContext) -> metalstack_dot_api_dot_v2_dot_size__reservation__pb2.SizeReservationServiceGetResponse:
+ raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
+
+ async def list(self, request: metalstack_dot_api_dot_v2_dot_size__reservation__pb2.SizeReservationServiceListRequest, ctx: RequestContext) -> metalstack_dot_api_dot_v2_dot_size__reservation__pb2.SizeReservationServiceListResponse:
+ raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
+
+
+class SizeReservationServiceASGIApplication(ConnectASGIApplication[SizeReservationService]):
+ def __init__(self, service: SizeReservationService | AsyncGenerator[SizeReservationService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None:
+ super().__init__(
+ service=service,
+ endpoints=lambda svc: {
+ "/metalstack.api.v2.SizeReservationService/Get": Endpoint.unary(
+ method=MethodInfo(
+ name="Get",
+ service_name="metalstack.api.v2.SizeReservationService",
+ input=metalstack_dot_api_dot_v2_dot_size__reservation__pb2.SizeReservationServiceGetRequest,
+ output=metalstack_dot_api_dot_v2_dot_size__reservation__pb2.SizeReservationServiceGetResponse,
+ idempotency_level=IdempotencyLevel.UNKNOWN,
+ ),
+ function=svc.get,
+ ),
+ "/metalstack.api.v2.SizeReservationService/List": Endpoint.unary(
+ method=MethodInfo(
+ name="List",
+ service_name="metalstack.api.v2.SizeReservationService",
+ input=metalstack_dot_api_dot_v2_dot_size__reservation__pb2.SizeReservationServiceListRequest,
+ output=metalstack_dot_api_dot_v2_dot_size__reservation__pb2.SizeReservationServiceListResponse,
+ idempotency_level=IdempotencyLevel.UNKNOWN,
+ ),
+ function=svc.list,
+ ),
+ },
+ interceptors=interceptors,
+ read_max_bytes=read_max_bytes,
+ )
+
+ @property
+ def path(self) -> str:
+ """Returns the URL path to mount the application to when serving multiple applications."""
+ return "/metalstack.api.v2.SizeReservationService"
+
+
+class SizeReservationServiceClient(ConnectClient):
+ async def get(
+ self,
+ request: metalstack_dot_api_dot_v2_dot_size__reservation__pb2.SizeReservationServiceGetRequest,
+ *,
+ headers: Headers | Mapping[str, str] | None = None,
+ timeout_ms: int | None = None,
+ ) -> metalstack_dot_api_dot_v2_dot_size__reservation__pb2.SizeReservationServiceGetResponse:
+ return await self.execute_unary(
+ request=request,
+ method=MethodInfo(
+ name="Get",
+ service_name="metalstack.api.v2.SizeReservationService",
+ input=metalstack_dot_api_dot_v2_dot_size__reservation__pb2.SizeReservationServiceGetRequest,
+ output=metalstack_dot_api_dot_v2_dot_size__reservation__pb2.SizeReservationServiceGetResponse,
+ idempotency_level=IdempotencyLevel.UNKNOWN,
+ ),
+ headers=headers,
+ timeout_ms=timeout_ms,
+ )
+
+ async def list(
+ self,
+ request: metalstack_dot_api_dot_v2_dot_size__reservation__pb2.SizeReservationServiceListRequest,
+ *,
+ headers: Headers | Mapping[str, str] | None = None,
+ timeout_ms: int | None = None,
+ ) -> metalstack_dot_api_dot_v2_dot_size__reservation__pb2.SizeReservationServiceListResponse:
+ return await self.execute_unary(
+ request=request,
+ method=MethodInfo(
+ name="List",
+ service_name="metalstack.api.v2.SizeReservationService",
+ input=metalstack_dot_api_dot_v2_dot_size__reservation__pb2.SizeReservationServiceListRequest,
+ output=metalstack_dot_api_dot_v2_dot_size__reservation__pb2.SizeReservationServiceListResponse,
+ idempotency_level=IdempotencyLevel.UNKNOWN,
+ ),
+ headers=headers,
+ timeout_ms=timeout_ms,
+ )
+
+
+class SizeReservationServiceSync(Protocol):
+ def get(self, request: metalstack_dot_api_dot_v2_dot_size__reservation__pb2.SizeReservationServiceGetRequest, ctx: RequestContext) -> metalstack_dot_api_dot_v2_dot_size__reservation__pb2.SizeReservationServiceGetResponse:
+ raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
+ def list(self, request: metalstack_dot_api_dot_v2_dot_size__reservation__pb2.SizeReservationServiceListRequest, ctx: RequestContext) -> metalstack_dot_api_dot_v2_dot_size__reservation__pb2.SizeReservationServiceListResponse:
+ raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
+
+
+class SizeReservationServiceWSGIApplication(ConnectWSGIApplication):
+ def __init__(self, service: SizeReservationServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None) -> None:
+ super().__init__(
+ endpoints={
+ "/metalstack.api.v2.SizeReservationService/Get": EndpointSync.unary(
+ method=MethodInfo(
+ name="Get",
+ service_name="metalstack.api.v2.SizeReservationService",
+ input=metalstack_dot_api_dot_v2_dot_size__reservation__pb2.SizeReservationServiceGetRequest,
+ output=metalstack_dot_api_dot_v2_dot_size__reservation__pb2.SizeReservationServiceGetResponse,
+ idempotency_level=IdempotencyLevel.UNKNOWN,
+ ),
+ function=service.get,
+ ),
+ "/metalstack.api.v2.SizeReservationService/List": EndpointSync.unary(
+ method=MethodInfo(
+ name="List",
+ service_name="metalstack.api.v2.SizeReservationService",
+ input=metalstack_dot_api_dot_v2_dot_size__reservation__pb2.SizeReservationServiceListRequest,
+ output=metalstack_dot_api_dot_v2_dot_size__reservation__pb2.SizeReservationServiceListResponse,
+ idempotency_level=IdempotencyLevel.UNKNOWN,
+ ),
+ function=service.list,
+ ),
+ },
+ interceptors=interceptors,
+ read_max_bytes=read_max_bytes,
+ )
+
+ @property
+ def path(self) -> str:
+ """Returns the URL path to mount the application to when serving multiple applications."""
+ return "/metalstack.api.v2.SizeReservationService"
+
+
+class SizeReservationServiceClientSync(ConnectClientSync):
+ def get(
+ self,
+ request: metalstack_dot_api_dot_v2_dot_size__reservation__pb2.SizeReservationServiceGetRequest,
+ *,
+ headers: Headers | Mapping[str, str] | None = None,
+ timeout_ms: int | None = None,
+ ) -> metalstack_dot_api_dot_v2_dot_size__reservation__pb2.SizeReservationServiceGetResponse:
+ return self.execute_unary(
+ request=request,
+ method=MethodInfo(
+ name="Get",
+ service_name="metalstack.api.v2.SizeReservationService",
+ input=metalstack_dot_api_dot_v2_dot_size__reservation__pb2.SizeReservationServiceGetRequest,
+ output=metalstack_dot_api_dot_v2_dot_size__reservation__pb2.SizeReservationServiceGetResponse,
+ idempotency_level=IdempotencyLevel.UNKNOWN,
+ ),
+ headers=headers,
+ timeout_ms=timeout_ms,
+ )
+
+ def list(
+ self,
+ request: metalstack_dot_api_dot_v2_dot_size__reservation__pb2.SizeReservationServiceListRequest,
+ *,
+ headers: Headers | Mapping[str, str] | None = None,
+ timeout_ms: int | None = None,
+ ) -> metalstack_dot_api_dot_v2_dot_size__reservation__pb2.SizeReservationServiceListResponse:
+ return self.execute_unary(
+ request=request,
+ method=MethodInfo(
+ name="List",
+ service_name="metalstack.api.v2.SizeReservationService",
+ input=metalstack_dot_api_dot_v2_dot_size__reservation__pb2.SizeReservationServiceListRequest,
+ output=metalstack_dot_api_dot_v2_dot_size__reservation__pb2.SizeReservationServiceListResponse,
+ idempotency_level=IdempotencyLevel.UNKNOWN,
+ ),
+ headers=headers,
+ timeout_ms=timeout_ms,
+ )
diff --git a/python/metalstack/api/v2/size_reservation_pb2.py b/python/metalstack/api/v2/size_reservation_pb2.py
new file mode 100644
index 00000000..7bfd2a17
--- /dev/null
+++ b/python/metalstack/api/v2/size_reservation_pb2.py
@@ -0,0 +1,88 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# NO CHECKED-IN PROTOBUF GENCODE
+# source: metalstack/api/v2/size_reservation.proto
+# Protobuf Python Version: 6.33.5
+"""Generated protocol buffer code."""
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import runtime_version as _runtime_version
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf.internal import builder as _builder
+_runtime_version.ValidateProtobufRuntimeVersion(
+ _runtime_version.Domain.PUBLIC,
+ 6,
+ 33,
+ 5,
+ '',
+ 'metalstack/api/v2/size_reservation.proto'
+)
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2
+from metalstack.api.v2 import common_pb2 as metalstack_dot_api_dot_v2_dot_common__pb2
+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(metalstack/api/v2/size_reservation.proto\x12\x11metalstack.api.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1emetalstack/api/v2/common.proto\x1a(metalstack/api/v2/predefined_rules.proto\"`\n SizeReservationServiceGetRequest\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\x12\"\n\x07project\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\"\x86\x01\n!SizeReservationServiceListRequest\x12\"\n\x07project\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12=\n\x05query\x18\x02 \x01(\x0b\x32\'.metalstack.api.v2.SizeReservationQueryR\x05query\"r\n!SizeReservationServiceGetResponse\x12M\n\x10size_reservation\x18\x01 \x01(\x0b\x32\".metalstack.api.v2.SizeReservationR\x0fsizeReservation\"u\n\"SizeReservationServiceListResponse\x12O\n\x11size_reservations\x18\x01 \x03(\x0b\x32\".metalstack.api.v2.SizeReservationR\x10sizeReservations\"\xc7\x02\n\x0fSizeReservation\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0b\xbaH\x08r\x03\xb0\x01\x01\xd8\x01\x01R\x02id\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\"\n\x07project\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x07project\x12\x1f\n\x04size\x18\x06 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01R\x04size\x12\x34\n\npartitions\x18\x07 \x03(\tB\x14\xbaH\x11\x92\x01\x0e\x08\x01\x18\x01\"\x08r\x06\xd0\xb3\xae\xb1\x02\x01R\npartitions\x12\x1f\n\x06\x61mount\x18\x08 \x01(\x05\x42\x07\xbaH\x04\x1a\x02 \x00R\x06\x61mount\"\x94\x03\n\x14SizeReservationQuery\x12\x1d\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\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\x32\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x0b\xbaH\x08r\x06\xc8\xb3\xae\xb1\x02\x01H\x02R\x0b\x64\x65scription\x88\x01\x01\x12$\n\x04size\x18\x04 \x01(\tB\x0b\xbaH\x08r\x06\xc0\xb3\xae\xb1\x02\x01H\x03R\x04size\x88\x01\x01\x12\'\n\x07project\x18\x05 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x04R\x07project\x88\x01\x01\x12.\n\tpartition\x18\x06 \x01(\tB\x0b\xbaH\x08r\x06\xd0\xb3\xae\xb1\x02\x01H\x05R\tpartition\x88\x01\x01\x12\x36\n\x06labels\x18\x07 \x01(\x0b\x32\x19.metalstack.api.v2.LabelsH\x06R\x06labels\x88\x01\x01\x42\x05\n\x03_idB\x07\n\x05_nameB\x0e\n\x0c_descriptionB\x07\n\x05_sizeB\n\n\x08_projectB\x0c\n\n_partitionB\t\n\x07_labels2\x9a\x02\n\x16SizeReservationService\x12}\n\x03Get\x12\x33.metalstack.api.v2.SizeReservationServiceGetRequest\x1a\x34.metalstack.api.v2.SizeReservationServiceGetResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x12\x80\x01\n\x04List\x12\x34.metalstack.api.v2.SizeReservationServiceListRequest\x1a\x35.metalstack.api.v2.SizeReservationServiceListResponse\"\x0b\xca\xf3\x18\x03\x01\x02\x03\xe0\xf3\x18\x02\x42\xca\x01\n\x15\x63om.metalstack.api.v2B\x14SizeReservationProtoP\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)
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'metalstack.api.v2.size_reservation_pb2', _globals)
+if not _descriptor._USE_C_DESCRIPTORS:
+ _globals['DESCRIPTOR']._loaded_options = None
+ _globals['DESCRIPTOR']._serialized_options = b'\n\025com.metalstack.api.v2B\024SizeReservationProtoP\001Z5github.com/metal-stack/api/go/metalstack/api/v2;apiv2\242\002\003MAX\252\002\021Metalstack.Api.V2\312\002\021Metalstack\\Api\\V2\342\002\035Metalstack\\Api\\V2\\GPBMetadata\352\002\023Metalstack::Api::V2'
+ _globals['_SIZERESERVATIONSERVICEGETREQUEST'].fields_by_name['id']._loaded_options = None
+ _globals['_SIZERESERVATIONSERVICEGETREQUEST'].fields_by_name['id']._serialized_options = b'\272H\005r\003\260\001\001'
+ _globals['_SIZERESERVATIONSERVICEGETREQUEST'].fields_by_name['project']._loaded_options = None
+ _globals['_SIZERESERVATIONSERVICEGETREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001'
+ _globals['_SIZERESERVATIONSERVICELISTREQUEST'].fields_by_name['project']._loaded_options = None
+ _globals['_SIZERESERVATIONSERVICELISTREQUEST'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001'
+ _globals['_SIZERESERVATION'].fields_by_name['id']._loaded_options = None
+ _globals['_SIZERESERVATION'].fields_by_name['id']._serialized_options = b'\272H\010r\003\260\001\001\330\001\001'
+ _globals['_SIZERESERVATION'].fields_by_name['name']._loaded_options = None
+ _globals['_SIZERESERVATION'].fields_by_name['name']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
+ _globals['_SIZERESERVATION'].fields_by_name['description']._loaded_options = None
+ _globals['_SIZERESERVATION'].fields_by_name['description']._serialized_options = b'\272H\010r\006\310\263\256\261\002\001'
+ _globals['_SIZERESERVATION'].fields_by_name['project']._loaded_options = None
+ _globals['_SIZERESERVATION'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001'
+ _globals['_SIZERESERVATION'].fields_by_name['size']._loaded_options = None
+ _globals['_SIZERESERVATION'].fields_by_name['size']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
+ _globals['_SIZERESERVATION'].fields_by_name['partitions']._loaded_options = None
+ _globals['_SIZERESERVATION'].fields_by_name['partitions']._serialized_options = b'\272H\021\222\001\016\010\001\030\001\"\010r\006\320\263\256\261\002\001'
+ _globals['_SIZERESERVATION'].fields_by_name['amount']._loaded_options = None
+ _globals['_SIZERESERVATION'].fields_by_name['amount']._serialized_options = b'\272H\004\032\002 \000'
+ _globals['_SIZERESERVATIONQUERY'].fields_by_name['id']._loaded_options = None
+ _globals['_SIZERESERVATIONQUERY'].fields_by_name['id']._serialized_options = b'\272H\005r\003\260\001\001'
+ _globals['_SIZERESERVATIONQUERY'].fields_by_name['name']._loaded_options = None
+ _globals['_SIZERESERVATIONQUERY'].fields_by_name['name']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
+ _globals['_SIZERESERVATIONQUERY'].fields_by_name['description']._loaded_options = None
+ _globals['_SIZERESERVATIONQUERY'].fields_by_name['description']._serialized_options = b'\272H\010r\006\310\263\256\261\002\001'
+ _globals['_SIZERESERVATIONQUERY'].fields_by_name['size']._loaded_options = None
+ _globals['_SIZERESERVATIONQUERY'].fields_by_name['size']._serialized_options = b'\272H\010r\006\300\263\256\261\002\001'
+ _globals['_SIZERESERVATIONQUERY'].fields_by_name['project']._loaded_options = None
+ _globals['_SIZERESERVATIONQUERY'].fields_by_name['project']._serialized_options = b'\272H\005r\003\260\001\001'
+ _globals['_SIZERESERVATIONQUERY'].fields_by_name['partition']._loaded_options = None
+ _globals['_SIZERESERVATIONQUERY'].fields_by_name['partition']._serialized_options = b'\272H\010r\006\320\263\256\261\002\001'
+ _globals['_SIZERESERVATIONSERVICE'].methods_by_name['Get']._loaded_options = None
+ _globals['_SIZERESERVATIONSERVICE'].methods_by_name['Get']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002'
+ _globals['_SIZERESERVATIONSERVICE'].methods_by_name['List']._loaded_options = None
+ _globals['_SIZERESERVATIONSERVICE'].methods_by_name['List']._serialized_options = b'\312\363\030\003\001\002\003\340\363\030\002'
+ _globals['_SIZERESERVATIONSERVICEGETREQUEST']._serialized_start=166
+ _globals['_SIZERESERVATIONSERVICEGETREQUEST']._serialized_end=262
+ _globals['_SIZERESERVATIONSERVICELISTREQUEST']._serialized_start=265
+ _globals['_SIZERESERVATIONSERVICELISTREQUEST']._serialized_end=399
+ _globals['_SIZERESERVATIONSERVICEGETRESPONSE']._serialized_start=401
+ _globals['_SIZERESERVATIONSERVICEGETRESPONSE']._serialized_end=515
+ _globals['_SIZERESERVATIONSERVICELISTRESPONSE']._serialized_start=517
+ _globals['_SIZERESERVATIONSERVICELISTRESPONSE']._serialized_end=634
+ _globals['_SIZERESERVATION']._serialized_start=637
+ _globals['_SIZERESERVATION']._serialized_end=964
+ _globals['_SIZERESERVATIONQUERY']._serialized_start=967
+ _globals['_SIZERESERVATIONQUERY']._serialized_end=1371
+ _globals['_SIZERESERVATIONSERVICE']._serialized_start=1374
+ _globals['_SIZERESERVATIONSERVICE']._serialized_end=1656
+# @@protoc_insertion_point(module_scope)
diff --git a/python/metalstack/api/v2/size_reservation_pb2.pyi b/python/metalstack/api/v2/size_reservation_pb2.pyi
new file mode 100644
index 00000000..135255bc
--- /dev/null
+++ b/python/metalstack/api/v2/size_reservation_pb2.pyi
@@ -0,0 +1,76 @@
+from buf.validate import validate_pb2 as _validate_pb2
+from metalstack.api.v2 import common_pb2 as _common_pb2
+from metalstack.api.v2 import predefined_rules_pb2 as _predefined_rules_pb2
+from google.protobuf.internal import containers as _containers
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from collections.abc import Iterable as _Iterable, Mapping as _Mapping
+from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union
+
+DESCRIPTOR: _descriptor.FileDescriptor
+
+class SizeReservationServiceGetRequest(_message.Message):
+ __slots__ = ("id", "project")
+ ID_FIELD_NUMBER: _ClassVar[int]
+ PROJECT_FIELD_NUMBER: _ClassVar[int]
+ id: str
+ project: str
+ def __init__(self, id: _Optional[str] = ..., project: _Optional[str] = ...) -> None: ...
+
+class SizeReservationServiceListRequest(_message.Message):
+ __slots__ = ("project", "query")
+ PROJECT_FIELD_NUMBER: _ClassVar[int]
+ QUERY_FIELD_NUMBER: _ClassVar[int]
+ project: str
+ query: SizeReservationQuery
+ def __init__(self, project: _Optional[str] = ..., query: _Optional[_Union[SizeReservationQuery, _Mapping]] = ...) -> None: ...
+
+class SizeReservationServiceGetResponse(_message.Message):
+ __slots__ = ("size_reservation",)
+ SIZE_RESERVATION_FIELD_NUMBER: _ClassVar[int]
+ size_reservation: SizeReservation
+ def __init__(self, size_reservation: _Optional[_Union[SizeReservation, _Mapping]] = ...) -> None: ...
+
+class SizeReservationServiceListResponse(_message.Message):
+ __slots__ = ("size_reservations",)
+ SIZE_RESERVATIONS_FIELD_NUMBER: _ClassVar[int]
+ size_reservations: _containers.RepeatedCompositeFieldContainer[SizeReservation]
+ def __init__(self, size_reservations: _Optional[_Iterable[_Union[SizeReservation, _Mapping]]] = ...) -> None: ...
+
+class SizeReservation(_message.Message):
+ __slots__ = ("id", "meta", "name", "description", "project", "size", "partitions", "amount")
+ ID_FIELD_NUMBER: _ClassVar[int]
+ META_FIELD_NUMBER: _ClassVar[int]
+ NAME_FIELD_NUMBER: _ClassVar[int]
+ DESCRIPTION_FIELD_NUMBER: _ClassVar[int]
+ PROJECT_FIELD_NUMBER: _ClassVar[int]
+ SIZE_FIELD_NUMBER: _ClassVar[int]
+ PARTITIONS_FIELD_NUMBER: _ClassVar[int]
+ AMOUNT_FIELD_NUMBER: _ClassVar[int]
+ id: str
+ meta: _common_pb2.Meta
+ name: str
+ description: str
+ project: str
+ size: str
+ partitions: _containers.RepeatedScalarFieldContainer[str]
+ amount: int
+ def __init__(self, id: _Optional[str] = ..., meta: _Optional[_Union[_common_pb2.Meta, _Mapping]] = ..., name: _Optional[str] = ..., description: _Optional[str] = ..., project: _Optional[str] = ..., size: _Optional[str] = ..., partitions: _Optional[_Iterable[str]] = ..., amount: _Optional[int] = ...) -> None: ...
+
+class SizeReservationQuery(_message.Message):
+ __slots__ = ("id", "name", "description", "size", "project", "partition", "labels")
+ ID_FIELD_NUMBER: _ClassVar[int]
+ NAME_FIELD_NUMBER: _ClassVar[int]
+ DESCRIPTION_FIELD_NUMBER: _ClassVar[int]
+ SIZE_FIELD_NUMBER: _ClassVar[int]
+ PROJECT_FIELD_NUMBER: _ClassVar[int]
+ PARTITION_FIELD_NUMBER: _ClassVar[int]
+ LABELS_FIELD_NUMBER: _ClassVar[int]
+ id: str
+ name: str
+ description: str
+ size: str
+ project: str
+ partition: str
+ labels: _common_pb2.Labels
+ def __init__(self, id: _Optional[str] = ..., name: _Optional[str] = ..., description: _Optional[str] = ..., size: _Optional[str] = ..., project: _Optional[str] = ..., partition: _Optional[str] = ..., labels: _Optional[_Union[_common_pb2.Labels, _Mapping]] = ...) -> None: ...
diff --git a/python/metalstack/client/client.py b/python/metalstack/client/client.py
index b88fd1f6..941a7e0d 100755
--- a/python/metalstack/client/client.py
+++ b/python/metalstack/client/client.py
@@ -10,6 +10,7 @@
import metalstack.admin.v2.partition_connect as admin_partition_connect
import metalstack.admin.v2.project_connect as admin_project_connect
import metalstack.admin.v2.size_connect as admin_size_connect
+import metalstack.admin.v2.sizereservation_connect as admin_sizereservation_connect
import metalstack.admin.v2.switch_connect as admin_switch_connect
import metalstack.admin.v2.task_connect as admin_task_connect
import metalstack.admin.v2.tenant_connect as admin_tenant_connect
@@ -26,6 +27,7 @@
import metalstack.api.v2.partition_connect as api_partition_connect
import metalstack.api.v2.project_connect as api_project_connect
import metalstack.api.v2.size_connect as api_size_connect
+import metalstack.api.v2.sizereservation_connect as api_sizereservation_connect
import metalstack.api.v2.tenant_connect as api_tenant_connect
import metalstack.api.v2.token_connect as api_token_connect
import metalstack.api.v2.user_connect as api_user_connect
@@ -91,6 +93,9 @@ def project(self):
def size(self):
return admin_size_connect.SizeServiceClientSync(address=self._baseurl, http_client=self._client)
+ def sizereservation(self):
+ return admin_sizereservation_connect.SizeReservationServiceClientSync(address=self._baseurl, http_client=self._client)
+
def switch(self):
return admin_switch_connect.SwitchServiceClientSync(address=self._baseurl, http_client=self._client)
@@ -143,6 +148,9 @@ def project(self):
def size(self):
return api_size_connect.SizeServiceClientSync(address=self._baseurl, http_client=self._client)
+ def sizereservation(self):
+ return api_sizereservation_connect.SizeReservationServiceClientSync(address=self._baseurl, http_client=self._client)
+
def tenant(self):
return api_tenant_connect.TenantServiceClientSync(address=self._baseurl, http_client=self._client)