Files
gardener-extension-shoot-fl…/pkg/apis/config/loader/loader.go
2021-01-28 17:37:47 +01:00

59 lines
1.5 KiB
Go

package loader
import (
"io/ioutil"
"github.com/javamachr/gardener-extension-shoot-fleet-agent/pkg/apis/config"
"github.com/javamachr/gardener-extension-shoot-fleet-agent/pkg/apis/config/install"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/runtime/serializer/json"
"k8s.io/apimachinery/pkg/runtime/serializer/versioning"
)
var (
Codec runtime.Codec
Scheme *runtime.Scheme
)
func init() {
Scheme = runtime.NewScheme()
install.Install(Scheme)
yamlSerializer := json.NewYAMLSerializer(json.DefaultMetaFactory, Scheme, Scheme)
Codec = versioning.NewDefaultingCodecForScheme(
Scheme,
yamlSerializer,
yamlSerializer,
schema.GroupVersion{Version: "v1alpha1"},
runtime.InternalGroupVersioner,
)
}
// LoadFromFile takes a filename and de-serializes the contents into FleetAgentConfig object.
func LoadFromFile(filename string) (*config.FleetAgentConfig, error) {
bytes, err := ioutil.ReadFile(filename)
if err != nil {
return nil, err
}
return Load(bytes)
}
// Load takes a byte slice and de-serializes the contents into FleetAgentConfig object.
// Encapsulates de-serialization without assuming the source is a file.
func Load(data []byte) (*config.FleetAgentConfig, error) {
cfg := &config.FleetAgentConfig{}
if len(data) == 0 {
return cfg, nil
}
decoded, _, err := Codec.Decode(data, &schema.GroupVersionKind{Version: "v1alpha1", Kind: "Config"}, cfg)
if err != nil {
return nil, err
}
return decoded.(*config.FleetAgentConfig), nil
}