From 509f1f21610d76358b766f41c47fec4eefc24bf2 Mon Sep 17 00:00:00 2001 From: Wim Henderickx Date: Wed, 28 Jan 2026 21:34:13 +0100 Subject: [PATCH 1/3] added targetName in connection profile --- apis/config/v1alpha1/generated.pb.go | 953 ++++++++++++++++-- apis/config/v1alpha1/generated.proto | 81 ++ .../v1alpha1/sensitive_config_helpers.go | 3 +- .../config/v1alpha1/sensitive_config_types.go | 2 +- apis/inv/v1alpha1/generated.pb.go | 450 +++++---- apis/inv/v1alpha1/generated.proto | 5 + apis/inv/v1alpha1/targetconnprofile_types.go | 4 + apis/inv/v1alpha1/zz_generated.deepcopy.go | 9 + ...nv.sdcio.dev_targetconnectionprofiles.yaml | 5 + ...nv.sdcio.dev_targetconnectionprofiles.yaml | 5 + go.mod | 4 +- go.sum | 13 +- pkg/generated/openapi/zz_generated.openapi.go | 7 + pkg/reconcilers/targetdatastore/reconciler.go | 5 + 14 files changed, 1224 insertions(+), 322 deletions(-) diff --git a/apis/config/v1alpha1/generated.pb.go b/apis/config/v1alpha1/generated.pb.go index c482d879..131ffd7d 100644 --- a/apis/config/v1alpha1/generated.pb.go +++ b/apis/config/v1alpha1/generated.pb.go @@ -42,11 +42,10 @@ var _ = math.Inf // A compilation error at this line likely means your copy of the // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package - func (m *Config) Reset() { *m = Config{} } func (*Config) ProtoMessage() {} func (*Config) Descriptor() ([]byte, []int) { - return fileDescriptor_609f4c56ac31047c, []int{0} + return fileDescriptor_609f4c56ac31047c, []int{2} } func (m *Config) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -74,7 +73,7 @@ var xxx_messageInfo_Config proto.InternalMessageInfo func (m *ConfigBlame) Reset() { *m = ConfigBlame{} } func (*ConfigBlame) ProtoMessage() {} func (*ConfigBlame) Descriptor() ([]byte, []int) { - return fileDescriptor_609f4c56ac31047c, []int{1} + return fileDescriptor_609f4c56ac31047c, []int{3} } func (m *ConfigBlame) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -102,7 +101,7 @@ var xxx_messageInfo_ConfigBlame proto.InternalMessageInfo func (m *ConfigBlameList) Reset() { *m = ConfigBlameList{} } func (*ConfigBlameList) ProtoMessage() {} func (*ConfigBlameList) Descriptor() ([]byte, []int) { - return fileDescriptor_609f4c56ac31047c, []int{2} + return fileDescriptor_609f4c56ac31047c, []int{4} } func (m *ConfigBlameList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -130,7 +129,7 @@ var xxx_messageInfo_ConfigBlameList proto.InternalMessageInfo func (m *ConfigBlameSpec) Reset() { *m = ConfigBlameSpec{} } func (*ConfigBlameSpec) ProtoMessage() {} func (*ConfigBlameSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_609f4c56ac31047c, []int{3} + return fileDescriptor_609f4c56ac31047c, []int{5} } func (m *ConfigBlameSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -158,7 +157,7 @@ var xxx_messageInfo_ConfigBlameSpec proto.InternalMessageInfo func (m *ConfigBlameStatus) Reset() { *m = ConfigBlameStatus{} } func (*ConfigBlameStatus) ProtoMessage() {} func (*ConfigBlameStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_609f4c56ac31047c, []int{4} + return fileDescriptor_609f4c56ac31047c, []int{6} } func (m *ConfigBlameStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -186,7 +185,7 @@ var xxx_messageInfo_ConfigBlameStatus proto.InternalMessageInfo func (m *ConfigBlob) Reset() { *m = ConfigBlob{} } func (*ConfigBlob) ProtoMessage() {} func (*ConfigBlob) Descriptor() ([]byte, []int) { - return fileDescriptor_609f4c56ac31047c, []int{5} + return fileDescriptor_609f4c56ac31047c, []int{7} } func (m *ConfigBlob) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -214,7 +213,7 @@ var xxx_messageInfo_ConfigBlob proto.InternalMessageInfo func (m *ConfigDeviation) Reset() { *m = ConfigDeviation{} } func (*ConfigDeviation) ProtoMessage() {} func (*ConfigDeviation) Descriptor() ([]byte, []int) { - return fileDescriptor_609f4c56ac31047c, []int{6} + return fileDescriptor_609f4c56ac31047c, []int{8} } func (m *ConfigDeviation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -242,7 +241,7 @@ var xxx_messageInfo_ConfigDeviation proto.InternalMessageInfo func (m *ConfigList) Reset() { *m = ConfigList{} } func (*ConfigList) ProtoMessage() {} func (*ConfigList) Descriptor() ([]byte, []int) { - return fileDescriptor_609f4c56ac31047c, []int{7} + return fileDescriptor_609f4c56ac31047c, []int{9} } func (m *ConfigList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -270,7 +269,7 @@ var xxx_messageInfo_ConfigList proto.InternalMessageInfo func (m *ConfigSet) Reset() { *m = ConfigSet{} } func (*ConfigSet) ProtoMessage() {} func (*ConfigSet) Descriptor() ([]byte, []int) { - return fileDescriptor_609f4c56ac31047c, []int{8} + return fileDescriptor_609f4c56ac31047c, []int{10} } func (m *ConfigSet) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -298,7 +297,7 @@ var xxx_messageInfo_ConfigSet proto.InternalMessageInfo func (m *ConfigSetList) Reset() { *m = ConfigSetList{} } func (*ConfigSetList) ProtoMessage() {} func (*ConfigSetList) Descriptor() ([]byte, []int) { - return fileDescriptor_609f4c56ac31047c, []int{9} + return fileDescriptor_609f4c56ac31047c, []int{11} } func (m *ConfigSetList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -326,7 +325,7 @@ var xxx_messageInfo_ConfigSetList proto.InternalMessageInfo func (m *ConfigSetSpec) Reset() { *m = ConfigSetSpec{} } func (*ConfigSetSpec) ProtoMessage() {} func (*ConfigSetSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_609f4c56ac31047c, []int{10} + return fileDescriptor_609f4c56ac31047c, []int{12} } func (m *ConfigSetSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -354,7 +353,7 @@ var xxx_messageInfo_ConfigSetSpec proto.InternalMessageInfo func (m *ConfigSetStatus) Reset() { *m = ConfigSetStatus{} } func (*ConfigSetStatus) ProtoMessage() {} func (*ConfigSetStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_609f4c56ac31047c, []int{11} + return fileDescriptor_609f4c56ac31047c, []int{13} } func (m *ConfigSetStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -382,7 +381,7 @@ var xxx_messageInfo_ConfigSetStatus proto.InternalMessageInfo func (m *ConfigSpec) Reset() { *m = ConfigSpec{} } func (*ConfigSpec) ProtoMessage() {} func (*ConfigSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_609f4c56ac31047c, []int{12} + return fileDescriptor_609f4c56ac31047c, []int{14} } func (m *ConfigSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -410,7 +409,7 @@ var xxx_messageInfo_ConfigSpec proto.InternalMessageInfo func (m *ConfigStatus) Reset() { *m = ConfigStatus{} } func (*ConfigStatus) ProtoMessage() {} func (*ConfigStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_609f4c56ac31047c, []int{13} + return fileDescriptor_609f4c56ac31047c, []int{15} } func (m *ConfigStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -438,7 +437,7 @@ var xxx_messageInfo_ConfigStatus proto.InternalMessageInfo func (m *ConfigStatusLastKnownGoodSchema) Reset() { *m = ConfigStatusLastKnownGoodSchema{} } func (*ConfigStatusLastKnownGoodSchema) ProtoMessage() {} func (*ConfigStatusLastKnownGoodSchema) Descriptor() ([]byte, []int) { - return fileDescriptor_609f4c56ac31047c, []int{14} + return fileDescriptor_609f4c56ac31047c, []int{16} } func (m *ConfigStatusLastKnownGoodSchema) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -466,7 +465,7 @@ var xxx_messageInfo_ConfigStatusLastKnownGoodSchema proto.InternalMessageInfo func (m *Deviation) Reset() { *m = Deviation{} } func (*Deviation) ProtoMessage() {} func (*Deviation) Descriptor() ([]byte, []int) { - return fileDescriptor_609f4c56ac31047c, []int{15} + return fileDescriptor_609f4c56ac31047c, []int{17} } func (m *Deviation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -494,7 +493,7 @@ var xxx_messageInfo_Deviation proto.InternalMessageInfo func (m *DeviationList) Reset() { *m = DeviationList{} } func (*DeviationList) ProtoMessage() {} func (*DeviationList) Descriptor() ([]byte, []int) { - return fileDescriptor_609f4c56ac31047c, []int{16} + return fileDescriptor_609f4c56ac31047c, []int{18} } func (m *DeviationList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -522,7 +521,7 @@ var xxx_messageInfo_DeviationList proto.InternalMessageInfo func (m *DeviationSpec) Reset() { *m = DeviationSpec{} } func (*DeviationSpec) ProtoMessage() {} func (*DeviationSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_609f4c56ac31047c, []int{17} + return fileDescriptor_609f4c56ac31047c, []int{19} } func (m *DeviationSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -550,7 +549,7 @@ var xxx_messageInfo_DeviationSpec proto.InternalMessageInfo func (m *DeviationStatus) Reset() { *m = DeviationStatus{} } func (*DeviationStatus) ProtoMessage() {} func (*DeviationStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_609f4c56ac31047c, []int{18} + return fileDescriptor_609f4c56ac31047c, []int{20} } func (m *DeviationStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -578,7 +577,7 @@ var xxx_messageInfo_DeviationStatus proto.InternalMessageInfo func (m *Lifecycle) Reset() { *m = Lifecycle{} } func (*Lifecycle) ProtoMessage() {} func (*Lifecycle) Descriptor() ([]byte, []int) { - return fileDescriptor_609f4c56ac31047c, []int{19} + return fileDescriptor_609f4c56ac31047c, []int{21} } func (m *Lifecycle) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -606,7 +605,7 @@ var xxx_messageInfo_Lifecycle proto.InternalMessageInfo func (m *RunningConfig) Reset() { *m = RunningConfig{} } func (*RunningConfig) ProtoMessage() {} func (*RunningConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_609f4c56ac31047c, []int{20} + return fileDescriptor_609f4c56ac31047c, []int{22} } func (m *RunningConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -634,7 +633,7 @@ var xxx_messageInfo_RunningConfig proto.InternalMessageInfo func (m *RunningConfigList) Reset() { *m = RunningConfigList{} } func (*RunningConfigList) ProtoMessage() {} func (*RunningConfigList) Descriptor() ([]byte, []int) { - return fileDescriptor_609f4c56ac31047c, []int{21} + return fileDescriptor_609f4c56ac31047c, []int{23} } func (m *RunningConfigList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -662,7 +661,7 @@ var xxx_messageInfo_RunningConfigList proto.InternalMessageInfo func (m *RunningConfigSpec) Reset() { *m = RunningConfigSpec{} } func (*RunningConfigSpec) ProtoMessage() {} func (*RunningConfigSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_609f4c56ac31047c, []int{22} + return fileDescriptor_609f4c56ac31047c, []int{24} } func (m *RunningConfigSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -690,7 +689,7 @@ var xxx_messageInfo_RunningConfigSpec proto.InternalMessageInfo func (m *RunningConfigStatus) Reset() { *m = RunningConfigStatus{} } func (*RunningConfigStatus) ProtoMessage() {} func (*RunningConfigStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_609f4c56ac31047c, []int{23} + return fileDescriptor_609f4c56ac31047c, []int{25} } func (m *RunningConfigStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -718,7 +717,7 @@ var xxx_messageInfo_RunningConfigStatus proto.InternalMessageInfo func (m *Target) Reset() { *m = Target{} } func (*Target) ProtoMessage() {} func (*Target) Descriptor() ([]byte, []int) { - return fileDescriptor_609f4c56ac31047c, []int{24} + return fileDescriptor_609f4c56ac31047c, []int{31} } func (m *Target) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -746,7 +745,7 @@ var xxx_messageInfo_Target proto.InternalMessageInfo func (m *TargetStatus) Reset() { *m = TargetStatus{} } func (*TargetStatus) ProtoMessage() {} func (*TargetStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_609f4c56ac31047c, []int{25} + return fileDescriptor_609f4c56ac31047c, []int{32} } func (m *TargetStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -805,90 +804,106 @@ func init() { } var fileDescriptor_609f4c56ac31047c = []byte{ - // 1322 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x59, 0xcb, 0x6f, 0x1b, 0x45, - 0x18, 0xcf, 0xda, 0x8e, 0x1b, 0x4f, 0xe2, 0xb4, 0x9e, 0x1c, 0x08, 0x3d, 0xd8, 0xd5, 0x0a, 0xa1, - 0x22, 0xe8, 0x9a, 0x3e, 0x84, 0x90, 0x90, 0x28, 0xdd, 0x9a, 0x3e, 0x44, 0x81, 0x68, 0x12, 0x45, - 0x02, 0x81, 0xe8, 0x78, 0x77, 0xb2, 0x1e, 0xb2, 0xde, 0x5d, 0xed, 0x8e, 0xdd, 0xf8, 0xc6, 0x89, - 0x03, 0x27, 0x84, 0x10, 0x57, 0x2e, 0xc0, 0xdf, 0xc0, 0x85, 0x03, 0x07, 0x44, 0x0e, 0x20, 0x55, - 0x20, 0xa1, 0x8a, 0x83, 0x45, 0xcc, 0x7f, 0xd1, 0x13, 0xda, 0x99, 0xd9, 0x97, 0x1f, 0x49, 0x9a, - 0x25, 0x56, 0x7b, 0xcb, 0x7e, 0x8f, 0xdf, 0xf7, 0x98, 0xdf, 0x7c, 0xfb, 0x79, 0x03, 0x6e, 0x5a, - 0x94, 0x75, 0x7a, 0x6d, 0xcd, 0x70, 0xbb, 0xcd, 0xc0, 0x34, 0xa8, 0xdb, 0x34, 0x5c, 0x67, 0x87, - 0x5a, 0x97, 0x02, 0xe2, 0xf7, 0x89, 0xdf, 0xc4, 0x1e, 0x0d, 0xa4, 0xa8, 0xd9, 0xbf, 0x8c, 0x6d, - 0xaf, 0x83, 0x2f, 0x37, 0x2d, 0xe2, 0x10, 0x1f, 0x33, 0x62, 0x6a, 0x9e, 0xef, 0x32, 0x17, 0x5e, - 0x4d, 0x40, 0x34, 0x0e, 0xa2, 0x09, 0x8f, 0x4f, 0x04, 0x88, 0x16, 0x82, 0x48, 0x91, 0x16, 0x81, - 0x9c, 0xbf, 0x94, 0x8a, 0x6c, 0xb9, 0x96, 0xdb, 0xe4, 0x58, 0xed, 0xde, 0x0e, 0x7f, 0xe2, 0x0f, - 0xfc, 0x2f, 0x11, 0xe3, 0xfc, 0xad, 0x63, 0x26, 0x6a, 0x52, 0x46, 0x5d, 0x67, 0x66, 0xae, 0xe7, - 0xaf, 0xed, 0xbe, 0x1e, 0x68, 0xd4, 0x0d, 0xed, 0xbb, 0xd8, 0xe8, 0x50, 0x87, 0xf8, 0x83, 0xa6, - 0xb7, 0x6b, 0x09, 0x80, 0x2e, 0x61, 0xb8, 0xd9, 0x9f, 0xf4, 0x6a, 0xce, 0xf2, 0xf2, 0x7b, 0x0e, - 0xa3, 0x5d, 0x32, 0xe1, 0xf0, 0xda, 0x51, 0x0e, 0x81, 0xd1, 0x21, 0x5d, 0x3c, 0xee, 0xa7, 0xfe, - 0x58, 0x00, 0xe5, 0x9b, 0xbc, 0x30, 0x78, 0x1f, 0x2c, 0x85, 0xe9, 0x98, 0x98, 0xe1, 0x75, 0xe5, - 0x82, 0x72, 0x71, 0xf9, 0xca, 0xab, 0x9a, 0x40, 0xd5, 0xd2, 0xa8, 0x9a, 0xb7, 0x6b, 0x89, 0x0e, - 0x87, 0xd6, 0x5a, 0xff, 0xb2, 0xf6, 0x7e, 0xfb, 0x53, 0x62, 0xb0, 0x77, 0x09, 0xc3, 0x3a, 0xdc, - 0x1f, 0x36, 0x16, 0x46, 0xc3, 0x06, 0x48, 0x64, 0x28, 0x46, 0x85, 0x18, 0x94, 0x02, 0x8f, 0x18, - 0xeb, 0x05, 0x8e, 0x7e, 0x5d, 0x3b, 0xc1, 0x31, 0x6a, 0x22, 0xd9, 0x4d, 0x8f, 0x18, 0xfa, 0x8a, - 0x0c, 0x56, 0x0a, 0x9f, 0x10, 0x87, 0x86, 0x14, 0x94, 0x03, 0x86, 0x59, 0x2f, 0x58, 0x2f, 0xf2, - 0x20, 0x37, 0xf2, 0x04, 0xe1, 0x40, 0xfa, 0xaa, 0x0c, 0x53, 0x16, 0xcf, 0x48, 0x06, 0x50, 0x7f, - 0x2d, 0x80, 0x65, 0x61, 0xa8, 0xdb, 0xb8, 0x4b, 0xe6, 0xd0, 0xbf, 0x9d, 0x4c, 0xff, 0x5a, 0x39, - 0x4a, 0xe3, 0x19, 0xcf, 0x6c, 0xa2, 0x33, 0xd6, 0xc4, 0x5b, 0xb9, 0x23, 0x1d, 0xde, 0xc9, 0xbf, - 0x14, 0x70, 0x36, 0x65, 0x7d, 0x8f, 0x06, 0x0c, 0x7e, 0x34, 0xd1, 0x4d, 0xed, 0x78, 0xdd, 0x0c, - 0xbd, 0x79, 0x2f, 0xcf, 0xc9, 0x68, 0x4b, 0x91, 0x24, 0xd5, 0x49, 0x02, 0x16, 0x29, 0x23, 0xdd, - 0x60, 0xbd, 0x70, 0xa1, 0x78, 0x71, 0xf9, 0xca, 0x5b, 0x79, 0x0b, 0xd4, 0xab, 0x32, 0xd8, 0xe2, - 0xdd, 0x10, 0x16, 0x09, 0x74, 0xb5, 0x96, 0xa9, 0x2b, 0xec, 0xb0, 0x6a, 0x81, 0xda, 0x44, 0x63, - 0x20, 0x02, 0x8b, 0x7d, 0x6c, 0xf7, 0x88, 0x3c, 0xd9, 0x4b, 0x33, 0x2b, 0x95, 0xb7, 0x59, 0x43, - 0xf8, 0xc1, 0xdb, 0x7b, 0x8c, 0x38, 0x01, 0x75, 0x9d, 0x24, 0xf6, 0x76, 0x88, 0x81, 0x04, 0x94, - 0xfa, 0xb9, 0x02, 0x40, 0x14, 0xc9, 0x6d, 0xc3, 0x17, 0x40, 0x59, 0xe4, 0xcf, 0xbb, 0x59, 0x49, - 0xce, 0x7d, 0x03, 0xb3, 0x0e, 0x92, 0xba, 0x53, 0x49, 0xe4, 0x97, 0xf8, 0x74, 0x5b, 0xa4, 0x4f, - 0x71, 0x38, 0x2e, 0xe1, 0x05, 0x50, 0xf2, 0x30, 0xeb, 0x4c, 0xcd, 0x85, 0x6b, 0xe0, 0x35, 0xb0, - 0x62, 0x92, 0x80, 0xfa, 0xc4, 0xdc, 0x8e, 0x13, 0xaa, 0xe8, 0xe7, 0x46, 0xc3, 0xc6, 0x4a, 0x2b, - 0x25, 0x47, 0x19, 0x2b, 0x78, 0x05, 0x2c, 0x63, 0x83, 0xf5, 0xb0, 0x2d, 0x9c, 0x8a, 0x89, 0xd3, - 0xcd, 0x9e, 0xef, 0x13, 0x87, 0x09, 0xa7, 0xb4, 0x11, 0x7c, 0x11, 0x94, 0x7d, 0x82, 0x03, 0xd7, - 0x59, 0x2f, 0x71, 0xf3, 0x98, 0xa5, 0x88, 0x4b, 0x91, 0xd4, 0xaa, 0xbf, 0xc5, 0x0d, 0x9d, 0x03, - 0x41, 0xef, 0x67, 0x09, 0xfa, 0x46, 0x1e, 0x82, 0x4e, 0xe7, 0xe6, 0xcf, 0x05, 0x50, 0x91, 0x73, - 0x8e, 0xb0, 0x39, 0x0c, 0x2f, 0x33, 0x33, 0xbc, 0xf4, 0x3c, 0x73, 0x99, 0xb0, 0x99, 0xa3, 0xcb, - 0x1e, 0x1b, 0x5d, 0xad, 0x9c, 0x71, 0x0e, 0x1f, 0x5c, 0x7f, 0x28, 0xa0, 0x1a, 0xdb, 0xce, 0x81, - 0x15, 0x46, 0x96, 0x15, 0x6f, 0xe6, 0x2b, 0x6e, 0x06, 0x31, 0xbe, 0x2f, 0xa6, 0x8a, 0x0a, 0x5b, - 0x0b, 0x0d, 0x50, 0x66, 0xd8, 0xb7, 0x08, 0x93, 0x25, 0x9d, 0x8c, 0x8d, 0x5b, 0x1c, 0x22, 0xe9, - 0xa5, 0x78, 0x46, 0x12, 0x1a, 0xee, 0x82, 0x8a, 0x4d, 0x77, 0x88, 0x31, 0x30, 0xec, 0x68, 0xfc, - 0x9c, 0xac, 0xbe, 0x7b, 0x11, 0x8a, 0x5e, 0x1d, 0x0d, 0x1b, 0x95, 0xf8, 0x11, 0x25, 0xf8, 0xf0, - 0x15, 0xb0, 0xe4, 0xf9, 0xd4, 0xf5, 0x29, 0x1b, 0x70, 0xa2, 0x14, 0x93, 0xb6, 0x6f, 0x48, 0x39, - 0x8a, 0x2d, 0xe0, 0xcb, 0xa0, 0xe2, 0x93, 0x3e, 0xf1, 0x19, 0xed, 0x13, 0x3e, 0x24, 0x96, 0x04, - 0x34, 0x8a, 0x84, 0x28, 0xd1, 0x43, 0x2b, 0x1e, 0xb4, 0x8b, 0xfc, 0x90, 0xae, 0xe7, 0x7a, 0xb7, - 0xb8, 0xed, 0xa4, 0x61, 0x42, 0x16, 0xcd, 0x6a, 0xf5, 0xeb, 0x42, 0x34, 0x57, 0x63, 0xa2, 0xc2, - 0xaf, 0x14, 0x50, 0x8b, 0x97, 0x52, 0x62, 0x0a, 0xa9, 0x3c, 0xb5, 0xbb, 0xc7, 0x4d, 0x44, 0x78, - 0x67, 0x72, 0xc9, 0x02, 0xea, 0xcf, 0xcb, 0x94, 0x6a, 0x13, 0x2a, 0x34, 0x19, 0x1e, 0xda, 0xe0, - 0x8c, 0x38, 0xe3, 0x88, 0xb7, 0x37, 0x72, 0xf0, 0x47, 0x66, 0x70, 0x56, 0x66, 0x70, 0x46, 0x48, - 0x03, 0x14, 0x85, 0x50, 0x7f, 0x2a, 0x44, 0x63, 0x9a, 0x73, 0x37, 0x43, 0x2b, 0x65, 0x8e, 0xb4, - 0x2a, 0x3c, 0x19, 0xad, 0x8a, 0xc7, 0xa6, 0x55, 0xe9, 0x74, 0x69, 0xf5, 0x45, 0x09, 0xac, 0xa4, - 0xf7, 0xdf, 0xa7, 0x93, 0x53, 0xdf, 0x2a, 0x60, 0xcd, 0xc6, 0x01, 0x7b, 0xc7, 0x71, 0x1f, 0x38, - 0xb7, 0x5d, 0xd7, 0xdc, 0xe4, 0xbf, 0x6f, 0xe4, 0xe0, 0xd8, 0xca, 0xbd, 0xf5, 0xdf, 0x9b, 0xc4, - 0xd6, 0x9f, 0x1b, 0x0d, 0x1b, 0x6b, 0x53, 0x14, 0x68, 0x5a, 0x26, 0x70, 0x0f, 0x54, 0xb1, 0xe7, - 0xd9, 0x94, 0x98, 0x02, 0x57, 0xbe, 0x90, 0x72, 0xff, 0xea, 0xa9, 0x8d, 0x86, 0x8d, 0xea, 0x8d, - 0x34, 0x32, 0xca, 0x06, 0x82, 0x77, 0xc1, 0x9a, 0x19, 0x6d, 0x5a, 0xb7, 0xc5, 0xef, 0x3d, 0x2a, - 0xb7, 0x9b, 0xa2, 0x28, 0xa2, 0x35, 0xa9, 0x46, 0xd3, 0x7c, 0xd4, 0x6f, 0x14, 0xd0, 0x38, 0xa2, - 0x2d, 0xe1, 0x2e, 0xc7, 0x06, 0x1e, 0x19, 0xdf, 0xe5, 0xb6, 0x06, 0x1e, 0x41, 0x5c, 0x13, 0x6e, - 0x58, 0x7d, 0xe2, 0x98, 0xae, 0x2f, 0xb7, 0xb8, 0x98, 0x7a, 0xdb, 0x5c, 0x8a, 0xa4, 0x16, 0xbe, - 0x04, 0xce, 0xf4, 0x89, 0x1f, 0xae, 0x92, 0x72, 0x73, 0x8b, 0x6f, 0xf9, 0xb6, 0x10, 0xa3, 0x48, - 0xcf, 0xb7, 0x97, 0x64, 0x9d, 0x7c, 0x36, 0xb6, 0x97, 0x38, 0xdf, 0x53, 0xde, 0x5e, 0x92, 0x38, - 0x47, 0x6f, 0x2f, 0xb1, 0xed, 0xb3, 0xb2, 0xbd, 0xc4, 0x09, 0xcf, 0xd8, 0x5e, 0xfe, 0x4c, 0x17, - 0xc5, 0xdf, 0x00, 0x77, 0x40, 0x35, 0xa6, 0xf6, 0x56, 0x42, 0x54, 0x35, 0xbc, 0x47, 0xad, 0xb4, - 0xe2, 0xf1, 0xb8, 0x00, 0x65, 0x1d, 0xe1, 0x1e, 0x00, 0xb1, 0x20, 0xaa, 0x22, 0xcf, 0x82, 0x99, - 0xd4, 0x12, 0x93, 0x2f, 0x16, 0x05, 0x28, 0x15, 0x4b, 0xfd, 0x41, 0x01, 0x67, 0xc7, 0x8e, 0xf5, - 0xa9, 0x9c, 0xcb, 0xea, 0xc7, 0x20, 0x79, 0x33, 0xc2, 0x0d, 0xb0, 0x6a, 0x12, 0x9b, 0x84, 0x06, - 0x1b, 0xae, 0x4d, 0x8d, 0x81, 0x6c, 0xfd, 0x45, 0x09, 0xb9, 0xda, 0xca, 0x68, 0x1f, 0x4f, 0x48, - 0xd0, 0x98, 0xbf, 0xfa, 0x7b, 0x01, 0x54, 0x51, 0xcf, 0x71, 0xa8, 0x63, 0xcd, 0xed, 0xab, 0x55, - 0x27, 0x73, 0xf5, 0x4f, 0xf6, 0x2d, 0x24, 0x93, 0xf3, 0xcc, 0xeb, 0xef, 0x8d, 0x5d, 0xff, 0x3b, - 0xff, 0x43, 0xac, 0xc3, 0x47, 0xc0, 0xdf, 0x0a, 0xa8, 0x65, 0xec, 0xe7, 0x30, 0x06, 0xac, 0xec, - 0x18, 0xd0, 0xf3, 0x17, 0x39, 0x63, 0x14, 0xac, 0x8d, 0xd5, 0xc6, 0xbf, 0xbf, 0x50, 0xb0, 0x36, - 0xa5, 0x41, 0xa7, 0xf2, 0xe1, 0x63, 0x00, 0xe4, 0x6f, 0x1c, 0xe8, 0x82, 0x55, 0xb1, 0x9e, 0x6e, - 0x12, 0x9b, 0x18, 0xcc, 0xf5, 0x65, 0x5b, 0xaf, 0x1e, 0xb3, 0xad, 0xb8, 0x4d, 0xec, 0xc8, 0x55, - 0x87, 0xe1, 0xcd, 0xd9, 0xca, 0xc0, 0xa1, 0x31, 0x78, 0xf5, 0x3b, 0x05, 0xac, 0xa4, 0xf7, 0xe5, - 0xf0, 0x25, 0xed, 0xe0, 0xee, 0xc4, 0x4b, 0xfa, 0x3d, 0xdc, 0x25, 0x88, 0x6b, 0xa0, 0x0f, 0x2a, - 0xf1, 0x75, 0x7e, 0xd2, 0x8f, 0xa7, 0x33, 0xa7, 0x88, 0x5e, 0x93, 0x91, 0x2a, 0xb1, 0x08, 0x25, - 0x61, 0xf4, 0x0f, 0xf6, 0x0f, 0xea, 0x0b, 0x0f, 0x0f, 0xea, 0x0b, 0x8f, 0x0e, 0xea, 0x0b, 0x9f, - 0x8d, 0xea, 0xca, 0xfe, 0xa8, 0xae, 0x3c, 0x1c, 0xd5, 0x95, 0x47, 0xa3, 0xba, 0xf2, 0xcf, 0xa8, - 0xae, 0x7c, 0xf9, 0x6f, 0x7d, 0xe1, 0xc3, 0xab, 0x27, 0xf8, 0x9f, 0xc1, 0x7f, 0x01, 0x00, 0x00, - 0xff, 0xff, 0x93, 0xea, 0x8b, 0x94, 0x69, 0x18, 0x00, 0x00, + // 1580 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0xcd, 0x6f, 0x1b, 0x45, + 0x14, 0xcf, 0xda, 0x49, 0x1a, 0x4f, 0x9c, 0xa4, 0x9e, 0x94, 0x12, 0x22, 0xb0, 0xa3, 0x15, 0x42, + 0x41, 0xd0, 0x35, 0x4d, 0xab, 0xaa, 0x12, 0x12, 0x25, 0x5b, 0xd3, 0x0f, 0x1a, 0x68, 0x34, 0x89, + 0x22, 0x81, 0x40, 0x74, 0xb2, 0x9e, 0xd8, 0xdb, 0xac, 0x77, 0x57, 0xbb, 0x63, 0xb7, 0xbe, 0xf5, + 0xc4, 0x81, 0x13, 0x42, 0x88, 0x0b, 0x48, 0x5c, 0x80, 0xbf, 0xa1, 0x17, 0x0e, 0x1c, 0x10, 0x3d, + 0x80, 0xa8, 0xa8, 0x84, 0x2a, 0x0e, 0x16, 0x35, 0xff, 0x45, 0x4f, 0x68, 0x67, 0x67, 0xbf, 0xbd, + 0x49, 0xea, 0x4d, 0xac, 0x16, 0x71, 0xcb, 0xbc, 0x99, 0xf7, 0x7b, 0x1f, 0xf3, 0x9b, 0xb7, 0x6f, + 0xc6, 0x01, 0x17, 0x1b, 0x2a, 0x6d, 0xb6, 0xb7, 0x25, 0xc5, 0x68, 0x55, 0xed, 0xba, 0xa2, 0x1a, + 0x55, 0xc5, 0xd0, 0x77, 0xd4, 0xc6, 0x29, 0x9b, 0x58, 0x1d, 0x62, 0x55, 0xb1, 0xa9, 0xda, 0x5c, + 0x54, 0xed, 0x9c, 0xc6, 0x9a, 0xd9, 0xc4, 0xa7, 0xab, 0x0d, 0xa2, 0x13, 0x0b, 0x53, 0x52, 0x97, + 0x4c, 0xcb, 0xa0, 0x06, 0x3c, 0x13, 0x80, 0x48, 0x0c, 0x44, 0x72, 0x35, 0x3e, 0x71, 0x41, 0x24, + 0x07, 0x84, 0x8b, 0x24, 0x0f, 0x64, 0xf1, 0x54, 0xc8, 0x72, 0xc3, 0x68, 0x18, 0x55, 0x86, 0xb5, + 0xdd, 0xde, 0x61, 0x23, 0x36, 0x60, 0x7f, 0xb9, 0x36, 0x16, 0x2f, 0x1d, 0xd0, 0xd1, 0xba, 0x4a, + 0x55, 0x43, 0x4f, 0xf5, 0x75, 0xf1, 0xec, 0xee, 0x79, 0x5b, 0x52, 0x0d, 0x67, 0x7d, 0x0b, 0x2b, + 0x4d, 0x55, 0x27, 0x56, 0xb7, 0x6a, 0xee, 0x36, 0x5c, 0x80, 0x16, 0xa1, 0xb8, 0xda, 0x49, 0x6a, + 0x55, 0xd3, 0xb4, 0xac, 0xb6, 0x4e, 0xd5, 0x16, 0x49, 0x28, 0x9c, 0xdb, 0x4f, 0xc1, 0x56, 0x9a, + 0xa4, 0x85, 0xe3, 0x7a, 0xe2, 0x79, 0x70, 0x62, 0xcd, 0x50, 0xb0, 0x76, 0x7d, 0xfb, 0x26, 0x51, + 0x28, 0x22, 0x3b, 0xc4, 0x22, 0xba, 0x42, 0xe0, 0x12, 0x18, 0xd7, 0x71, 0x8b, 0x2c, 0x08, 0x4b, + 0xc2, 0x72, 0x41, 0x2e, 0xde, 0xeb, 0x55, 0xc6, 0xfa, 0xbd, 0xca, 0xf8, 0xfb, 0xb8, 0x45, 0x10, + 0x9b, 0x11, 0x1f, 0x0b, 0xa0, 0xb4, 0x41, 0x14, 0x8b, 0xd0, 0x6b, 0xa4, 0xbb, 0x41, 0x34, 0xa2, + 0x50, 0xc3, 0x82, 0x5f, 0x0b, 0xe0, 0x84, 0x36, 0x00, 0x90, 0x01, 0x4d, 0xaf, 0x5c, 0x95, 0x86, + 0xd8, 0x3a, 0x69, 0x90, 0x87, 0xf2, 0x8b, 0xdc, 0xa7, 0x81, 0xfe, 0xa3, 0x81, 0x4e, 0xc0, 0x97, + 0x40, 0x7e, 0x97, 0x74, 0x17, 0x72, 0x2c, 0xa8, 0x69, 0x0e, 0x90, 0xbf, 0x46, 0xba, 0xc8, 0x91, + 0xc3, 0x65, 0x30, 0x65, 0x98, 0xce, 0x76, 0x62, 0x6d, 0x21, 0xbf, 0x24, 0x2c, 0x4f, 0xc9, 0xc5, + 0x7e, 0xaf, 0x32, 0x75, 0x9d, 0xcb, 0x90, 0x3f, 0x2b, 0xde, 0xcd, 0x81, 0xc9, 0x8b, 0xcc, 0x4b, + 0x78, 0x03, 0x4c, 0x39, 0xbb, 0x58, 0xc7, 0x14, 0xf3, 0x20, 0xdf, 0x90, 0xdc, 0xcd, 0x90, 0xc2, + 0x9b, 0x21, 0x99, 0xbb, 0x0d, 0x37, 0x3a, 0x67, 0xb5, 0xd4, 0x39, 0x2d, 0xb9, 0xce, 0xbd, 0x47, + 0x28, 0x96, 0x21, 0x77, 0x05, 0x04, 0x32, 0xe4, 0xa3, 0x42, 0x0c, 0xc6, 0x6d, 0x93, 0x28, 0xcc, + 0xed, 0xe9, 0x95, 0x0b, 0x43, 0xa5, 0xd0, 0x75, 0x76, 0xc3, 0x24, 0x4a, 0xb0, 0x99, 0xce, 0x08, + 0x31, 0x68, 0xa8, 0x82, 0x49, 0x9b, 0x62, 0xda, 0xb6, 0x59, 0xdc, 0xd3, 0x2b, 0xab, 0x59, 0x8c, + 0x30, 0x20, 0x79, 0x96, 0x9b, 0x99, 0x74, 0xc7, 0x88, 0x1b, 0x10, 0x7f, 0xc9, 0x81, 0x69, 0x77, + 0xa1, 0xac, 0xe1, 0x16, 0x19, 0x41, 0xfe, 0x76, 0x22, 0xf9, 0xab, 0x65, 0x08, 0x8d, 0x79, 0x9c, + 0x9a, 0x44, 0x3d, 0x96, 0xc4, 0x4b, 0x99, 0x2d, 0xed, 0x9d, 0xc9, 0x3f, 0x05, 0x30, 0x17, 0x5a, + 0xbd, 0xa6, 0xda, 0x14, 0x7e, 0x94, 0xc8, 0xa6, 0x74, 0xb0, 0x6c, 0x3a, 0xda, 0x2c, 0x97, 0xc7, + 0xb9, 0xb5, 0x29, 0x4f, 0x12, 0xca, 0x24, 0x01, 0x13, 0x2a, 0x25, 0x2d, 0x7b, 0x21, 0xb7, 0x94, + 0x5f, 0x9e, 0x5e, 0x79, 0x3b, 0x6b, 0x80, 0xf2, 0x0c, 0x37, 0x36, 0x71, 0xd5, 0x81, 0x45, 0x2e, + 0xba, 0x58, 0x8a, 0xc4, 0xe5, 0x64, 0x58, 0x6c, 0x80, 0x52, 0x22, 0x31, 0x10, 0x81, 0x89, 0x0e, + 0xd6, 0xda, 0x84, 0xef, 0xec, 0xa9, 0xd4, 0x48, 0x79, 0x11, 0x94, 0x10, 0xbe, 0xf5, 0xce, 0x6d, + 0x4a, 0x74, 0x5b, 0x35, 0xf4, 0xc0, 0xf6, 0x96, 0x83, 0x81, 0x5c, 0x28, 0xf1, 0x53, 0x01, 0x00, + 0xcf, 0x92, 0xb1, 0x0d, 0x5f, 0x06, 0x93, 0xae, 0xff, 0xf1, 0x4a, 0xb8, 0x8e, 0x69, 0x13, 0xf1, + 0xb9, 0x23, 0x71, 0xe4, 0x67, 0x7f, 0x77, 0x6b, 0xa4, 0xa3, 0x62, 0xa7, 0xf0, 0x38, 0x55, 0xd9, + 0xc4, 0xb4, 0x39, 0xd0, 0x17, 0x36, 0x03, 0xcf, 0x82, 0x62, 0x9d, 0xd8, 0xaa, 0x45, 0xea, 0x5b, + 0xbe, 0x43, 0x05, 0xf9, 0x78, 0xbf, 0x57, 0x29, 0xd6, 0x42, 0x72, 0x14, 0x59, 0x05, 0x57, 0xc0, + 0x34, 0x56, 0x68, 0x1b, 0x6b, 0xae, 0x52, 0x3e, 0x50, 0xba, 0xd8, 0xb6, 0x2c, 0xa2, 0x53, 0x57, + 0x29, 0xbc, 0x08, 0xbe, 0x02, 0x26, 0x2d, 0x82, 0x6d, 0x43, 0x5f, 0x18, 0x67, 0xcb, 0x7d, 0x96, + 0x22, 0x26, 0x45, 0x7c, 0x56, 0xfc, 0xd5, 0x4f, 0xe8, 0x08, 0x08, 0x7a, 0x23, 0x4a, 0xd0, 0x37, + 0xb3, 0x10, 0x74, 0x30, 0x37, 0x7f, 0xca, 0x81, 0x02, 0xaf, 0x73, 0x84, 0x8e, 0xa0, 0x78, 0xd5, + 0x23, 0xc5, 0x4b, 0xce, 0x52, 0x97, 0x09, 0x4d, 0x2d, 0x5d, 0x5a, 0xac, 0x74, 0xd5, 0x32, 0xda, + 0xd9, 0xbb, 0x70, 0xfd, 0x21, 0x80, 0x19, 0x7f, 0xed, 0x08, 0x58, 0xa1, 0x44, 0x59, 0xf1, 0x56, + 0xb6, 0xe0, 0x52, 0x88, 0xf1, 0x7d, 0x3e, 0x14, 0x94, 0x93, 0x5a, 0xa8, 0x80, 0x49, 0x8a, 0xad, + 0x06, 0xa1, 0x3c, 0xa4, 0xe1, 0xd8, 0xb8, 0xc9, 0x20, 0x82, 0x5c, 0xba, 0x63, 0xc4, 0xa1, 0xe1, + 0x2e, 0x28, 0x68, 0xea, 0x0e, 0x51, 0xba, 0x8a, 0xe6, 0x95, 0x9f, 0xe1, 0xe2, 0x5b, 0xf3, 0x50, + 0xe4, 0x99, 0x7e, 0xaf, 0x52, 0xf0, 0x87, 0x28, 0xc0, 0x87, 0xaf, 0x83, 0x29, 0xd3, 0x52, 0x0d, + 0x4b, 0xa5, 0x5d, 0x46, 0x94, 0x7c, 0x90, 0xf6, 0x75, 0x2e, 0x47, 0xfe, 0x0a, 0xf8, 0x1a, 0x28, + 0x58, 0xa4, 0x43, 0x2c, 0xaa, 0x76, 0x08, 0x2b, 0x12, 0x53, 0x2e, 0x34, 0xf2, 0x84, 0x28, 0x98, + 0x87, 0x0d, 0xbf, 0xd0, 0x4e, 0xb0, 0x4d, 0xba, 0x90, 0xe9, 0xdb, 0x62, 0x6c, 0x07, 0x09, 0x73, + 0x65, 0x5e, 0xad, 0x16, 0xbf, 0xcc, 0x79, 0x75, 0xd5, 0x27, 0x2a, 0xfc, 0x42, 0x00, 0x25, 0xbf, + 0x97, 0x27, 0x75, 0x57, 0xfa, 0xa4, 0x2d, 0xab, 0xab, 0x1d, 0xf1, 0x25, 0x0a, 0x28, 0xbf, 0xc0, + 0x5d, 0x2a, 0x25, 0xa6, 0x50, 0xd2, 0x3c, 0xd4, 0xc0, 0x31, 0x77, 0x8f, 0x3d, 0xde, 0xae, 0x66, + 0xe0, 0x0f, 0xf7, 0x60, 0x8e, 0x7b, 0x70, 0xcc, 0x95, 0xda, 0xc8, 0x33, 0x21, 0xfe, 0x98, 0xf3, + 0xca, 0x34, 0xe3, 0x6e, 0x84, 0x56, 0xc2, 0x08, 0x69, 0x95, 0x7b, 0x32, 0x5a, 0xe5, 0x0f, 0x4c, + 0xab, 0xf1, 0xa3, 0xa5, 0xd5, 0x67, 0xe3, 0xa0, 0x18, 0xee, 0x7f, 0x9f, 0x4e, 0x4e, 0x7d, 0x2b, + 0x80, 0x79, 0x0d, 0xdb, 0xf4, 0x9a, 0x6e, 0xdc, 0xd2, 0x2f, 0x1b, 0x46, 0x7d, 0x83, 0x5d, 0x0b, + 0x79, 0xe1, 0xd8, 0xcc, 0xdc, 0xf5, 0xaf, 0x25, 0xb1, 0xe5, 0xe7, 0xfb, 0xbd, 0xca, 0xfc, 0x80, + 0x09, 0x34, 0xc8, 0x13, 0x78, 0x1b, 0xcc, 0x60, 0xd3, 0xd4, 0x54, 0x52, 0x77, 0x71, 0xf9, 0x07, + 0x29, 0xf3, 0xad, 0xa7, 0xd4, 0xef, 0x55, 0x66, 0x56, 0xc3, 0xc8, 0x28, 0x6a, 0x08, 0x5e, 0x05, + 0xf3, 0x75, 0xaf, 0xd3, 0xba, 0xec, 0x5e, 0x93, 0x55, 0xde, 0xdd, 0xe4, 0xdd, 0x20, 0x6a, 0xc9, + 0x69, 0x34, 0x48, 0x47, 0xfc, 0x4a, 0x00, 0x95, 0x7d, 0xd2, 0xe2, 0xf4, 0x72, 0xb4, 0x6b, 0x26, + 0x6e, 0xd8, 0x9b, 0x5d, 0x93, 0x20, 0x36, 0xe3, 0x74, 0x58, 0x1d, 0xa2, 0xd7, 0x0d, 0x8b, 0x77, + 0x71, 0x3e, 0xf5, 0xb6, 0x98, 0x14, 0xf1, 0x59, 0xf8, 0x2a, 0x38, 0xd6, 0x21, 0x96, 0xd3, 0x4a, + 0xf2, 0xce, 0xcd, 0x3f, 0xe5, 0x5b, 0xae, 0x18, 0x79, 0xf3, 0xac, 0x7b, 0x09, 0xda, 0xc9, 0x67, + 0xa3, 0x7b, 0xf1, 0xfd, 0x3d, 0xe2, 0xee, 0x25, 0xb0, 0xb3, 0x7f, 0xf7, 0xe2, 0xaf, 0x7d, 0x56, + 0xba, 0x17, 0xdf, 0xe1, 0x94, 0xee, 0xe5, 0x41, 0x38, 0x28, 0xf6, 0x05, 0xb8, 0x02, 0x66, 0x7c, + 0x6a, 0x6f, 0x06, 0x44, 0x15, 0x9d, 0x73, 0x54, 0x0b, 0x4f, 0x3c, 0x8e, 0x0b, 0x50, 0x54, 0x11, + 0xde, 0x06, 0xc0, 0x17, 0x78, 0x51, 0x64, 0x69, 0x30, 0x83, 0x58, 0x7c, 0xf2, 0xf9, 0x22, 0x1b, + 0x85, 0x6c, 0x89, 0x3f, 0x08, 0x60, 0x2e, 0xb6, 0xad, 0x4f, 0x65, 0x5d, 0x16, 0x3f, 0x06, 0xc1, + 0x97, 0x11, 0xae, 0x83, 0xd9, 0x3a, 0xd1, 0x88, 0xb3, 0x60, 0xdd, 0xd0, 0x54, 0xa5, 0xcb, 0x53, + 0xbf, 0xcc, 0x21, 0x67, 0x6b, 0x91, 0xd9, 0xc7, 0x09, 0x09, 0x8a, 0xe9, 0x8b, 0xbf, 0xe5, 0xc0, + 0x0c, 0x6a, 0xeb, 0xba, 0xaa, 0x37, 0x46, 0xf6, 0x6a, 0xd5, 0x8c, 0x1c, 0xfd, 0xe1, 0xde, 0x42, + 0x22, 0x3e, 0xa7, 0x1e, 0x7f, 0x33, 0x76, 0xfc, 0xaf, 0x1c, 0x82, 0xad, 0xbd, 0x4b, 0xc0, 0x5f, + 0x02, 0x28, 0x45, 0xd6, 0x8f, 0xa0, 0x0c, 0x34, 0xa2, 0x65, 0x40, 0xce, 0x1e, 0x64, 0x4a, 0x29, + 0x98, 0x8f, 0xc5, 0xc6, 0xde, 0x5f, 0x54, 0x30, 0x3f, 0x20, 0x41, 0x47, 0xf2, 0xf0, 0xf1, 0x20, + 0x07, 0xe6, 0x36, 0x9c, 0x15, 0x4e, 0x03, 0x37, 0x32, 0xba, 0xde, 0x8c, 0xd0, 0x75, 0x38, 0x0a, + 0xc5, 0xbc, 0x4e, 0x25, 0xac, 0x15, 0x23, 0xec, 0xbb, 0x87, 0x62, 0x6d, 0x6f, 0xca, 0xde, 0x17, + 0xc0, 0x7c, 0x4c, 0xa3, 0xe6, 0xc4, 0x7d, 0x2e, 0x91, 0xec, 0x81, 0xaf, 0x4b, 0x89, 0x1d, 0xb9, + 0x23, 0x80, 0xa2, 0xed, 0x3d, 0xff, 0x23, 0xb2, 0x93, 0xe9, 0x9c, 0x27, 0x7e, 0x47, 0x90, 0x4f, + 0x70, 0xeb, 0xc5, 0x8d, 0x90, 0x0d, 0x14, 0xb1, 0x28, 0xf6, 0x92, 0x21, 0x8d, 0xe0, 0x1c, 0xaa, + 0xd1, 0x73, 0x58, 0x3b, 0x8c, 0xbd, 0x4b, 0x39, 0x89, 0xbf, 0xe7, 0x12, 0x01, 0xfe, 0xa7, 0x2e, + 0x67, 0x66, 0xec, 0x72, 0x76, 0x28, 0xa7, 0xce, 0x61, 0x75, 0xea, 0x2d, 0xed, 0xee, 0x38, 0x78, + 0x6e, 0xe0, 0xb9, 0xf9, 0xff, 0xba, 0x36, 0xdc, 0x75, 0xed, 0x1b, 0x01, 0x9c, 0xe4, 0xd7, 0xa8, + 0x78, 0x19, 0xc9, 0x1f, 0x72, 0x25, 0x5d, 0xec, 0xf7, 0x2a, 0x27, 0x57, 0x07, 0xda, 0x42, 0x29, + 0x3e, 0x1c, 0xe6, 0x9d, 0xae, 0x0b, 0xf8, 0xd3, 0x1b, 0x34, 0xc0, 0xac, 0xfb, 0x6a, 0xe2, 0x55, + 0x2b, 0x4e, 0x93, 0x33, 0x07, 0xac, 0x32, 0x78, 0x9b, 0x68, 0x7e, 0xa1, 0x83, 0x4e, 0x43, 0xb7, + 0x19, 0x81, 0x43, 0x31, 0x78, 0xf1, 0x3b, 0x01, 0x14, 0xc3, 0xcf, 0x38, 0xfb, 0xff, 0x3a, 0x0b, + 0x2d, 0x50, 0xf0, 0xe9, 0xf4, 0xa4, 0xbf, 0xe9, 0xa5, 0xb2, 0x58, 0x2e, 0x71, 0x4b, 0x05, 0x5f, + 0x84, 0x02, 0x33, 0xf2, 0x07, 0xf7, 0x1e, 0x95, 0xc7, 0xee, 0x3f, 0x2a, 0x8f, 0x3d, 0x7c, 0x54, + 0x1e, 0xbb, 0xd3, 0x2f, 0x0b, 0xf7, 0xfa, 0x65, 0xe1, 0x7e, 0xbf, 0x2c, 0x3c, 0xec, 0x97, 0x85, + 0xbf, 0xfb, 0x65, 0xe1, 0xf3, 0x7f, 0xca, 0x63, 0x1f, 0x9e, 0x19, 0xe2, 0x3f, 0x00, 0xfe, 0x0d, + 0x00, 0x00, 0xff, 0xff, 0x7d, 0x5c, 0xbd, 0xd2, 0x37, 0x20, 0x00, 0x00, } func (m *Config) Marshal() (dAtA []byte, err error) { @@ -5776,6 +5791,722 @@ func (m *RunningConfigStatus) Unmarshal(dAtA []byte) error { } return nil } +func (m *SensitiveConfig) Unmarshal(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 ErrIntOverflowGenerated + } + 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: SensitiveConfig: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SensitiveConfig: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SensitiveConfigData) Unmarshal(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 ErrIntOverflowGenerated + } + 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: SensitiveConfigData: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SensitiveConfigData: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + 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 ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecretKeyRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.SecretKeyRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SensitiveConfigList) Unmarshal(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 ErrIntOverflowGenerated + } + 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: SensitiveConfigList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SensitiveConfigList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, SensitiveConfig{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SensitiveConfigSpec) Unmarshal(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 ErrIntOverflowGenerated + } + 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: SensitiveConfigSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SensitiveConfigSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Lifecycle", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Lifecycle == nil { + m.Lifecycle = &Lifecycle{} + } + if err := m.Lifecycle.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Priority", wireType) + } + m.Priority = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Priority |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Revertive", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.Revertive = &b + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Config = append(m.Config, SensitiveConfigData{}) + if err := m.Config[len(m.Config)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SensitiveConfigStatus) Unmarshal(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 ErrIntOverflowGenerated + } + 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: SensitiveConfigStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SensitiveConfigStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConditionedStatus", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ConditionedStatus.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastKnownGoodSchema", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LastKnownGoodSchema == nil { + m.LastKnownGoodSchema = &ConfigStatusLastKnownGoodSchema{} + } + if err := m.LastKnownGoodSchema.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AppliedSensitiveConfig", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AppliedSensitiveConfig == nil { + m.AppliedSensitiveConfig = &SensitiveConfigSpec{} + } + if err := m.AppliedSensitiveConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DeviationGeneration", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.DeviationGeneration = &v + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *Target) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/apis/config/v1alpha1/generated.proto b/apis/config/v1alpha1/generated.proto index a0b4a763..54e12e13 100644 --- a/apis/config/v1alpha1/generated.proto +++ b/apis/config/v1alpha1/generated.proto @@ -27,6 +27,31 @@ import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; // Package-wide variables from generator "generated". option go_package = "github.com/sdcio/config-server/apis/config/v1alpha1"; +message LocalObjectReference { + // Name of the referent. + // This field is effectively required, but due to backwards compatibility is + // allowed to be empty. Instances of this type with an empty value here are + // almost certainly wrong. + // More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + // +optional + // +default="" + // +kubebuilder:default="" + // TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. + optional string name = 1; +} + +message SecretKeySelector { + // The name of the secret in the pod's namespace to select from. + optional LocalObjectReference localObjectReference = 1; + + // The key of the secret to select from. Must be a valid secret key. + optional string key = 2; + + // Specify whether the Secret or its key must be defined + // +optional + optional bool optional = 3; +} + // Config defines the Schema for the Config API message Config { optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; @@ -248,6 +273,62 @@ message RunningConfigStatus { optional .k8s.io.apimachinery.pkg.runtime.RawExtension value = 2; } +// SensitiveConfig defines the Schema for the SensitiveConfig API +message SensitiveConfig { + optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + optional SensitiveConfigSpec spec = 2; + + optional SensitiveConfigStatus status = 3; +} + +message SensitiveConfigData { + // Path defines the path relative to which the value is applicable + optional string SensitiveConfig = 1; + + // SecretKeyRef refers to a secret in the same namesapce as the config + optional SecretKeySelector secretKeyRef = 2; +} + +// SensitiveConfigList contains a list of SensitiveConfigs +message SensitiveConfigList { + optional .k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + repeated SensitiveConfig items = 2; +} + +// SensitiveConfigSpec defines the desired state of SensitiveConfig +message SensitiveConfigSpec { + // Lifecycle determines the lifecycle policies the resource e.g. delete is orphan or delete + // will follow + optional Lifecycle lifecycle = 1; + + // Priority defines the priority of this SensitiveConfig + optional int64 priority = 2; + + // Revertive defines if this CR is enabled for revertive or non revertve operation + optional bool revertive = 3; + + // SensitiveConfig defines the SensitiveConfiguration to be applied to a target device + repeated SensitiveConfigData config = 4; +} + +// SensitiveConfigStatus defines the observed state of SensitiveConfig +message SensitiveConfigStatus { + // ConditionedStatus provides the status of the Readiness using conditions + // if the condition is true the other attributes in the status are meaningful + optional .github.com.sdcio.config_server.apis.condition.v1alpha1.ConditionedStatus conditionedStatus = 1; + + // LastKnownGoodSchema identifies the last known good schema used to apply the SensitiveConfig successfully + optional ConfigStatusLastKnownGoodSchema lastKnownGoodSchema = 2; + + // AppliedSensitiveConfig defines the SensitiveConfig applied to the target + optional SensitiveConfigSpec appliedSensitiveConfig = 3; + + // Deviations generation used for the latest SensitiveConfig apply + optional int64 deviationGeneration = 4; +} + message Target { // TargetSelector defines the selector used to select the targets to which the config applies optional .k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector targetSelector = 1; diff --git a/apis/config/v1alpha1/sensitive_config_helpers.go b/apis/config/v1alpha1/sensitive_config_helpers.go index f4d699fc..3104fc06 100644 --- a/apis/config/v1alpha1/sensitive_config_helpers.go +++ b/apis/config/v1alpha1/sensitive_config_helpers.go @@ -28,12 +28,12 @@ import ( "github.com/henderiw/logger/log" condv1alpha1 "github.com/sdcio/config-server/apis/condition/v1alpha1" + "github.com/sdcio/config-server/apis/config" "github.com/sdcio/config-server/pkg/testhelper" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/utils/ptr" "sigs.k8s.io/controller-runtime/pkg/client" - "github.com/sdcio/config-server/apis/config" ) // GetCondition returns the condition based on the condition kind @@ -164,7 +164,6 @@ func (r *SensitiveConfig) Validate() error { return errm } - // BuildSensitiveConfig returns a reource from a client Object a Spec/Status func BuildSensitiveConfig(meta metav1.ObjectMeta, spec SensitiveConfigSpec, status SensitiveConfigStatus) *SensitiveConfig { return &SensitiveConfig{ diff --git a/apis/config/v1alpha1/sensitive_config_types.go b/apis/config/v1alpha1/sensitive_config_types.go index 90a594eb..bb824766 100644 --- a/apis/config/v1alpha1/sensitive_config_types.go +++ b/apis/config/v1alpha1/sensitive_config_types.go @@ -20,8 +20,8 @@ import ( "reflect" condv1alpha1 "github.com/sdcio/config-server/apis/condition/v1alpha1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) // SensitiveConfigSpec defines the desired state of SensitiveConfig diff --git a/apis/inv/v1alpha1/generated.pb.go b/apis/inv/v1alpha1/generated.pb.go index 4d81a310..04c3b85a 100644 --- a/apis/inv/v1alpha1/generated.pb.go +++ b/apis/inv/v1alpha1/generated.pb.go @@ -1621,216 +1621,217 @@ func init() { } var fileDescriptor_c428ff1fee4945a0 = []byte{ - // 3335 bytes of a gzipped FileDescriptorProto + // 3350 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x1b, 0x4b, 0x8c, 0x23, 0x47, 0x75, 0xdb, 0xf6, 0x7c, 0xfc, 0x3c, 0xde, 0xd9, 0xad, 0xfd, 0x39, 0x93, 0x64, 0x3c, 0x6a, 0x20, 0xda, 0x90, 0xc4, 0x93, 0x5d, 0x02, 0x6c, 0xc8, 0x77, 0x3d, 0xb3, 0x9b, 0x2c, 0xd9, 0xcf, 0x50, - 0xde, 0x9d, 0x04, 0x14, 0x92, 0xf4, 0x74, 0x97, 0x3d, 0x9d, 0xb1, 0xbb, 0xad, 0xea, 0xb6, 0xb3, - 0x46, 0x7b, 0x00, 0x42, 0xa4, 0x08, 0x09, 0x09, 0x10, 0xca, 0x01, 0x09, 0xc1, 0x31, 0x88, 0x13, - 0x48, 0x9c, 0x90, 0x38, 0x21, 0x08, 0x0a, 0x12, 0x39, 0x80, 0xc8, 0x69, 0x48, 0x9c, 0x13, 0x1f, - 0x89, 0x2b, 0x1a, 0x2e, 0xa8, 0x3e, 0x5d, 0xfd, 0xb1, 0x7b, 0x76, 0x6c, 0xef, 0x4e, 0x36, 0x37, - 0xfb, 0xbd, 0x57, 0xef, 0xbd, 0xaa, 0x7a, 0xf5, 0x7e, 0x55, 0x0d, 0x4f, 0x37, 0x6c, 0x7f, 0xb3, - 0xb3, 0x51, 0x31, 0xdd, 0xd6, 0xb2, 0x67, 0x99, 0xb6, 0xbb, 0x6c, 0xba, 0x4e, 0xdd, 0x6e, 0x3c, - 0xe4, 0x11, 0xda, 0x25, 0x74, 0xd9, 0x68, 0xdb, 0xde, 0xb2, 0xed, 0x74, 0x97, 0xbb, 0xa7, 0x8c, - 0x66, 0x7b, 0xd3, 0x38, 0xb5, 0xdc, 0x20, 0x0e, 0xa1, 0x86, 0x4f, 0xac, 0x4a, 0x9b, 0xba, 0xbe, - 0x8b, 0x1e, 0x0e, 0x39, 0x54, 0x38, 0x87, 0x8a, 0xe0, 0xf0, 0xb2, 0xe0, 0x50, 0x61, 0x1c, 0x2a, - 0xb6, 0xd3, 0xad, 0x04, 0x1c, 0x16, 0x1e, 0x8a, 0xc8, 0x6c, 0xb8, 0x0d, 0x77, 0x99, 0x33, 0xda, - 0xe8, 0xd4, 0xf9, 0x3f, 0xfe, 0x87, 0xff, 0x12, 0x02, 0x16, 0xce, 0xef, 0x45, 0x45, 0xd3, 0x75, - 0x2c, 0xdb, 0xb7, 0x5d, 0x27, 0x55, 0xd1, 0x85, 0x47, 0xb6, 0xce, 0x78, 0x15, 0xdb, 0x65, 0xf4, - 0x2d, 0xc3, 0xdc, 0xb4, 0x1d, 0x42, 0x7b, 0xcb, 0xed, 0xad, 0x86, 0x60, 0xd0, 0x22, 0xbe, 0xb1, - 0xdc, 0x1d, 0x1c, 0xf5, 0x85, 0xb4, 0x51, 0xb4, 0xe3, 0xf8, 0x76, 0x8b, 0x2c, 0x7b, 0xe6, 0x26, - 0x69, 0x19, 0xc9, 0x71, 0xfa, 0xdb, 0x59, 0x28, 0xae, 0xda, 0x9e, 0xe9, 0x76, 0x09, 0xed, 0x5d, - 0x70, 0xea, 0x2e, 0x7a, 0x10, 0x66, 0x39, 0xca, 0x74, 0x9b, 0x25, 0x6d, 0x49, 0x3b, 0x99, 0xaf, - 0x1e, 0x7a, 0x67, 0xbb, 0x7c, 0xa0, 0xbf, 0x5d, 0x9e, 0x5d, 0x93, 0x70, 0xac, 0x28, 0x24, 0x75, - 0xd7, 0xb6, 0x08, 0x2d, 0x65, 0x06, 0xa8, 0x39, 0x1c, 0x2b, 0x0a, 0x74, 0x3f, 0xcc, 0x74, 0x09, - 0xf5, 0x6c, 0xd7, 0x29, 0x65, 0x39, 0xf1, 0xbc, 0x24, 0x9e, 0x59, 0x17, 0x60, 0x1c, 0xe0, 0x19, - 0xe3, 0x4d, 0xd7, 0xf3, 0x1d, 0xa3, 0x45, 0x4a, 0xb9, 0x38, 0xe3, 0x67, 0x5d, 0xcf, 0xbf, 0x6c, - 0xb4, 0x08, 0x56, 0x14, 0x5c, 0x8d, 0xa6, 0xe1, 0xd7, 0x5d, 0xda, 0x2a, 0x4d, 0x25, 0xd4, 0x90, - 0x70, 0xac, 0x28, 0xd0, 0x69, 0x80, 0x96, 0x61, 0x9e, 0xb5, 0x2c, 0x4a, 0x3c, 0xaf, 0x34, 0xcd, - 0xe9, 0x91, 0xa4, 0x87, 0x4b, 0x0a, 0x83, 0x23, 0x54, 0xe8, 0x0c, 0xcc, 0x79, 0x84, 0xda, 0x46, - 0xf3, 0x72, 0xa7, 0xb5, 0x41, 0x68, 0x69, 0x86, 0x8f, 0x3a, 0x2a, 0x47, 0xcd, 0xd5, 0x22, 0x38, - 0x1c, 0xa3, 0x44, 0xe7, 0x01, 0x79, 0x9d, 0x76, 0xdb, 0xa5, 0x3e, 0xb1, 0xce, 0x39, 0xa6, 0x6b, - 0xd9, 0x4e, 0xc3, 0x2b, 0xcd, 0x2e, 0x65, 0x4f, 0xe6, 0xab, 0xc7, 0xfb, 0xdb, 0x65, 0x54, 0x1b, - 0xc0, 0xe2, 0x21, 0x23, 0xf4, 0x77, 0xa7, 0xe0, 0x88, 0xda, 0xaa, 0x35, 0x83, 0x1a, 0x2d, 0xe2, - 0x13, 0xea, 0x21, 0x1f, 0x8a, 0x16, 0xa9, 0x1b, 0x9d, 0xa6, 0x5f, 0xe3, 0x7b, 0xcc, 0x77, 0xad, - 0x70, 0xfa, 0xb1, 0xca, 0xa8, 0x16, 0x5f, 0x11, 0xe3, 0x9f, 0x23, 0xbd, 0xea, 0xe1, 0xfe, 0x76, - 0xb9, 0xb8, 0x1a, 0xe5, 0x8a, 0xe3, 0x42, 0xd0, 0x77, 0x34, 0x38, 0x64, 0x29, 0x6d, 0xa8, 0x5b, - 0xb7, 0x9b, 0x84, 0x5b, 0x40, 0xe1, 0x74, 0x75, 0x74, 0xc9, 0xab, 0x09, 0x4e, 0xd5, 0xa3, 0xfd, - 0xed, 0xf2, 0xa1, 0x24, 0x14, 0x0f, 0x48, 0x44, 0x3f, 0xd1, 0xa0, 0xe4, 0x1b, 0xb4, 0x41, 0xfc, - 0x15, 0xd7, 0x71, 0x88, 0xc9, 0xce, 0x96, 0xc4, 0x79, 0xa5, 0xec, 0x52, 0xf6, 0x64, 0xe1, 0xf4, - 0x53, 0xa3, 0xab, 0x73, 0x95, 0x73, 0x0c, 0x74, 0x59, 0x92, 0x9b, 0x5c, 0xba, 0x9a, 0x22, 0x08, - 0xa7, 0xaa, 0x80, 0x6e, 0xc0, 0x41, 0x81, 0xbb, 0x4a, 0x5a, 0xcc, 0xfe, 0x84, 0x31, 0x17, 0x4e, - 0x3f, 0x3d, 0xae, 0x52, 0x01, 0x9f, 0x2a, 0xea, 0x6f, 0x97, 0x0f, 0xc6, 0x61, 0x38, 0x21, 0x0b, - 0xad, 0xc3, 0x74, 0x9b, 0x50, 0xdb, 0xb5, 0xf8, 0xa1, 0x28, 0x9c, 0xae, 0x54, 0x84, 0x9b, 0xa8, - 0x44, 0xdd, 0x44, 0xa5, 0xbd, 0xd5, 0x10, 0xe2, 0x98, 0x73, 0xa9, 0x74, 0x4f, 0x55, 0x56, 0x3b, - 0xd4, 0x60, 0xb3, 0xa8, 0x1e, 0x94, 0x33, 0x9f, 0x5e, 0xe3, 0x5c, 0xb0, 0xe4, 0x86, 0xce, 0xc2, - 0xbc, 0xe9, 0x3a, 0x66, 0x87, 0x52, 0xe2, 0xf8, 0x35, 0xd3, 0x70, 0xc4, 0x29, 0xca, 0x56, 0x4f, - 0xc8, 0x01, 0xf3, 0x2b, 0x71, 0x34, 0x4e, 0xd2, 0xeb, 0x3f, 0xd5, 0xe0, 0x44, 0xc4, 0x9a, 0xfd, - 0xcd, 0x55, 0x52, 0xb7, 0x1d, 0xee, 0x1b, 0xd1, 0xbd, 0x90, 0xdd, 0x22, 0x3d, 0xe9, 0x7d, 0x0a, - 0x92, 0x65, 0xf6, 0x39, 0xd2, 0xc3, 0x0c, 0x8e, 0x96, 0x20, 0xd7, 0x36, 0xfc, 0x4d, 0xe9, 0x6f, - 0xe6, 0x24, 0x3e, 0xc7, 0x98, 0x60, 0x8e, 0x41, 0x3a, 0x4c, 0x7b, 0x26, 0xb5, 0xdb, 0xbe, 0x74, - 0x33, 0xc0, 0xe6, 0x50, 0xe3, 0x10, 0x2c, 0x31, 0xa8, 0x0c, 0x53, 0x94, 0x34, 0xc8, 0x75, 0xe9, - 0x5d, 0xf2, 0xfd, 0xed, 0xf2, 0x14, 0x66, 0x00, 0x2c, 0xe0, 0xfa, 0x6f, 0x35, 0x18, 0xb0, 0x40, - 0xf4, 0x79, 0x28, 0x98, 0x94, 0x58, 0xc4, 0xf1, 0x6d, 0xa3, 0xe9, 0x49, 0x15, 0x8f, 0x48, 0x15, - 0x0a, 0x2b, 0x21, 0x0a, 0x47, 0xe9, 0xd0, 0x03, 0x90, 0xf7, 0x9b, 0x5e, 0x8d, 0x98, 0x94, 0xf8, - 0x52, 0xef, 0x62, 0x7f, 0xbb, 0x9c, 0xbf, 0x7a, 0xb1, 0x26, 0x80, 0x38, 0xc4, 0x33, 0x87, 0x61, - 0x0e, 0x37, 0x66, 0xe9, 0x30, 0x86, 0x58, 0xe0, 0x90, 0x11, 0xfa, 0x1f, 0x32, 0x11, 0xdf, 0x8e, - 0x3b, 0x4d, 0x82, 0x5e, 0x81, 0x59, 0xb6, 0xc7, 0x96, 0xe1, 0x07, 0x5e, 0xe2, 0xe1, 0xbd, 0x59, - 0xc4, 0x95, 0x8d, 0x57, 0x89, 0xe9, 0x5f, 0x22, 0xbe, 0x11, 0x3a, 0xca, 0x10, 0x86, 0x15, 0x57, - 0x44, 0x20, 0xe7, 0xb5, 0x89, 0x29, 0x3d, 0xc1, 0xca, 0x04, 0x9e, 0x80, 0x29, 0x5c, 0x6b, 0x13, - 0x33, 0xdc, 0x60, 0xf6, 0x0f, 0x73, 0xf6, 0xa8, 0x05, 0xd3, 0x9e, 0x6f, 0xf8, 0x1d, 0x8f, 0x6f, - 0x70, 0xe1, 0xf4, 0xb9, 0x49, 0x05, 0x71, 0x66, 0xa1, 0xbd, 0x8b, 0xff, 0x58, 0x0a, 0xd1, 0x5d, - 0x38, 0x1a, 0x23, 0x0f, 0x82, 0xc2, 0xfd, 0x30, 0x63, 0xc8, 0x28, 0xa2, 0xc5, 0xe3, 0x59, 0x10, - 0x42, 0x02, 0x7c, 0x10, 0xcf, 0x58, 0xdc, 0x4a, 0x06, 0xca, 0x78, 0x3c, 0x63, 0xbf, 0xf4, 0xbf, - 0x69, 0x70, 0x38, 0x26, 0xf1, 0xa2, 0xed, 0xf9, 0xe8, 0xc5, 0x81, 0xed, 0xdb, 0xe3, 0x81, 0x66, - 0xa3, 0xf9, 0xe6, 0x29, 0x99, 0x01, 0x24, 0xb2, 0x75, 0x16, 0x4c, 0xd9, 0x3e, 0x69, 0x79, 0xa5, - 0xcc, 0xb8, 0x6e, 0x33, 0xa6, 0x71, 0xb5, 0x28, 0x65, 0x4d, 0x5d, 0x60, 0x5c, 0xb1, 0x60, 0xae, - 0x37, 0x22, 0x41, 0x8c, 0x91, 0xad, 0x51, 0x52, 0xb7, 0xaf, 0xa3, 0xfb, 0x60, 0xba, 0xcd, 0x7f, - 0xc9, 0x85, 0x0c, 0x3d, 0x0f, 0x87, 0x62, 0x89, 0x45, 0x27, 0x61, 0x96, 0x5c, 0x37, 0x9b, 0x1d, - 0x8b, 0x08, 0x3d, 0xf3, 0xd5, 0x39, 0x36, 0x9d, 0x73, 0x12, 0x86, 0x15, 0x56, 0xff, 0xe5, 0x54, - 0x62, 0x09, 0x99, 0xf9, 0x20, 0x8f, 0xe5, 0x2b, 0x8c, 0x13, 0x61, 0x5b, 0x96, 0xbd, 0x05, 0xa6, - 0x23, 0x14, 0x8c, 0xa6, 0x3d, 0x82, 0x3d, 0x56, 0x82, 0xd0, 0x6b, 0x90, 0x97, 0x66, 0x40, 0x82, - 0xd5, 0x3d, 0x3f, 0xa1, 0x54, 0x69, 0x5f, 0xd5, 0xc3, 0x52, 0x6c, 0xfe, 0x6c, 0x20, 0x00, 0x87, - 0xb2, 0x50, 0x1d, 0x0a, 0x6d, 0xd7, 0xaa, 0x91, 0x26, 0x31, 0x7d, 0x97, 0xca, 0xb3, 0xf2, 0xb9, - 0x3d, 0xda, 0x8c, 0xb1, 0x41, 0x9a, 0xc1, 0xd0, 0xea, 0x3c, 0x73, 0x6f, 0x6b, 0x21, 0x2f, 0x1c, - 0x65, 0x8c, 0x28, 0xcc, 0x33, 0xb5, 0x6d, 0x93, 0x28, 0x59, 0xb9, 0xf1, 0x65, 0x1d, 0x61, 0x01, - 0xa4, 0x16, 0xe7, 0x87, 0x93, 0x02, 0xd0, 0x63, 0x50, 0x94, 0xa0, 0x55, 0xb7, 0x65, 0xd8, 0x8e, - 0xcc, 0xfb, 0x8e, 0xc9, 0x05, 0x29, 0xd6, 0xa2, 0x48, 0x1c, 0xa7, 0x45, 0x3f, 0xd2, 0xe0, 0x88, - 0x35, 0x98, 0x4b, 0xf1, 0x28, 0x36, 0x99, 0x49, 0x84, 0xcc, 0xaa, 0x77, 0x4b, 0x55, 0x86, 0x65, - 0x6d, 0x78, 0x98, 0x78, 0xfd, 0xf5, 0x4c, 0xe2, 0x74, 0x08, 0x3f, 0x84, 0x7e, 0xa8, 0xc1, 0x61, - 0x55, 0x3a, 0x10, 0x4b, 0x40, 0xa5, 0x0b, 0xb8, 0xb0, 0x27, 0x65, 0xd5, 0xe8, 0x50, 0xe5, 0x95, - 0x24, 0xc3, 0xea, 0x5d, 0x52, 0xe1, 0xc3, 0x03, 0x28, 0x3c, 0x28, 0x1e, 0x3d, 0x0f, 0x79, 0xcf, - 0x37, 0xa8, 0x7f, 0xd5, 0x6e, 0x05, 0x99, 0xdf, 0x67, 0xf7, 0xb6, 0xdd, 0x6c, 0x84, 0x88, 0x7f, - 0xb5, 0x80, 0x01, 0x0e, 0x79, 0xe9, 0xff, 0xd4, 0xe0, 0xb8, 0x5a, 0x85, 0x75, 0xe2, 0x58, 0x2e, - 0x0d, 0xc2, 0xef, 0xed, 0x0f, 0x60, 0x4e, 0x2c, 0x80, 0x5d, 0x9c, 0xc0, 0x12, 0x62, 0x9a, 0xa7, - 0x45, 0x32, 0xfd, 0x1f, 0x1a, 0x2c, 0x0c, 0x1f, 0xb2, 0x0f, 0x2e, 0xbf, 0x15, 0x77, 0xf9, 0xcf, - 0xde, 0xaa, 0xd9, 0xa6, 0xf8, 0xfe, 0xb7, 0x52, 0xe7, 0xca, 0x7d, 0xf3, 0x75, 0xc8, 0x35, 0x9c, - 0x96, 0x2d, 0xe7, 0xb9, 0x3e, 0xba, 0x32, 0xcf, 0x38, 0x2d, 0x7b, 0x38, 0xff, 0xc8, 0xa9, 0x54, - 0x9b, 0xc0, 0xa8, 0x31, 0x97, 0xa8, 0xff, 0x2f, 0x03, 0x9f, 0xde, 0xcb, 0x60, 0x56, 0x05, 0xba, - 0xb4, 0x61, 0x38, 0xf6, 0x37, 0x78, 0x82, 0x2c, 0x83, 0x95, 0xaa, 0x02, 0xaf, 0x44, 0x70, 0x38, - 0x46, 0x89, 0x2a, 0x00, 0x2d, 0xd7, 0x22, 0xcd, 0x4b, 0x86, 0x6f, 0x06, 0xa9, 0xeb, 0x41, 0x5e, - 0x6f, 0x2a, 0x28, 0x8e, 0x50, 0x20, 0x07, 0xa6, 0x58, 0x2a, 0x1b, 0x14, 0x31, 0x17, 0x26, 0x72, - 0x49, 0xd1, 0xec, 0x3a, 0xdc, 0x1b, 0x06, 0xf7, 0xb0, 0x10, 0x83, 0x1e, 0x81, 0x59, 0x22, 0x4b, - 0x4d, 0x99, 0x11, 0x97, 0x78, 0x60, 0x95, 0xb0, 0x9d, 0xc8, 0x6f, 0xac, 0x28, 0xd1, 0x0a, 0x1c, - 0x6e, 0x53, 0xc2, 0x55, 0x60, 0x79, 0x8b, 0xd7, 0x36, 0x4c, 0xc2, 0x1d, 0xf1, 0x6c, 0xf5, 0x18, - 0x73, 0x24, 0x6b, 0x49, 0x24, 0x1e, 0xa4, 0xd7, 0xd7, 0x61, 0x6a, 0x8d, 0xba, 0xd7, 0x7b, 0xe8, - 0x38, 0x64, 0xaf, 0xe1, 0x8b, 0x72, 0x51, 0x73, 0x4c, 0x4d, 0xcc, 0x00, 0xc9, 0xa4, 0x3b, 0xb3, - 0xb7, 0xa4, 0x5b, 0xff, 0x59, 0x06, 0x00, 0x93, 0xb6, 0xeb, 0xd9, 0xbe, 0x4b, 0x7b, 0x68, 0x19, - 0x66, 0x28, 0x69, 0xbb, 0xa1, 0x04, 0x15, 0x2a, 0x42, 0xa2, 0x6b, 0xf8, 0x22, 0x0e, 0xa8, 0xc6, - 0x14, 0x8b, 0x5e, 0x80, 0xa9, 0x36, 0x9b, 0x8e, 0x0c, 0xb7, 0x5f, 0x1c, 0x7d, 0xe7, 0xf8, 0x6a, - 0x88, 0x8a, 0x84, 0xff, 0xc4, 0x82, 0x21, 0x3a, 0x05, 0xb9, 0x2d, 0xdb, 0xb1, 0xe4, 0xfe, 0xdc, - 0x1b, 0x18, 0xf2, 0x73, 0xb6, 0x63, 0xed, 0x6c, 0x97, 0x8b, 0x55, 0x6a, 0x38, 0xe6, 0xe6, 0x55, - 0xa3, 0xc1, 0x00, 0x98, 0x93, 0xb2, 0x52, 0x8a, 0x92, 0xba, 0x8c, 0x8d, 0xaa, 0x94, 0xc2, 0xa4, - 0x8e, 0x19, 0x5c, 0xff, 0x75, 0x06, 0x66, 0xb0, 0xdb, 0x6c, 0xba, 0x1d, 0x7f, 0x1f, 0x7c, 0xeb, - 0xcb, 0x31, 0xdf, 0xfa, 0xc4, 0xe8, 0x0b, 0x23, 0x55, 0x4d, 0x2d, 0x0b, 0x1a, 0x89, 0xb2, 0xe0, - 0xa9, 0xf1, 0x45, 0xec, 0x5e, 0x10, 0xbc, 0xab, 0x41, 0x41, 0x52, 0xee, 0x83, 0x9b, 0x7e, 0x29, - 0xee, 0xa6, 0x1f, 0x1d, 0x7b, 0x56, 0x29, 0x7e, 0xf9, 0x07, 0x19, 0x35, 0x1b, 0xee, 0x88, 0xdb, - 0x00, 0x54, 0x1d, 0x09, 0x39, 0x9f, 0xc7, 0xc7, 0x10, 0xaa, 0x78, 0x84, 0x76, 0x11, 0xc2, 0x70, - 0x44, 0x06, 0x7a, 0x0a, 0x66, 0x3d, 0x9f, 0x1a, 0x3e, 0x69, 0xf4, 0xe4, 0x39, 0xfb, 0x54, 0xb0, - 0x1e, 0x35, 0x09, 0xdf, 0xd9, 0x2e, 0xcf, 0xab, 0xcd, 0x11, 0x20, 0xac, 0x06, 0xa1, 0x2b, 0x70, - 0xcc, 0xdb, 0xb2, 0xdb, 0xd7, 0x1c, 0xa3, 0x6b, 0xd8, 0x4d, 0x63, 0xa3, 0x49, 0x44, 0x6b, 0x84, - 0x1b, 0xc2, 0x6c, 0xf5, 0xae, 0xfe, 0x76, 0xf9, 0x58, 0x6d, 0x18, 0x01, 0x1e, 0x3e, 0x4e, 0x7f, - 0x2b, 0x03, 0xc5, 0x98, 0x2d, 0xdc, 0x99, 0x49, 0x58, 0x1b, 0x66, 0x44, 0xcf, 0x27, 0x30, 0x8e, - 0x73, 0x63, 0x1b, 0x87, 0x98, 0xb8, 0xd4, 0x42, 0x15, 0xb2, 0x02, 0xea, 0xe1, 0x40, 0x8c, 0xfe, - 0x27, 0x0d, 0x8e, 0x0c, 0x19, 0x81, 0x96, 0x20, 0xc7, 0x9b, 0xb5, 0x5a, 0xbc, 0x2b, 0xc3, 0x0b, - 0x5b, 0x8e, 0x49, 0x59, 0xc0, 0xcc, 0xc7, 0xba, 0x80, 0xfa, 0xaf, 0x32, 0x30, 0x2d, 0x5b, 0x9a, - 0xb7, 0xdf, 0x01, 0xbe, 0x14, 0x73, 0x80, 0x8f, 0x8f, 0xdb, 0xa1, 0x4d, 0xf5, 0x7f, 0xf5, 0x84, - 0xff, 0x7b, 0x72, 0x6c, 0x09, 0xbb, 0xbb, 0x3f, 0x0b, 0xf2, 0xaa, 0x57, 0x1c, 0xbb, 0x02, 0xd0, - 0x46, 0xb9, 0x02, 0xc8, 0xec, 0x7e, 0x05, 0xa0, 0xff, 0x51, 0x03, 0x10, 0x62, 0xf6, 0xc1, 0xc7, - 0x7e, 0x3d, 0xee, 0x63, 0xcf, 0x8c, 0xbb, 0x72, 0x29, 0x2e, 0xd6, 0x87, 0xe3, 0xb2, 0x8f, 0xae, - 0x9c, 0x9e, 0x3c, 0x37, 0xf7, 0x27, 0xd3, 0x12, 0xb5, 0x20, 0x58, 0x80, 0xc3, 0x84, 0x64, 0x19, - 0xf2, 0x94, 0xd4, 0x09, 0x25, 0x8e, 0x19, 0x34, 0x91, 0x54, 0xfd, 0x8f, 0x03, 0x04, 0x0e, 0x69, - 0xf4, 0x8f, 0xd4, 0x0a, 0x72, 0xbf, 0x7e, 0xbb, 0x76, 0x0a, 0xdd, 0x80, 0x39, 0xe5, 0xcc, 0x6d, - 0xd5, 0x78, 0x3f, 0x3f, 0x89, 0x7d, 0x47, 0x82, 0xc7, 0x21, 0x96, 0x5a, 0xe3, 0x08, 0x7f, 0x1c, - 0x93, 0xa6, 0xff, 0x25, 0x03, 0x47, 0x87, 0x0d, 0x4c, 0xc4, 0xb1, 0xd9, 0x7d, 0x88, 0x63, 0x2f, - 0x41, 0xce, 0xb2, 0x79, 0x1f, 0x21, 0x3b, 0xe6, 0x01, 0xa7, 0xe6, 0xaa, 0xe7, 0xb3, 0xcc, 0x3c, - 0x3c, 0xe0, 0xab, 0x36, 0xf5, 0x30, 0xe7, 0x8b, 0x5e, 0x85, 0x69, 0x71, 0x91, 0xc7, 0xef, 0x9f, - 0xc6, 0xba, 0x6a, 0x09, 0x57, 0x4a, 0x1a, 0x6c, 0x78, 0xc8, 0x85, 0x81, 0x4a, 0x09, 0xfa, 0x77, - 0x35, 0x38, 0x94, 0x24, 0x46, 0x3a, 0x4c, 0xf3, 0x22, 0x45, 0x74, 0xcf, 0x64, 0x67, 0x9d, 0x97, - 0x30, 0x1e, 0x96, 0x18, 0x74, 0x12, 0x66, 0x6d, 0x67, 0xb0, 0x47, 0x77, 0xc1, 0x09, 0x7a, 0x74, - 0x01, 0x36, 0xd6, 0xcd, 0xcb, 0xee, 0xda, 0xcd, 0x7b, 0x3b, 0x03, 0x73, 0x51, 0xd7, 0x74, 0x67, - 0x46, 0xe3, 0x6f, 0x6b, 0x89, 0x83, 0x30, 0x76, 0x5d, 0x3d, 0xdc, 0x59, 0x84, 0x95, 0xe6, 0x2e, - 0xc7, 0xe1, 0xcb, 0x00, 0xa1, 0x15, 0xb1, 0x02, 0xc0, 0xa3, 0x66, 0xf2, 0x2e, 0xa5, 0x46, 0x4d, - 0xcc, 0xe0, 0x0c, 0x6d, 0x79, 0xc1, 0x95, 0x84, 0x42, 0xaf, 0x7a, 0x3e, 0x66, 0x70, 0xfd, 0x77, - 0x6c, 0xd9, 0x3b, 0x1b, 0xe2, 0xca, 0x84, 0x9d, 0xf4, 0xdb, 0x1f, 0x23, 0xad, 0x58, 0x8c, 0x1c, - 0xc7, 0xc0, 0x23, 0xfa, 0xa6, 0x46, 0xca, 0x66, 0x22, 0x52, 0xae, 0x4e, 0x28, 0x67, 0xf7, 0x78, - 0xf9, 0x57, 0x76, 0x94, 0x22, 0xe4, 0xfb, 0x10, 0xcf, 0xcc, 0x78, 0x3c, 0x7b, 0x72, 0xb2, 0xf9, - 0xa5, 0x44, 0xb5, 0xef, 0xe5, 0xe0, 0x78, 0x94, 0x2c, 0xd2, 0x29, 0xb9, 0x79, 0x3a, 0x78, 0x0a, - 0x0a, 0x16, 0x51, 0x43, 0x83, 0x18, 0xc3, 0x4a, 0xeb, 0xd5, 0x10, 0x8c, 0xa3, 0x34, 0xe8, 0x06, - 0x4c, 0x37, 0x8d, 0x0d, 0xe6, 0x7d, 0x44, 0x84, 0xb9, 0x3a, 0xd9, 0xac, 0x42, 0x75, 0x45, 0x07, - 0xda, 0x3b, 0xe7, 0xf8, 0xb4, 0x17, 0xee, 0xa2, 0x00, 0x62, 0x29, 0x13, 0x3d, 0x0e, 0x60, 0x58, - 0x2d, 0x9b, 0x6f, 0x76, 0xf0, 0x28, 0xe1, 0x1e, 0x66, 0xc7, 0x67, 0x15, 0x74, 0x27, 0xf6, 0x0f, - 0x47, 0xe8, 0xd1, 0x83, 0x90, 0x63, 0xfe, 0x51, 0x96, 0xe2, 0xa5, 0x60, 0x41, 0x98, 0xef, 0xdc, - 0x61, 0x65, 0x4e, 0xcf, 0x31, 0xd9, 0x6f, 0xcc, 0xa9, 0xd0, 0x0b, 0xcc, 0x87, 0xfa, 0x84, 0x76, + 0x9e, 0x9d, 0x04, 0x14, 0x92, 0xf4, 0x74, 0x97, 0x3d, 0x9d, 0xb1, 0xbb, 0xad, 0xea, 0xb6, 0xb3, + 0x46, 0x7b, 0x00, 0x42, 0xa4, 0x08, 0x09, 0x09, 0x10, 0xca, 0x01, 0x09, 0xc1, 0x31, 0x1c, 0x41, + 0xe2, 0x84, 0xc4, 0x09, 0x41, 0x50, 0x90, 0xc8, 0x01, 0x44, 0x24, 0xa4, 0x21, 0x71, 0x4e, 0x7c, + 0x24, 0xae, 0x68, 0xb9, 0xa0, 0xfa, 0x74, 0xf5, 0xc7, 0xee, 0xd9, 0xb1, 0xbd, 0x3b, 0xd9, 0xdc, + 0xec, 0xf7, 0x5e, 0xbd, 0xf7, 0xaa, 0xea, 0xd5, 0xfb, 0x55, 0x35, 0x3c, 0xdd, 0xb0, 0xfd, 0xad, + 0xce, 0x66, 0xc5, 0x74, 0x5b, 0xcb, 0x9e, 0x65, 0xda, 0xee, 0xb2, 0xe9, 0x3a, 0x75, 0xbb, 0xf1, + 0x90, 0x47, 0x68, 0x97, 0xd0, 0x65, 0xa3, 0x6d, 0x7b, 0xcb, 0xb6, 0xd3, 0x5d, 0xee, 0x9e, 0x32, + 0x9a, 0xed, 0x2d, 0xe3, 0xd4, 0x72, 0x83, 0x38, 0x84, 0x1a, 0x3e, 0xb1, 0x2a, 0x6d, 0xea, 0xfa, + 0x2e, 0x7a, 0x38, 0xe4, 0x50, 0xe1, 0x1c, 0x2a, 0x82, 0xc3, 0xcb, 0x82, 0x43, 0x85, 0x71, 0xa8, + 0xd8, 0x4e, 0xb7, 0x12, 0x70, 0x58, 0x78, 0x28, 0x22, 0xb3, 0xe1, 0x36, 0xdc, 0x65, 0xce, 0x68, + 0xb3, 0x53, 0xe7, 0xff, 0xf8, 0x1f, 0xfe, 0x4b, 0x08, 0x58, 0x38, 0xbf, 0x17, 0x15, 0x4d, 0xd7, + 0xb1, 0x6c, 0xdf, 0x76, 0x9d, 0x54, 0x45, 0x17, 0x1e, 0xd9, 0x3e, 0xe3, 0x55, 0x6c, 0x97, 0xd1, + 0xb7, 0x0c, 0x73, 0xcb, 0x76, 0x08, 0xed, 0x2d, 0xb7, 0xb7, 0x1b, 0x82, 0x41, 0x8b, 0xf8, 0xc6, + 0x72, 0x77, 0x70, 0xd4, 0x17, 0xd2, 0x46, 0xd1, 0x8e, 0xe3, 0xdb, 0x2d, 0xb2, 0xec, 0x99, 0x5b, + 0xa4, 0x65, 0x24, 0xc7, 0xe9, 0x6f, 0x67, 0xa1, 0xb8, 0x6a, 0x7b, 0xa6, 0xdb, 0x25, 0xb4, 0x77, + 0xc1, 0xa9, 0xbb, 0xe8, 0x41, 0x98, 0xe5, 0x28, 0xd3, 0x6d, 0x96, 0xb4, 0x25, 0xed, 0x64, 0xbe, + 0x7a, 0xe8, 0x9d, 0x9d, 0xf2, 0x81, 0xfe, 0x4e, 0x79, 0x76, 0x4d, 0xc2, 0xb1, 0xa2, 0x90, 0xd4, + 0x5d, 0xdb, 0x22, 0xb4, 0x94, 0x19, 0xa0, 0xe6, 0x70, 0xac, 0x28, 0xd0, 0xfd, 0x30, 0xd3, 0x25, + 0xd4, 0xb3, 0x5d, 0xa7, 0x94, 0xe5, 0xc4, 0xf3, 0x92, 0x78, 0x66, 0x43, 0x80, 0x71, 0x80, 0x67, + 0x8c, 0xb7, 0x5c, 0xcf, 0x77, 0x8c, 0x16, 0x29, 0xe5, 0xe2, 0x8c, 0x9f, 0x75, 0x3d, 0xff, 0xb2, + 0xd1, 0x22, 0x58, 0x51, 0x70, 0x35, 0x9a, 0x86, 0x5f, 0x77, 0x69, 0xab, 0x34, 0x95, 0x50, 0x43, + 0xc2, 0xb1, 0xa2, 0x40, 0xa7, 0x01, 0x5a, 0x86, 0x79, 0xd6, 0xb2, 0x28, 0xf1, 0xbc, 0xd2, 0x34, + 0xa7, 0x47, 0x92, 0x1e, 0x2e, 0x29, 0x0c, 0x8e, 0x50, 0xa1, 0x33, 0x30, 0xe7, 0x11, 0x6a, 0x1b, + 0xcd, 0xcb, 0x9d, 0xd6, 0x26, 0xa1, 0xa5, 0x19, 0x3e, 0xea, 0xa8, 0x1c, 0x35, 0x57, 0x8b, 0xe0, + 0x70, 0x8c, 0x12, 0x9d, 0x07, 0xe4, 0x75, 0xda, 0x6d, 0x97, 0xfa, 0xc4, 0x3a, 0xe7, 0x98, 0xae, + 0x65, 0x3b, 0x0d, 0xaf, 0x34, 0xbb, 0x94, 0x3d, 0x99, 0xaf, 0x1e, 0xef, 0xef, 0x94, 0x51, 0x6d, + 0x00, 0x8b, 0x87, 0x8c, 0xd0, 0xdf, 0x9d, 0x82, 0x23, 0x6a, 0xab, 0xd6, 0x0c, 0x6a, 0xb4, 0x88, + 0x4f, 0xa8, 0x87, 0x7c, 0x28, 0x5a, 0xa4, 0x6e, 0x74, 0x9a, 0x7e, 0x8d, 0xef, 0x31, 0xdf, 0xb5, + 0xc2, 0xe9, 0xc7, 0x2a, 0xa3, 0x5a, 0x7c, 0x45, 0x8c, 0x7f, 0x8e, 0xf4, 0xaa, 0x87, 0xfb, 0x3b, + 0xe5, 0xe2, 0x6a, 0x94, 0x2b, 0x8e, 0x0b, 0x41, 0xdf, 0xd1, 0xe0, 0x90, 0xa5, 0xb4, 0xa1, 0x6e, + 0xdd, 0x6e, 0x12, 0x6e, 0x01, 0x85, 0xd3, 0xd5, 0xd1, 0x25, 0xaf, 0x26, 0x38, 0x55, 0x8f, 0xf6, + 0x77, 0xca, 0x87, 0x92, 0x50, 0x3c, 0x20, 0x11, 0xfd, 0x44, 0x83, 0x92, 0x6f, 0xd0, 0x06, 0xf1, + 0x57, 0x5c, 0xc7, 0x21, 0x26, 0x3b, 0x5b, 0x12, 0xe7, 0x95, 0xb2, 0x4b, 0xd9, 0x93, 0x85, 0xd3, + 0x4f, 0x8d, 0xae, 0xce, 0x3a, 0xe7, 0x18, 0xe8, 0xb2, 0x24, 0x37, 0xb9, 0xb4, 0x9e, 0x22, 0x08, + 0xa7, 0xaa, 0x80, 0xae, 0xc3, 0x41, 0x81, 0x5b, 0x27, 0x2d, 0x66, 0x7f, 0xc2, 0x98, 0x0b, 0xa7, + 0x9f, 0x1e, 0x57, 0xa9, 0x80, 0x4f, 0x15, 0xf5, 0x77, 0xca, 0x07, 0xe3, 0x30, 0x9c, 0x90, 0x85, + 0x36, 0x60, 0xba, 0x4d, 0xa8, 0xed, 0x5a, 0xfc, 0x50, 0x14, 0x4e, 0x57, 0x2a, 0xc2, 0x4d, 0x54, + 0xa2, 0x6e, 0xa2, 0xd2, 0xde, 0x6e, 0x08, 0x71, 0xcc, 0xb9, 0x54, 0xba, 0xa7, 0x2a, 0xab, 0x1d, + 0x6a, 0xb0, 0x59, 0x54, 0x0f, 0xca, 0x99, 0x4f, 0xaf, 0x71, 0x2e, 0x58, 0x72, 0x43, 0x67, 0x61, + 0xde, 0x74, 0x1d, 0xb3, 0x43, 0x29, 0x71, 0xfc, 0x9a, 0x69, 0x38, 0xe2, 0x14, 0x65, 0xab, 0x27, + 0xe4, 0x80, 0xf9, 0x95, 0x38, 0x1a, 0x27, 0xe9, 0xf5, 0x9f, 0x6a, 0x70, 0x22, 0x62, 0xcd, 0xfe, + 0xd6, 0x2a, 0xa9, 0xdb, 0x0e, 0xf7, 0x8d, 0xe8, 0x5e, 0xc8, 0x6e, 0x93, 0x9e, 0xf4, 0x3e, 0x05, + 0xc9, 0x32, 0xfb, 0x1c, 0xe9, 0x61, 0x06, 0x47, 0x4b, 0x90, 0x6b, 0x1b, 0xfe, 0x96, 0xf4, 0x37, + 0x73, 0x12, 0x9f, 0x63, 0x4c, 0x30, 0xc7, 0x20, 0x1d, 0xa6, 0x3d, 0x93, 0xda, 0x6d, 0x5f, 0xba, + 0x19, 0x60, 0x73, 0xa8, 0x71, 0x08, 0x96, 0x18, 0x54, 0x86, 0x29, 0x4a, 0x1a, 0xe4, 0x9a, 0xf4, + 0x2e, 0xf9, 0xfe, 0x4e, 0x79, 0x0a, 0x33, 0x00, 0x16, 0x70, 0xfd, 0x37, 0x1a, 0x0c, 0x58, 0x20, + 0xfa, 0x3c, 0x14, 0x4c, 0x4a, 0x2c, 0xe2, 0xf8, 0xb6, 0xd1, 0xf4, 0xa4, 0x8a, 0x47, 0xa4, 0x0a, + 0x85, 0x95, 0x10, 0x85, 0xa3, 0x74, 0xe8, 0x01, 0xc8, 0xfb, 0x4d, 0xaf, 0x46, 0x4c, 0x4a, 0x7c, + 0xa9, 0x77, 0xb1, 0xbf, 0x53, 0xce, 0xaf, 0x5f, 0xac, 0x09, 0x20, 0x0e, 0xf1, 0xcc, 0x61, 0x98, + 0xc3, 0x8d, 0x59, 0x3a, 0x8c, 0x21, 0x16, 0x38, 0x64, 0x84, 0xfe, 0xfb, 0x4c, 0xc4, 0xb7, 0xe3, + 0x4e, 0x93, 0xa0, 0x57, 0x60, 0x96, 0xed, 0xb1, 0x65, 0xf8, 0x81, 0x97, 0x78, 0x78, 0x6f, 0x16, + 0x71, 0x65, 0xf3, 0x55, 0x62, 0xfa, 0x97, 0x88, 0x6f, 0x84, 0x8e, 0x32, 0x84, 0x61, 0xc5, 0x15, + 0x11, 0xc8, 0x79, 0x6d, 0x62, 0x4a, 0x4f, 0xb0, 0x32, 0x81, 0x27, 0x60, 0x0a, 0xd7, 0xda, 0xc4, + 0x0c, 0x37, 0x98, 0xfd, 0xc3, 0x9c, 0x3d, 0x6a, 0xc1, 0xb4, 0xe7, 0x1b, 0x7e, 0xc7, 0xe3, 0x1b, + 0x5c, 0x38, 0x7d, 0x6e, 0x52, 0x41, 0x9c, 0x59, 0x68, 0xef, 0xe2, 0x3f, 0x96, 0x42, 0x74, 0x17, + 0x8e, 0xc6, 0xc8, 0x83, 0xa0, 0x70, 0x3f, 0xcc, 0x18, 0x32, 0x8a, 0x68, 0xf1, 0x78, 0x16, 0x84, + 0x90, 0x00, 0x1f, 0xc4, 0x33, 0x16, 0xb7, 0x92, 0x81, 0x32, 0x1e, 0xcf, 0xd8, 0x2f, 0xfd, 0xaf, + 0x1a, 0x1c, 0x8e, 0x49, 0xbc, 0x68, 0x7b, 0x3e, 0x7a, 0x71, 0x60, 0xfb, 0xf6, 0x78, 0xa0, 0xd9, + 0x68, 0xbe, 0x79, 0x4a, 0x66, 0x00, 0x89, 0x6c, 0x9d, 0x05, 0x53, 0xb6, 0x4f, 0x5a, 0x5e, 0x29, + 0x33, 0xae, 0xdb, 0x8c, 0x69, 0x5c, 0x2d, 0x4a, 0x59, 0x53, 0x17, 0x18, 0x57, 0x2c, 0x98, 0xeb, + 0x8d, 0x48, 0x10, 0x63, 0x64, 0x6b, 0x94, 0xd4, 0xed, 0x6b, 0xe8, 0x3e, 0x98, 0x6e, 0xf3, 0x5f, + 0x72, 0x21, 0x43, 0xcf, 0xc3, 0xa1, 0x58, 0x62, 0xd1, 0x49, 0x98, 0x25, 0xd7, 0xcc, 0x66, 0xc7, + 0x22, 0x42, 0xcf, 0x7c, 0x75, 0x8e, 0x4d, 0xe7, 0x9c, 0x84, 0x61, 0x85, 0xd5, 0x7f, 0x31, 0x95, + 0x58, 0x42, 0x66, 0x3e, 0xc8, 0x63, 0xf9, 0x0a, 0xe3, 0x44, 0xd8, 0x96, 0x65, 0x6f, 0x81, 0xe9, + 0x08, 0x05, 0xa3, 0x69, 0x8f, 0x60, 0x8f, 0x95, 0x20, 0xf4, 0x1a, 0xe4, 0xa5, 0x19, 0x90, 0x60, + 0x75, 0xcf, 0x4f, 0x28, 0x55, 0xda, 0x57, 0xf5, 0xb0, 0x14, 0x9b, 0x3f, 0x1b, 0x08, 0xc0, 0xa1, + 0x2c, 0x54, 0x87, 0x42, 0xdb, 0xb5, 0x6a, 0xa4, 0x49, 0x4c, 0xdf, 0xa5, 0xf2, 0xac, 0x7c, 0x6e, + 0x8f, 0x36, 0x63, 0x6c, 0x92, 0x66, 0x30, 0xb4, 0x3a, 0xcf, 0xdc, 0xdb, 0x5a, 0xc8, 0x0b, 0x47, + 0x19, 0x23, 0x0a, 0xf3, 0x4c, 0x6d, 0xdb, 0x24, 0x4a, 0x56, 0x6e, 0x7c, 0x59, 0x47, 0x58, 0x00, + 0xa9, 0xc5, 0xf9, 0xe1, 0xa4, 0x00, 0xf4, 0x18, 0x14, 0x25, 0x68, 0xd5, 0x6d, 0x19, 0xb6, 0x23, + 0xf3, 0xbe, 0x63, 0x72, 0x41, 0x8a, 0xb5, 0x28, 0x12, 0xc7, 0x69, 0xd1, 0x8f, 0x34, 0x38, 0x62, + 0x0d, 0xe6, 0x52, 0x3c, 0x8a, 0x4d, 0x66, 0x12, 0x21, 0xb3, 0xea, 0xdd, 0x52, 0x95, 0x61, 0x59, + 0x1b, 0x1e, 0x26, 0x5e, 0x7f, 0x3d, 0x93, 0x38, 0x1d, 0xc2, 0x0f, 0xa1, 0x1f, 0x6a, 0x70, 0x58, + 0x95, 0x0e, 0xc4, 0x12, 0x50, 0xe9, 0x02, 0x2e, 0xec, 0x49, 0x59, 0x35, 0x3a, 0x54, 0x79, 0x25, + 0xc9, 0xb0, 0x7a, 0x97, 0x54, 0xf8, 0xf0, 0x00, 0x0a, 0x0f, 0x8a, 0x47, 0xcf, 0x43, 0xde, 0xf3, + 0x0d, 0xea, 0xaf, 0xdb, 0xad, 0x20, 0xf3, 0xfb, 0xec, 0xde, 0xb6, 0x9b, 0x8d, 0x10, 0xf1, 0xaf, + 0x16, 0x30, 0xc0, 0x21, 0x2f, 0xfd, 0x9f, 0x1a, 0x1c, 0x57, 0xab, 0xb0, 0x41, 0x1c, 0xcb, 0xa5, + 0x41, 0xf8, 0xbd, 0xfd, 0x01, 0xcc, 0x89, 0x05, 0xb0, 0x8b, 0x13, 0x58, 0x42, 0x4c, 0xf3, 0xb4, + 0x48, 0xa6, 0xff, 0x43, 0x83, 0x85, 0xe1, 0x43, 0xf6, 0xc1, 0xe5, 0xb7, 0xe2, 0x2e, 0xff, 0xd9, + 0x5b, 0x35, 0xdb, 0x14, 0xdf, 0xff, 0x56, 0xea, 0x5c, 0xb9, 0x6f, 0xbe, 0x06, 0xb9, 0x86, 0xd3, + 0xb2, 0xe5, 0x3c, 0x37, 0x46, 0x57, 0xe6, 0x19, 0xa7, 0x65, 0x0f, 0xe7, 0x1f, 0x39, 0x95, 0x6a, + 0x13, 0x18, 0x35, 0xe6, 0x12, 0xf5, 0xff, 0x65, 0xe0, 0xd3, 0x7b, 0x19, 0xcc, 0xaa, 0x40, 0x97, + 0x36, 0x0c, 0xc7, 0xfe, 0x06, 0x4f, 0x90, 0x65, 0xb0, 0x52, 0x55, 0xe0, 0x95, 0x08, 0x0e, 0xc7, + 0x28, 0x51, 0x05, 0xa0, 0xe5, 0x5a, 0xa4, 0x79, 0xc9, 0xf0, 0xcd, 0x20, 0x75, 0x3d, 0xc8, 0xeb, + 0x4d, 0x05, 0xc5, 0x11, 0x0a, 0xe4, 0xc0, 0x14, 0x4b, 0x65, 0x83, 0x22, 0xe6, 0xc2, 0x44, 0x2e, + 0x29, 0x9a, 0x5d, 0x87, 0x7b, 0xc3, 0xe0, 0x1e, 0x16, 0x62, 0xd0, 0x23, 0x30, 0x4b, 0x64, 0xa9, + 0x29, 0x33, 0xe2, 0x12, 0x0f, 0xac, 0x12, 0x76, 0x23, 0xf2, 0x1b, 0x2b, 0x4a, 0xb4, 0x02, 0x87, + 0xdb, 0x94, 0x70, 0x15, 0x58, 0xde, 0xe2, 0xb5, 0x0d, 0x93, 0x70, 0x47, 0x3c, 0x5b, 0x3d, 0xc6, + 0x1c, 0xc9, 0x5a, 0x12, 0x89, 0x07, 0xe9, 0xf5, 0x0d, 0x98, 0x5a, 0xa3, 0xee, 0xb5, 0x1e, 0x3a, + 0x0e, 0xd9, 0xab, 0xf8, 0xa2, 0x5c, 0xd4, 0x1c, 0x53, 0x13, 0x33, 0x40, 0x32, 0xe9, 0xce, 0xec, + 0x2d, 0xe9, 0xd6, 0x7f, 0x96, 0x01, 0xc0, 0xa4, 0xed, 0x7a, 0xb6, 0xef, 0xd2, 0x1e, 0x5a, 0x86, + 0x19, 0x4a, 0xda, 0x6e, 0x28, 0x41, 0x85, 0x8a, 0x90, 0xe8, 0x2a, 0xbe, 0x88, 0x03, 0xaa, 0x31, + 0xc5, 0xa2, 0x17, 0x60, 0xaa, 0xcd, 0xa6, 0x23, 0xc3, 0xed, 0x17, 0x47, 0xdf, 0x39, 0xbe, 0x1a, + 0xa2, 0x22, 0xe1, 0x3f, 0xb1, 0x60, 0x88, 0x4e, 0x41, 0x6e, 0xdb, 0x76, 0x2c, 0xb9, 0x3f, 0xf7, + 0x06, 0x86, 0xfc, 0x9c, 0xed, 0x58, 0x37, 0x76, 0xca, 0xc5, 0x2a, 0x35, 0x1c, 0x73, 0x6b, 0xdd, + 0x68, 0x30, 0x00, 0xe6, 0xa4, 0xac, 0x94, 0xa2, 0xa4, 0x2e, 0x63, 0xa3, 0x2a, 0xa5, 0x30, 0xa9, + 0x63, 0x06, 0xd7, 0x7f, 0x95, 0x81, 0x19, 0xec, 0x36, 0x9b, 0x6e, 0xc7, 0xdf, 0x07, 0xdf, 0xfa, + 0x72, 0xcc, 0xb7, 0x3e, 0x31, 0xfa, 0xc2, 0x48, 0x55, 0x53, 0xcb, 0x82, 0x46, 0xa2, 0x2c, 0x78, + 0x6a, 0x7c, 0x11, 0xbb, 0x17, 0x04, 0xef, 0x6a, 0x50, 0x90, 0x94, 0xfb, 0xe0, 0xa6, 0x5f, 0x8a, + 0xbb, 0xe9, 0x47, 0xc7, 0x9e, 0x55, 0x8a, 0x5f, 0xfe, 0x41, 0x46, 0xcd, 0x86, 0x3b, 0xe2, 0x36, + 0x00, 0x55, 0x47, 0x42, 0xce, 0xe7, 0xf1, 0x31, 0x84, 0x2a, 0x1e, 0xa1, 0x5d, 0x84, 0x30, 0x1c, + 0x91, 0x81, 0x9e, 0x82, 0x59, 0xcf, 0xa7, 0x86, 0x4f, 0x1a, 0x3d, 0x79, 0xce, 0x3e, 0x15, 0xac, + 0x47, 0x4d, 0xc2, 0x6f, 0xec, 0x94, 0xe7, 0xd5, 0xe6, 0x08, 0x10, 0x56, 0x83, 0xd0, 0x15, 0x38, + 0xe6, 0x6d, 0xdb, 0xed, 0xab, 0x8e, 0xd1, 0x35, 0xec, 0xa6, 0xb1, 0xd9, 0x24, 0xa2, 0x35, 0xc2, + 0x0d, 0x61, 0xb6, 0x7a, 0x57, 0x7f, 0xa7, 0x7c, 0xac, 0x36, 0x8c, 0x00, 0x0f, 0x1f, 0xa7, 0xbf, + 0x95, 0x81, 0x62, 0xcc, 0x16, 0xee, 0xcc, 0x24, 0xac, 0x0d, 0x33, 0xa2, 0xe7, 0x13, 0x18, 0xc7, + 0xb9, 0xb1, 0x8d, 0x43, 0x4c, 0x5c, 0x6a, 0xa1, 0x0a, 0x59, 0x01, 0xf5, 0x70, 0x20, 0x46, 0xff, + 0xa3, 0x06, 0x47, 0x86, 0x8c, 0x40, 0x4b, 0x90, 0xe3, 0xcd, 0x5a, 0x2d, 0xde, 0x95, 0xe1, 0x85, + 0x2d, 0xc7, 0xa4, 0x2c, 0x60, 0xe6, 0x63, 0x5d, 0x40, 0xfd, 0x97, 0x19, 0x98, 0x96, 0x2d, 0xcd, + 0xdb, 0xef, 0x00, 0x5f, 0x8a, 0x39, 0xc0, 0xc7, 0xc7, 0xed, 0xd0, 0xa6, 0xfa, 0xbf, 0x7a, 0xc2, + 0xff, 0x3d, 0x39, 0xb6, 0x84, 0xdd, 0xdd, 0x9f, 0x05, 0x79, 0xd5, 0x2b, 0x8e, 0x5d, 0x01, 0x68, + 0xa3, 0x5c, 0x01, 0x64, 0x76, 0xbf, 0x02, 0xd0, 0xff, 0xa0, 0x01, 0x08, 0x31, 0xfb, 0xe0, 0x63, + 0xbf, 0x1e, 0xf7, 0xb1, 0x67, 0xc6, 0x5d, 0xb9, 0x14, 0x17, 0xeb, 0xc3, 0x71, 0xd9, 0x47, 0x57, + 0x4e, 0x4f, 0x9e, 0x9b, 0xfb, 0x93, 0x69, 0x89, 0x5a, 0x10, 0x2c, 0xc0, 0x61, 0x42, 0xb2, 0x0c, + 0x79, 0x4a, 0xea, 0x84, 0x12, 0xc7, 0x0c, 0x9a, 0x48, 0xaa, 0xfe, 0xc7, 0x01, 0x02, 0x87, 0x34, + 0xfa, 0x47, 0x6a, 0x05, 0xb9, 0x5f, 0xbf, 0x5d, 0x3b, 0x85, 0xae, 0xc3, 0x9c, 0x72, 0xe6, 0xb6, + 0x6a, 0xbc, 0x9f, 0x9f, 0xc4, 0xbe, 0x23, 0xc1, 0xe3, 0x10, 0x4b, 0xad, 0x71, 0x84, 0x3f, 0x8e, + 0x49, 0xd3, 0xff, 0x9c, 0x81, 0xa3, 0xc3, 0x06, 0x26, 0xe2, 0xd8, 0xec, 0x3e, 0xc4, 0xb1, 0x97, + 0x20, 0x67, 0xd9, 0xbc, 0x8f, 0x90, 0x1d, 0xf3, 0x80, 0x53, 0x73, 0xd5, 0xf3, 0x59, 0x66, 0x1e, + 0x1e, 0xf0, 0x55, 0x9b, 0x7a, 0x98, 0xf3, 0x45, 0xaf, 0xc2, 0xb4, 0xb8, 0xc8, 0xe3, 0xf7, 0x4f, + 0x63, 0x5d, 0xb5, 0x84, 0x2b, 0x25, 0x0d, 0x36, 0x3c, 0xe4, 0xc2, 0x40, 0xa5, 0x04, 0xfd, 0xbb, + 0x1a, 0x1c, 0x4a, 0x12, 0x23, 0x1d, 0xa6, 0x79, 0x91, 0x22, 0xba, 0x67, 0xb2, 0xb3, 0xce, 0x4b, + 0x18, 0x0f, 0x4b, 0x0c, 0x3a, 0x09, 0xb3, 0xb6, 0x33, 0xd8, 0xa3, 0xbb, 0xe0, 0x04, 0x3d, 0xba, + 0x00, 0x1b, 0xeb, 0xe6, 0x65, 0x77, 0xed, 0xe6, 0xbd, 0x9d, 0x81, 0xb9, 0xa8, 0x6b, 0xba, 0x33, + 0xa3, 0xf1, 0xb7, 0xb5, 0xc4, 0x41, 0x18, 0xbb, 0xae, 0x1e, 0xee, 0x2c, 0xc2, 0x4a, 0x73, 0x97, + 0xe3, 0xf0, 0x65, 0x80, 0xd0, 0x8a, 0x58, 0x01, 0xe0, 0x51, 0x33, 0x79, 0x97, 0x52, 0xa3, 0x26, + 0x66, 0x70, 0x86, 0xb6, 0xbc, 0xe0, 0x4a, 0x42, 0xa1, 0x57, 0x3d, 0x1f, 0x33, 0xb8, 0xfe, 0x5b, + 0xb6, 0xec, 0x9d, 0x4d, 0x71, 0x65, 0xc2, 0x4e, 0xfa, 0xed, 0x8f, 0x91, 0x56, 0x2c, 0x46, 0x8e, + 0x63, 0xe0, 0x11, 0x7d, 0x53, 0x23, 0x65, 0x33, 0x11, 0x29, 0x57, 0x27, 0x94, 0xb3, 0x7b, 0xbc, + 0xfc, 0x0b, 0x3b, 0x4a, 0x11, 0xf2, 0x7d, 0x88, 0x67, 0x66, 0x3c, 0x9e, 0x3d, 0x39, 0xd9, 0xfc, + 0x52, 0xa2, 0xda, 0xf7, 0x72, 0x70, 0x3c, 0x4a, 0x16, 0xe9, 0x94, 0xdc, 0x3c, 0x1d, 0x3c, 0x05, + 0x05, 0x8b, 0xa8, 0xa1, 0x41, 0x8c, 0x61, 0xa5, 0xf5, 0x6a, 0x08, 0xc6, 0x51, 0x1a, 0x74, 0x1d, + 0xa6, 0x9b, 0xc6, 0x26, 0xf3, 0x3e, 0x22, 0xc2, 0xac, 0x4f, 0x36, 0xab, 0x50, 0x5d, 0xd1, 0x81, + 0xf6, 0xce, 0x39, 0x3e, 0xed, 0x85, 0xbb, 0x28, 0x80, 0x58, 0xca, 0x44, 0x8f, 0x03, 0x18, 0x56, + 0xcb, 0xe6, 0x9b, 0x1d, 0x3c, 0x4a, 0xb8, 0x87, 0xd9, 0xf1, 0x59, 0x05, 0xbd, 0x11, 0xfb, 0x87, + 0x23, 0xf4, 0xe8, 0x41, 0xc8, 0x31, 0xff, 0x28, 0x4b, 0xf1, 0x52, 0xb0, 0x20, 0xcc, 0x77, 0xde, + 0x60, 0x65, 0x4e, 0xcf, 0x31, 0xd9, 0x6f, 0xcc, 0xa9, 0xd0, 0x0b, 0xcc, 0x87, 0xfa, 0x84, 0x76, 0x8d, 0xa6, 0x6c, 0x4a, 0x8f, 0x7a, 0x77, 0x2b, 0x7d, 0xae, 0xe0, 0x81, 0x15, 0x37, 0x54, 0x0e, 0x1a, 0x4b, 0x33, 0xdc, 0xe1, 0xe6, 0x93, 0x9d, 0xa0, 0x85, 0x47, 0xa1, 0x10, 0x59, 0x0d, 0x74, 0x28, 0x72, 0x19, 0x2b, 0xee, 0x5f, 0x8f, 0xc2, 0x54, 0xd7, 0x68, 0x76, 0x64, 0x0a, 0x82, 0xc5, 0x9f, 0x2f, 0x65, 0xce, 0x68, 0xfa, 0x8f, 0xb3, 0x71, 0x3b, 0xaf, 0xc9, 0xa3, 0x26, 0x6a, 0x07, 0x69, 0xe5, 0x13, 0x1e, 0x35, 0x51, 0x74, 0x84, 0x9b, 0x24, 0xcb, 0x38, 0x29, 0x03, 0x9d, 0x89, - 0x3c, 0x5f, 0x11, 0x26, 0x75, 0x4f, 0xf2, 0xf9, 0xca, 0xce, 0xf0, 0xa7, 0x2c, 0x4b, 0x90, 0x6b, - 0xbb, 0x54, 0x54, 0x8c, 0xc5, 0xc8, 0xb5, 0xb2, 0x4b, 0x7d, 0xcc, 0x31, 0x63, 0xf6, 0xc8, 0xde, - 0xd0, 0xa0, 0xe8, 0x45, 0x26, 0xe0, 0x95, 0xa6, 0xc6, 0x8e, 0x0a, 0x43, 0x8d, 0x37, 0x72, 0xe7, - 0x11, 0x15, 0x83, 0xe3, 0x52, 0xf5, 0xf7, 0x34, 0x40, 0x83, 0x3e, 0xeb, 0xce, 0x0c, 0xa4, 0x9f, - 0x89, 0x97, 0xb5, 0xf9, 0x6a, 0x61, 0x68, 0x2d, 0xfa, 0x46, 0x62, 0x4a, 0x82, 0x00, 0xb9, 0xc1, - 0xa3, 0x0b, 0x75, 0x1b, 0xa5, 0x8d, 0x7f, 0x1b, 0x15, 0x79, 0x67, 0xa1, 0x2e, 0xa3, 0x12, 0xec, - 0x79, 0x11, 0x29, 0x65, 0x7f, 0x02, 0x8a, 0x48, 0x39, 0x99, 0xdb, 0x58, 0x44, 0xc6, 0x5a, 0x09, - 0x69, 0x41, 0xf1, 0xdf, 0x1a, 0x9c, 0x48, 0x79, 0x51, 0xb3, 0x0f, 0xab, 0xe8, 0xc6, 0x56, 0xf1, - 0xd2, 0xb8, 0x73, 0x1c, 0x50, 0x3d, 0xf5, 0xa2, 0xe7, 0x5f, 0x1a, 0xdc, 0x9d, 0x32, 0x66, 0x1f, - 0xd2, 0x01, 0x27, 0x9e, 0x0e, 0x5c, 0xb8, 0x65, 0xf3, 0x4d, 0xc9, 0x0c, 0x7e, 0x31, 0x9d, 0x3a, - 0x5b, 0x1e, 0x14, 0x36, 0x61, 0x4e, 0xbe, 0x58, 0xc1, 0xc4, 0x57, 0x4d, 0xc6, 0x51, 0x63, 0x9c, - 0x4a, 0x87, 0x57, 0x22, 0xbc, 0x70, 0x8c, 0x33, 0xfa, 0x2a, 0xcc, 0xf8, 0x76, 0x8b, 0xb8, 0x1d, - 0x5f, 0xee, 0xf5, 0xa8, 0x42, 0xc2, 0x56, 0x98, 0x60, 0x83, 0x03, 0x7e, 0xb1, 0x58, 0x93, 0x1d, - 0x2b, 0xd6, 0xe4, 0xf6, 0x14, 0x6b, 0xa6, 0xf6, 0x1c, 0x6b, 0xae, 0xc1, 0x89, 0x36, 0x2f, 0xff, - 0x29, 0xb1, 0x2e, 0x13, 0x9f, 0xed, 0xa9, 0x2c, 0xd6, 0xe5, 0x33, 0xc7, 0xbb, 0xfb, 0xdb, 0xe5, - 0x13, 0x6b, 0xc3, 0x49, 0x70, 0xda, 0x58, 0x51, 0xd1, 0x79, 0xc4, 0xec, 0x50, 0xc2, 0x0b, 0xcf, - 0xd9, 0x20, 0xbb, 0x10, 0x30, 0xac, 0xb0, 0xa8, 0x02, 0xe0, 0x6d, 0xd9, 0xed, 0x75, 0x42, 0xed, - 0xba, 0x28, 0xb9, 0x67, 0xc5, 0x35, 0x57, 0x4d, 0x41, 0x71, 0x84, 0x02, 0x3d, 0x00, 0x79, 0x59, - 0x0d, 0x5e, 0xae, 0x95, 0xf2, 0x9c, 0x9c, 0x5f, 0x0c, 0x5f, 0x08, 0x80, 0x38, 0xc4, 0xa3, 0x27, - 0x60, 0xde, 0x6d, 0x13, 0xb1, 0x2d, 0xcf, 0xdb, 0xfe, 0xe6, 0xe5, 0x5a, 0x09, 0xf8, 0x10, 0xfe, - 0x62, 0xe0, 0x4a, 0x1c, 0x85, 0x93, 0xb4, 0xe8, 0x3c, 0xa0, 0x8e, 0x47, 0x14, 0x19, 0x26, 0x2d, - 0xb7, 0x4b, 0x4a, 0x05, 0xce, 0x81, 0xbf, 0xab, 0xba, 0x36, 0x80, 0xc5, 0x43, 0x46, 0xa0, 0x35, - 0x98, 0x37, 0xdd, 0x56, 0xcb, 0xf6, 0x57, 0x0c, 0xc7, 0xb2, 0x2d, 0x96, 0x0c, 0xce, 0xf1, 0xc5, - 0xbd, 0x4f, 0xbc, 0x7c, 0x8b, 0xa1, 0x76, 0x06, 0x41, 0x38, 0x39, 0x9c, 0x77, 0xba, 0xc4, 0x69, - 0xf9, 0x44, 0x74, 0xba, 0x64, 0x0a, 0x36, 0xfc, 0xe4, 0xff, 0x47, 0x83, 0x62, 0xec, 0xfd, 0xe4, - 0xbe, 0xbc, 0x99, 0x7b, 0x86, 0x27, 0x31, 0x71, 0x47, 0x23, 0xcf, 0x64, 0x34, 0xf3, 0x88, 0x13, - 0xe0, 0xc1, 0x31, 0xac, 0x2a, 0xf1, 0x7a, 0x8e, 0x19, 0xb0, 0xc8, 0x85, 0x55, 0x49, 0x2d, 0x04, - 0xe3, 0x28, 0x0d, 0xef, 0xb2, 0x85, 0x31, 0x75, 0xf4, 0x2e, 0x5b, 0xf0, 0x84, 0x2c, 0x73, 0x93, - 0x27, 0x64, 0x37, 0xa0, 0xe8, 0x47, 0x17, 0x76, 0xfc, 0x4b, 0xae, 0xf8, 0xfb, 0x56, 0x95, 0x3e, - 0xc6, 0xc0, 0x38, 0x2e, 0x4c, 0x7f, 0x3b, 0x0b, 0x73, 0xb1, 0x86, 0xff, 0x1d, 0x99, 0x38, 0x5e, - 0x87, 0xa2, 0x15, 0x7d, 0xce, 0x2e, 0x7d, 0xfe, 0x24, 0x8f, 0xd9, 0x18, 0x1b, 0xf9, 0x20, 0x3a, - 0x0a, 0xc2, 0x71, 0x41, 0xe8, 0x4d, 0x0d, 0x0e, 0x76, 0x3c, 0x62, 0xa9, 0x46, 0x6c, 0x90, 0x3f, - 0x5d, 0x9c, 0x2c, 0x7f, 0xba, 0x16, 0xe3, 0x29, 0xd2, 0xd1, 0x38, 0x0c, 0x27, 0xe4, 0xea, 0x3f, - 0xcf, 0xc2, 0x42, 0x3a, 0x0b, 0x54, 0x83, 0x63, 0x9e, 0x38, 0x40, 0xc4, 0x73, 0x3b, 0xd4, 0x24, - 0x41, 0x88, 0xd0, 0x62, 0xf7, 0xca, 0xc7, 0x6a, 0xc3, 0x88, 0xf0, 0xf0, 0xb1, 0xe8, 0x45, 0x28, - 0xa9, 0xd3, 0x98, 0xe4, 0x2b, 0x0c, 0x3b, 0x7c, 0x46, 0xad, 0x0e, 0x70, 0x82, 0x75, 0x2a, 0x07, - 0xe4, 0xc3, 0xd2, 0xc0, 0x51, 0x4d, 0x4a, 0x11, 0xa7, 0xfd, 0xa4, 0x94, 0xb2, 0xb4, 0x72, 0x13, - 0x7a, 0x7c, 0x53, 0x8e, 0x68, 0x03, 0x16, 0x22, 0xe7, 0x3c, 0x29, 0x4f, 0xb8, 0x06, 0x5d, 0xca, - 0x5b, 0xa8, 0xa5, 0x52, 0xe2, 0x5d, 0xb8, 0xe8, 0x1f, 0x68, 0x70, 0x58, 0xee, 0x55, 0x48, 0xb4, - 0x0f, 0xf9, 0xaf, 0x1d, 0xcb, 0x7f, 0x9f, 0x19, 0xdb, 0x46, 0x43, 0xa5, 0x53, 0x33, 0xdf, 0xbf, - 0x6b, 0x70, 0x6c, 0x80, 0x7a, 0x1f, 0x02, 0xdd, 0x66, 0x3c, 0xd0, 0xad, 0xdc, 0x82, 0x39, 0xa6, - 0xc4, 0xbc, 0xd7, 0x33, 0x43, 0x66, 0x18, 0x04, 0x83, 0xae, 0xd1, 0x14, 0x49, 0x82, 0xc6, 0x33, - 0x0d, 0xa5, 0xf1, 0xba, 0x84, 0x63, 0x45, 0x81, 0xee, 0x83, 0xe9, 0x8d, 0x4e, 0xbd, 0x2e, 0xbf, - 0xa5, 0xc9, 0x86, 0xa5, 0x53, 0x95, 0x43, 0xb1, 0xc4, 0xb2, 0xa0, 0xf1, 0x9a, 0x4b, 0xb7, 0x08, - 0x15, 0x3e, 0x26, 0x1b, 0x06, 0x8d, 0xe7, 0x05, 0x18, 0x07, 0x78, 0xbe, 0xcf, 0x3d, 0xc7, 0x2c, - 0xe5, 0xf8, 0x1a, 0xdc, 0x92, 0x7d, 0xee, 0x39, 0xd1, 0x7d, 0xee, 0x39, 0x6c, 0x9f, 0x7b, 0x8e, - 0xa9, 0xff, 0x77, 0xe8, 0x2a, 0xf4, 0x1c, 0x73, 0x0f, 0xcd, 0xc0, 0xdb, 0xd9, 0xb6, 0x51, 0x1d, - 0xaf, 0xdc, 0xf0, 0x8e, 0xd7, 0x88, 0xad, 0xb9, 0x68, 0x66, 0x3e, 0xbd, 0xe7, 0xcc, 0xfc, 0xc5, - 0x48, 0x43, 0x6f, 0x66, 0xac, 0x3a, 0x44, 0x19, 0xce, 0x60, 0x53, 0x4f, 0xff, 0x7d, 0x16, 0x12, - 0xdf, 0x82, 0xa0, 0x33, 0x30, 0xc7, 0x56, 0x56, 0x7d, 0x77, 0x92, 0x78, 0xaa, 0x76, 0x39, 0x82, - 0xc3, 0x31, 0x4a, 0x16, 0xc9, 0x0a, 0x86, 0xe3, 0xb8, 0xbe, 0x21, 0xda, 0x55, 0xe2, 0xf8, 0x7c, - 0x65, 0xd2, 0x2f, 0x56, 0x2a, 0x67, 0x43, 0x9e, 0xa2, 0xd1, 0xaa, 0x72, 0xc0, 0x08, 0x06, 0x47, - 0x45, 0x23, 0x3f, 0xd1, 0xf0, 0xbd, 0x38, 0xb1, 0x12, 0x7b, 0x68, 0xf4, 0x2e, 0x3c, 0x09, 0x87, - 0x92, 0xba, 0x8e, 0xd2, 0x06, 0x9d, 0xa4, 0x83, 0xfa, 0x9b, 0x0c, 0xe4, 0xd9, 0x19, 0xe6, 0x2f, - 0xe3, 0xf6, 0x21, 0x0c, 0x18, 0xb1, 0x30, 0x30, 0x46, 0x9a, 0xa4, 0x94, 0x4d, 0xed, 0x27, 0xd9, - 0x89, 0x7e, 0xd2, 0xd9, 0x49, 0x84, 0xec, 0xde, 0x52, 0xfa, 0xb3, 0x06, 0x45, 0x45, 0xbb, 0x0f, - 0x11, 0xe6, 0x95, 0x78, 0x84, 0x79, 0x6c, 0x82, 0x99, 0xa5, 0x44, 0x96, 0x6f, 0x45, 0x67, 0xf4, - 0xf1, 0x3c, 0xce, 0xd2, 0xdf, 0xcc, 0xc0, 0x7c, 0x62, 0x07, 0xee, 0xcc, 0xe4, 0xff, 0x21, 0xf9, - 0x3e, 0x52, 0x04, 0x90, 0xbb, 0x6e, 0xf6, 0x36, 0x92, 0x5f, 0x40, 0xb5, 0x9b, 0x6e, 0x8f, 0x67, - 0xc7, 0xc1, 0x17, 0xa9, 0xe2, 0x02, 0x4a, 0x81, 0x71, 0x94, 0xa6, 0xba, 0xfe, 0xce, 0x87, 0x8b, - 0x07, 0xde, 0xfb, 0x70, 0xf1, 0xc0, 0xfb, 0x1f, 0x2e, 0x1e, 0xf8, 0x66, 0x7f, 0x51, 0x7b, 0xa7, - 0xbf, 0xa8, 0xbd, 0xd7, 0x5f, 0xd4, 0xde, 0xef, 0x2f, 0x6a, 0x1f, 0xf4, 0x17, 0xb5, 0xef, 0x7f, - 0xb4, 0x78, 0xe0, 0x6b, 0x0f, 0x8f, 0xfa, 0xb5, 0xf2, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0x60, - 0x47, 0x7f, 0x9b, 0xe0, 0x3c, 0x00, 0x00, + 0x3c, 0x5f, 0x11, 0x26, 0x75, 0x4f, 0xf2, 0xf9, 0xca, 0x8d, 0xe1, 0x4f, 0x59, 0x96, 0x20, 0xd7, + 0x76, 0xa9, 0xa8, 0x18, 0x8b, 0x91, 0x6b, 0x65, 0x97, 0xfa, 0x98, 0x63, 0xc6, 0xec, 0x91, 0xbd, + 0xa1, 0x41, 0xd1, 0x8b, 0x4c, 0xc0, 0x2b, 0x4d, 0x8d, 0x1d, 0x15, 0x86, 0x1a, 0x6f, 0xe4, 0xce, + 0x23, 0x2a, 0x06, 0xc7, 0xa5, 0xea, 0xef, 0x69, 0x80, 0x06, 0x7d, 0xd6, 0x9d, 0x19, 0x48, 0x3f, + 0x13, 0x2f, 0x6b, 0xf3, 0xd5, 0xc2, 0xd0, 0x5a, 0xf4, 0x8d, 0xc4, 0x94, 0x04, 0x01, 0x72, 0x83, + 0x47, 0x17, 0xea, 0x36, 0x4a, 0x1b, 0xff, 0x36, 0x2a, 0xf2, 0xce, 0x42, 0x5d, 0x46, 0x25, 0xd8, + 0xf3, 0x22, 0x52, 0xca, 0xfe, 0x04, 0x14, 0x91, 0x72, 0x32, 0xb7, 0xb1, 0x88, 0x8c, 0xb5, 0x12, + 0xd2, 0x82, 0xe2, 0xbf, 0x35, 0x38, 0x91, 0xf2, 0xa2, 0x66, 0x1f, 0x56, 0xd1, 0x8d, 0xad, 0xe2, + 0xa5, 0x71, 0xe7, 0x38, 0xa0, 0x7a, 0xea, 0x45, 0xcf, 0xbf, 0x34, 0xb8, 0x3b, 0x65, 0xcc, 0x3e, + 0xa4, 0x03, 0x4e, 0x3c, 0x1d, 0xb8, 0x70, 0xcb, 0xe6, 0x9b, 0x92, 0x19, 0xfc, 0x6d, 0x3a, 0x75, + 0xb6, 0x3c, 0x28, 0x6c, 0xc1, 0x9c, 0x7c, 0xb1, 0x82, 0x89, 0xaf, 0x9a, 0x8c, 0xa3, 0xc6, 0x38, + 0x95, 0x0e, 0xaf, 0x44, 0x78, 0xe1, 0x18, 0x67, 0xf4, 0x55, 0x98, 0xf1, 0xed, 0x16, 0x71, 0x3b, + 0xbe, 0xdc, 0xeb, 0x51, 0x85, 0x84, 0xad, 0x30, 0xc1, 0x06, 0x07, 0xfc, 0x62, 0xb1, 0x26, 0x3b, + 0x56, 0xac, 0xc9, 0xed, 0x29, 0xd6, 0x4c, 0xed, 0x39, 0xd6, 0x5c, 0x85, 0x13, 0x6d, 0x5e, 0xfe, + 0x53, 0x62, 0x5d, 0x26, 0x3e, 0xdb, 0x53, 0x59, 0xac, 0xcb, 0x67, 0x8e, 0x77, 0xf7, 0x77, 0xca, + 0x27, 0xd6, 0x86, 0x93, 0xe0, 0xb4, 0xb1, 0xa2, 0xa2, 0xf3, 0x88, 0xd9, 0xa1, 0x84, 0x17, 0x9e, + 0xb3, 0x41, 0x76, 0x21, 0x60, 0x58, 0x61, 0x51, 0x05, 0xc0, 0xdb, 0xb6, 0xdb, 0x1b, 0x84, 0xda, + 0x75, 0x51, 0x72, 0xcf, 0x8a, 0x6b, 0xae, 0x9a, 0x82, 0xe2, 0x08, 0x05, 0x7a, 0x00, 0xf2, 0xb2, + 0x1a, 0xbc, 0x5c, 0x2b, 0xe5, 0x39, 0x39, 0xbf, 0x18, 0xbe, 0x10, 0x00, 0x71, 0x88, 0x47, 0x4f, + 0xc0, 0xbc, 0xdb, 0x26, 0x62, 0x5b, 0x9e, 0xb7, 0xfd, 0xad, 0xcb, 0xb5, 0x12, 0xf0, 0x21, 0xfc, + 0xc5, 0xc0, 0x95, 0x38, 0x0a, 0x27, 0x69, 0xd1, 0x79, 0x40, 0x1d, 0x8f, 0x28, 0x32, 0x4c, 0x5a, + 0x6e, 0x97, 0x94, 0x0a, 0x9c, 0x03, 0x7f, 0x57, 0x75, 0x75, 0x00, 0x8b, 0x87, 0x8c, 0x40, 0x6b, + 0x30, 0x6f, 0xba, 0xad, 0x96, 0xed, 0xaf, 0x18, 0x8e, 0x65, 0x5b, 0x2c, 0x19, 0x9c, 0xe3, 0x8b, + 0x7b, 0x9f, 0x78, 0xf9, 0x16, 0x43, 0xdd, 0x18, 0x04, 0xe1, 0xe4, 0x70, 0xb6, 0x6a, 0x22, 0xa2, + 0xf0, 0xe7, 0x41, 0xc5, 0xf0, 0x72, 0x70, 0x5d, 0x41, 0x71, 0x84, 0x82, 0x77, 0xc6, 0x04, 0xea, + 0x13, 0xd1, 0x19, 0x93, 0x29, 0xdb, 0x70, 0x4f, 0xf1, 0x1f, 0x0d, 0x8a, 0xb1, 0xf7, 0x96, 0xfb, + 0xf2, 0xc6, 0xee, 0x19, 0x9e, 0xf4, 0xc4, 0x1d, 0x93, 0x3c, 0xc3, 0xd1, 0x4c, 0x25, 0x4e, 0x80, + 0x07, 0xc7, 0xb0, 0x2a, 0xc6, 0xeb, 0x39, 0x66, 0xc0, 0x22, 0x17, 0x56, 0x31, 0xb5, 0x10, 0x8c, + 0xa3, 0x34, 0xbc, 0x2b, 0x17, 0xc6, 0xe0, 0xd1, 0xbb, 0x72, 0xc1, 0x93, 0xb3, 0xcc, 0x4d, 0x9e, + 0x9c, 0x5d, 0x87, 0xa2, 0x1f, 0x5d, 0xd8, 0xf1, 0x2f, 0xc5, 0xe2, 0xef, 0x61, 0x55, 0xba, 0x19, + 0x03, 0xe3, 0xb8, 0x30, 0xfd, 0xed, 0x2c, 0xcc, 0xc5, 0x2e, 0x08, 0xee, 0xc8, 0x44, 0xf3, 0x1a, + 0x14, 0xad, 0xe8, 0xf3, 0x77, 0x19, 0x23, 0x26, 0x79, 0xfc, 0xc6, 0xd8, 0xc8, 0x07, 0xd4, 0x51, + 0x10, 0x8e, 0x0b, 0x42, 0x6f, 0x6a, 0x70, 0xb0, 0xe3, 0x11, 0x4b, 0x35, 0x6e, 0x83, 0x7c, 0xeb, + 0xe2, 0x64, 0xf9, 0xd6, 0xd5, 0x18, 0x4f, 0x91, 0xbe, 0xc6, 0x61, 0x38, 0x21, 0x57, 0xff, 0x79, + 0x16, 0x16, 0xd2, 0x59, 0xa0, 0x1a, 0x1c, 0xf3, 0xc4, 0x01, 0x22, 0x9e, 0xdb, 0xa1, 0x26, 0x09, + 0x42, 0x8a, 0x16, 0xbb, 0x87, 0x3e, 0x56, 0x1b, 0x46, 0x84, 0x87, 0x8f, 0x45, 0x2f, 0x42, 0x49, + 0x9d, 0xc6, 0x24, 0x5f, 0x61, 0xd8, 0xe1, 0xb3, 0x6b, 0x75, 0x80, 0x13, 0xac, 0x53, 0x39, 0x20, + 0x1f, 0x96, 0x06, 0x8e, 0x6a, 0x52, 0x8a, 0x38, 0xed, 0x27, 0xa5, 0x94, 0xa5, 0x95, 0x9b, 0xd0, + 0xe3, 0x9b, 0x72, 0x44, 0x9b, 0xb0, 0x10, 0x39, 0xe7, 0x49, 0x79, 0xc2, 0x35, 0xe8, 0x52, 0xde, + 0x42, 0x2d, 0x95, 0x12, 0xef, 0xc2, 0x45, 0xff, 0x40, 0x83, 0xc3, 0x72, 0xaf, 0x42, 0xa2, 0x7d, + 0xc8, 0x97, 0xed, 0x58, 0xbe, 0xfc, 0xcc, 0xd8, 0x36, 0x1a, 0x2a, 0x9d, 0x9a, 0x29, 0xff, 0x5d, + 0x83, 0x63, 0x03, 0xd4, 0xfb, 0x10, 0xe8, 0xb6, 0xe2, 0x81, 0x6e, 0xe5, 0x16, 0xcc, 0x31, 0x25, + 0xe6, 0xbd, 0x9e, 0x19, 0x32, 0xc3, 0x20, 0x18, 0x74, 0x8d, 0xa6, 0x48, 0x2a, 0x34, 0x9e, 0x99, + 0x28, 0x8d, 0x37, 0x24, 0x1c, 0x2b, 0x0a, 0x74, 0x1f, 0x4c, 0x6f, 0x76, 0xea, 0x75, 0xf9, 0xed, + 0x4d, 0x36, 0x2c, 0xb5, 0xaa, 0x1c, 0x8a, 0x25, 0x96, 0x05, 0x8d, 0xd7, 0x5c, 0xba, 0x4d, 0xa8, + 0xf0, 0x31, 0xd9, 0x30, 0x68, 0x3c, 0x2f, 0xc0, 0x38, 0xc0, 0xf3, 0x7d, 0xee, 0x39, 0x66, 0x29, + 0xc7, 0xd7, 0xe0, 0x96, 0xec, 0x73, 0xcf, 0x89, 0xee, 0x73, 0xcf, 0x61, 0xfb, 0xdc, 0x73, 0x4c, + 0xfd, 0xbf, 0x43, 0x57, 0xa1, 0xe7, 0x98, 0x7b, 0x68, 0x1e, 0xde, 0xce, 0x36, 0x8f, 0xea, 0x90, + 0xe5, 0x86, 0x77, 0xc8, 0x46, 0x6c, 0xe5, 0x45, 0x33, 0xf9, 0xe9, 0x3d, 0x67, 0xf2, 0x2f, 0x46, + 0x1a, 0x80, 0x33, 0x63, 0xd5, 0x2d, 0xca, 0x70, 0x06, 0x9b, 0x80, 0xfa, 0xef, 0xb2, 0x90, 0xf8, + 0x76, 0x04, 0x9d, 0x81, 0x39, 0xb6, 0xb2, 0xea, 0x3b, 0x95, 0xc4, 0xd3, 0xb6, 0xcb, 0x11, 0x1c, + 0x8e, 0x51, 0xb2, 0x48, 0x56, 0x30, 0x1c, 0xc7, 0xf5, 0x0d, 0xd1, 0xde, 0x12, 0xc7, 0xe7, 0x2b, + 0x93, 0x7e, 0xe1, 0x52, 0x39, 0x1b, 0xf2, 0x14, 0x8d, 0x59, 0x95, 0x03, 0x46, 0x30, 0x38, 0x2a, + 0x1a, 0xf9, 0x89, 0x06, 0xf1, 0xc5, 0x89, 0x95, 0xd8, 0x43, 0x63, 0x78, 0xe1, 0x49, 0x38, 0x94, + 0xd4, 0x75, 0x94, 0xb6, 0xe9, 0x24, 0x1d, 0xd7, 0x5f, 0x67, 0x20, 0xcf, 0xce, 0x30, 0x7f, 0x49, + 0xb7, 0x0f, 0x61, 0xc0, 0x88, 0x85, 0x81, 0x31, 0xd2, 0x24, 0xa5, 0x6c, 0x6a, 0xff, 0xc9, 0x4e, + 0xf4, 0x9f, 0xce, 0x4e, 0x22, 0x64, 0xf7, 0x16, 0xd4, 0x9f, 0x34, 0x28, 0x2a, 0xda, 0x7d, 0x88, + 0x30, 0xaf, 0xc4, 0x23, 0xcc, 0x63, 0x13, 0xcc, 0x2c, 0x25, 0xb2, 0x7c, 0x2b, 0x3a, 0xa3, 0x8f, + 0xe7, 0x31, 0x97, 0xfe, 0x66, 0x06, 0xe6, 0x13, 0x3b, 0x70, 0x67, 0x26, 0xff, 0x0f, 0xc9, 0xf7, + 0x94, 0x22, 0x80, 0xdc, 0x75, 0xb3, 0xb7, 0x94, 0xfc, 0xc2, 0xaa, 0xdd, 0x74, 0x7b, 0x3c, 0x3b, + 0x0e, 0xbe, 0x60, 0x15, 0x17, 0x56, 0x0a, 0x8c, 0xa3, 0x34, 0xd5, 0x8d, 0x77, 0x3e, 0x5c, 0x3c, + 0xf0, 0xde, 0x87, 0x8b, 0x07, 0xde, 0xff, 0x70, 0xf1, 0xc0, 0x37, 0xfb, 0x8b, 0xda, 0x3b, 0xfd, + 0x45, 0xed, 0xbd, 0xfe, 0xa2, 0xf6, 0x7e, 0x7f, 0x51, 0xfb, 0xa0, 0xbf, 0xa8, 0x7d, 0xff, 0xa3, + 0xc5, 0x03, 0x5f, 0x7b, 0x78, 0xd4, 0xaf, 0x9b, 0xff, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x04, 0xb4, + 0xca, 0x6d, 0x10, 0x3d, 0x00, 0x00, } func (m *DiscoveryInfo) Marshal() (dAtA []byte, err error) { @@ -3786,6 +3787,13 @@ func (m *TargetConnectionProfileSpec) MarshalToSizedBuffer(dAtA []byte) (int, er _ = i var l int _ = l + if m.TargetName != nil { + i -= len(*m.TargetName) + copy(dAtA[i:], *m.TargetName) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.TargetName))) + i-- + dAtA[i] = 0x6a + } if m.CommitCandidate != nil { i -= len(*m.CommitCandidate) copy(dAtA[i:], *m.CommitCandidate) @@ -5355,6 +5363,10 @@ func (m *TargetConnectionProfileSpec) Size() (n int) { l = len(*m.CommitCandidate) n += 1 + l + sovGenerated(uint64(l)) } + if m.TargetName != nil { + l = len(*m.TargetName) + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -6187,6 +6199,7 @@ func (this *TargetConnectionProfileSpec) String() string { `OperationWithNS:` + valueToStringGenerated(this.OperationWithNS) + `,`, `UseOperationRemove:` + valueToStringGenerated(this.UseOperationRemove) + `,`, `CommitCandidate:` + valueToStringGenerated(this.CommitCandidate) + `,`, + `TargetName:` + valueToStringGenerated(this.TargetName) + `,`, `}`, }, "") return s @@ -12578,6 +12591,39 @@ func (m *TargetConnectionProfileSpec) Unmarshal(dAtA []byte) error { s := CommitCandidate(dAtA[iNdEx:postIndex]) m.CommitCandidate = &s iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TargetName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + 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 ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.TargetName = &s + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/apis/inv/v1alpha1/generated.proto b/apis/inv/v1alpha1/generated.proto index 4eea81b5..f523837d 100644 --- a/apis/inv/v1alpha1/generated.proto +++ b/apis/inv/v1alpha1/generated.proto @@ -612,6 +612,11 @@ message TargetConnectionProfileSpec { // +kubebuilder:validation:Enum=candidate;running; // +kubebuilder:default:="candidate" optional string commitCandidate = 12; + + // TargetName specifies the target field value in gNMI Path prefix + // Examples: "OC-YANG" (SONiC), "openconfig" (some vendors), or empty + // +optional + optional string targetName = 13; } // +kubebuilder:object:root=true diff --git a/apis/inv/v1alpha1/targetconnprofile_types.go b/apis/inv/v1alpha1/targetconnprofile_types.go index 631196e3..8c2581c0 100644 --- a/apis/inv/v1alpha1/targetconnprofile_types.go +++ b/apis/inv/v1alpha1/targetconnprofile_types.go @@ -115,6 +115,10 @@ type TargetConnectionProfileSpec struct { // +kubebuilder:validation:Enum=candidate;running; // +kubebuilder:default:="candidate" CommitCandidate *CommitCandidate `json:"commitCandidate,omitempty" yaml:"commitCandidate,omitempty" protobuf:"bytes,12,opt,name=commitCandidate,casttype=CommitCandidate"` + // TargetName specifies the target field value in gNMI Path prefix + // Examples: "OC-YANG" (SONiC), "openconfig" (some vendors), or empty + // +optional + TargetName *string `json:"targetName,omitempty" yaml:"targetName,omitempty" protobuf:"bytes,13,opt,name=targetName"` } // +kubebuilder:object:root=true diff --git a/apis/inv/v1alpha1/zz_generated.deepcopy.go b/apis/inv/v1alpha1/zz_generated.deepcopy.go index 496865e9..b1e93a98 100644 --- a/apis/inv/v1alpha1/zz_generated.deepcopy.go +++ b/apis/inv/v1alpha1/zz_generated.deepcopy.go @@ -1053,6 +1053,15 @@ func (in *TargetConnectionProfileSpec) DeepCopyInto(out *TargetConnectionProfile *out = new(CommitCandidate) **out = **in } +<<<<<<< HEAD +======= + if in.TargetName != nil { + in, out := &in.TargetName, &out.TargetName + *out = new(string) + **out = **in + } + return +>>>>>>> a66ec59 (added targetName in connection profile) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TargetConnectionProfileSpec. diff --git a/artifacts/inv.sdcio.dev_targetconnectionprofiles.yaml b/artifacts/inv.sdcio.dev_targetconnectionprofiles.yaml index e025163c..c27bb780 100644 --- a/artifacts/inv.sdcio.dev_targetconnectionprofiles.yaml +++ b/artifacts/inv.sdcio.dev_targetconnectionprofiles.yaml @@ -137,6 +137,11 @@ spec: x-kubernetes-validations: - message: skipVerify is immutable rule: self == oldSelf + targetName: + description: |- + TargetName specifies the target field value in gNMI Path prefix + Examples: "OC-YANG" (SONiC), "openconfig" (some vendors), or empty + type: string timeout: default: 10s type: string diff --git a/crds/inv.sdcio.dev_targetconnectionprofiles.yaml b/crds/inv.sdcio.dev_targetconnectionprofiles.yaml index e025163c..c27bb780 100644 --- a/crds/inv.sdcio.dev_targetconnectionprofiles.yaml +++ b/crds/inv.sdcio.dev_targetconnectionprofiles.yaml @@ -137,6 +137,11 @@ spec: x-kubernetes-validations: - message: skipVerify is immutable rule: self == oldSelf + targetName: + description: |- + TargetName specifies the target field value in gNMI Path prefix + Examples: "OC-YANG" (SONiC), "openconfig" (some vendors), or empty + type: string timeout: default: 10s type: string diff --git a/go.mod b/go.mod index 78f98ee0..ceb1d557 100644 --- a/go.mod +++ b/go.mod @@ -35,8 +35,8 @@ require ( golang.org/x/sync v0.18.0 google.golang.org/grpc v1.78.0 google.golang.org/protobuf v1.36.11 - k8s.io/api v0.33.1 - k8s.io/apimachinery v0.33.1 + k8s.io/api v0.33.2 + k8s.io/apimachinery v0.33.2 k8s.io/apiserver v0.33.0 k8s.io/client-go v0.33.1 k8s.io/code-generator v0.33.1 diff --git a/go.sum b/go.sum index 90856641..66fbfa0c 100644 --- a/go.sum +++ b/go.sum @@ -244,8 +244,13 @@ github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7 github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sdcio/logger v0.0.3 h1:IFUbObObGry+S8lHGwOQKKRxJSuOphgRU/hxVhOdMOM= github.com/sdcio/logger v0.0.3/go.mod h1:yWaOxK/G6vszjg8tKZiMqiEjlZouHsjFME4zSk+SAEA= +<<<<<<< HEAD github.com/sdcio/sdc-protos v0.0.50 h1:aR6Av1QMTFNXKKxnrz8vlIXQ0y21lxQJEMut1oLd2Bg= github.com/sdcio/sdc-protos v0.0.50/go.mod h1:huh1QVE023w+reU2Gt6h1f83R3lJidcFLbQje7cMY1M= +======= +github.com/sdcio/sdc-protos v0.0.50-0.20260128150726-633a9d3e3f01 h1:8Jc/06mBHV6Mbblndlbs0mdUq2y3R+bS/5vr2WkYE7M= +github.com/sdcio/sdc-protos v0.0.50-0.20260128150726-633a9d3e3f01/go.mod h1:huh1QVE023w+reU2Gt6h1f83R3lJidcFLbQje7cMY1M= +>>>>>>> a66ec59 (added targetName in connection profile) github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= @@ -457,12 +462,12 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -k8s.io/api v0.33.1 h1:tA6Cf3bHnLIrUK4IqEgb2v++/GYUtqiu9sRVk3iBXyw= -k8s.io/api v0.33.1/go.mod h1:87esjTn9DRSRTD4fWMXamiXxJhpOIREjWOSjsW1kEHw= +k8s.io/api v0.33.2 h1:YgwIS5jKfA+BZg//OQhkJNIfie/kmRsO0BmNaVSimvY= +k8s.io/api v0.33.2/go.mod h1:fhrbphQJSM2cXzCWgqU29xLDuks4mu7ti9vveEnpSXs= k8s.io/apiextensions-apiserver v0.32.1 h1:hjkALhRUeCariC8DiVmb5jj0VjIc1N0DREP32+6UXZw= k8s.io/apiextensions-apiserver v0.32.1/go.mod h1:sxWIGuGiYov7Io1fAS2X06NjMIk5CbRHc2StSmbaQto= -k8s.io/apimachinery v0.33.1 h1:mzqXWV8tW9Rw4VeW9rEkqvnxj59k1ezDUl20tFK/oM4= -k8s.io/apimachinery v0.33.1/go.mod h1:BHW0YOu7n22fFv/JkYOEfkUYNRN0fj0BlvMFWA7b+SM= +k8s.io/apimachinery v0.33.2 h1:IHFVhqg59mb8PJWTLi8m1mAoepkUNYmptHsV+Z1m5jY= +k8s.io/apimachinery v0.33.2/go.mod h1:BHW0YOu7n22fFv/JkYOEfkUYNRN0fj0BlvMFWA7b+SM= k8s.io/apiserver v0.33.0 h1:QqcM6c+qEEjkOODHppFXRiw/cE2zP85704YrQ9YaBbc= k8s.io/apiserver v0.33.0/go.mod h1:EixYOit0YTxt8zrO2kBU7ixAtxFce9gKGq367nFmqI8= k8s.io/client-go v0.33.1 h1:ZZV/Ks2g92cyxWkRRnfUDsnhNn28eFpt26aGc8KbXF4= diff --git a/pkg/generated/openapi/zz_generated.openapi.go b/pkg/generated/openapi/zz_generated.openapi.go index 8f8b94bc..916c1c33 100644 --- a/pkg/generated/openapi/zz_generated.openapi.go +++ b/pkg/generated/openapi/zz_generated.openapi.go @@ -3764,6 +3764,13 @@ func schema_config_server_apis_inv_v1alpha1_TargetConnectionProfileSpec(ref comm Format: "", }, }, + "targetName": { + SchemaProps: spec.SchemaProps{ + Description: "TargetName specifies the target field value in gNMI Path prefix Examples: \"OC-YANG\" (SONiC), \"openconfig\" (some vendors), or empty", + Type: []string{"string"}, + Format: "", + }, + }, }, Required: []string{"protocol", "port"}, }, diff --git a/pkg/reconcilers/targetdatastore/reconciler.go b/pkg/reconcilers/targetdatastore/reconciler.go index cb9be8a3..87d002ea 100644 --- a/pkg/reconcilers/targetdatastore/reconciler.go +++ b/pkg/reconcilers/targetdatastore/reconciler.go @@ -425,9 +425,14 @@ func (r *reconciler) getCreateDataStoreRequest(ctx context.Context, target *invv } if connProfile.Spec.Protocol == invv1alpha1.Protocol_GNMI { + targetName:= "" + if connProfile.Spec.TargetName != nil { + targetName = *connProfile.Spec.TargetName + } req.Target.ProtocolOptions = &sdcpb.Target_GnmiOpts{ GnmiOpts: &sdcpb.GnmiOptions{ Encoding: string(connProfile.Encoding()), + TargetName: targetName, }, } } From 2d806c523c4e0bcd9f08aca0d01d7140adc6fd5c Mon Sep 17 00:00:00 2001 From: Wim Henderickx Date: Thu, 12 Feb 2026 16:16:39 +0100 Subject: [PATCH 2/3] updated go mod --- apis/inv/v1alpha1/zz_generated.deepcopy.go | 62 ++- go.sum | 5 - pkg/sdc/target/context.go | 549 +++++++++++++++++++++ 3 files changed, 605 insertions(+), 11 deletions(-) create mode 100644 pkg/sdc/target/context.go diff --git a/apis/inv/v1alpha1/zz_generated.deepcopy.go b/apis/inv/v1alpha1/zz_generated.deepcopy.go index b1e93a98..4d2b728c 100644 --- a/apis/inv/v1alpha1/zz_generated.deepcopy.go +++ b/apis/inv/v1alpha1/zz_generated.deepcopy.go @@ -1,4 +1,5 @@ //go:build !ignore_autogenerated +// +build !ignore_autogenerated /* Copyright 2024 Nokia. @@ -15,13 +16,12 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ - -// Code generated by controller-gen. DO NOT EDIT. +// Code generated by deepcopy-gen. DO NOT EDIT. package v1alpha1 import ( - "k8s.io/apimachinery/pkg/apis/meta/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" ) @@ -33,6 +33,7 @@ func (in *DiscoveryInfo) DeepCopyInto(out *DiscoveryInfo) { *out = make([]string, len(*in)) copy(*out, *in) } + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DiscoveryInfo. @@ -71,6 +72,7 @@ func (in *DiscoveryParameters) DeepCopyInto(out *DiscoveryParameters) { (*in).DeepCopyInto(*out) } out.Period = in.Period + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DiscoveryParameters. @@ -96,6 +98,7 @@ func (in *DiscoveryPathDefinition) DeepCopyInto(out *DiscoveryPathDefinition) { *out = new(string) **out = **in } + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DiscoveryPathDefinition. @@ -121,6 +124,7 @@ func (in *DiscoveryProfile) DeepCopyInto(out *DiscoveryProfile) { *out = make([]string, len(*in)) copy(*out, *in) } + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DiscoveryProfile. @@ -140,6 +144,7 @@ func (in *DiscoveryRule) DeepCopyInto(out *DiscoveryRule) { in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) in.Spec.DeepCopyInto(&out.Spec) in.Status.DeepCopyInto(&out.Status) + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DiscoveryRule. @@ -163,6 +168,7 @@ func (in *DiscoveryRule) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DiscoveryRuleAddress) DeepCopyInto(out *DiscoveryRuleAddress) { *out = *in + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DiscoveryRuleAddress. @@ -187,6 +193,7 @@ func (in *DiscoveryRuleList) DeepCopyInto(out *DiscoveryRuleList) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DiscoveryRuleList. @@ -215,6 +222,7 @@ func (in *DiscoveryRulePrefix) DeepCopyInto(out *DiscoveryRulePrefix) { *out = make([]string, len(*in)) copy(*out, *in) } + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DiscoveryRulePrefix. @@ -253,6 +261,7 @@ func (in *DiscoveryRuleSpec) DeepCopyInto(out *DiscoveryRuleSpec) { (*in).DeepCopyInto(*out) } in.DiscoveryParameters.DeepCopyInto(&out.DiscoveryParameters) + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DiscoveryRuleSpec. @@ -273,6 +282,7 @@ func (in *DiscoveryRuleStatus) DeepCopyInto(out *DiscoveryRuleStatus) { in, out := &in.StartTime, &out.StartTime *out = (*in).DeepCopy() } + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DiscoveryRuleStatus. @@ -291,6 +301,7 @@ func (in *DiscoveryVendorProfile) DeepCopyInto(out *DiscoveryVendorProfile) { out.TypeMeta = in.TypeMeta in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) in.Spec.DeepCopyInto(&out.Spec) + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DiscoveryVendorProfile. @@ -323,6 +334,7 @@ func (in *DiscoveryVendorProfileList) DeepCopyInto(out *DiscoveryVendorProfileLi (*in)[i].DeepCopyInto(&(*out)[i]) } } + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DiscoveryVendorProfileList. @@ -347,6 +359,7 @@ func (in *DiscoveryVendorProfileList) DeepCopyObject() runtime.Object { func (in *DiscoveryVendorProfileSpec) DeepCopyInto(out *DiscoveryVendorProfileSpec) { *out = *in in.Gnmi.DeepCopyInto(&out.Gnmi) + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DiscoveryVendorProfileSpec. @@ -384,6 +397,7 @@ func (in *GnmiDiscoveryVendorProfileParameters) DeepCopyInto(out *GnmiDiscoveryV *out = new(bool) **out = **in } + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GnmiDiscoveryVendorProfileParameters. @@ -399,6 +413,7 @@ func (in *GnmiDiscoveryVendorProfileParameters) DeepCopy() *GnmiDiscoveryVendorP // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Proxy) DeepCopyInto(out *Proxy) { *out = *in + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Proxy. @@ -419,6 +434,7 @@ func (in *Repository) DeepCopyInto(out *Repository) { *out = new(Proxy) **out = **in } + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Repository. @@ -438,6 +454,7 @@ func (in *Rollout) DeepCopyInto(out *Rollout) { in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) in.Spec.DeepCopyInto(&out.Spec) in.Status.DeepCopyInto(&out.Status) + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Rollout. @@ -470,6 +487,7 @@ func (in *RolloutList) DeepCopyInto(out *RolloutList) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RolloutList. @@ -499,6 +517,7 @@ func (in *RolloutSpec) DeepCopyInto(out *RolloutSpec) { *out = new(bool) **out = **in } + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RolloutSpec. @@ -522,6 +541,7 @@ func (in *RolloutStatus) DeepCopyInto(out *RolloutStatus) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RolloutStatus. @@ -538,6 +558,7 @@ func (in *RolloutStatus) DeepCopy() *RolloutStatus { func (in *RolloutTargetStatus) DeepCopyInto(out *RolloutTargetStatus) { *out = *in in.ConditionedStatus.DeepCopyInto(&out.ConditionedStatus) + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RolloutTargetStatus. @@ -557,6 +578,7 @@ func (in *Schema) DeepCopyInto(out *Schema) { in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) in.Spec.DeepCopyInto(&out.Spec) in.Status.DeepCopyInto(&out.Status) + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Schema. @@ -580,6 +602,7 @@ func (in *Schema) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SchemaKey) DeepCopyInto(out *SchemaKey) { *out = *in + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SchemaKey. @@ -604,6 +627,7 @@ func (in *SchemaList) DeepCopyInto(out *SchemaList) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SchemaList. @@ -627,6 +651,7 @@ func (in *SchemaList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SchemaRepositoryStatus) DeepCopyInto(out *SchemaRepositoryStatus) { *out = *in + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SchemaRepositoryStatus. @@ -653,6 +678,7 @@ func (in *SchemaSpec) DeepCopyInto(out *SchemaSpec) { } } } + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SchemaSpec. @@ -675,6 +701,7 @@ func (in *SchemaSpecRepository) DeepCopyInto(out *SchemaSpecRepository) { copy(*out, *in) } in.Schema.DeepCopyInto(&out.Schema) + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SchemaSpecRepository. @@ -705,6 +732,7 @@ func (in *SchemaSpecSchema) DeepCopyInto(out *SchemaSpecSchema) { *out = make([]string, len(*in)) copy(*out, *in) } + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SchemaSpecSchema. @@ -726,6 +754,7 @@ func (in *SchemaStatus) DeepCopyInto(out *SchemaStatus) { *out = make([]SchemaRepositoryStatus, len(*in)) copy(*out, *in) } + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SchemaStatus. @@ -741,6 +770,7 @@ func (in *SchemaStatus) DeepCopy() *SchemaStatus { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SrcDstPath) DeepCopyInto(out *SrcDstPath) { *out = *in + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SrcDstPath. @@ -760,6 +790,7 @@ func (in *Subscription) DeepCopyInto(out *Subscription) { in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) in.Spec.DeepCopyInto(&out.Spec) in.Status.DeepCopyInto(&out.Status) + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Subscription. @@ -792,6 +823,7 @@ func (in *SubscriptionList) DeepCopyInto(out *SubscriptionList) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SubscriptionList. @@ -842,6 +874,7 @@ func (in *SubscriptionParameters) DeepCopyInto(out *SubscriptionParameters) { *out = make([]string, len(*in)) copy(*out, *in) } + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SubscriptionParameters. @@ -870,6 +903,7 @@ func (in *SubscriptionSpec) DeepCopyInto(out *SubscriptionSpec) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SubscriptionSpec. @@ -891,6 +925,7 @@ func (in *SubscriptionStatus) DeepCopyInto(out *SubscriptionStatus) { *out = make([]string, len(*in)) copy(*out, *in) } + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SubscriptionStatus. @@ -911,6 +946,7 @@ func (in *SubscriptionTarget) DeepCopyInto(out *SubscriptionTarget) { *out = new(v1.LabelSelector) (*in).DeepCopyInto(*out) } + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SubscriptionTarget. @@ -930,6 +966,7 @@ func (in *Target) DeepCopyInto(out *Target) { in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) in.Spec.DeepCopyInto(&out.Spec) in.Status.DeepCopyInto(&out.Status) + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Target. @@ -956,6 +993,7 @@ func (in *TargetConnectionProfile) DeepCopyInto(out *TargetConnectionProfile) { out.TypeMeta = in.TypeMeta in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) in.Spec.DeepCopyInto(&out.Spec) + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TargetConnectionProfile. @@ -988,6 +1026,7 @@ func (in *TargetConnectionProfileList) DeepCopyInto(out *TargetConnectionProfile (*in)[i].DeepCopyInto(&(*out)[i]) } } + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TargetConnectionProfileList. @@ -1053,15 +1092,12 @@ func (in *TargetConnectionProfileSpec) DeepCopyInto(out *TargetConnectionProfile *out = new(CommitCandidate) **out = **in } -<<<<<<< HEAD -======= if in.TargetName != nil { in, out := &in.TargetName, &out.TargetName *out = new(string) **out = **in } return ->>>>>>> a66ec59 (added targetName in connection profile) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TargetConnectionProfileSpec. @@ -1086,6 +1122,7 @@ func (in *TargetList) DeepCopyInto(out *TargetList) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TargetList. @@ -1119,6 +1156,7 @@ func (in *TargetProfile) DeepCopyInto(out *TargetProfile) { *out = new(string) **out = **in } + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TargetProfile. @@ -1135,6 +1173,7 @@ func (in *TargetProfile) DeepCopy() *TargetProfile { func (in *TargetSpec) DeepCopyInto(out *TargetSpec) { *out = *in in.TargetProfile.DeepCopyInto(&out.TargetProfile) + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TargetSpec. @@ -1161,6 +1200,7 @@ func (in *TargetStatus) DeepCopyInto(out *TargetStatus) { *out = new(TargetStatusUsedReferences) **out = **in } + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TargetStatus. @@ -1176,6 +1216,7 @@ func (in *TargetStatus) DeepCopy() *TargetStatus { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *TargetStatusUsedReferences) DeepCopyInto(out *TargetStatusUsedReferences) { *out = *in + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TargetStatusUsedReferences. @@ -1194,6 +1235,7 @@ func (in *TargetSyncProfile) DeepCopyInto(out *TargetSyncProfile) { out.TypeMeta = in.TypeMeta in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) in.Spec.DeepCopyInto(&out.Spec) + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TargetSyncProfile. @@ -1226,6 +1268,7 @@ func (in *TargetSyncProfileList) DeepCopyInto(out *TargetSyncProfileList) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TargetSyncProfileList. @@ -1256,6 +1299,7 @@ func (in *TargetSyncProfileSpec) DeepCopyInto(out *TargetSyncProfileSpec) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TargetSyncProfileSpec. @@ -1282,6 +1326,7 @@ func (in *TargetSyncProfileSync) DeepCopyInto(out *TargetSyncProfileSync) { **out = **in } out.Interval = in.Interval + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TargetSyncProfileSync. @@ -1311,6 +1356,7 @@ func (in *TargetTemplate) DeepCopyInto(out *TargetTemplate) { (*out)[key] = val } } + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TargetTemplate. @@ -1330,6 +1376,7 @@ func (in *Workspace) DeepCopyInto(out *Workspace) { in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) in.Spec.DeepCopyInto(&out.Spec) in.Status.DeepCopyInto(&out.Status) + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Workspace. @@ -1362,6 +1409,7 @@ func (in *WorkspaceList) DeepCopyInto(out *WorkspaceList) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkspaceList. @@ -1386,6 +1434,7 @@ func (in *WorkspaceList) DeepCopyObject() runtime.Object { func (in *WorkspaceSpec) DeepCopyInto(out *WorkspaceSpec) { *out = *in in.Repository.DeepCopyInto(&out.Repository) + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkspaceSpec. @@ -1412,6 +1461,7 @@ func (in *WorkspaceStatus) DeepCopyInto(out *WorkspaceStatus) { *out = new(string) **out = **in } + return } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkspaceStatus. diff --git a/go.sum b/go.sum index 66fbfa0c..3e551730 100644 --- a/go.sum +++ b/go.sum @@ -244,13 +244,8 @@ github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7 github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sdcio/logger v0.0.3 h1:IFUbObObGry+S8lHGwOQKKRxJSuOphgRU/hxVhOdMOM= github.com/sdcio/logger v0.0.3/go.mod h1:yWaOxK/G6vszjg8tKZiMqiEjlZouHsjFME4zSk+SAEA= -<<<<<<< HEAD github.com/sdcio/sdc-protos v0.0.50 h1:aR6Av1QMTFNXKKxnrz8vlIXQ0y21lxQJEMut1oLd2Bg= github.com/sdcio/sdc-protos v0.0.50/go.mod h1:huh1QVE023w+reU2Gt6h1f83R3lJidcFLbQje7cMY1M= -======= -github.com/sdcio/sdc-protos v0.0.50-0.20260128150726-633a9d3e3f01 h1:8Jc/06mBHV6Mbblndlbs0mdUq2y3R+bS/5vr2WkYE7M= -github.com/sdcio/sdc-protos v0.0.50-0.20260128150726-633a9d3e3f01/go.mod h1:huh1QVE023w+reU2Gt6h1f83R3lJidcFLbQje7cMY1M= ->>>>>>> a66ec59 (added targetName in connection profile) github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= diff --git a/pkg/sdc/target/context.go b/pkg/sdc/target/context.go new file mode 100644 index 00000000..47f7668d --- /dev/null +++ b/pkg/sdc/target/context.go @@ -0,0 +1,549 @@ +/* +Copyright 2024 Nokia. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package target + +import ( + "context" + "fmt" + "sync" + "log/slog" + + "strconv" + + "github.com/henderiw/apiserver-store/pkg/storebackend" + "github.com/henderiw/logger/log" + "github.com/openconfig/gnmic/pkg/cache" + "github.com/prometheus/prometheus/prompb" + "github.com/sdcio/config-server/apis/config" + invv1alpha1 "github.com/sdcio/config-server/apis/inv/v1alpha1" + dsclient "github.com/sdcio/config-server/pkg/sdc/dataserver/client" + sdcpb "github.com/sdcio/sdc-protos/sdcpb" + "google.golang.org/grpc" + "google.golang.org/protobuf/encoding/prototext" + "google.golang.org/protobuf/proto" + "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/utils/ptr" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +type Context struct { + targetKey storebackend.Key + client client.Client // k8s client + dsclient dsclient.Client + deviationWatcher *DeviationWatcher + // Subscription parameters + collector *Collector + subscriptions *Subscriptions + + m sync.RWMutex + readyState bool + recoveredTargetConfigsState bool + datastoreReq *sdcpb.CreateDataStoreRequest +} + +func New(targetKey storebackend.Key, client client.Client, dsclient dsclient.Client) *Context { + subscriptions := NewSubscriptions() + return &Context{ + targetKey: targetKey, + client: client, + dsclient: dsclient, + deviationWatcher: NewDeviationWatcher(targetKey, client, dsclient), + collector: NewCollector(targetKey, subscriptions), + subscriptions: subscriptions, + //cache: cache.New([]string{}, cache.WithLogging(logging.NewLogrLogger())), + } +} + +func (r *Context) getDatastoreReq() *sdcpb.CreateDataStoreRequest { + r.m.RLock() + defer r.m.RUnlock() + if r.datastoreReq == nil { + return nil + } + clone := proto.Clone(r.datastoreReq) + return clone.(*sdcpb.CreateDataStoreRequest) +} + +func (r *Context) setDatastoreReq(req *sdcpb.CreateDataStoreRequest) { + r.m.Lock() + defer r.m.Unlock() + r.datastoreReq = req +} + +func (r *Context) getReady() bool { + r.m.RLock() + defer r.m.RUnlock() + return r.readyState +} + +func (r *Context) setCtxReady(b bool) { + r.m.Lock() + defer r.m.Unlock() + r.readyState = b + if !b { + r.recoveredTargetConfigsState = false + } +} + +func (r *Context) setRecoveredConfigsState() { + r.m.Lock() + defer r.m.Unlock() + r.recoveredTargetConfigsState = true +} + +func (r *Context) getRecoveredTargetConfigsState() bool { + r.m.RLock() + defer r.m.RUnlock() + return r.recoveredTargetConfigsState +} + +func (r *Context) GetDSClient() dsclient.Client { + return r.dsclient +} + +func (r *Context) GetAddress() string { + if r.dsclient != nil { + return r.dsclient.GetAddress() + } + return "" +} + +func (r *Context) GetSchema() *config.ConfigStatusLastKnownGoodSchema { + req := r.getDatastoreReq() + if req == nil { + return &config.ConfigStatusLastKnownGoodSchema{} + } + return &config.ConfigStatusLastKnownGoodSchema{ + Type: req.Schema.Name, + Vendor: req.Schema.Vendor, + Version: req.Schema.Version, + } +} + +func (r *Context) DeleteDS(ctx context.Context) error { + log := log.FromContext(ctx).With("targetKey", r.targetKey.String()) + r.SetNotReady(ctx) + r.setDatastoreReq(nil) + rsp, err := r.deleteDataStore(ctx, &sdcpb.DeleteDataStoreRequest{Name: r.targetKey.String()}) + if err != nil { + log.Error("cannot delete datstore in dataserver", "error", err) + return err + } + log.Debug("delete datastore succeeded", "resp", prototext.Format(rsp)) + return nil +} + +func (r *Context) CreateDS(ctx context.Context, datastoreReq *sdcpb.CreateDataStoreRequest) error { + log := log.FromContext(ctx).With("targetKey", r.targetKey.String()) + rsp, err := r.createDataStore(ctx, datastoreReq) + if err != nil { + log.Error("cannot create datastore in dataserver", "error", err) + return err + } + r.setDatastoreReq(datastoreReq) + // will also create the deviation watcher and collector + r.SetReady(ctx) + + // The collector is not started when a datastore is created but when a subscription is received. + log.Debug("create datastore succeeded", "resp", prototext.Format(rsp)) + return nil +} + +func (r *Context) ds() (dsclient.Client, error) { + if r == nil || r.dsclient == nil { + return nil, fmt.Errorf("datastore client not initialized") + } + return r.dsclient, nil +} + +func (r *Context) IsReady() bool { + if r == nil { + return false + } + return r.client != nil && r.getDatastoreReq() != nil && r.getReady() +} + +func (r *Context) SetNotReady(ctx context.Context) { + log := log.FromContext(ctx) + log.Info("SetNotReady", "ready", r.getReady(), "recoveredConfigs", r.getRecoveredTargetConfigsState()) + r.setCtxReady(false) + if r.deviationWatcher != nil { + r.deviationWatcher.Stop(ctx) + } + if r.collector != nil { + r.collector.Stop(ctx) + } +} + +func (r *Context) SetReady(ctx context.Context) { + log := log.FromContext(ctx) + log.Info("SetReady", "ready", r.getReady(), "recoveredConfigs", r.getRecoveredTargetConfigsState()) + + if !r.getReady() { + r.setCtxReady(true) + } + + if r.deviationWatcher != nil { + r.deviationWatcher.Start(ctx) + } + + if r.collector == nil || r.collector.IsRunning() { + return + } + + if !r.subscriptions.HasSubscriptions() { + return + } + + req := r.getDatastoreReq() + if req == nil || req.Target == nil { + return + } + + if err := r.collector.Start(ctx, req); err != nil { + log.Error("setready starting collector failed", "err", err) + } +} + +func (r *Context) SetRecoveredConfigsState(ctx context.Context) { + log := log.FromContext(ctx) + r.setRecoveredConfigsState() + + if !r.IsReady() { + log.Error("setting resource version and generation w/o target being ready") + r.SetReady(ctx) + } +} + +func (r *Context) IsTargetConfigRecovered(ctx context.Context) bool { + return r.getRecoveredTargetConfigsState() +} + +func (r *Context) deleteDataStore(ctx context.Context, in *sdcpb.DeleteDataStoreRequest, opts ...grpc.CallOption) (*sdcpb.DeleteDataStoreResponse, error) { + ds, err := r.ds() + if err != nil { + return nil, err + } + return ds.DeleteDataStore(ctx, in, opts...) +} + +func (r *Context) createDataStore(ctx context.Context, in *sdcpb.CreateDataStoreRequest, opts ...grpc.CallOption) (*sdcpb.CreateDataStoreResponse, error) { + ds, err := r.ds() + if err != nil { + return nil, err + } + return ds.CreateDataStore(ctx, in, opts...) +} + +func (r *Context) GetDataStore(ctx context.Context, in *sdcpb.GetDataStoreRequest, opts ...grpc.CallOption) (*sdcpb.GetDataStoreResponse, error) { + ds, err := r.ds() + if err != nil { + return nil, err + } + return ds.GetDataStore(ctx, in, opts...) +} + + +func (r *Context) TransactionSet(ctx context.Context, req *sdcpb.TransactionSetRequest) (string, error) { + rsp, err := r.dsclient.TransactionSet(ctx, req) + msg, err := processTransactionResponse(ctx, rsp, err) + if err != nil { + return msg, err + } + // Assumption: if no error this succeeded, if error this is providing the error code and the info can be + // retrieved from the individual intents + + // For dryRun we don't have to confirm the transaction as the dataserver does not lock things. + if req.DryRun { + return msg, nil + } + + if err := r.TransactionConfirm(ctx, req.DatastoreName, req.TransactionId); err != nil { + return msg, err + } + return msg, nil +} + +func (r *Context) RecoverIntents( + ctx context.Context, + key storebackend.Key, configs []*config.Config, deviations []*config.Deviation) (string, error) { + log := log.FromContext(ctx).With("target", key.String()) + if !r.IsReady() { + return "", fmt.Errorf("target context not ready") + } + + if len(configs) == 0 { + return "", nil + } + + intents := make([]*sdcpb.TransactionIntent, 0, len(configs)+len(deviations)) + // we only include deviations that have + for _, deviation := range deviations { + intent, err := buildDeviationIntent(ctx, log, key, deviation) + if err != nil { + return "", err + } + if intent != nil { + intents = append(intents, intent) + } + } + for _, config := range configs { + update, err := GetIntentUpdate(ctx, key, config, false) + if err != nil { + return "", err + } + intents = append(intents, &sdcpb.TransactionIntent{ + Intent: GetGVKNSN(config), + Priority: int32(config.Spec.Priority), + Update: update, + }) + } + + log.Debug("device intent recovery") + + return r.TransactionSet(ctx, &sdcpb.TransactionSetRequest{ + TransactionId: "recovery", + DatastoreName: key.String(), + DryRun: false, + Timeout: ptr.To(int32(120)), + Intents: intents, + }) +} + +func (r *Context) SetIntents( + ctx context.Context, + targetKey storebackend.Key, + transactionID string, + configsToUpdate, configsToDelete map[string]*config.Config, + deviationsToUpdate, deviationsToDelete map[string]*config.Deviation, + dryRun bool, +) (*sdcpb.TransactionSetResponse, error) { + log := log.FromContext(ctx).With("target", targetKey.String(), "transactionID", transactionID) + log.Info("Transaction", "Ready", r.IsReady()) + if !r.IsReady() { + return nil, fmt.Errorf("target context not ready") + } + + configsToUpdateSet := sets.New[string]() + configsToDeleteSet := sets.New[string]() + deviationsToUpdateSet := sets.New[string]() + deviationsToDeleteSet := sets.New[string]() + + intents := make([]*sdcpb.TransactionIntent, 0) + for key, deviation := range deviationsToUpdate { + deviationsToUpdateSet.Insert(key) + intent, err := buildDeviationIntent(ctx, log, targetKey, deviation) + if err != nil { + log.Error("Transaction getDeviationUpdate deviation", "error", err.Error()) + return nil, err + } + if intent != nil { + intents = append(intents, intent) + } + } + + for key, deviation := range deviationsToDelete { + deviationsToDeleteSet.Insert(key) + // only include items for which deviations exist + intents = append(intents, &sdcpb.TransactionIntent{ + Intent: fmt.Sprintf("deviation:%s", GetGVKNSN(deviation)), + //Priority: int32(config.Spec.Priority), + Delete: true, + DeleteIgnoreNoExist: true, + }) + } + for key, config := range configsToUpdate { + configsToUpdateSet.Insert(key) + update, err := GetIntentUpdate(ctx, targetKey, config, true) + if err != nil { + log.Error("Transaction getIntentUpdate config", "error", err) + return nil, err + } + intents = append(intents, &sdcpb.TransactionIntent{ + Intent: GetGVKNSN(config), + Priority: int32(config.Spec.Priority), + Update: update, + }) + } + for key, config := range configsToDelete { + configsToDeleteSet.Insert(key) + intents = append(intents, &sdcpb.TransactionIntent{ + Intent: GetGVKNSN(config), + //Priority: int32(config.Spec.Priority), + Delete: true, + DeleteIgnoreNoExist: true, + Orphan: config.Orphan(), + }) + } + + log.Info("Transaction", + "configsToUpdate total", len(configsToUpdate), + "configsToUpdate names", configsToUpdateSet.UnsortedList(), + "configsToDelete total", len(configsToDelete), + "configsToDelete names", configsToDeleteSet.UnsortedList(), + "deviationsToUpdate total", len(deviationsToUpdate), + "deviationsToUpdate names", deviationsToUpdateSet.UnsortedList(), + "deviationsToDelete total", len(deviationsToDelete), + "deviationsToDelete names", deviationsToDeleteSet.UnsortedList(), + ) + + rsp, err := r.dsclient.TransactionSet(ctx, &sdcpb.TransactionSetRequest{ + TransactionId: transactionID, + DatastoreName: targetKey.String(), + DryRun: dryRun, + Timeout: ptr.To(int32(60)), + Intents: intents, + }) + if rsp != nil { + log.Info("Transaction rsp", "rsp", prototext.Format(rsp)) + } + return rsp, err +} + +func buildDeviationIntent( + ctx context.Context, + log *slog.Logger, + key storebackend.Key, + deviation *config.Deviation, +) (*sdcpb.TransactionIntent, error) { + updates, deletes, err := getDeviationUpdate(ctx, key, deviation) + if err != nil { + return nil, err + } + + priorityStr := deviation.GetLabels()["priority"] + if priorityStr == "" { + return nil, fmt.Errorf("deviation %s has no priority label", GetGVKNSN(deviation)) + } + + newPriority, err := strconv.Atoi(priorityStr) + if err != nil { + return nil, fmt.Errorf("cannot convert priority to int: %w", err) + } + if newPriority > 0 { + newPriority-- + } + + // Only include items for which deviations exist + if len(updates) == 0 && len(deletes) == 0 { + return nil, nil + } + + return &sdcpb.TransactionIntent{ + Intent: fmt.Sprintf("deviation:%s", GetGVKNSN(deviation)), + Priority: int32(newPriority), + Update: updates, + Deletes: deletes, + }, nil +} + +func (r *Context) Confirm(ctx context.Context, key storebackend.Key, transactionID string) error { + log := log.FromContext(ctx).With("target", key.String(), "transactionID", transactionID) + if !r.IsReady() { + return fmt.Errorf("target context not ready") + } + log.Debug("cancel transaction") + return r.TransactionConfirm(ctx, key.String(), transactionID) +} + +func (r *Context) TransactionConfirm(ctx context.Context, datastoreName, transactionID string) error { + _, err := r.dsclient.TransactionConfirm(ctx, &sdcpb.TransactionConfirmRequest{ + DatastoreName: datastoreName, + TransactionId: transactionID, + }) + return err +} + +func (r *Context) Cancel(ctx context.Context, key storebackend.Key, transactionID string) error { + log := log.FromContext(ctx).With("target", key.String(), "transactionID", transactionID) + if !r.IsReady() { + return fmt.Errorf("target context not ready") + } + log.Debug("cancel transaction") + _, err := r.dsclient.TransactionCancel(ctx, &sdcpb.TransactionCancelRequest{ + TransactionId: transactionID, + DatastoreName: key.String(), + }) + return err +} + +func (r *Context) DeleteSubscription(ctx context.Context, sub *invv1alpha1.Subscription) error { + log := log.FromContext(ctx).With("targetKey", r.targetKey.String()) + if err := r.subscriptions.DelSubscription(sub); err != nil { + return err + } + log.Debug("deleteSubscription", "hasSubscriptions", r.subscriptions.HasSubscriptions(), "paths", r.subscriptions.GetPaths()) + // if we have no longer subscriptions we stop the collector + if r.collector != nil && r.collector.IsRunning() && !r.subscriptions.HasSubscriptions() { + r.collector.Stop(ctx) + return nil + } + if r.collector != nil && r.collector.IsRunning() { + r.updateSubscription() + } + return nil +} + +func (r *Context) updateSubscription() { + // other subscriptions exist, update the subscription + subCh := r.collector.GetUpdateChan() + subCh <- struct{}{} +} + +func (r *Context) UpsertSubscription(ctx context.Context, sub *invv1alpha1.Subscription) error { + // This should change to the target context and discovery + if sub.Spec.Protocol != invv1alpha1.Protocol_GNMI { + return fmt.Errorf("subscriptions only supported using gnmi, got %s", string(sub.Spec.Protocol)) + } + r.collector.SetPort(uint(sub.Spec.Port)) + if err := r.subscriptions.AddSubscription(sub); err != nil { + return err + } + // above should be changed to subscription profile in the target + + if r.collector != nil && !r.collector.IsRunning() { + req := r.getDatastoreReq() + if r.IsReady() && req != nil && req.Target != nil { + // starting a collector also updates the subscriptions + if err := r.collector.Start(ctx, req); err != nil { + return err + } + } + return nil + } + + r.updateSubscription() + return nil +} + +func (r *Context) GetCache() cache.Cache { + return r.collector.cache +} + +func (r *Context) GetPrombLabels() []prompb.Label { + labels := make([]prompb.Label, 0, 4) + labels = append(labels, prompb.Label{Name: "target_name", Value: r.targetKey.String()}) + + if req := r.getDatastoreReq(); req != nil && req.Target != nil { + labels = append(labels, + prompb.Label{Name: "vendor", Value: req.Schema.Vendor}, + prompb.Label{Name: "version", Value: req.Schema.Version}, + prompb.Label{Name: "address", Value: req.Target.Address}, + ) + } + return labels +} From 818f63ed337466163ecdfa36fdfdb74534249efd Mon Sep 17 00:00:00 2001 From: Wim Henderickx Date: Fri, 13 Feb 2026 18:08:22 +0100 Subject: [PATCH 3/3] removed context --- pkg/sdc/target/context.go | 549 -------------------------------------- 1 file changed, 549 deletions(-) delete mode 100644 pkg/sdc/target/context.go diff --git a/pkg/sdc/target/context.go b/pkg/sdc/target/context.go deleted file mode 100644 index 47f7668d..00000000 --- a/pkg/sdc/target/context.go +++ /dev/null @@ -1,549 +0,0 @@ -/* -Copyright 2024 Nokia. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package target - -import ( - "context" - "fmt" - "sync" - "log/slog" - - "strconv" - - "github.com/henderiw/apiserver-store/pkg/storebackend" - "github.com/henderiw/logger/log" - "github.com/openconfig/gnmic/pkg/cache" - "github.com/prometheus/prometheus/prompb" - "github.com/sdcio/config-server/apis/config" - invv1alpha1 "github.com/sdcio/config-server/apis/inv/v1alpha1" - dsclient "github.com/sdcio/config-server/pkg/sdc/dataserver/client" - sdcpb "github.com/sdcio/sdc-protos/sdcpb" - "google.golang.org/grpc" - "google.golang.org/protobuf/encoding/prototext" - "google.golang.org/protobuf/proto" - "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/utils/ptr" - "sigs.k8s.io/controller-runtime/pkg/client" -) - -type Context struct { - targetKey storebackend.Key - client client.Client // k8s client - dsclient dsclient.Client - deviationWatcher *DeviationWatcher - // Subscription parameters - collector *Collector - subscriptions *Subscriptions - - m sync.RWMutex - readyState bool - recoveredTargetConfigsState bool - datastoreReq *sdcpb.CreateDataStoreRequest -} - -func New(targetKey storebackend.Key, client client.Client, dsclient dsclient.Client) *Context { - subscriptions := NewSubscriptions() - return &Context{ - targetKey: targetKey, - client: client, - dsclient: dsclient, - deviationWatcher: NewDeviationWatcher(targetKey, client, dsclient), - collector: NewCollector(targetKey, subscriptions), - subscriptions: subscriptions, - //cache: cache.New([]string{}, cache.WithLogging(logging.NewLogrLogger())), - } -} - -func (r *Context) getDatastoreReq() *sdcpb.CreateDataStoreRequest { - r.m.RLock() - defer r.m.RUnlock() - if r.datastoreReq == nil { - return nil - } - clone := proto.Clone(r.datastoreReq) - return clone.(*sdcpb.CreateDataStoreRequest) -} - -func (r *Context) setDatastoreReq(req *sdcpb.CreateDataStoreRequest) { - r.m.Lock() - defer r.m.Unlock() - r.datastoreReq = req -} - -func (r *Context) getReady() bool { - r.m.RLock() - defer r.m.RUnlock() - return r.readyState -} - -func (r *Context) setCtxReady(b bool) { - r.m.Lock() - defer r.m.Unlock() - r.readyState = b - if !b { - r.recoveredTargetConfigsState = false - } -} - -func (r *Context) setRecoveredConfigsState() { - r.m.Lock() - defer r.m.Unlock() - r.recoveredTargetConfigsState = true -} - -func (r *Context) getRecoveredTargetConfigsState() bool { - r.m.RLock() - defer r.m.RUnlock() - return r.recoveredTargetConfigsState -} - -func (r *Context) GetDSClient() dsclient.Client { - return r.dsclient -} - -func (r *Context) GetAddress() string { - if r.dsclient != nil { - return r.dsclient.GetAddress() - } - return "" -} - -func (r *Context) GetSchema() *config.ConfigStatusLastKnownGoodSchema { - req := r.getDatastoreReq() - if req == nil { - return &config.ConfigStatusLastKnownGoodSchema{} - } - return &config.ConfigStatusLastKnownGoodSchema{ - Type: req.Schema.Name, - Vendor: req.Schema.Vendor, - Version: req.Schema.Version, - } -} - -func (r *Context) DeleteDS(ctx context.Context) error { - log := log.FromContext(ctx).With("targetKey", r.targetKey.String()) - r.SetNotReady(ctx) - r.setDatastoreReq(nil) - rsp, err := r.deleteDataStore(ctx, &sdcpb.DeleteDataStoreRequest{Name: r.targetKey.String()}) - if err != nil { - log.Error("cannot delete datstore in dataserver", "error", err) - return err - } - log.Debug("delete datastore succeeded", "resp", prototext.Format(rsp)) - return nil -} - -func (r *Context) CreateDS(ctx context.Context, datastoreReq *sdcpb.CreateDataStoreRequest) error { - log := log.FromContext(ctx).With("targetKey", r.targetKey.String()) - rsp, err := r.createDataStore(ctx, datastoreReq) - if err != nil { - log.Error("cannot create datastore in dataserver", "error", err) - return err - } - r.setDatastoreReq(datastoreReq) - // will also create the deviation watcher and collector - r.SetReady(ctx) - - // The collector is not started when a datastore is created but when a subscription is received. - log.Debug("create datastore succeeded", "resp", prototext.Format(rsp)) - return nil -} - -func (r *Context) ds() (dsclient.Client, error) { - if r == nil || r.dsclient == nil { - return nil, fmt.Errorf("datastore client not initialized") - } - return r.dsclient, nil -} - -func (r *Context) IsReady() bool { - if r == nil { - return false - } - return r.client != nil && r.getDatastoreReq() != nil && r.getReady() -} - -func (r *Context) SetNotReady(ctx context.Context) { - log := log.FromContext(ctx) - log.Info("SetNotReady", "ready", r.getReady(), "recoveredConfigs", r.getRecoveredTargetConfigsState()) - r.setCtxReady(false) - if r.deviationWatcher != nil { - r.deviationWatcher.Stop(ctx) - } - if r.collector != nil { - r.collector.Stop(ctx) - } -} - -func (r *Context) SetReady(ctx context.Context) { - log := log.FromContext(ctx) - log.Info("SetReady", "ready", r.getReady(), "recoveredConfigs", r.getRecoveredTargetConfigsState()) - - if !r.getReady() { - r.setCtxReady(true) - } - - if r.deviationWatcher != nil { - r.deviationWatcher.Start(ctx) - } - - if r.collector == nil || r.collector.IsRunning() { - return - } - - if !r.subscriptions.HasSubscriptions() { - return - } - - req := r.getDatastoreReq() - if req == nil || req.Target == nil { - return - } - - if err := r.collector.Start(ctx, req); err != nil { - log.Error("setready starting collector failed", "err", err) - } -} - -func (r *Context) SetRecoveredConfigsState(ctx context.Context) { - log := log.FromContext(ctx) - r.setRecoveredConfigsState() - - if !r.IsReady() { - log.Error("setting resource version and generation w/o target being ready") - r.SetReady(ctx) - } -} - -func (r *Context) IsTargetConfigRecovered(ctx context.Context) bool { - return r.getRecoveredTargetConfigsState() -} - -func (r *Context) deleteDataStore(ctx context.Context, in *sdcpb.DeleteDataStoreRequest, opts ...grpc.CallOption) (*sdcpb.DeleteDataStoreResponse, error) { - ds, err := r.ds() - if err != nil { - return nil, err - } - return ds.DeleteDataStore(ctx, in, opts...) -} - -func (r *Context) createDataStore(ctx context.Context, in *sdcpb.CreateDataStoreRequest, opts ...grpc.CallOption) (*sdcpb.CreateDataStoreResponse, error) { - ds, err := r.ds() - if err != nil { - return nil, err - } - return ds.CreateDataStore(ctx, in, opts...) -} - -func (r *Context) GetDataStore(ctx context.Context, in *sdcpb.GetDataStoreRequest, opts ...grpc.CallOption) (*sdcpb.GetDataStoreResponse, error) { - ds, err := r.ds() - if err != nil { - return nil, err - } - return ds.GetDataStore(ctx, in, opts...) -} - - -func (r *Context) TransactionSet(ctx context.Context, req *sdcpb.TransactionSetRequest) (string, error) { - rsp, err := r.dsclient.TransactionSet(ctx, req) - msg, err := processTransactionResponse(ctx, rsp, err) - if err != nil { - return msg, err - } - // Assumption: if no error this succeeded, if error this is providing the error code and the info can be - // retrieved from the individual intents - - // For dryRun we don't have to confirm the transaction as the dataserver does not lock things. - if req.DryRun { - return msg, nil - } - - if err := r.TransactionConfirm(ctx, req.DatastoreName, req.TransactionId); err != nil { - return msg, err - } - return msg, nil -} - -func (r *Context) RecoverIntents( - ctx context.Context, - key storebackend.Key, configs []*config.Config, deviations []*config.Deviation) (string, error) { - log := log.FromContext(ctx).With("target", key.String()) - if !r.IsReady() { - return "", fmt.Errorf("target context not ready") - } - - if len(configs) == 0 { - return "", nil - } - - intents := make([]*sdcpb.TransactionIntent, 0, len(configs)+len(deviations)) - // we only include deviations that have - for _, deviation := range deviations { - intent, err := buildDeviationIntent(ctx, log, key, deviation) - if err != nil { - return "", err - } - if intent != nil { - intents = append(intents, intent) - } - } - for _, config := range configs { - update, err := GetIntentUpdate(ctx, key, config, false) - if err != nil { - return "", err - } - intents = append(intents, &sdcpb.TransactionIntent{ - Intent: GetGVKNSN(config), - Priority: int32(config.Spec.Priority), - Update: update, - }) - } - - log.Debug("device intent recovery") - - return r.TransactionSet(ctx, &sdcpb.TransactionSetRequest{ - TransactionId: "recovery", - DatastoreName: key.String(), - DryRun: false, - Timeout: ptr.To(int32(120)), - Intents: intents, - }) -} - -func (r *Context) SetIntents( - ctx context.Context, - targetKey storebackend.Key, - transactionID string, - configsToUpdate, configsToDelete map[string]*config.Config, - deviationsToUpdate, deviationsToDelete map[string]*config.Deviation, - dryRun bool, -) (*sdcpb.TransactionSetResponse, error) { - log := log.FromContext(ctx).With("target", targetKey.String(), "transactionID", transactionID) - log.Info("Transaction", "Ready", r.IsReady()) - if !r.IsReady() { - return nil, fmt.Errorf("target context not ready") - } - - configsToUpdateSet := sets.New[string]() - configsToDeleteSet := sets.New[string]() - deviationsToUpdateSet := sets.New[string]() - deviationsToDeleteSet := sets.New[string]() - - intents := make([]*sdcpb.TransactionIntent, 0) - for key, deviation := range deviationsToUpdate { - deviationsToUpdateSet.Insert(key) - intent, err := buildDeviationIntent(ctx, log, targetKey, deviation) - if err != nil { - log.Error("Transaction getDeviationUpdate deviation", "error", err.Error()) - return nil, err - } - if intent != nil { - intents = append(intents, intent) - } - } - - for key, deviation := range deviationsToDelete { - deviationsToDeleteSet.Insert(key) - // only include items for which deviations exist - intents = append(intents, &sdcpb.TransactionIntent{ - Intent: fmt.Sprintf("deviation:%s", GetGVKNSN(deviation)), - //Priority: int32(config.Spec.Priority), - Delete: true, - DeleteIgnoreNoExist: true, - }) - } - for key, config := range configsToUpdate { - configsToUpdateSet.Insert(key) - update, err := GetIntentUpdate(ctx, targetKey, config, true) - if err != nil { - log.Error("Transaction getIntentUpdate config", "error", err) - return nil, err - } - intents = append(intents, &sdcpb.TransactionIntent{ - Intent: GetGVKNSN(config), - Priority: int32(config.Spec.Priority), - Update: update, - }) - } - for key, config := range configsToDelete { - configsToDeleteSet.Insert(key) - intents = append(intents, &sdcpb.TransactionIntent{ - Intent: GetGVKNSN(config), - //Priority: int32(config.Spec.Priority), - Delete: true, - DeleteIgnoreNoExist: true, - Orphan: config.Orphan(), - }) - } - - log.Info("Transaction", - "configsToUpdate total", len(configsToUpdate), - "configsToUpdate names", configsToUpdateSet.UnsortedList(), - "configsToDelete total", len(configsToDelete), - "configsToDelete names", configsToDeleteSet.UnsortedList(), - "deviationsToUpdate total", len(deviationsToUpdate), - "deviationsToUpdate names", deviationsToUpdateSet.UnsortedList(), - "deviationsToDelete total", len(deviationsToDelete), - "deviationsToDelete names", deviationsToDeleteSet.UnsortedList(), - ) - - rsp, err := r.dsclient.TransactionSet(ctx, &sdcpb.TransactionSetRequest{ - TransactionId: transactionID, - DatastoreName: targetKey.String(), - DryRun: dryRun, - Timeout: ptr.To(int32(60)), - Intents: intents, - }) - if rsp != nil { - log.Info("Transaction rsp", "rsp", prototext.Format(rsp)) - } - return rsp, err -} - -func buildDeviationIntent( - ctx context.Context, - log *slog.Logger, - key storebackend.Key, - deviation *config.Deviation, -) (*sdcpb.TransactionIntent, error) { - updates, deletes, err := getDeviationUpdate(ctx, key, deviation) - if err != nil { - return nil, err - } - - priorityStr := deviation.GetLabels()["priority"] - if priorityStr == "" { - return nil, fmt.Errorf("deviation %s has no priority label", GetGVKNSN(deviation)) - } - - newPriority, err := strconv.Atoi(priorityStr) - if err != nil { - return nil, fmt.Errorf("cannot convert priority to int: %w", err) - } - if newPriority > 0 { - newPriority-- - } - - // Only include items for which deviations exist - if len(updates) == 0 && len(deletes) == 0 { - return nil, nil - } - - return &sdcpb.TransactionIntent{ - Intent: fmt.Sprintf("deviation:%s", GetGVKNSN(deviation)), - Priority: int32(newPriority), - Update: updates, - Deletes: deletes, - }, nil -} - -func (r *Context) Confirm(ctx context.Context, key storebackend.Key, transactionID string) error { - log := log.FromContext(ctx).With("target", key.String(), "transactionID", transactionID) - if !r.IsReady() { - return fmt.Errorf("target context not ready") - } - log.Debug("cancel transaction") - return r.TransactionConfirm(ctx, key.String(), transactionID) -} - -func (r *Context) TransactionConfirm(ctx context.Context, datastoreName, transactionID string) error { - _, err := r.dsclient.TransactionConfirm(ctx, &sdcpb.TransactionConfirmRequest{ - DatastoreName: datastoreName, - TransactionId: transactionID, - }) - return err -} - -func (r *Context) Cancel(ctx context.Context, key storebackend.Key, transactionID string) error { - log := log.FromContext(ctx).With("target", key.String(), "transactionID", transactionID) - if !r.IsReady() { - return fmt.Errorf("target context not ready") - } - log.Debug("cancel transaction") - _, err := r.dsclient.TransactionCancel(ctx, &sdcpb.TransactionCancelRequest{ - TransactionId: transactionID, - DatastoreName: key.String(), - }) - return err -} - -func (r *Context) DeleteSubscription(ctx context.Context, sub *invv1alpha1.Subscription) error { - log := log.FromContext(ctx).With("targetKey", r.targetKey.String()) - if err := r.subscriptions.DelSubscription(sub); err != nil { - return err - } - log.Debug("deleteSubscription", "hasSubscriptions", r.subscriptions.HasSubscriptions(), "paths", r.subscriptions.GetPaths()) - // if we have no longer subscriptions we stop the collector - if r.collector != nil && r.collector.IsRunning() && !r.subscriptions.HasSubscriptions() { - r.collector.Stop(ctx) - return nil - } - if r.collector != nil && r.collector.IsRunning() { - r.updateSubscription() - } - return nil -} - -func (r *Context) updateSubscription() { - // other subscriptions exist, update the subscription - subCh := r.collector.GetUpdateChan() - subCh <- struct{}{} -} - -func (r *Context) UpsertSubscription(ctx context.Context, sub *invv1alpha1.Subscription) error { - // This should change to the target context and discovery - if sub.Spec.Protocol != invv1alpha1.Protocol_GNMI { - return fmt.Errorf("subscriptions only supported using gnmi, got %s", string(sub.Spec.Protocol)) - } - r.collector.SetPort(uint(sub.Spec.Port)) - if err := r.subscriptions.AddSubscription(sub); err != nil { - return err - } - // above should be changed to subscription profile in the target - - if r.collector != nil && !r.collector.IsRunning() { - req := r.getDatastoreReq() - if r.IsReady() && req != nil && req.Target != nil { - // starting a collector also updates the subscriptions - if err := r.collector.Start(ctx, req); err != nil { - return err - } - } - return nil - } - - r.updateSubscription() - return nil -} - -func (r *Context) GetCache() cache.Cache { - return r.collector.cache -} - -func (r *Context) GetPrombLabels() []prompb.Label { - labels := make([]prompb.Label, 0, 4) - labels = append(labels, prompb.Label{Name: "target_name", Value: r.targetKey.String()}) - - if req := r.getDatastoreReq(); req != nil && req.Target != nil { - labels = append(labels, - prompb.Label{Name: "vendor", Value: req.Schema.Vendor}, - prompb.Label{Name: "version", Value: req.Schema.Version}, - prompb.Label{Name: "address", Value: req.Target.Address}, - ) - } - return labels -}