From 16af7ee94f0515e3f10f2c5892467beddddac202 Mon Sep 17 00:00:00 2001
From: Gerrit
Date: Thu, 2 Apr 2026 10:25:46 +0200
Subject: [PATCH 1/2] Add classification field for fetching latest image.
---
doc/index.html | 7 +++
go/metalstack/api/v2/image.pb.go | 67 +++++++++++++++-----------
js/metalstack/api/v2/image_pb.d.ts | 6 +++
js/metalstack/api/v2/image_pb.js | 2 +-
js/metalstack/api/v2/image_pb.ts | 9 +++-
proto/metalstack/api/v2/image.proto | 2 +
python/metalstack/api/v2/image_pb2.py | 44 +++++++++--------
python/metalstack/api/v2/image_pb2.pyi | 6 ++-
8 files changed, 91 insertions(+), 52 deletions(-)
diff --git a/doc/index.html b/doc/index.html
index 0a161615..87412c65 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -6568,6 +6568,13 @@
+
+ | classification |
+ ImageClassification |
+ optional |
+ Classification of the image latest image, defaults to IMAGE_CLASSIFICATION_SUPPORTED |
+
+
diff --git a/go/metalstack/api/v2/image.pb.go b/go/metalstack/api/v2/image.pb.go
index b4162f67..404ff1fe 100644
--- a/go/metalstack/api/v2/image.pb.go
+++ b/go/metalstack/api/v2/image.pb.go
@@ -230,9 +230,11 @@ type ImageServiceLatestRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
// OS for which the latest image should be fetched
// should contain os and major.minor then latest patch version of this os is returned
- Os string `protobuf:"bytes,1,opt,name=os,proto3" json:"os,omitempty"`
- unknownFields protoimpl.UnknownFields
- sizeCache protoimpl.SizeCache
+ Os string `protobuf:"bytes,1,opt,name=os,proto3" json:"os,omitempty"`
+ // Classification of the image latest image, defaults to IMAGE_CLASSIFICATION_SUPPORTED
+ Classification *ImageClassification `protobuf:"varint,2,opt,name=classification,proto3,enum=metalstack.api.v2.ImageClassification,oneof" json:"classification,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *ImageServiceLatestRequest) Reset() {
@@ -272,6 +274,13 @@ func (x *ImageServiceLatestRequest) GetOs() string {
return ""
}
+func (x *ImageServiceLatestRequest) GetClassification() ImageClassification {
+ if x != nil && x.Classification != nil {
+ return *x.Classification
+ }
+ return ImageClassification_IMAGE_CLASSIFICATION_UNSPECIFIED
+}
+
// ImageServiceGetResponse is the response payload for a image get request
type ImageServiceGetResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
@@ -700,9 +709,11 @@ const file_metalstack_api_v2_image_proto_rawDesc = "" +
"\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" +
+ "\x05query\x18\x01 \x01(\v2\x1d.metalstack.api.v2.ImageQueryR\x05query\"\x9d\x01\n" +
"\x19ImageServiceLatestRequest\x12\x0e\n" +
- "\x02os\x18\x01 \x01(\tR\x02os\"I\n" +
+ "\x02os\x18\x01 \x01(\tR\x02os\x12]\n" +
+ "\x0eclassification\x18\x02 \x01(\x0e2&.metalstack.api.v2.ImageClassificationB\b\xbaH\x05\x82\x01\x02\x10\x01H\x00R\x0eclassification\x88\x01\x01B\x11\n" +
+ "\x0f_classification\"I\n" +
"\x17ImageServiceGetResponse\x12.\n" +
"\x05image\x18\x01 \x01(\v2\x18.metalstack.api.v2.ImageR\x05image\"L\n" +
"\x18ImageServiceListResponse\x120\n" +
@@ -798,28 +809,29 @@ var file_metalstack_api_v2_image_proto_goTypes = []any{
}
var file_metalstack_api_v2_image_proto_depIdxs = []int32{
10, // 0: metalstack.api.v2.ImageServiceListRequest.query:type_name -> metalstack.api.v2.ImageQuery
- 8, // 1: metalstack.api.v2.ImageServiceGetResponse.image:type_name -> metalstack.api.v2.Image
- 8, // 2: metalstack.api.v2.ImageServiceListResponse.images:type_name -> metalstack.api.v2.Image
- 8, // 3: metalstack.api.v2.ImageServiceLatestResponse.image:type_name -> metalstack.api.v2.Image
- 11, // 4: metalstack.api.v2.Image.meta:type_name -> metalstack.api.v2.Meta
- 0, // 5: metalstack.api.v2.Image.features:type_name -> metalstack.api.v2.ImageFeature
- 1, // 6: metalstack.api.v2.Image.classification:type_name -> metalstack.api.v2.ImageClassification
- 12, // 7: metalstack.api.v2.Image.expires_at:type_name -> google.protobuf.Timestamp
- 8, // 8: metalstack.api.v2.ImageUsage.image:type_name -> metalstack.api.v2.Image
- 0, // 9: metalstack.api.v2.ImageQuery.feature:type_name -> metalstack.api.v2.ImageFeature
- 1, // 10: metalstack.api.v2.ImageQuery.classification:type_name -> metalstack.api.v2.ImageClassification
- 13, // 11: metalstack.api.v2.ImageQuery.labels:type_name -> metalstack.api.v2.Labels
- 2, // 12: metalstack.api.v2.ImageService.Get:input_type -> metalstack.api.v2.ImageServiceGetRequest
- 3, // 13: metalstack.api.v2.ImageService.List:input_type -> metalstack.api.v2.ImageServiceListRequest
- 4, // 14: metalstack.api.v2.ImageService.Latest:input_type -> metalstack.api.v2.ImageServiceLatestRequest
- 5, // 15: metalstack.api.v2.ImageService.Get:output_type -> metalstack.api.v2.ImageServiceGetResponse
- 6, // 16: metalstack.api.v2.ImageService.List:output_type -> metalstack.api.v2.ImageServiceListResponse
- 7, // 17: metalstack.api.v2.ImageService.Latest:output_type -> metalstack.api.v2.ImageServiceLatestResponse
- 15, // [15:18] is the sub-list for method output_type
- 12, // [12:15] is the sub-list for method input_type
- 12, // [12:12] is the sub-list for extension type_name
- 12, // [12:12] is the sub-list for extension extendee
- 0, // [0:12] is the sub-list for field type_name
+ 1, // 1: metalstack.api.v2.ImageServiceLatestRequest.classification:type_name -> metalstack.api.v2.ImageClassification
+ 8, // 2: metalstack.api.v2.ImageServiceGetResponse.image:type_name -> metalstack.api.v2.Image
+ 8, // 3: metalstack.api.v2.ImageServiceListResponse.images:type_name -> metalstack.api.v2.Image
+ 8, // 4: metalstack.api.v2.ImageServiceLatestResponse.image:type_name -> metalstack.api.v2.Image
+ 11, // 5: metalstack.api.v2.Image.meta:type_name -> metalstack.api.v2.Meta
+ 0, // 6: metalstack.api.v2.Image.features:type_name -> metalstack.api.v2.ImageFeature
+ 1, // 7: metalstack.api.v2.Image.classification:type_name -> metalstack.api.v2.ImageClassification
+ 12, // 8: metalstack.api.v2.Image.expires_at:type_name -> google.protobuf.Timestamp
+ 8, // 9: metalstack.api.v2.ImageUsage.image:type_name -> metalstack.api.v2.Image
+ 0, // 10: metalstack.api.v2.ImageQuery.feature:type_name -> metalstack.api.v2.ImageFeature
+ 1, // 11: metalstack.api.v2.ImageQuery.classification:type_name -> metalstack.api.v2.ImageClassification
+ 13, // 12: metalstack.api.v2.ImageQuery.labels:type_name -> metalstack.api.v2.Labels
+ 2, // 13: metalstack.api.v2.ImageService.Get:input_type -> metalstack.api.v2.ImageServiceGetRequest
+ 3, // 14: metalstack.api.v2.ImageService.List:input_type -> metalstack.api.v2.ImageServiceListRequest
+ 4, // 15: metalstack.api.v2.ImageService.Latest:input_type -> metalstack.api.v2.ImageServiceLatestRequest
+ 5, // 16: metalstack.api.v2.ImageService.Get:output_type -> metalstack.api.v2.ImageServiceGetResponse
+ 6, // 17: metalstack.api.v2.ImageService.List:output_type -> metalstack.api.v2.ImageServiceListResponse
+ 7, // 18: metalstack.api.v2.ImageService.Latest:output_type -> metalstack.api.v2.ImageServiceLatestResponse
+ 16, // [16:19] is the sub-list for method output_type
+ 13, // [13:16] is the sub-list for method input_type
+ 13, // [13:13] is the sub-list for extension type_name
+ 13, // [13:13] is the sub-list for extension extendee
+ 0, // [0:13] is the sub-list for field type_name
}
func init() { file_metalstack_api_v2_image_proto_init() }
@@ -829,6 +841,7 @@ func file_metalstack_api_v2_image_proto_init() {
}
file_metalstack_api_v2_common_proto_init()
file_metalstack_api_v2_predefined_rules_proto_init()
+ file_metalstack_api_v2_image_proto_msgTypes[2].OneofWrappers = []any{}
file_metalstack_api_v2_image_proto_msgTypes[6].OneofWrappers = []any{}
file_metalstack_api_v2_image_proto_msgTypes[8].OneofWrappers = []any{}
type x struct{}
diff --git a/js/metalstack/api/v2/image_pb.d.ts b/js/metalstack/api/v2/image_pb.d.ts
index 710db5cc..262054e9 100644
--- a/js/metalstack/api/v2/image_pb.d.ts
+++ b/js/metalstack/api/v2/image_pb.d.ts
@@ -55,6 +55,12 @@ export type ImageServiceLatestRequest = Message<"metalstack.api.v2.ImageServiceL
* @generated from field: string os = 1;
*/
os: string;
+ /**
+ * Classification of the image latest image, defaults to IMAGE_CLASSIFICATION_SUPPORTED
+ *
+ * @generated from field: optional metalstack.api.v2.ImageClassification classification = 2;
+ */
+ classification?: ImageClassification;
};
/**
* Describes the message metalstack.api.v2.ImageServiceLatestRequest.
diff --git a/js/metalstack/api/v2/image_pb.js b/js/metalstack/api/v2/image_pb.js
index 88a81836..aeda7dbf 100644
--- a/js/metalstack/api/v2/image_pb.js
+++ b/js/metalstack/api/v2/image_pb.js
@@ -9,7 +9,7 @@ import { file_metalstack_api_v2_predefined_rules } from "./predefined_rules_pb";
/**
* Describes the file metalstack/api/v2/image.proto.
*/
-export const file_metalstack_api_v2_image = /*@__PURE__*/ fileDesc("Ch1tZXRhbHN0YWNrL2FwaS92Mi9pbWFnZS5wcm90bxIRbWV0YWxzdGFjay5hcGkudjIiMQoWSW1hZ2VTZXJ2aWNlR2V0UmVxdWVzdBIXCgJpZBgBIAEoCUILukgIcgbAs66xAgEiRwoXSW1hZ2VTZXJ2aWNlTGlzdFJlcXVlc3QSLAoFcXVlcnkYASABKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZVF1ZXJ5IicKGUltYWdlU2VydmljZUxhdGVzdFJlcXVlc3QSCgoCb3MYASABKAkiQgoXSW1hZ2VTZXJ2aWNlR2V0UmVzcG9uc2USJwoFaW1hZ2UYASABKAsyGC5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZSJEChhJbWFnZVNlcnZpY2VMaXN0UmVzcG9uc2USKAoGaW1hZ2VzGAEgAygLMhgubWV0YWxzdGFjay5hcGkudjIuSW1hZ2UiRQoaSW1hZ2VTZXJ2aWNlTGF0ZXN0UmVzcG9uc2USJwoFaW1hZ2UYASABKAsyGC5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZSL/AgoFSW1hZ2USFwoCaWQYASABKAlCC7pICHIGwLOusQIBEiUKBG1ldGEYAiABKAsyFy5tZXRhbHN0YWNrLmFwaS52Mi5NZXRhEhgKA3VybBgDIAEoCUILukgIcgbgs66xAgESHgoEbmFtZRgEIAEoCUILukgIcgbAs66xAgFIAIgBARIlCgtkZXNjcmlwdGlvbhgFIAEoCUILukgIcgbIs66xAgFIAYgBARJCCghmZWF0dXJlcxgGIAMoDjIfLm1ldGFsc3RhY2suYXBpLnYyLkltYWdlRmVhdHVyZUIPukgMkgEJGAEiBYIBAhABEkgKDmNsYXNzaWZpY2F0aW9uGAcgASgOMiYubWV0YWxzdGFjay5hcGkudjIuSW1hZ2VDbGFzc2lmaWNhdGlvbkIIukgFggECEAESLgoKZXhwaXJlc19hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCBwoFX25hbWVCDgoMX2Rlc2NyaXB0aW9uIkYKCkltYWdlVXNhZ2USJwoFaW1hZ2UYASABKAsyGC5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZRIPCgd1c2VkX2J5GAIgAygJIvQDCgpJbWFnZVF1ZXJ5EhwKAmlkGAEgASgJQgu6SAhyBsCzrrECAUgAiAEBEhsKAm9zGAIgASgJQgq6SAdyBRACGIABSAGIAQESIAoHdmVyc2lvbhgDIAEoCUIKukgHcgUQARiAAUgCiAEBEh4KBG5hbWUYBCABKAlCC7pICHIGwLOusQIBSAOIAQESJQoLZGVzY3JpcHRpb24YBSABKAlCC7pICHIGyLOusQIBSASIAQESHQoDdXJsGAYgASgJQgu6SAhyBuCzrrECAUgFiAEBEj8KB2ZlYXR1cmUYByABKA4yHy5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZUZlYXR1cmVCCLpIBYIBAhABSAaIAQESTQoOY2xhc3NpZmljYXRpb24YCCABKA4yJi5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZUNsYXNzaWZpY2F0aW9uQgi6SAWCAQIQAUgHiAEBEi4KBmxhYmVscxgJIAEoCzIZLm1ldGFsc3RhY2suYXBpLnYyLkxhYmVsc0gIiAEBQgUKA19pZEIFCgNfb3NCCgoIX3ZlcnNpb25CBwoFX25hbWVCDgoMX2Rlc2NyaXB0aW9uQgYKBF91cmxCCgoIX2ZlYXR1cmVCEQoPX2NsYXNzaWZpY2F0aW9uQgkKB19sYWJlbHMqfwoMSW1hZ2VGZWF0dXJlEh0KGUlNQUdFX0ZFQVRVUkVfVU5TUEVDSUZJRUQQABImChVJTUFHRV9GRUFUVVJFX01BQ0hJTkUQARoLgrIZB21hY2hpbmUSKAoWSU1BR0VfRkVBVFVSRV9GSVJFV0FMTBACGgyCshkIZmlyZXdhbGwq0gEKE0ltYWdlQ2xhc3NpZmljYXRpb24SJAogSU1BR0VfQ0xBU1NJRklDQVRJT05fVU5TUEVDSUZJRUQQABItChxJTUFHRV9DTEFTU0lGSUNBVElPTl9QUkVWSUVXEAEaC4KyGQdwcmV2aWV3EjEKHklNQUdFX0NMQVNTSUZJQ0FUSU9OX1NVUFBPUlRFRBACGg2CshkJc3VwcG9ydGVkEjMKH0lNQUdFX0NMQVNTSUZJQ0FUSU9OX0RFUFJFQ0FURUQQAxoOgrIZCmRlcHJlY2F0ZWQy0gIKDEltYWdlU2VydmljZRJmCgNHZXQSKS5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZVNlcnZpY2VHZXRSZXF1ZXN0GioubWV0YWxzdGFjay5hcGkudjIuSW1hZ2VTZXJ2aWNlR2V0UmVzcG9uc2UiCNjzGAPg8xgCEmkKBExpc3QSKi5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZVNlcnZpY2VMaXN0UmVxdWVzdBorLm1ldGFsc3RhY2suYXBpLnYyLkltYWdlU2VydmljZUxpc3RSZXNwb25zZSII2PMYA+DzGAISbwoGTGF0ZXN0EiwubWV0YWxzdGFjay5hcGkudjIuSW1hZ2VTZXJ2aWNlTGF0ZXN0UmVxdWVzdBotLm1ldGFsc3RhY2suYXBpLnYyLkltYWdlU2VydmljZUxhdGVzdFJlc3BvbnNlIgjY8xgD4PMYAkLAAQoVY29tLm1ldGFsc3RhY2suYXBpLnYyQgpJbWFnZVByb3RvUAFaNWdpdGh1Yi5jb20vbWV0YWwtc3RhY2svYXBpL2dvL21ldGFsc3RhY2svYXBpL3YyO2FwaXYyogIDTUFYqgIRTWV0YWxzdGFjay5BcGkuVjLKAhFNZXRhbHN0YWNrXEFwaVxWMuICHU1ldGFsc3RhY2tcQXBpXFYyXEdQQk1ldGFkYXRh6gITTWV0YWxzdGFjazo6QXBpOjpWMmIGcHJvdG8z", [file_buf_validate_validate, file_google_protobuf_timestamp, file_metalstack_api_v2_common, file_metalstack_api_v2_predefined_rules]);
+export const file_metalstack_api_v2_image = /*@__PURE__*/ fileDesc("Ch1tZXRhbHN0YWNrL2FwaS92Mi9pbWFnZS5wcm90bxIRbWV0YWxzdGFjay5hcGkudjIiMQoWSW1hZ2VTZXJ2aWNlR2V0UmVxdWVzdBIXCgJpZBgBIAEoCUILukgIcgbAs66xAgEiRwoXSW1hZ2VTZXJ2aWNlTGlzdFJlcXVlc3QSLAoFcXVlcnkYASABKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZVF1ZXJ5IokBChlJbWFnZVNlcnZpY2VMYXRlc3RSZXF1ZXN0EgoKAm9zGAEgASgJEk0KDmNsYXNzaWZpY2F0aW9uGAIgASgOMiYubWV0YWxzdGFjay5hcGkudjIuSW1hZ2VDbGFzc2lmaWNhdGlvbkIIukgFggECEAFIAIgBAUIRCg9fY2xhc3NpZmljYXRpb24iQgoXSW1hZ2VTZXJ2aWNlR2V0UmVzcG9uc2USJwoFaW1hZ2UYASABKAsyGC5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZSJEChhJbWFnZVNlcnZpY2VMaXN0UmVzcG9uc2USKAoGaW1hZ2VzGAEgAygLMhgubWV0YWxzdGFjay5hcGkudjIuSW1hZ2UiRQoaSW1hZ2VTZXJ2aWNlTGF0ZXN0UmVzcG9uc2USJwoFaW1hZ2UYASABKAsyGC5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZSL/AgoFSW1hZ2USFwoCaWQYASABKAlCC7pICHIGwLOusQIBEiUKBG1ldGEYAiABKAsyFy5tZXRhbHN0YWNrLmFwaS52Mi5NZXRhEhgKA3VybBgDIAEoCUILukgIcgbgs66xAgESHgoEbmFtZRgEIAEoCUILukgIcgbAs66xAgFIAIgBARIlCgtkZXNjcmlwdGlvbhgFIAEoCUILukgIcgbIs66xAgFIAYgBARJCCghmZWF0dXJlcxgGIAMoDjIfLm1ldGFsc3RhY2suYXBpLnYyLkltYWdlRmVhdHVyZUIPukgMkgEJGAEiBYIBAhABEkgKDmNsYXNzaWZpY2F0aW9uGAcgASgOMiYubWV0YWxzdGFjay5hcGkudjIuSW1hZ2VDbGFzc2lmaWNhdGlvbkIIukgFggECEAESLgoKZXhwaXJlc19hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCBwoFX25hbWVCDgoMX2Rlc2NyaXB0aW9uIkYKCkltYWdlVXNhZ2USJwoFaW1hZ2UYASABKAsyGC5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZRIPCgd1c2VkX2J5GAIgAygJIvQDCgpJbWFnZVF1ZXJ5EhwKAmlkGAEgASgJQgu6SAhyBsCzrrECAUgAiAEBEhsKAm9zGAIgASgJQgq6SAdyBRACGIABSAGIAQESIAoHdmVyc2lvbhgDIAEoCUIKukgHcgUQARiAAUgCiAEBEh4KBG5hbWUYBCABKAlCC7pICHIGwLOusQIBSAOIAQESJQoLZGVzY3JpcHRpb24YBSABKAlCC7pICHIGyLOusQIBSASIAQESHQoDdXJsGAYgASgJQgu6SAhyBuCzrrECAUgFiAEBEj8KB2ZlYXR1cmUYByABKA4yHy5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZUZlYXR1cmVCCLpIBYIBAhABSAaIAQESTQoOY2xhc3NpZmljYXRpb24YCCABKA4yJi5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZUNsYXNzaWZpY2F0aW9uQgi6SAWCAQIQAUgHiAEBEi4KBmxhYmVscxgJIAEoCzIZLm1ldGFsc3RhY2suYXBpLnYyLkxhYmVsc0gIiAEBQgUKA19pZEIFCgNfb3NCCgoIX3ZlcnNpb25CBwoFX25hbWVCDgoMX2Rlc2NyaXB0aW9uQgYKBF91cmxCCgoIX2ZlYXR1cmVCEQoPX2NsYXNzaWZpY2F0aW9uQgkKB19sYWJlbHMqfwoMSW1hZ2VGZWF0dXJlEh0KGUlNQUdFX0ZFQVRVUkVfVU5TUEVDSUZJRUQQABImChVJTUFHRV9GRUFUVVJFX01BQ0hJTkUQARoLgrIZB21hY2hpbmUSKAoWSU1BR0VfRkVBVFVSRV9GSVJFV0FMTBACGgyCshkIZmlyZXdhbGwq0gEKE0ltYWdlQ2xhc3NpZmljYXRpb24SJAogSU1BR0VfQ0xBU1NJRklDQVRJT05fVU5TUEVDSUZJRUQQABItChxJTUFHRV9DTEFTU0lGSUNBVElPTl9QUkVWSUVXEAEaC4KyGQdwcmV2aWV3EjEKHklNQUdFX0NMQVNTSUZJQ0FUSU9OX1NVUFBPUlRFRBACGg2CshkJc3VwcG9ydGVkEjMKH0lNQUdFX0NMQVNTSUZJQ0FUSU9OX0RFUFJFQ0FURUQQAxoOgrIZCmRlcHJlY2F0ZWQy0gIKDEltYWdlU2VydmljZRJmCgNHZXQSKS5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZVNlcnZpY2VHZXRSZXF1ZXN0GioubWV0YWxzdGFjay5hcGkudjIuSW1hZ2VTZXJ2aWNlR2V0UmVzcG9uc2UiCNjzGAPg8xgCEmkKBExpc3QSKi5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZVNlcnZpY2VMaXN0UmVxdWVzdBorLm1ldGFsc3RhY2suYXBpLnYyLkltYWdlU2VydmljZUxpc3RSZXNwb25zZSII2PMYA+DzGAISbwoGTGF0ZXN0EiwubWV0YWxzdGFjay5hcGkudjIuSW1hZ2VTZXJ2aWNlTGF0ZXN0UmVxdWVzdBotLm1ldGFsc3RhY2suYXBpLnYyLkltYWdlU2VydmljZUxhdGVzdFJlc3BvbnNlIgjY8xgD4PMYAkLAAQoVY29tLm1ldGFsc3RhY2suYXBpLnYyQgpJbWFnZVByb3RvUAFaNWdpdGh1Yi5jb20vbWV0YWwtc3RhY2svYXBpL2dvL21ldGFsc3RhY2svYXBpL3YyO2FwaXYyogIDTUFYqgIRTWV0YWxzdGFjay5BcGkuVjLKAhFNZXRhbHN0YWNrXEFwaVxWMuICHU1ldGFsc3RhY2tcQXBpXFYyXEdQQk1ldGFkYXRh6gITTWV0YWxzdGFjazo6QXBpOjpWMmIGcHJvdG8z", [file_buf_validate_validate, file_google_protobuf_timestamp, file_metalstack_api_v2_common, file_metalstack_api_v2_predefined_rules]);
/**
* Describes the message metalstack.api.v2.ImageServiceGetRequest.
* Use `create(ImageServiceGetRequestSchema)` to create a new message.
diff --git a/js/metalstack/api/v2/image_pb.ts b/js/metalstack/api/v2/image_pb.ts
index 20d00fe2..623aeeb9 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("Ch1tZXRhbHN0YWNrL2FwaS92Mi9pbWFnZS5wcm90bxIRbWV0YWxzdGFjay5hcGkudjIiMQoWSW1hZ2VTZXJ2aWNlR2V0UmVxdWVzdBIXCgJpZBgBIAEoCUILukgIcgbAs66xAgEiRwoXSW1hZ2VTZXJ2aWNlTGlzdFJlcXVlc3QSLAoFcXVlcnkYASABKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZVF1ZXJ5IicKGUltYWdlU2VydmljZUxhdGVzdFJlcXVlc3QSCgoCb3MYASABKAkiQgoXSW1hZ2VTZXJ2aWNlR2V0UmVzcG9uc2USJwoFaW1hZ2UYASABKAsyGC5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZSJEChhJbWFnZVNlcnZpY2VMaXN0UmVzcG9uc2USKAoGaW1hZ2VzGAEgAygLMhgubWV0YWxzdGFjay5hcGkudjIuSW1hZ2UiRQoaSW1hZ2VTZXJ2aWNlTGF0ZXN0UmVzcG9uc2USJwoFaW1hZ2UYASABKAsyGC5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZSL/AgoFSW1hZ2USFwoCaWQYASABKAlCC7pICHIGwLOusQIBEiUKBG1ldGEYAiABKAsyFy5tZXRhbHN0YWNrLmFwaS52Mi5NZXRhEhgKA3VybBgDIAEoCUILukgIcgbgs66xAgESHgoEbmFtZRgEIAEoCUILukgIcgbAs66xAgFIAIgBARIlCgtkZXNjcmlwdGlvbhgFIAEoCUILukgIcgbIs66xAgFIAYgBARJCCghmZWF0dXJlcxgGIAMoDjIfLm1ldGFsc3RhY2suYXBpLnYyLkltYWdlRmVhdHVyZUIPukgMkgEJGAEiBYIBAhABEkgKDmNsYXNzaWZpY2F0aW9uGAcgASgOMiYubWV0YWxzdGFjay5hcGkudjIuSW1hZ2VDbGFzc2lmaWNhdGlvbkIIukgFggECEAESLgoKZXhwaXJlc19hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCBwoFX25hbWVCDgoMX2Rlc2NyaXB0aW9uIkYKCkltYWdlVXNhZ2USJwoFaW1hZ2UYASABKAsyGC5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZRIPCgd1c2VkX2J5GAIgAygJIvQDCgpJbWFnZVF1ZXJ5EhwKAmlkGAEgASgJQgu6SAhyBsCzrrECAUgAiAEBEhsKAm9zGAIgASgJQgq6SAdyBRACGIABSAGIAQESIAoHdmVyc2lvbhgDIAEoCUIKukgHcgUQARiAAUgCiAEBEh4KBG5hbWUYBCABKAlCC7pICHIGwLOusQIBSAOIAQESJQoLZGVzY3JpcHRpb24YBSABKAlCC7pICHIGyLOusQIBSASIAQESHQoDdXJsGAYgASgJQgu6SAhyBuCzrrECAUgFiAEBEj8KB2ZlYXR1cmUYByABKA4yHy5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZUZlYXR1cmVCCLpIBYIBAhABSAaIAQESTQoOY2xhc3NpZmljYXRpb24YCCABKA4yJi5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZUNsYXNzaWZpY2F0aW9uQgi6SAWCAQIQAUgHiAEBEi4KBmxhYmVscxgJIAEoCzIZLm1ldGFsc3RhY2suYXBpLnYyLkxhYmVsc0gIiAEBQgUKA19pZEIFCgNfb3NCCgoIX3ZlcnNpb25CBwoFX25hbWVCDgoMX2Rlc2NyaXB0aW9uQgYKBF91cmxCCgoIX2ZlYXR1cmVCEQoPX2NsYXNzaWZpY2F0aW9uQgkKB19sYWJlbHMqfwoMSW1hZ2VGZWF0dXJlEh0KGUlNQUdFX0ZFQVRVUkVfVU5TUEVDSUZJRUQQABImChVJTUFHRV9GRUFUVVJFX01BQ0hJTkUQARoLgrIZB21hY2hpbmUSKAoWSU1BR0VfRkVBVFVSRV9GSVJFV0FMTBACGgyCshkIZmlyZXdhbGwq0gEKE0ltYWdlQ2xhc3NpZmljYXRpb24SJAogSU1BR0VfQ0xBU1NJRklDQVRJT05fVU5TUEVDSUZJRUQQABItChxJTUFHRV9DTEFTU0lGSUNBVElPTl9QUkVWSUVXEAEaC4KyGQdwcmV2aWV3EjEKHklNQUdFX0NMQVNTSUZJQ0FUSU9OX1NVUFBPUlRFRBACGg2CshkJc3VwcG9ydGVkEjMKH0lNQUdFX0NMQVNTSUZJQ0FUSU9OX0RFUFJFQ0FURUQQAxoOgrIZCmRlcHJlY2F0ZWQy0gIKDEltYWdlU2VydmljZRJmCgNHZXQSKS5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZVNlcnZpY2VHZXRSZXF1ZXN0GioubWV0YWxzdGFjay5hcGkudjIuSW1hZ2VTZXJ2aWNlR2V0UmVzcG9uc2UiCNjzGAPg8xgCEmkKBExpc3QSKi5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZVNlcnZpY2VMaXN0UmVxdWVzdBorLm1ldGFsc3RhY2suYXBpLnYyLkltYWdlU2VydmljZUxpc3RSZXNwb25zZSII2PMYA+DzGAISbwoGTGF0ZXN0EiwubWV0YWxzdGFjay5hcGkudjIuSW1hZ2VTZXJ2aWNlTGF0ZXN0UmVxdWVzdBotLm1ldGFsc3RhY2suYXBpLnYyLkltYWdlU2VydmljZUxhdGVzdFJlc3BvbnNlIgjY8xgD4PMYAkLAAQoVY29tLm1ldGFsc3RhY2suYXBpLnYyQgpJbWFnZVByb3RvUAFaNWdpdGh1Yi5jb20vbWV0YWwtc3RhY2svYXBpL2dvL21ldGFsc3RhY2svYXBpL3YyO2FwaXYyogIDTUFYqgIRTWV0YWxzdGFjay5BcGkuVjLKAhFNZXRhbHN0YWNrXEFwaVxWMuICHU1ldGFsc3RhY2tcQXBpXFYyXEdQQk1ldGFkYXRh6gITTWV0YWxzdGFjazo6QXBpOjpWMmIGcHJvdG8z", [file_buf_validate_validate, file_google_protobuf_timestamp, file_metalstack_api_v2_common, file_metalstack_api_v2_predefined_rules]);
+ fileDesc("Ch1tZXRhbHN0YWNrL2FwaS92Mi9pbWFnZS5wcm90bxIRbWV0YWxzdGFjay5hcGkudjIiMQoWSW1hZ2VTZXJ2aWNlR2V0UmVxdWVzdBIXCgJpZBgBIAEoCUILukgIcgbAs66xAgEiRwoXSW1hZ2VTZXJ2aWNlTGlzdFJlcXVlc3QSLAoFcXVlcnkYASABKAsyHS5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZVF1ZXJ5IokBChlJbWFnZVNlcnZpY2VMYXRlc3RSZXF1ZXN0EgoKAm9zGAEgASgJEk0KDmNsYXNzaWZpY2F0aW9uGAIgASgOMiYubWV0YWxzdGFjay5hcGkudjIuSW1hZ2VDbGFzc2lmaWNhdGlvbkIIukgFggECEAFIAIgBAUIRCg9fY2xhc3NpZmljYXRpb24iQgoXSW1hZ2VTZXJ2aWNlR2V0UmVzcG9uc2USJwoFaW1hZ2UYASABKAsyGC5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZSJEChhJbWFnZVNlcnZpY2VMaXN0UmVzcG9uc2USKAoGaW1hZ2VzGAEgAygLMhgubWV0YWxzdGFjay5hcGkudjIuSW1hZ2UiRQoaSW1hZ2VTZXJ2aWNlTGF0ZXN0UmVzcG9uc2USJwoFaW1hZ2UYASABKAsyGC5tZXRhbHN0YWNrLmFwaS52Mi5JbWFnZSL/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
@@ -73,6 +73,13 @@ export type ImageServiceLatestRequest = Message<"metalstack.api.v2.ImageServiceL
* @generated from field: string os = 1;
*/
os: string;
+
+ /**
+ * Classification of the image latest image, defaults to IMAGE_CLASSIFICATION_SUPPORTED
+ *
+ * @generated from field: optional metalstack.api.v2.ImageClassification classification = 2;
+ */
+ classification?: ImageClassification;
};
/**
diff --git a/proto/metalstack/api/v2/image.proto b/proto/metalstack/api/v2/image.proto
index aa589114..f10bf4da 100644
--- a/proto/metalstack/api/v2/image.proto
+++ b/proto/metalstack/api/v2/image.proto
@@ -43,6 +43,8 @@ message ImageServiceLatestRequest {
// OS for which the latest image should be fetched
// should contain os and major.minor then latest patch version of this os is returned
string os = 1;
+ // Classification of the image latest image, defaults to IMAGE_CLASSIFICATION_SUPPORTED
+ optional ImageClassification classification = 2 [(buf.validate.field).enum.defined_only = true];
}
// ImageServiceGetResponse is the response payload for a image get request
diff --git a/python/metalstack/api/v2/image_pb2.py b/python/metalstack/api/v2/image_pb2.py
index 13f0545b..a0aa15e6 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\"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')
+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\"\x9d\x01\n\x19ImageServiceLatestRequest\x12\x0e\n\x02os\x18\x01 \x01(\tR\x02os\x12]\n\x0e\x63lassification\x18\x02 \x01(\x0e\x32&.metalstack.api.v2.ImageClassificationB\x08\xbaH\x05\x82\x01\x02\x10\x01H\x00R\x0e\x63lassification\x88\x01\x01\x42\x11\n\x0f_classification\"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)
@@ -48,6 +48,8 @@
_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\010r\006\300\263\256\261\002\001'
+ _globals['_IMAGESERVICELATESTREQUEST'].fields_by_name['classification']._loaded_options = None
+ _globals['_IMAGESERVICELATESTREQUEST'].fields_by_name['classification']._serialized_options = b'\272H\005\202\001\002\020\001'
_globals['_IMAGE'].fields_by_name['id']._loaded_options = None
_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
@@ -82,28 +84,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=1720
- _globals['_IMAGEFEATURE']._serialized_end=1847
- _globals['_IMAGECLASSIFICATION']._serialized_start=1850
- _globals['_IMAGECLASSIFICATION']._serialized_end=2060
+ _globals['_IMAGEFEATURE']._serialized_start=1835
+ _globals['_IMAGEFEATURE']._serialized_end=1962
+ _globals['_IMAGECLASSIFICATION']._serialized_start=1965
+ _globals['_IMAGECLASSIFICATION']._serialized_end=2175
_globals['_IMAGESERVICEGETREQUEST']._serialized_start=188
_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
+ _globals['_IMAGESERVICELATESTREQUEST']._serialized_start=324
+ _globals['_IMAGESERVICELATESTREQUEST']._serialized_end=481
+ _globals['_IMAGESERVICEGETRESPONSE']._serialized_start=483
+ _globals['_IMAGESERVICEGETRESPONSE']._serialized_end=556
+ _globals['_IMAGESERVICELISTRESPONSE']._serialized_start=558
+ _globals['_IMAGESERVICELISTRESPONSE']._serialized_end=634
+ _globals['_IMAGESERVICELATESTRESPONSE']._serialized_start=636
+ _globals['_IMAGESERVICELATESTRESPONSE']._serialized_end=712
+ _globals['_IMAGE']._serialized_start=715
+ _globals['_IMAGE']._serialized_end=1169
+ _globals['_IMAGEUSAGE']._serialized_start=1171
+ _globals['_IMAGEUSAGE']._serialized_end=1256
+ _globals['_IMAGEQUERY']._serialized_start=1259
+ _globals['_IMAGEQUERY']._serialized_end=1833
+ _globals['_IMAGESERVICE']._serialized_start=2178
+ _globals['_IMAGESERVICE']._serialized_end=2516
# @@protoc_insertion_point(module_scope)
diff --git a/python/metalstack/api/v2/image_pb2.pyi b/python/metalstack/api/v2/image_pb2.pyi
index 96b17f52..b2051b1b 100644
--- a/python/metalstack/api/v2/image_pb2.pyi
+++ b/python/metalstack/api/v2/image_pb2.pyi
@@ -46,10 +46,12 @@ class ImageServiceListRequest(_message.Message):
def __init__(self, query: _Optional[_Union[ImageQuery, _Mapping]] = ...) -> None: ...
class ImageServiceLatestRequest(_message.Message):
- __slots__ = ("os",)
+ __slots__ = ("os", "classification")
OS_FIELD_NUMBER: _ClassVar[int]
+ CLASSIFICATION_FIELD_NUMBER: _ClassVar[int]
os: str
- def __init__(self, os: _Optional[str] = ...) -> None: ...
+ classification: ImageClassification
+ def __init__(self, os: _Optional[str] = ..., classification: _Optional[_Union[ImageClassification, str]] = ...) -> None: ...
class ImageServiceGetResponse(_message.Message):
__slots__ = ("image",)
From 8c1b8381e21791b0a3e6506528203e23d34b5c37 Mon Sep 17 00:00:00 2001
From: Gerrit
Date: Thu, 2 Apr 2026 10:59:06 +0200
Subject: [PATCH 2/2] No defaulting.
---
doc/index.html | 2 +-
go/metalstack/api/v2/image.pb.go | 2 +-
js/metalstack/api/v2/image_pb.d.ts | 2 +-
js/metalstack/api/v2/image_pb.ts | 2 +-
proto/metalstack/api/v2/image.proto | 2 +-
5 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/doc/index.html b/doc/index.html
index 87412c65..c24b8419 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -6572,7 +6572,7 @@