From 09555ac984d1004d0d9dddc5ee88600420b9099d Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Wed, 20 Nov 2024 19:05:24 +0400 Subject: [PATCH] feat: implement image cache configuration Implement a feature flag, a resource which controls the flow. This controls the volume configuration, mounting, etc. Fixes #9767 Signed-off-by: Andrey Smirnov --- api/resource/definitions/cri/cri.proto | 7 + api/resource/definitions/enums/enums.proto | 8 + .../pkg/runtime/v1alpha2/v1alpha2_state.go | 1 + .../api/resource/definitions/cri/cri.pb.go | 123 +++++++++--- .../definitions/cri/cri_vtproto.pb.go | 170 ++++++++++++++++ .../resource/definitions/enums/enums.pb.go | 190 ++++++++++++------ pkg/machinery/config/config/machine.go | 1 + .../config/schemas/config.schema.json | 7 + .../types/v1alpha1/v1alpha1_features.go | 5 + .../config/types/v1alpha1/v1alpha1_types.go | 3 + .../types/v1alpha1/v1alpha1_types_doc.go | 7 + pkg/machinery/resources/cri/cri.go | 5 + pkg/machinery/resources/cri/cri_test.go | 1 + .../resources/cri/deep_copy.generated.go | 12 +- .../resources/cri/image_cache_config.go | 58 ++++++ .../resources/cri/imagecachestatus.go | 18 ++ .../resources/cri/imagecachestatus_enumer.go | 98 +++++++++ .../resources/cri/seccomp_profile.go | 2 - website/content/v1.9/reference/api.md | 32 +++ .../configuration/v1alpha1/config.md | 1 + 20 files changed, 656 insertions(+), 93 deletions(-) create mode 100644 pkg/machinery/resources/cri/image_cache_config.go create mode 100644 pkg/machinery/resources/cri/imagecachestatus.go create mode 100644 pkg/machinery/resources/cri/imagecachestatus_enumer.go diff --git a/api/resource/definitions/cri/cri.proto b/api/resource/definitions/cri/cri.proto index 3c4f4b3cc4..841a22481f 100755 --- a/api/resource/definitions/cri/cri.proto +++ b/api/resource/definitions/cri/cri.proto @@ -6,6 +6,13 @@ option go_package = "github.com/siderolabs/talos/pkg/machinery/api/resource/defi option java_package = "dev.talos.api.resource.definitions.cri"; import "google/protobuf/struct.proto"; +import "resource/definitions/enums/enums.proto"; + +// ImageCacheConfigSpec represents the ImageCacheConfig. +message ImageCacheConfigSpec { + talos.resource.definitions.enums.CriImageCacheStatus status = 1; + repeated string roots = 2; +} // SeccompProfileSpec represents the SeccompProfile. message SeccompProfileSpec { diff --git a/api/resource/definitions/enums/enums.proto b/api/resource/definitions/enums/enums.proto index 40779750dd..d169afec9a 100755 --- a/api/resource/definitions/enums/enums.proto +++ b/api/resource/definitions/enums/enums.proto @@ -396,6 +396,14 @@ enum BlockVolumeType { VOLUME_TYPE_TMPFS = 2; } +// CriImageCacheStatus describes image cache status type. +enum CriImageCacheStatus { + IMAGE_CACHE_STATUS_UNKNOWN = 0; + IMAGE_CACHE_STATUS_DISABLED = 1; + IMAGE_CACHE_STATUS_PREPARING = 2; + IMAGE_CACHE_STATUS_READY = 3; +} + // KubespanPeerState is KubeSpan peer current state. enum KubespanPeerState { PEER_STATE_UNKNOWN = 0; diff --git a/internal/app/machined/pkg/runtime/v1alpha2/v1alpha2_state.go b/internal/app/machined/pkg/runtime/v1alpha2/v1alpha2_state.go index 287f2efef7..7842e57e9e 100644 --- a/internal/app/machined/pkg/runtime/v1alpha2/v1alpha2_state.go +++ b/internal/app/machined/pkg/runtime/v1alpha2/v1alpha2_state.go @@ -112,6 +112,7 @@ func NewState() (*State, error) { &cluster.Member{}, &config.MachineConfig{}, &config.MachineType{}, + &cri.ImageCacheConfig{}, &cri.SeccompProfile{}, &etcd.Config{}, &etcd.PKIStatus{}, diff --git a/pkg/machinery/api/resource/definitions/cri/cri.pb.go b/pkg/machinery/api/resource/definitions/cri/cri.pb.go index 8036cc8fad..7920c9c8bb 100644 --- a/pkg/machinery/api/resource/definitions/cri/cri.pb.go +++ b/pkg/machinery/api/resource/definitions/cri/cri.pb.go @@ -13,6 +13,8 @@ import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" structpb "google.golang.org/protobuf/types/known/structpb" + + enums "github.com/siderolabs/talos/pkg/machinery/api/resource/definitions/enums" ) const ( @@ -22,6 +24,60 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// ImageCacheConfigSpec represents the ImageCacheConfig. +type ImageCacheConfigSpec struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Status enums.CriImageCacheStatus `protobuf:"varint,1,opt,name=status,proto3,enum=talos.resource.definitions.enums.CriImageCacheStatus" json:"status,omitempty"` + Roots []string `protobuf:"bytes,2,rep,name=roots,proto3" json:"roots,omitempty"` +} + +func (x *ImageCacheConfigSpec) Reset() { + *x = ImageCacheConfigSpec{} + mi := &file_resource_definitions_cri_cri_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ImageCacheConfigSpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ImageCacheConfigSpec) ProtoMessage() {} + +func (x *ImageCacheConfigSpec) ProtoReflect() protoreflect.Message { + mi := &file_resource_definitions_cri_cri_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 ImageCacheConfigSpec.ProtoReflect.Descriptor instead. +func (*ImageCacheConfigSpec) Descriptor() ([]byte, []int) { + return file_resource_definitions_cri_cri_proto_rawDescGZIP(), []int{0} +} + +func (x *ImageCacheConfigSpec) GetStatus() enums.CriImageCacheStatus { + if x != nil { + return x.Status + } + return enums.CriImageCacheStatus(0) +} + +func (x *ImageCacheConfigSpec) GetRoots() []string { + if x != nil { + return x.Roots + } + return nil +} + // SeccompProfileSpec represents the SeccompProfile. type SeccompProfileSpec struct { state protoimpl.MessageState @@ -34,7 +90,7 @@ type SeccompProfileSpec struct { func (x *SeccompProfileSpec) Reset() { *x = SeccompProfileSpec{} - mi := &file_resource_definitions_cri_cri_proto_msgTypes[0] + mi := &file_resource_definitions_cri_cri_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -46,7 +102,7 @@ func (x *SeccompProfileSpec) String() string { func (*SeccompProfileSpec) ProtoMessage() {} func (x *SeccompProfileSpec) ProtoReflect() protoreflect.Message { - mi := &file_resource_definitions_cri_cri_proto_msgTypes[0] + mi := &file_resource_definitions_cri_cri_proto_msgTypes[1] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -59,7 +115,7 @@ func (x *SeccompProfileSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use SeccompProfileSpec.ProtoReflect.Descriptor instead. func (*SeccompProfileSpec) Descriptor() ([]byte, []int) { - return file_resource_definitions_cri_cri_proto_rawDescGZIP(), []int{0} + return file_resource_definitions_cri_cri_proto_rawDescGZIP(), []int{1} } func (x *SeccompProfileSpec) GetName() string { @@ -85,20 +141,30 @@ var file_resource_definitions_cri_cri_proto_rawDesc = []byte{ 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x63, 0x72, 0x69, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x22, 0x57, 0x0a, 0x12, 0x53, 0x65, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x50, 0x72, 0x6f, - 0x66, 0x69, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, - 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x70, 0x0a, 0x26, 0x64, - 0x65, 0x76, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x63, 0x72, 0x69, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x73, 0x69, 0x64, 0x65, 0x72, 0x6f, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x74, 0x61, 0x6c, - 0x6f, 0x73, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x64, 0x65, - 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x63, 0x72, 0x69, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x6f, 0x1a, 0x26, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x64, 0x65, 0x66, + 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2f, 0x65, + 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x7b, 0x0a, 0x14, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x70, + 0x65, 0x63, 0x12, 0x4d, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x43, 0x72, 0x69, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x61, + 0x63, 0x68, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6f, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x05, 0x72, 0x6f, 0x6f, 0x74, 0x73, 0x22, 0x57, 0x0a, 0x12, 0x53, 0x65, 0x63, 0x63, 0x6f, + 0x6d, 0x70, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x42, 0x70, 0x0a, 0x26, 0x64, 0x65, 0x76, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x63, 0x72, 0x69, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x69, 0x64, 0x65, 0x72, 0x6f, 0x6c, 0x61, 0x62, + 0x73, 0x2f, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x6d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x2f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x63, + 0x72, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -113,18 +179,21 @@ func file_resource_definitions_cri_cri_proto_rawDescGZIP() []byte { return file_resource_definitions_cri_cri_proto_rawDescData } -var file_resource_definitions_cri_cri_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_resource_definitions_cri_cri_proto_msgTypes = make([]protoimpl.MessageInfo, 2) var file_resource_definitions_cri_cri_proto_goTypes = []any{ - (*SeccompProfileSpec)(nil), // 0: talos.resource.definitions.cri.SeccompProfileSpec - (*structpb.Struct)(nil), // 1: google.protobuf.Struct + (*ImageCacheConfigSpec)(nil), // 0: talos.resource.definitions.cri.ImageCacheConfigSpec + (*SeccompProfileSpec)(nil), // 1: talos.resource.definitions.cri.SeccompProfileSpec + (enums.CriImageCacheStatus)(0), // 2: talos.resource.definitions.enums.CriImageCacheStatus + (*structpb.Struct)(nil), // 3: google.protobuf.Struct } var file_resource_definitions_cri_cri_proto_depIdxs = []int32{ - 1, // 0: talos.resource.definitions.cri.SeccompProfileSpec.value:type_name -> google.protobuf.Struct - 1, // [1:1] is the sub-list for method output_type - 1, // [1:1] is the sub-list for method input_type - 1, // [1:1] is the sub-list for extension type_name - 1, // [1:1] is the sub-list for extension extendee - 0, // [0:1] is the sub-list for field type_name + 2, // 0: talos.resource.definitions.cri.ImageCacheConfigSpec.status:type_name -> talos.resource.definitions.enums.CriImageCacheStatus + 3, // 1: talos.resource.definitions.cri.SeccompProfileSpec.value:type_name -> google.protobuf.Struct + 2, // [2:2] is the sub-list for method output_type + 2, // [2:2] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name } func init() { file_resource_definitions_cri_cri_proto_init() } @@ -138,7 +207,7 @@ func file_resource_definitions_cri_cri_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_resource_definitions_cri_cri_proto_rawDesc, NumEnums: 0, - NumMessages: 1, + NumMessages: 2, NumExtensions: 0, NumServices: 0, }, diff --git a/pkg/machinery/api/resource/definitions/cri/cri_vtproto.pb.go b/pkg/machinery/api/resource/definitions/cri/cri_vtproto.pb.go index 3829319349..1cbcc2cbf0 100644 --- a/pkg/machinery/api/resource/definitions/cri/cri_vtproto.pb.go +++ b/pkg/machinery/api/resource/definitions/cri/cri_vtproto.pb.go @@ -12,6 +12,8 @@ import ( structpb "github.com/planetscale/vtprotobuf/types/known/structpb" protoimpl "google.golang.org/protobuf/runtime/protoimpl" structpb1 "google.golang.org/protobuf/types/known/structpb" + + enums "github.com/siderolabs/talos/pkg/machinery/api/resource/definitions/enums" ) const ( @@ -21,6 +23,53 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +func (m *ImageCacheConfigSpec) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImageCacheConfigSpec) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *ImageCacheConfigSpec) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.Roots) > 0 { + for iNdEx := len(m.Roots) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Roots[iNdEx]) + copy(dAtA[i:], m.Roots[iNdEx]) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Roots[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + if m.Status != 0 { + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.Status)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + func (m *SeccompProfileSpec) MarshalVT() (dAtA []byte, err error) { if m == nil { return nil, nil @@ -71,6 +120,25 @@ func (m *SeccompProfileSpec) MarshalToSizedBufferVT(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *ImageCacheConfigSpec) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Status != 0 { + n += 1 + protohelpers.SizeOfVarint(uint64(m.Status)) + } + if len(m.Roots) > 0 { + for _, s := range m.Roots { + l = len(s) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + } + n += len(m.unknownFields) + return n +} + func (m *SeccompProfileSpec) SizeVT() (n int) { if m == nil { return 0 @@ -89,6 +157,108 @@ func (m *SeccompProfileSpec) SizeVT() (n int) { return n } +func (m *ImageCacheConfigSpec) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImageCacheConfigSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImageCacheConfigSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + m.Status = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Status |= enums.CriImageCacheStatus(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Roots", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Roots = append(m.Roots, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *SeccompProfileSpec) UnmarshalVT(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/pkg/machinery/api/resource/definitions/enums/enums.pb.go b/pkg/machinery/api/resource/definitions/enums/enums.pb.go index 362532463f..7b4372c4dd 100644 --- a/pkg/machinery/api/resource/definitions/enums/enums.pb.go +++ b/pkg/machinery/api/resource/definitions/enums/enums.pb.go @@ -2102,6 +2102,59 @@ func (BlockVolumeType) EnumDescriptor() ([]byte, []int) { return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{31} } +// CriImageCacheStatus describes image cache status type. +type CriImageCacheStatus int32 + +const ( + CriImageCacheStatus_IMAGE_CACHE_STATUS_UNKNOWN CriImageCacheStatus = 0 + CriImageCacheStatus_IMAGE_CACHE_STATUS_DISABLED CriImageCacheStatus = 1 + CriImageCacheStatus_IMAGE_CACHE_STATUS_PREPARING CriImageCacheStatus = 2 + CriImageCacheStatus_IMAGE_CACHE_STATUS_READY CriImageCacheStatus = 3 +) + +// Enum value maps for CriImageCacheStatus. +var ( + CriImageCacheStatus_name = map[int32]string{ + 0: "IMAGE_CACHE_STATUS_UNKNOWN", + 1: "IMAGE_CACHE_STATUS_DISABLED", + 2: "IMAGE_CACHE_STATUS_PREPARING", + 3: "IMAGE_CACHE_STATUS_READY", + } + CriImageCacheStatus_value = map[string]int32{ + "IMAGE_CACHE_STATUS_UNKNOWN": 0, + "IMAGE_CACHE_STATUS_DISABLED": 1, + "IMAGE_CACHE_STATUS_PREPARING": 2, + "IMAGE_CACHE_STATUS_READY": 3, + } +) + +func (x CriImageCacheStatus) Enum() *CriImageCacheStatus { + p := new(CriImageCacheStatus) + *p = x + return p +} + +func (x CriImageCacheStatus) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (CriImageCacheStatus) Descriptor() protoreflect.EnumDescriptor { + return file_resource_definitions_enums_enums_proto_enumTypes[32].Descriptor() +} + +func (CriImageCacheStatus) Type() protoreflect.EnumType { + return &file_resource_definitions_enums_enums_proto_enumTypes[32] +} + +func (x CriImageCacheStatus) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use CriImageCacheStatus.Descriptor instead. +func (CriImageCacheStatus) EnumDescriptor() ([]byte, []int) { + return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{32} +} + // KubespanPeerState is KubeSpan peer current state. type KubespanPeerState int32 @@ -2136,11 +2189,11 @@ func (x KubespanPeerState) String() string { } func (KubespanPeerState) Descriptor() protoreflect.EnumDescriptor { - return file_resource_definitions_enums_enums_proto_enumTypes[32].Descriptor() + return file_resource_definitions_enums_enums_proto_enumTypes[33].Descriptor() } func (KubespanPeerState) Type() protoreflect.EnumType { - return &file_resource_definitions_enums_enums_proto_enumTypes[32] + return &file_resource_definitions_enums_enums_proto_enumTypes[33] } func (x KubespanPeerState) Number() protoreflect.EnumNumber { @@ -2149,7 +2202,7 @@ func (x KubespanPeerState) Number() protoreflect.EnumNumber { // Deprecated: Use KubespanPeerState.Descriptor instead. func (KubespanPeerState) EnumDescriptor() ([]byte, []int) { - return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{32} + return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{33} } // NetworkConfigLayer describes network configuration layers, with lowest priority first. @@ -2192,11 +2245,11 @@ func (x NetworkConfigLayer) String() string { } func (NetworkConfigLayer) Descriptor() protoreflect.EnumDescriptor { - return file_resource_definitions_enums_enums_proto_enumTypes[33].Descriptor() + return file_resource_definitions_enums_enums_proto_enumTypes[34].Descriptor() } func (NetworkConfigLayer) Type() protoreflect.EnumType { - return &file_resource_definitions_enums_enums_proto_enumTypes[33] + return &file_resource_definitions_enums_enums_proto_enumTypes[34] } func (x NetworkConfigLayer) Number() protoreflect.EnumNumber { @@ -2205,7 +2258,7 @@ func (x NetworkConfigLayer) Number() protoreflect.EnumNumber { // Deprecated: Use NetworkConfigLayer.Descriptor instead. func (NetworkConfigLayer) EnumDescriptor() ([]byte, []int) { - return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{33} + return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{34} } // NetworkOperator enumerates Talos network operators. @@ -2242,11 +2295,11 @@ func (x NetworkOperator) String() string { } func (NetworkOperator) Descriptor() protoreflect.EnumDescriptor { - return file_resource_definitions_enums_enums_proto_enumTypes[34].Descriptor() + return file_resource_definitions_enums_enums_proto_enumTypes[35].Descriptor() } func (NetworkOperator) Type() protoreflect.EnumType { - return &file_resource_definitions_enums_enums_proto_enumTypes[34] + return &file_resource_definitions_enums_enums_proto_enumTypes[35] } func (x NetworkOperator) Number() protoreflect.EnumNumber { @@ -2255,7 +2308,7 @@ func (x NetworkOperator) Number() protoreflect.EnumNumber { // Deprecated: Use NetworkOperator.Descriptor instead. func (NetworkOperator) EnumDescriptor() ([]byte, []int) { - return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{34} + return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{35} } // RuntimeMachineStage describes the stage of the machine boot/run process. @@ -2310,11 +2363,11 @@ func (x RuntimeMachineStage) String() string { } func (RuntimeMachineStage) Descriptor() protoreflect.EnumDescriptor { - return file_resource_definitions_enums_enums_proto_enumTypes[35].Descriptor() + return file_resource_definitions_enums_enums_proto_enumTypes[36].Descriptor() } func (RuntimeMachineStage) Type() protoreflect.EnumType { - return &file_resource_definitions_enums_enums_proto_enumTypes[35] + return &file_resource_definitions_enums_enums_proto_enumTypes[36] } func (x RuntimeMachineStage) Number() protoreflect.EnumNumber { @@ -2323,7 +2376,7 @@ func (x RuntimeMachineStage) Number() protoreflect.EnumNumber { // Deprecated: Use RuntimeMachineStage.Descriptor instead. func (RuntimeMachineStage) EnumDescriptor() ([]byte, []int) { - return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{35} + return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{36} } var File_resource_definitions_enums_enums_proto protoreflect.FileDescriptor @@ -2734,51 +2787,61 @@ var file_resource_definitions_enums_enums_proto_rawDesc = []byte{ 0x52, 0x54, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x49, 0x53, 0x4b, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x54, - 0x4d, 0x50, 0x46, 0x53, 0x10, 0x02, 0x2a, 0x53, 0x0a, 0x11, 0x4b, 0x75, 0x62, 0x65, 0x73, 0x70, - 0x61, 0x6e, 0x50, 0x65, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x50, - 0x45, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, - 0x4e, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x45, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, - 0x45, 0x5f, 0x55, 0x50, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x45, 0x45, 0x52, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x02, 0x2a, 0x88, 0x01, 0x0a, 0x12, - 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x61, 0x79, - 0x65, 0x72, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x44, 0x45, 0x46, - 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, - 0x5f, 0x43, 0x4d, 0x44, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x4f, - 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x54, 0x46, 0x4f, 0x52, 0x4d, 0x10, 0x02, 0x12, - 0x13, 0x0a, 0x0f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, - 0x4f, 0x52, 0x10, 0x03, 0x12, 0x20, 0x0a, 0x1c, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x4d, - 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x41, - 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x04, 0x2a, 0x4b, 0x0a, 0x0f, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x0e, 0x4f, 0x50, 0x45, - 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x44, 0x48, 0x43, 0x50, 0x34, 0x10, 0x00, 0x12, 0x12, 0x0a, - 0x0e, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x44, 0x48, 0x43, 0x50, 0x36, 0x10, - 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x56, 0x49, - 0x50, 0x10, 0x02, 0x2a, 0x9b, 0x02, 0x0a, 0x13, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x4d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x67, 0x65, 0x12, 0x19, 0x0a, 0x15, 0x4d, - 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, 0x55, 0x4e, 0x4b, - 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, - 0x45, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, 0x42, 0x4f, 0x4f, 0x54, 0x49, 0x4e, 0x47, 0x10, - 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x53, 0x54, 0x41, - 0x47, 0x45, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, - 0x1d, 0x0a, 0x19, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, - 0x5f, 0x4d, 0x41, 0x49, 0x4e, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x43, 0x45, 0x10, 0x03, 0x12, 0x19, - 0x0a, 0x15, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, - 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x1b, 0x0a, 0x17, 0x4d, 0x41, 0x43, - 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, 0x52, 0x45, 0x42, 0x4f, 0x4f, - 0x54, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x1f, 0x0a, 0x1b, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, - 0x45, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x48, 0x55, 0x54, 0x54, 0x49, 0x4e, 0x47, - 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x06, 0x12, 0x1b, 0x0a, 0x17, 0x4d, 0x41, 0x43, 0x48, 0x49, - 0x4e, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, 0x52, 0x45, 0x53, 0x45, 0x54, 0x54, 0x49, - 0x4e, 0x47, 0x10, 0x07, 0x12, 0x1b, 0x0a, 0x17, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, - 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x49, 0x4e, 0x47, 0x10, - 0x08, 0x42, 0x74, 0x0a, 0x28, 0x64, 0x65, 0x76, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, - 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x5a, 0x48, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x69, 0x64, 0x65, 0x72, 0x6f, - 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x6d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2f, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x4d, 0x50, 0x46, 0x53, 0x10, 0x02, 0x2a, 0x96, 0x01, 0x0a, 0x13, 0x43, 0x72, 0x69, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, + 0x0a, 0x1a, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x5f, 0x43, 0x41, 0x43, 0x48, 0x45, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x1f, + 0x0a, 0x1b, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x5f, 0x43, 0x41, 0x43, 0x48, 0x45, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x01, 0x12, + 0x20, 0x0a, 0x1c, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x5f, 0x43, 0x41, 0x43, 0x48, 0x45, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x49, 0x4e, 0x47, 0x10, + 0x02, 0x12, 0x1c, 0x0a, 0x18, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x5f, 0x43, 0x41, 0x43, 0x48, 0x45, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x59, 0x10, 0x03, 0x2a, + 0x53, 0x0a, 0x11, 0x4b, 0x75, 0x62, 0x65, 0x73, 0x70, 0x61, 0x6e, 0x50, 0x65, 0x65, 0x72, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x45, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, + 0x50, 0x45, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x50, 0x10, 0x01, 0x12, + 0x13, 0x0a, 0x0f, 0x50, 0x45, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x4f, + 0x57, 0x4e, 0x10, 0x02, 0x2a, 0x88, 0x01, 0x0a, 0x12, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x0e, 0x43, + 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, + 0x12, 0x0a, 0x0e, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x43, 0x4d, 0x44, 0x4c, 0x49, 0x4e, + 0x45, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x50, 0x4c, + 0x41, 0x54, 0x46, 0x4f, 0x52, 0x4d, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x4f, 0x4e, 0x46, + 0x49, 0x47, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x20, 0x0a, + 0x1c, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, + 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x04, 0x2a, + 0x4b, 0x0a, 0x0f, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x0e, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x44, + 0x48, 0x43, 0x50, 0x34, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, + 0x4f, 0x52, 0x5f, 0x44, 0x48, 0x43, 0x50, 0x36, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, + 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x56, 0x49, 0x50, 0x10, 0x02, 0x2a, 0x9b, 0x02, 0x0a, + 0x13, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x53, + 0x74, 0x61, 0x67, 0x65, 0x12, 0x19, 0x0a, 0x15, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, + 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, + 0x19, 0x0a, 0x15, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, + 0x5f, 0x42, 0x4f, 0x4f, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x4d, 0x41, + 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, 0x49, 0x4e, 0x53, 0x54, + 0x41, 0x4c, 0x4c, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x1d, 0x0a, 0x19, 0x4d, 0x41, 0x43, 0x48, + 0x49, 0x4e, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, 0x4d, 0x41, 0x49, 0x4e, 0x54, 0x45, + 0x4e, 0x41, 0x4e, 0x43, 0x45, 0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x4d, 0x41, 0x43, 0x48, 0x49, + 0x4e, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, + 0x10, 0x04, 0x12, 0x1b, 0x0a, 0x17, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x53, 0x54, + 0x41, 0x47, 0x45, 0x5f, 0x52, 0x45, 0x42, 0x4f, 0x4f, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, + 0x1f, 0x0a, 0x1b, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, + 0x5f, 0x53, 0x48, 0x55, 0x54, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x06, + 0x12, 0x1b, 0x0a, 0x17, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x47, + 0x45, 0x5f, 0x52, 0x45, 0x53, 0x45, 0x54, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x07, 0x12, 0x1b, 0x0a, + 0x17, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, 0x55, + 0x50, 0x47, 0x52, 0x41, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x08, 0x42, 0x74, 0x0a, 0x28, 0x64, 0x65, + 0x76, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x73, 0x69, 0x64, 0x65, 0x72, 0x6f, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x74, 0x61, + 0x6c, 0x6f, 0x73, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, + 0x79, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x64, + 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x65, 0x6e, 0x75, 0x6d, 0x73, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2793,7 +2856,7 @@ func file_resource_definitions_enums_enums_proto_rawDescGZIP() []byte { return file_resource_definitions_enums_enums_proto_rawDescData } -var file_resource_definitions_enums_enums_proto_enumTypes = make([]protoimpl.EnumInfo, 36) +var file_resource_definitions_enums_enums_proto_enumTypes = make([]protoimpl.EnumInfo, 37) var file_resource_definitions_enums_enums_proto_goTypes = []any{ (MachineType)(0), // 0: talos.resource.definitions.enums.MachineType (NethelpersAddressFlag)(0), // 1: talos.resource.definitions.enums.NethelpersAddressFlag @@ -2827,10 +2890,11 @@ var file_resource_definitions_enums_enums_proto_goTypes = []any{ (BlockFilesystemType)(0), // 29: talos.resource.definitions.enums.BlockFilesystemType (BlockVolumePhase)(0), // 30: talos.resource.definitions.enums.BlockVolumePhase (BlockVolumeType)(0), // 31: talos.resource.definitions.enums.BlockVolumeType - (KubespanPeerState)(0), // 32: talos.resource.definitions.enums.KubespanPeerState - (NetworkConfigLayer)(0), // 33: talos.resource.definitions.enums.NetworkConfigLayer - (NetworkOperator)(0), // 34: talos.resource.definitions.enums.NetworkOperator - (RuntimeMachineStage)(0), // 35: talos.resource.definitions.enums.RuntimeMachineStage + (CriImageCacheStatus)(0), // 32: talos.resource.definitions.enums.CriImageCacheStatus + (KubespanPeerState)(0), // 33: talos.resource.definitions.enums.KubespanPeerState + (NetworkConfigLayer)(0), // 34: talos.resource.definitions.enums.NetworkConfigLayer + (NetworkOperator)(0), // 35: talos.resource.definitions.enums.NetworkOperator + (RuntimeMachineStage)(0), // 36: talos.resource.definitions.enums.RuntimeMachineStage } var file_resource_definitions_enums_enums_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type @@ -2850,7 +2914,7 @@ func file_resource_definitions_enums_enums_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_resource_definitions_enums_enums_proto_rawDesc, - NumEnums: 36, + NumEnums: 37, NumMessages: 0, NumExtensions: 0, NumServices: 0, diff --git a/pkg/machinery/config/config/machine.go b/pkg/machinery/config/config/machine.go index 7fdcb51415..e1f449ea35 100644 --- a/pkg/machinery/config/config/machine.go +++ b/pkg/machinery/config/config/machine.go @@ -448,6 +448,7 @@ type Features interface { DiskQuotaSupportEnabled() bool HostDNS() HostDNS KubePrism() KubePrism + ImageCacheEnabled() bool } // KubernetesTalosAPIAccess describes the Kubernetes Talos API access features. diff --git a/pkg/machinery/config/schemas/config.schema.json b/pkg/machinery/config/schemas/config.schema.json index 181f6e251a..3b502d8787 100644 --- a/pkg/machinery/config/schemas/config.schema.json +++ b/pkg/machinery/config/schemas/config.schema.json @@ -2070,6 +2070,13 @@ "description": "Configures host DNS caching resolver.\n", "markdownDescription": "Configures host DNS caching resolver.", "x-intellij-html-description": "\u003cp\u003eConfigures host DNS caching resolver.\u003c/p\u003e\n" + }, + "imageCache": { + "type": "boolean", + "title": "imageCache", + "description": "Enable Image Cache feature.\n", + "markdownDescription": "Enable Image Cache feature.", + "x-intellij-html-description": "\u003cp\u003eEnable Image Cache feature.\u003c/p\u003e\n" } }, "additionalProperties": false, diff --git a/pkg/machinery/config/types/v1alpha1/v1alpha1_features.go b/pkg/machinery/config/types/v1alpha1/v1alpha1_features.go index 6b41bcd4ed..de60ab836e 100644 --- a/pkg/machinery/config/types/v1alpha1/v1alpha1_features.go +++ b/pkg/machinery/config/types/v1alpha1/v1alpha1_features.go @@ -57,6 +57,11 @@ func (f *FeaturesConfig) KubePrism() config.KubePrism { return f.KubePrismSupport } +// ImageCacheEnabled implements config.Features interface. +func (f *FeaturesConfig) ImageCacheEnabled() bool { + return pointer.SafeDeref(f.ImageCache) +} + const defaultKubePrismPort = 7445 // Enabled implements [config.KubePrism]. diff --git a/pkg/machinery/config/types/v1alpha1/v1alpha1_types.go b/pkg/machinery/config/types/v1alpha1/v1alpha1_types.go index 50dedc7b55..d97b9cc780 100644 --- a/pkg/machinery/config/types/v1alpha1/v1alpha1_types.go +++ b/pkg/machinery/config/types/v1alpha1/v1alpha1_types.go @@ -2167,6 +2167,9 @@ type FeaturesConfig struct { // description: | // Configures host DNS caching resolver. HostDNSSupport *HostDNSConfig `yaml:"hostDNS,omitempty"` + // description: | + // Enable Image Cache feature. + ImageCache *bool `yaml:"imageCache,omitempty"` } // KubePrism describes the configuration for the KubePrism load balancer. diff --git a/pkg/machinery/config/types/v1alpha1/v1alpha1_types_doc.go b/pkg/machinery/config/types/v1alpha1/v1alpha1_types_doc.go index 6d16aa69ec..c4d2a1b41d 100644 --- a/pkg/machinery/config/types/v1alpha1/v1alpha1_types_doc.go +++ b/pkg/machinery/config/types/v1alpha1/v1alpha1_types_doc.go @@ -3465,6 +3465,13 @@ func (FeaturesConfig) Doc() *encoder.Doc { Description: "Configures host DNS caching resolver.", Comments: [3]string{"" /* encoder.HeadComment */, "Configures host DNS caching resolver." /* encoder.LineComment */, "" /* encoder.FootComment */}, }, + { + Name: "imageCache", + Type: "bool", + Note: "", + Description: "Enable Image Cache feature.", + Comments: [3]string{"" /* encoder.HeadComment */, "Enable Image Cache feature." /* encoder.LineComment */, "" /* encoder.FootComment */}, + }, }, } diff --git a/pkg/machinery/resources/cri/cri.go b/pkg/machinery/resources/cri/cri.go index 29d1361db9..9f15aedfa7 100644 --- a/pkg/machinery/resources/cri/cri.go +++ b/pkg/machinery/resources/cri/cri.go @@ -2,9 +2,14 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at http://mozilla.org/MPL/2.0/. +// Package cri contains resources related to the Container Runtime Interface (CRI). package cri import "github.com/cosi-project/runtime/pkg/resource" +//go:generate deep-copy -type ImageCacheConfigSpec -type SeccompProfileSpec -header-file ../../../../hack/boilerplate.txt -o deep_copy.generated.go . + +//go:generate enumer -type=ImageCacheStatus -linecomment -text + // NamespaceName contains resources related to stats. const NamespaceName resource.Namespace = "cri" diff --git a/pkg/machinery/resources/cri/cri_test.go b/pkg/machinery/resources/cri/cri_test.go index 91905bf173..61d5399e82 100644 --- a/pkg/machinery/resources/cri/cri_test.go +++ b/pkg/machinery/resources/cri/cri_test.go @@ -25,6 +25,7 @@ func TestRegisterResource(t *testing.T) { resourceRegistry := registry.NewResourceRegistry(resources) for _, resource := range []meta.ResourceWithRD{ + &cri.ImageCacheConfig{}, &cri.SeccompProfile{}, } { assert.NoError(t, resourceRegistry.Register(ctx, resource)) diff --git a/pkg/machinery/resources/cri/deep_copy.generated.go b/pkg/machinery/resources/cri/deep_copy.generated.go index c0a2d5e0dd..e131a52ad6 100644 --- a/pkg/machinery/resources/cri/deep_copy.generated.go +++ b/pkg/machinery/resources/cri/deep_copy.generated.go @@ -2,10 +2,20 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at http://mozilla.org/MPL/2.0/. -// Code generated by "deep-copy -type SeccompProfileSpec -header-file ../../../../hack/boilerplate.txt -o deep_copy.generated.go ."; DO NOT EDIT. +// Code generated by "deep-copy -type ImageCacheConfigSpec -type SeccompProfileSpec -header-file ../../../../hack/boilerplate.txt -o deep_copy.generated.go ."; DO NOT EDIT. package cri +// DeepCopy generates a deep copy of ImageCacheConfigSpec. +func (o ImageCacheConfigSpec) DeepCopy() ImageCacheConfigSpec { + var cp ImageCacheConfigSpec = o + if o.Roots != nil { + cp.Roots = make([]string, len(o.Roots)) + copy(cp.Roots, o.Roots) + } + return cp +} + // DeepCopy generates a deep copy of SeccompProfileSpec. func (o SeccompProfileSpec) DeepCopy() SeccompProfileSpec { var cp SeccompProfileSpec = o diff --git a/pkg/machinery/resources/cri/image_cache_config.go b/pkg/machinery/resources/cri/image_cache_config.go new file mode 100644 index 0000000000..9f960ff1d9 --- /dev/null +++ b/pkg/machinery/resources/cri/image_cache_config.go @@ -0,0 +1,58 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package cri + +import ( + "github.com/cosi-project/runtime/pkg/resource" + "github.com/cosi-project/runtime/pkg/resource/meta" + "github.com/cosi-project/runtime/pkg/resource/protobuf" + "github.com/cosi-project/runtime/pkg/resource/typed" + + "github.com/siderolabs/talos/pkg/machinery/proto" +) + +// ImageCacheConfigType is type of ImageCacheConfig resource. +const ImageCacheConfigType = resource.Type("ImageCacheConfigs.cri.talos.dev") + +// ImageCacheConfig represents ImageCacheConfig typed resource. +type ImageCacheConfig = typed.Resource[ImageCacheConfigSpec, ImageCacheConfigExtension] + +// ImageCacheConfigSpec represents the ImageCacheConfig. +// +//gotagsrewrite:gen +type ImageCacheConfigSpec struct { + Status ImageCacheStatus `yaml:"status" protobuf:"1"` + Roots []string `yaml:"roots" protobuf:"2"` +} + +// NewImageCacheConfig creates new ImageCacheConfig object. +func NewImageCacheConfig(id string) *ImageCacheConfig { + return typed.NewResource[ImageCacheConfigSpec, ImageCacheConfigExtension]( + resource.NewMetadata(NamespaceName, ImageCacheConfigType, id, resource.VersionUndefined), + ImageCacheConfigSpec{}, + ) +} + +// ImageCacheConfigExtension is an auxiliary type for ImageCacheConfig resource. +type ImageCacheConfigExtension struct{} + +// ResourceDefinition implements meta.ResourceDefinitionProvider interface. +func (ImageCacheConfigExtension) ResourceDefinition() meta.ResourceDefinitionSpec { + return meta.ResourceDefinitionSpec{ + Type: ImageCacheConfigType, + Aliases: []resource.Type{}, + DefaultNamespace: NamespaceName, + PrintColumns: []meta.PrintColumn{}, + } +} + +func init() { + proto.RegisterDefaultTypes() + + err := protobuf.RegisterDynamic[ImageCacheConfigSpec](ImageCacheConfigType, &ImageCacheConfig{}) + if err != nil { + panic(err) + } +} diff --git a/pkg/machinery/resources/cri/imagecachestatus.go b/pkg/machinery/resources/cri/imagecachestatus.go new file mode 100644 index 0000000000..28dd32987a --- /dev/null +++ b/pkg/machinery/resources/cri/imagecachestatus.go @@ -0,0 +1,18 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package cri + +// ImageCacheStatus describes image cache status type. +type ImageCacheStatus int + +// ImageCacheStatus values. +// +//structprotogen:gen_enum +const ( + ImageCacheStatusUnknown ImageCacheStatus = iota // unknown + ImageCacheStatusDisabled // disabled + ImageCacheStatusPreparing // preparing + ImageCacheStatusReady // ready +) diff --git a/pkg/machinery/resources/cri/imagecachestatus_enumer.go b/pkg/machinery/resources/cri/imagecachestatus_enumer.go new file mode 100644 index 0000000000..81fa88cf1b --- /dev/null +++ b/pkg/machinery/resources/cri/imagecachestatus_enumer.go @@ -0,0 +1,98 @@ +// Code generated by "enumer -type=ImageCacheStatus -linecomment -text"; DO NOT EDIT. + +package cri + +import ( + "fmt" + "strings" +) + +const _ImageCacheStatusName = "unknowndisabledpreparingready" + +var _ImageCacheStatusIndex = [...]uint8{0, 7, 15, 24, 29} + +const _ImageCacheStatusLowerName = "unknowndisabledpreparingready" + +func (i ImageCacheStatus) String() string { + if i < 0 || i >= ImageCacheStatus(len(_ImageCacheStatusIndex)-1) { + return fmt.Sprintf("ImageCacheStatus(%d)", i) + } + return _ImageCacheStatusName[_ImageCacheStatusIndex[i]:_ImageCacheStatusIndex[i+1]] +} + +// An "invalid array index" compiler error signifies that the constant values have changed. +// Re-run the stringer command to generate them again. +func _ImageCacheStatusNoOp() { + var x [1]struct{} + _ = x[ImageCacheStatusUnknown-(0)] + _ = x[ImageCacheStatusDisabled-(1)] + _ = x[ImageCacheStatusPreparing-(2)] + _ = x[ImageCacheStatusReady-(3)] +} + +var _ImageCacheStatusValues = []ImageCacheStatus{ImageCacheStatusUnknown, ImageCacheStatusDisabled, ImageCacheStatusPreparing, ImageCacheStatusReady} + +var _ImageCacheStatusNameToValueMap = map[string]ImageCacheStatus{ + _ImageCacheStatusName[0:7]: ImageCacheStatusUnknown, + _ImageCacheStatusLowerName[0:7]: ImageCacheStatusUnknown, + _ImageCacheStatusName[7:15]: ImageCacheStatusDisabled, + _ImageCacheStatusLowerName[7:15]: ImageCacheStatusDisabled, + _ImageCacheStatusName[15:24]: ImageCacheStatusPreparing, + _ImageCacheStatusLowerName[15:24]: ImageCacheStatusPreparing, + _ImageCacheStatusName[24:29]: ImageCacheStatusReady, + _ImageCacheStatusLowerName[24:29]: ImageCacheStatusReady, +} + +var _ImageCacheStatusNames = []string{ + _ImageCacheStatusName[0:7], + _ImageCacheStatusName[7:15], + _ImageCacheStatusName[15:24], + _ImageCacheStatusName[24:29], +} + +// ImageCacheStatusString retrieves an enum value from the enum constants string name. +// Throws an error if the param is not part of the enum. +func ImageCacheStatusString(s string) (ImageCacheStatus, error) { + if val, ok := _ImageCacheStatusNameToValueMap[s]; ok { + return val, nil + } + + if val, ok := _ImageCacheStatusNameToValueMap[strings.ToLower(s)]; ok { + return val, nil + } + return 0, fmt.Errorf("%s does not belong to ImageCacheStatus values", s) +} + +// ImageCacheStatusValues returns all values of the enum +func ImageCacheStatusValues() []ImageCacheStatus { + return _ImageCacheStatusValues +} + +// ImageCacheStatusStrings returns a slice of all String values of the enum +func ImageCacheStatusStrings() []string { + strs := make([]string, len(_ImageCacheStatusNames)) + copy(strs, _ImageCacheStatusNames) + return strs +} + +// IsAImageCacheStatus returns "true" if the value is listed in the enum definition. "false" otherwise +func (i ImageCacheStatus) IsAImageCacheStatus() bool { + for _, v := range _ImageCacheStatusValues { + if i == v { + return true + } + } + return false +} + +// MarshalText implements the encoding.TextMarshaler interface for ImageCacheStatus +func (i ImageCacheStatus) MarshalText() ([]byte, error) { + return []byte(i.String()), nil +} + +// UnmarshalText implements the encoding.TextUnmarshaler interface for ImageCacheStatus +func (i *ImageCacheStatus) UnmarshalText(text []byte) error { + var err error + *i, err = ImageCacheStatusString(string(text)) + return err +} diff --git a/pkg/machinery/resources/cri/seccomp_profile.go b/pkg/machinery/resources/cri/seccomp_profile.go index 9315b6977e..4fdfc142af 100644 --- a/pkg/machinery/resources/cri/seccomp_profile.go +++ b/pkg/machinery/resources/cri/seccomp_profile.go @@ -13,8 +13,6 @@ import ( "github.com/siderolabs/talos/pkg/machinery/proto" ) -//go:generate deep-copy -type SeccompProfileSpec -header-file ../../../../hack/boilerplate.txt -o deep_copy.generated.go . - // SeccompProfileType is type of SeccompProfile resource. const SeccompProfileType = resource.Type("SeccompProfiles.cri.talos.dev") diff --git a/website/content/v1.9/reference/api.md b/website/content/v1.9/reference/api.md index 717cf3c26f..1da5db8a3a 100644 --- a/website/content/v1.9/reference/api.md +++ b/website/content/v1.9/reference/api.md @@ -55,6 +55,7 @@ description: Talos gRPC API reference. - [MemberSpec](#talos.resource.definitions.cluster.MemberSpec) - [resource/definitions/cri/cri.proto](#resource/definitions/cri/cri.proto) + - [ImageCacheConfigSpec](#talos.resource.definitions.cri.ImageCacheConfigSpec) - [SeccompProfileSpec](#talos.resource.definitions.cri.SeccompProfileSpec) - [resource/definitions/enums/enums.proto](#resource/definitions/enums/enums.proto) @@ -63,6 +64,7 @@ description: Talos gRPC API reference. - [BlockFilesystemType](#talos.resource.definitions.enums.BlockFilesystemType) - [BlockVolumePhase](#talos.resource.definitions.enums.BlockVolumePhase) - [BlockVolumeType](#talos.resource.definitions.enums.BlockVolumeType) + - [CriImageCacheStatus](#talos.resource.definitions.enums.CriImageCacheStatus) - [KubespanPeerState](#talos.resource.definitions.enums.KubespanPeerState) - [MachineType](#talos.resource.definitions.enums.MachineType) - [NethelpersADSelect](#talos.resource.definitions.enums.NethelpersADSelect) @@ -1287,6 +1289,22 @@ MemberSpec describes Member state. + + +### ImageCacheConfigSpec +ImageCacheConfigSpec represents the ImageCacheConfig. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| status | [talos.resource.definitions.enums.CriImageCacheStatus](#talos.resource.definitions.enums.CriImageCacheStatus) | | | +| roots | [string](#string) | repeated | | + + + + + + ### SeccompProfileSpec @@ -1393,6 +1411,20 @@ BlockVolumeType describes volume type. + + +### CriImageCacheStatus +CriImageCacheStatus describes image cache status type. + +| Name | Number | Description | +| ---- | ------ | ----------- | +| IMAGE_CACHE_STATUS_UNKNOWN | 0 | | +| IMAGE_CACHE_STATUS_DISABLED | 1 | | +| IMAGE_CACHE_STATUS_PREPARING | 2 | | +| IMAGE_CACHE_STATUS_READY | 3 | | + + + ### KubespanPeerState diff --git a/website/content/v1.9/reference/configuration/v1alpha1/config.md b/website/content/v1.9/reference/configuration/v1alpha1/config.md index be297cb91a..237bb6db18 100644 --- a/website/content/v1.9/reference/configuration/v1alpha1/config.md +++ b/website/content/v1.9/reference/configuration/v1alpha1/config.md @@ -2627,6 +2627,7 @@ kubernetesTalosAPIAccess: |`diskQuotaSupport` |bool |
Enable XFS project quota support for EPHEMERAL partition and user disks.Also enables kubelet tracking of ephemeral disk usage in the kubelet via quota.
| | |`kubePrism` |KubePrism |
KubePrism - local proxy/load balancer on defined port that will distributerequests to all API servers in the cluster.
| | |`hostDNS` |HostDNSConfig |Configures host DNS caching resolver. | | +|`imageCache` |bool |Enable Image Cache feature. | |