From 92ad98827c2a84e8e73f59c67946fd26508e98e4 Mon Sep 17 00:00:00 2001 From: lauk001 Date: Tue, 5 Dec 2023 15:25:25 +0800 Subject: [PATCH] Optimize the process of invoking the certificate generation --- cmd/deploy.go | 43 ++++++++++++++----- pkg/configmanager/asset/nodeasset.go | 3 ++ pkg/ignition/machine/master.go | 64 ++++++++++++++-------------- 3 files changed, 67 insertions(+), 43 deletions(-) diff --git a/cmd/deploy.go b/cmd/deploy.go index d2666b5..3f02774 100755 --- a/cmd/deploy.go +++ b/cmd/deploy.go @@ -108,13 +108,12 @@ func deployCluster(conf *asset.ClusterAsset) error { } func getClusterDeployConfig(conf *asset.ClusterAsset) error { - certs, err := generateCerts(conf.Cluster_ID) - if err != nil { + if err := generateCerts(conf); err != nil { logrus.Errorf("Error generating certificate files: %v", err) return err } - if err := generateIgnition(conf, certs); err != nil { + if err := generateIgnition(conf); err != nil { logrus.Errorf("Error generating ignition files: %v", err) return err } @@ -127,18 +126,42 @@ func getClusterDeployConfig(conf *asset.ClusterAsset) error { return nil } -func generateCerts(clusterID string) ([]utils.StorageContent, error) { - certs, err := cert.GenerateAllFiles(clusterID) +func generateCerts(conf *asset.ClusterAsset) error { + // Generate CA certificates + caCerts, err := cert.GenerateCAFiles(conf.Cluster_ID) + if err != nil { + logrus.Errorf("Error generating CA files: %v", err) + return err + } + + sameCerts, err := cert.GenerateCertFilesAllSame(conf.Cluster_ID) if err != nil { - return nil, err + return err + } + + // Generate certificates for each Master node + for i, master := range conf.Master { + var masterCerts []utils.StorageContent + + certs, err := cert.GenerateCertFilesForNode(&master) + if err != nil { + logrus.Errorf("Error generating certificate files for Master %d: %v", i, err) + return err + } + masterCerts = append(masterCerts, caCerts...) + masterCerts = append(masterCerts, sameCerts...) + masterCerts = append(masterCerts, certs...) + + // Assign the certificates to the corresponding Master node + master.Certs = masterCerts } - return certs, nil + + return nil } -func generateIgnition(conf *asset.ClusterAsset, certFiles []utils.StorageContent) error { +func generateIgnition(conf *asset.ClusterAsset) error { master := &machine.Master{ - ClusterAsset: conf, - StorageContent: certFiles, + ClusterAsset: conf, } if err := master.GenerateFiles(); err != nil { logrus.Errorf("Failed to generate master ignition file: %v", err) diff --git a/pkg/configmanager/asset/nodeasset.go b/pkg/configmanager/asset/nodeasset.go index 8d2a4bc..a4f78af 100644 --- a/pkg/configmanager/asset/nodeasset.go +++ b/pkg/configmanager/asset/nodeasset.go @@ -16,6 +16,8 @@ limitations under the License. package asset +import "nestos-kubernetes-deployer/pkg/utils" + type NodeAsset struct { Hostname string HardwareInfo @@ -24,6 +26,7 @@ type NodeAsset struct { SSHKey string IP string Ign_Data []byte + Certs []utils.StorageContent } type HardwareInfo struct { diff --git a/pkg/ignition/machine/master.go b/pkg/ignition/machine/master.go index 9f2212f..b92c842 100644 --- a/pkg/ignition/machine/master.go +++ b/pkg/ignition/machine/master.go @@ -18,57 +18,55 @@ package machine import ( "nestos-kubernetes-deployer/pkg/configmanager/asset" "nestos-kubernetes-deployer/pkg/ignition" - "nestos-kubernetes-deployer/pkg/utils" igntypes "github.com/coreos/ignition/v2/config/v3_2/types" "github.com/sirupsen/logrus" ) type Master struct { - ClusterAsset *asset.ClusterAsset - StorageContent []utils.StorageContent + ClusterAsset *asset.ClusterAsset } func (m *Master) GenerateFiles() error { + //Get template dependency configuration mtd := ignition.GetTmplData(m.ClusterAsset) - generateFile := ignition.Common{ - UserName: m.ClusterAsset.Master[0].UserName, - SSHKey: m.ClusterAsset.Master[0].SSHKey, - PassWord: m.ClusterAsset.Master[0].Password, - NodeType: "controlplane", - TmplData: mtd, - EnabledServices: ignition.EnabledServices, - Config: &igntypes.Config{}, - } - if err := generateFile.Generate(); err != nil { - logrus.Errorf("failed to generate %s ignition file: %v", m.ClusterAsset.Master[0].UserName, err) - return err - } - for _, file := range m.StorageContent { - ignFile := ignition.FileWithContents(file.Path, file.Mode, file.Content) - generateFile.Config.Storage.Files = ignition.AppendFiles(generateFile.Config.Storage.Files, ignFile) - } - data, err := ignition.Marshal(generateFile.Config) - if err != nil { - logrus.Errorf("failed to Marshal ignition config: %v", err) - return err - } - m.ClusterAsset.Master[0].Ign_Data = data - for i := 1; i < len(m.ClusterAsset.Master); i++ { - generateFile.UserName = m.ClusterAsset.Master[i].UserName - generateFile.SSHKey = m.ClusterAsset.Master[i].SSHKey - generateFile.PassWord = m.ClusterAsset.Master[i].Password - generateFile.NodeType = "master" + + for i, master := range m.ClusterAsset.Master { + nodeType := "controlplane" + if i > 0 { + nodeType = "master" + } + + generateFile := ignition.Common{ + UserName: master.UserName, + SSHKey: master.SSHKey, + PassWord: master.Password, + NodeType: nodeType, + TmplData: mtd, + EnabledServices: ignition.EnabledServices, + Config: &igntypes.Config{}, + } + // Merge certificates into ignition.Config + for _, file := range master.Certs { + ignFile := ignition.FileWithContents(file.Path, file.Mode, file.Content) + generateFile.Config.Storage.Files = ignition.AppendFiles(generateFile.Config.Storage.Files, ignFile) + } + + // Generate Ignition data if err := generateFile.Generate(); err != nil { - logrus.Errorf("failed to generate %s ignition file: %v", m.ClusterAsset.Master[i].UserName, err) + logrus.Errorf("failed to generate %s ignition file: %v", master.UserName, err) return err } + + // Marshal the ignition.Config data, err := ignition.Marshal(generateFile.Config) if err != nil { logrus.Errorf("failed to Marshal ignition config: %v", err) return err } - m.ClusterAsset.Master[i].Ign_Data = data + + //Assign the Ignition data to the Master node + master.Ign_Data = data } return nil -- Gitee