From 69d80b78438991f11c42e3534ff5dea007f986df Mon Sep 17 00:00:00 2001 From: Amitk3293 Date: Tue, 16 Aug 2022 11:45:48 +0200 Subject: [PATCH 1/3] Feat - assets package created to be able to create any object from YAML File --- assets/assets.go | 36 ++++++++++++++++++++++++++ assets/manifests/namespace_deploy.yaml | 6 +++++ 2 files changed, 42 insertions(+) create mode 100644 assets/assets.go create mode 100644 assets/manifests/namespace_deploy.yaml diff --git a/assets/assets.go b/assets/assets.go new file mode 100644 index 0000000..9a0f700 --- /dev/null +++ b/assets/assets.go @@ -0,0 +1,36 @@ +package assets + +import ( + "embed" + + appsv1 "k8s.io/api/apps/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/serializer" +) + +var ( + //go:embed manifests/* + manifests embed.FS + appsScheme = runtime.NewScheme() + appsCodecs = serializer.NewCodecFactory(appsScheme) +) + +func init() { + if err := appsv1.AddToScheme(appsScheme); err != nil { + panic(err) + } +} +func GetDeploymentFromFile(name string) *appsv1.Deployment { + deploymentBytes, err := manifests.ReadFile(name) + if err != nil { + panic(err) + } + deploymentObject, err := runtime.Decode( + appsCodecs.UniversalDecoder(appsv1.SchemeGroupVersion), + deploymentBytes, + ) + if err != nil { + panic(err) + } + return deploymentObject.(*appsv1.Deployment) +} diff --git a/assets/manifests/namespace_deploy.yaml b/assets/manifests/namespace_deploy.yaml new file mode 100644 index 0000000..4095c44 --- /dev/null +++ b/assets/manifests/namespace_deploy.yaml @@ -0,0 +1,6 @@ +kind: Namespace +apiVersion: v1 +metadata: + name: test + labels: + name: test \ No newline at end of file From 06a4f47329d038185b8872e95625ca834f77c392 Mon Sep 17 00:00:00 2001 From: Amitk3293 Date: Tue, 16 Aug 2022 11:55:32 +0200 Subject: [PATCH 2/3] add comments to explain --- assets/assets.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/assets/assets.go b/assets/assets.go index 9a0f700..ad7d16e 100644 --- a/assets/assets.go +++ b/assets/assets.go @@ -1,3 +1,9 @@ +// FOR FUTURE USE I CREATED assets PACKAGE TO BE ABLE TO CREATE / DEPLOY ANY OBJECT FROM YAML FILE. +// CAN BE DONE BY: +// import "https://github.com/tikalk/resource-manager/assets" +// ... +// namespaceDeployment := assets.GetDeploymentFromFile("manifests/namespace_deploy.yaml") + package assets import ( From 3e765f5431dde3587c222c904107964fd7723789 Mon Sep 17 00:00:00 2001 From: Amitk3293 Date: Tue, 16 Aug 2022 12:04:07 +0200 Subject: [PATCH 3/3] add comments to explain --- assets/assets.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/assets/assets.go b/assets/assets.go index ad7d16e..047b399 100644 --- a/assets/assets.go +++ b/assets/assets.go @@ -6,6 +6,7 @@ package assets +// Imports the relevant k8s API packages that define the schema for Deployment API objects import ( "embed" @@ -14,6 +15,8 @@ import ( "k8s.io/apimachinery/pkg/runtime/serializer" ) +// It initializes a Scheme and a set of codecs that can be used by the API's UniversalDecoder +// in order to know how to convert the []byte data representation of the file to a Go struct var ( //go:embed manifests/* manifests embed.FS @@ -26,11 +29,17 @@ func init() { panic(err) } } + +// It uses the "namespaceDeployment :=" variable we can declare +// to read the Deployment file under assets/namespace_deploy.yaml func GetDeploymentFromFile(name string) *appsv1.Deployment { deploymentBytes, err := manifests.ReadFile(name) if err != nil { panic(err) } + + // It decodes the []byte data returned from deployment.ReadFile() + // into an object that can be cast to the Go type for Deployments deploymentObject, err := runtime.Decode( appsCodecs.UniversalDecoder(appsv1.SchemeGroupVersion), deploymentBytes,