mirror of
https://github.com/open-cluster-management-io/ocm.git
synced 2026-05-17 06:37:48 +00:00
88 lines
2.6 KiB
Go
88 lines
2.6 KiB
Go
package v1
|
|
|
|
import "k8s.io/apimachinery/pkg/runtime"
|
|
|
|
var _ runtime.NestedObjectDecoder = &MasterConfig{}
|
|
|
|
// DecodeNestedObjects handles encoding RawExtensions on the MasterConfig, ensuring the
|
|
// objects are decoded with the provided decoder.
|
|
func (c *MasterConfig) DecodeNestedObjects(d runtime.Decoder) error {
|
|
// decoding failures result in a runtime.Unknown object being created in Object and passed
|
|
// to conversion
|
|
for k, v := range c.AdmissionConfig.PluginConfig {
|
|
DecodeNestedRawExtensionOrUnknown(d, &v.Configuration)
|
|
c.AdmissionConfig.PluginConfig[k] = v
|
|
}
|
|
if c.OAuthConfig != nil {
|
|
for i := range c.OAuthConfig.IdentityProviders {
|
|
DecodeNestedRawExtensionOrUnknown(d, &c.OAuthConfig.IdentityProviders[i].Provider)
|
|
}
|
|
}
|
|
DecodeNestedRawExtensionOrUnknown(d, &c.AuditConfig.PolicyConfiguration)
|
|
return nil
|
|
}
|
|
|
|
var _ runtime.NestedObjectEncoder = &MasterConfig{}
|
|
|
|
// EncodeNestedObjects handles encoding RawExtensions on the MasterConfig, ensuring the
|
|
// objects are encoded with the provided encoder.
|
|
func (c *MasterConfig) EncodeNestedObjects(e runtime.Encoder) error {
|
|
for k, v := range c.AdmissionConfig.PluginConfig {
|
|
if err := EncodeNestedRawExtension(e, &v.Configuration); err != nil {
|
|
return err
|
|
}
|
|
c.AdmissionConfig.PluginConfig[k] = v
|
|
}
|
|
if c.OAuthConfig != nil {
|
|
for i := range c.OAuthConfig.IdentityProviders {
|
|
if err := EncodeNestedRawExtension(e, &c.OAuthConfig.IdentityProviders[i].Provider); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
if err := EncodeNestedRawExtension(e, &c.AuditConfig.PolicyConfiguration); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// DecodeNestedRawExtensionOrUnknown
|
|
func DecodeNestedRawExtensionOrUnknown(d runtime.Decoder, ext *runtime.RawExtension) {
|
|
if ext.Raw == nil || ext.Object != nil {
|
|
return
|
|
}
|
|
obj, gvk, err := d.Decode(ext.Raw, nil, nil)
|
|
if err != nil {
|
|
unk := &runtime.Unknown{Raw: ext.Raw}
|
|
if runtime.IsNotRegisteredError(err) {
|
|
if _, gvk, err := d.Decode(ext.Raw, nil, unk); err == nil {
|
|
unk.APIVersion = gvk.GroupVersion().String()
|
|
unk.Kind = gvk.Kind
|
|
ext.Object = unk
|
|
return
|
|
}
|
|
}
|
|
// TODO: record mime-type with the object
|
|
if gvk != nil {
|
|
unk.APIVersion = gvk.GroupVersion().String()
|
|
unk.Kind = gvk.Kind
|
|
}
|
|
obj = unk
|
|
}
|
|
ext.Object = obj
|
|
}
|
|
|
|
// EncodeNestedRawExtension will encode the object in the RawExtension (if not nil) or
|
|
// return an error.
|
|
func EncodeNestedRawExtension(e runtime.Encoder, ext *runtime.RawExtension) error {
|
|
if ext.Raw != nil || ext.Object == nil {
|
|
return nil
|
|
}
|
|
data, err := runtime.Encode(e, ext.Object)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
ext.Raw = data
|
|
return nil
|
|
}
|