From 7e02295d23b399b675d8a0aa4ab6aee2abd3f2fd Mon Sep 17 00:00:00 2001 From: lauk001 Date: Thu, 16 Nov 2023 11:31:25 +0800 Subject: [PATCH] Fixed some bugs and provided an interface to get data --- cmd/deploy.go | 50 +++++++++++++++++++------ pkg/utils/{common.go => filehandler.go} | 8 ++-- 2 files changed, 41 insertions(+), 17 deletions(-) rename pkg/utils/{common.go => filehandler.go} (87%) diff --git a/cmd/deploy.go b/cmd/deploy.go index 4199164..2933f48 100755 --- a/cmd/deploy.go +++ b/cmd/deploy.go @@ -18,6 +18,9 @@ package cmd import ( "context" "nestos-kubernetes-deployer/cmd/command" + "nestos-kubernetes-deployer/pkg/kubeclient" + "nestos-kubernetes-deployer/pkg/utils" + "os" "path/filepath" "time" @@ -27,9 +30,13 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" wait "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/kubernetes" - "k8s.io/client-go/tools/clientcmd" ) +type crdTmplData struct { + operatorImageUrl string + controllerImageUrl string +} + func NewDeployCommand() *cobra.Command { cmd := &cobra.Command{ Use: "deploy", @@ -71,24 +78,43 @@ func runDeployCluster() error { } func checkClusterState(kubeconfigPath string) error { - config, err := clientcmd.BuildConfigFromFlags("", kubeconfigPath) + client, err := kubeclient.CreateClient(kubeconfigPath) if err != nil { - logrus.Errorf("error to load kubeconfig: %v", err) + logrus.Errorf("failed to create kubernetes client %v", err) return err } - client, err := kubernetes.NewForConfig(config) - if err != nil { - logrus.Errorf("failed to create a kubernetes client: %v", err) + if err := waitForAPIReady(client); err != nil { + logrus.Errorf("failed while waiting for Kubernetes API to be ready: %v", err) return err } - - if err := waitForAPIReady(client); err != nil { + if err := waitForPodsRunning(client); err != nil { + logrus.Errorf("failed while waiting for pods to be in 'Running' state: %v", err) return err } + return nil +} - if err := waitForPodsRunning(client); err != nil { +func deployOperator(folderPath string, client *kubernetes.Clientset) error { + files, err := os.ReadDir(folderPath) + if err != nil { + logrus.Errorf("Error reading folder: %v", err) return err } + // 实例化crdTmplData + for _, file := range files { + filePath := filepath.Join(folderPath, file.Name()) + data, err := utils.FetchAndUnmarshalUrl(filePath, "" /*获取crdTmplData数据*/) + if err != nil { + logrus.Errorf("Error to get file content: %v", err) + return err + } + if err := kubeclient.ApplyResource(client, "", string(data)); err != nil { + logrus.Errorf("Error to apply crd resource: %v", err) + return err + } + } + + return nil } func waitForAPIReady(client *kubernetes.Clientset) error { @@ -109,7 +135,7 @@ func waitForAPIReady(client *kubernetes.Clientset) error { } }, 2*time.Second, apiContext.Done()) - err = apiContext.Err() + err := apiContext.Err() if err != nil && err != context.Canceled { logrus.Errorf("Failed to waiting for kubernetes API: %v", err) return err @@ -120,8 +146,8 @@ func waitForAPIReady(client *kubernetes.Clientset) error { func waitForPodsRunning(client *kubernetes.Clientset) error { waitDuration := 10 * time.Minute - waitCtx, cancel := context.WithTimeout(context.Background(), waitkDuration) - logrus.Infof("Waiting up to %v for the Kubernetes Pods running ...", waitkDuration) + waitCtx, cancel := context.WithTimeout(context.Background(), waitDuration) + logrus.Infof("Waiting up to %v for the Kubernetes Pods running ...", waitDuration) defer cancel() wait.Until(func() { diff --git a/pkg/utils/common.go b/pkg/utils/filehandler.go similarity index 87% rename from pkg/utils/common.go rename to pkg/utils/filehandler.go index 3c7fec9..823204a 100644 --- a/pkg/utils/common.go +++ b/pkg/utils/filehandler.go @@ -27,7 +27,7 @@ import ( ) // FetchAndUnmarshalURL fetches content from a specified URL, unmarshals it into the provided structure, -func FetchAndUnmarshalUrl(url string, targetStruct interface{}) ([]byte, error) { +func FetchAndUnmarshalUrl(url string, tmplData interface{}) ([]byte, error) { file, err := data.Assets.Open(url) if err != nil { logrus.Errorf("Error opening file %s: %v\n", url, err) @@ -39,16 +39,14 @@ func FetchAndUnmarshalUrl(url string, targetStruct interface{}) ([]byte, error) logrus.Errorf("Error getting file info for %s: %v\n", url, err) return nil, err } - _, data, err := ReadFile(info.Name(), file, targetStruct) + _, data, err := GetCompleteFile(info.Name(), file, tmplData) if err != nil { - return nil, err } return data, nil } -// Read data from the file -func ReadFile(name string, file io.Reader, tmplData interface{}) (realName string, data []byte, err error) { +func GetCompleteFile(name string, file io.Reader, tmplData interface{}) (realName string, data []byte, err error) { data, err = io.ReadAll(file) if err != nil { logrus.Errorf("Error reading file %s: %v\n", name, err) -- Gitee