diff --git a/pkg/configmanager/asset/clusterasset.go b/pkg/configmanager/asset/clusterasset.go index 823c1ecdda242e25f71748efd0646227b3038dad..fe8d00b50f987a25b2526f83f98b0dff5c49af6e 100644 --- a/pkg/configmanager/asset/clusterasset.go +++ b/pkg/configmanager/asset/clusterasset.go @@ -17,37 +17,20 @@ limitations under the License. package asset import ( + "errors" + "nestos-kubernetes-deployer/cmd/command/opts" "nestos-kubernetes-deployer/pkg/configmanager/globalconfig" "os" - "github.com/spf13/cobra" "gopkg.in/yaml.v2" ) -// ========== Structure method ========== - -type ClusterAsset struct { - // cluster info - ClusterID string - KubernetesVersion string - - // bind info - OpenStackAsset - - // subordinate info - Master_Count int - Worker_Count int - Master_Node []NodeAsset - Worker_Node []NodeAsset -} - -func InitClusterAsset(globalAsset *globalconfig.GlobalAsset, cmd *cobra.Command) (*ClusterAsset, error) { +func InitClusterAsset(globalAsset *globalconfig.GlobalConfig, infraAsset InfraAsset, opts *opts.OptionsList) (*ClusterAsset, error) { clusterAsset := &ClusterAsset{} - configFile, _ := cmd.Flags().GetString("cluster-config-file") - if configFile != "" { + if opts.File != "" { // Parse configuration file. - configData, err := os.ReadFile(configFile) + configData, err := os.ReadFile(opts.File) if err != nil { return nil, err } @@ -58,30 +41,39 @@ func InitClusterAsset(globalAsset *globalconfig.GlobalAsset, cmd *cobra.Command) } // cluster info - setStringValue(&clusterAsset.ClusterID, cmd, "clusterid", "default cluster id") - setStringValue(&clusterAsset.KubernetesVersion, cmd, "kubernetes-version", "default k8s version") + setStringValue(&clusterAsset.Cluster_ID, opts.ClusterID, "default cluster id") + setStringValue(&clusterAsset.Kubernetes_Version, opts.KubeVersion, "default k8s version") + + // bind info + // infra platform + switch opts.Platform { + case "openstack", "Openstack", "OpenStack": + openstackAsset, ok := infraAsset.(*OpenStackAsset) + if !ok { + return nil, errors.New("unsupported platform") + } + setStringValue(&clusterAsset.OpenStack_Auth_URL, openstackAsset.Auth_URL, "default openstack auth url") + } // subordinate info // master node - master_count, _ := cmd.Flags().GetInt("master-count") - if master_count != 0 { - clusterAsset.Master_Count = master_count + if opts.MasterCount != 0 { + clusterAsset.Master_Count = opts.MasterCount } else if clusterAsset.Master_Count == 0 { clusterAsset.Master_Count = 3 } - for i := 0; i < master_count; i++ { - master_node := InitNodeAsset(cmd, "master") + for i := 0; i < opts.MasterCount; i++ { + master_node := InitNodeAsset(opts) clusterAsset.Master_Node = append(clusterAsset.Master_Node, master_node) } // worker node - worker_count, _ := cmd.Flags().GetInt("worker-count") - if worker_count != 0 { - clusterAsset.Worker_Count = worker_count + if opts.WorkerCount != 0 { + clusterAsset.Worker_Count = opts.WorkerCount } else if clusterAsset.Worker_Count == 0 { clusterAsset.Worker_Count = 3 } - for i := 0; i < worker_count; i++ { - worker_node := InitNodeAsset(cmd, "worker") + for i := 0; i < opts.WorkerCount; i++ { + worker_node := InitNodeAsset(opts) clusterAsset.Worker_Node = append(clusterAsset.Worker_Node, worker_node) } @@ -90,8 +82,7 @@ func InitClusterAsset(globalAsset *globalconfig.GlobalAsset, cmd *cobra.Command) // Sets a value of the string type, using the parameter value if the command line argument exists, // otherwise using the default value. -func setStringValue(target *string, cmd *cobra.Command, flagName string, defaultValue string) { - value, _ := cmd.Flags().GetString(flagName) +func setStringValue(target *string, value string, defaultValue string) { if value != "" { *target = value } else if *target == "" { @@ -101,14 +92,62 @@ func setStringValue(target *string, cmd *cobra.Command, flagName string, default // Sets a value of type integer, using the parameter value if the command line argument exists, // otherwise using the default value. -func setIntValue(target *int, cmdValue int, defaultValue int) { - if cmdValue != 0 { - *target = cmdValue +func setIntValue(target *int, value int, defaultValue int) { + if value != 0 { + *target = value } else if *target == 0 { *target = defaultValue } } +// ========== Structure method ========== + +type ClusterAsset struct { + Cluster_ID string + + OpenStack_UserName string + OpenStack_Password string + OpenStack_Tenant_Name string + OpenStack_Auth_URL string + OpenStack_Region string + OpenStack_Internal_Network string + OpenStack_External_Network string + OpenStack_Master_IP []string + OpenStack_Glance_Name string + OpenStack_Availability_Zone string + OpenStack_UserData string + OpenStack_Volume string + + Master_Count int + Worker_Count int + Master_Node []NodeAsset + Worker_Node []NodeAsset + + Kubernetes + Housekeeper +} + +type Kubernetes struct { + Kubernetes_Version string + ApiServer_Endpoint string + Insecure_Registry string + Pause_Image string + Release_Image_URL string + + Network +} + +type Network struct { + Service_Subnet string + Pod_Subnet string + CoreDNS_Image_Version string +} + +type Housekeeper struct { + Operator_Image_URL string + Controller_Image_URL string +} + // TODO: Delete deletes the cluster asset. func (ca *ClusterAsset) Delete() error { return nil diff --git a/pkg/configmanager/asset/openstackasset.go b/pkg/configmanager/asset/infraasset.go similarity index 39% rename from pkg/configmanager/asset/openstackasset.go rename to pkg/configmanager/asset/infraasset.go index 2be162f4428d3777cc2d5ca3461ad0330a35b019..1cb493e7df490f03658d1266d66ae0810328025e 100644 --- a/pkg/configmanager/asset/openstackasset.go +++ b/pkg/configmanager/asset/infraasset.go @@ -16,34 +16,50 @@ limitations under the License. package asset -var OpenStackConfig *OpenStackAsset +import ( + "errors" + "nestos-kubernetes-deployer/cmd/command/opts" +) -// ========== Package method ========== - -func GetOpenStackConfig() (*OpenStackAsset, error) { - return OpenStackConfig, nil +type InfraAsset interface { } -// ========== Structure method ========== +func InitInfraAsset(opts *opts.OptionsList) (InfraAsset, error) { + switch opts.Platform { + case "openstack", "Openstack", "OpenStack": + openstackAsset, err := initOpenStackAsset(opts) + if err != nil { + return nil, err + } + return openstackAsset, nil + case "libvirt", "Libvirt": + libvirtAsset, err := initLibvirtAsset(opts) + if err != nil { + return nil, err + } + return libvirtAsset, nil + default: + return nil, errors.New("unsupported platform") + } +} type OpenStackAsset struct { - Auth_Url string + UserName string + Password string + Tenant_Name string + Auth_URL string + Region string } -// TODO: Init inits the openstack asset. -func (opa *OpenStackAsset) Initial() error { - opa.Auth_Url = "http://" - - OpenStackConfig = opa - return nil +func initOpenStackAsset(opts *opts.OptionsList) (*OpenStackAsset, error) { + openstackAsset := &OpenStackAsset{} + return openstackAsset, nil } -// TODO: Delete deletes the openstack asset. -func (opa *OpenStackAsset) Delete() error { - return nil +type LibvirtAsset struct { } -// TODO: Persist persists the openstack asset. -func (opa *OpenStackAsset) Persist() error { - return nil +func initLibvirtAsset(opts *opts.OptionsList) (*LibvirtAsset, error) { + libvirtAsset := &LibvirtAsset{} + return libvirtAsset, nil } diff --git a/pkg/configmanager/asset/nodeasset.go b/pkg/configmanager/asset/nodeasset.go index f4e3207e5f495f50a8e72db705c80887b0587abb..2aafc62e9dc5640263cbc736dd18cea304140a4d 100644 --- a/pkg/configmanager/asset/nodeasset.go +++ b/pkg/configmanager/asset/nodeasset.go @@ -16,11 +16,18 @@ limitations under the License. package asset -import "github.com/spf13/cobra" +import ( + "nestos-kubernetes-deployer/cmd/command/opts" +) type NodeAsset struct { HardwareInfo - OSImage string + + Hostname string + UserName string + Password string + SSHKey string + IP string } type HardwareInfo struct { @@ -30,16 +37,12 @@ type HardwareInfo struct { } // Initializes the node properties. -func InitNodeAsset(cmd *cobra.Command, nodeType string) NodeAsset { +func InitNodeAsset(opts *opts.OptionsList) NodeAsset { node := NodeAsset{} - cpu, _ := cmd.Flags().GetInt(nodeType + "-cpu") - ram, _ := cmd.Flags().GetInt(nodeType + "-ram") - disk, _ := cmd.Flags().GetInt(nodeType + "-disk") - - setIntValue(&node.HardwareInfo.CPU, cpu, 4) - setIntValue(&node.HardwareInfo.RAM, ram, 8) - setIntValue(&node.HardwareInfo.Disk, disk, 50) + setIntValue(&node.HardwareInfo.CPU, opts.NodeConfig.CPU, 4) + setIntValue(&node.HardwareInfo.RAM, opts.NodeConfig.RAM, 8) + setIntValue(&node.HardwareInfo.Disk, opts.NodeConfig.Disk, 50) return node } diff --git a/pkg/configmanager/globalconfig/globalconfig.go b/pkg/configmanager/globalconfig/globalconfig.go index 3680340a7d5717119ad88e2142d776dafa98f4d8..1d7f91126605c3a9c18e5331827d3bb5f5f5e35a 100644 --- a/pkg/configmanager/globalconfig/globalconfig.go +++ b/pkg/configmanager/globalconfig/globalconfig.go @@ -17,21 +17,14 @@ limitations under the License. package globalconfig import ( - "github.com/spf13/cobra" + "nestos-kubernetes-deployer/cmd/command/opts" ) -// ========== Structure method ========== - -type GlobalAsset struct { - Log_Level string -} - -func InitGlobalConfig(cmd *cobra.Command) (*GlobalAsset, error) { - globalAsset := &GlobalAsset{} +func InitGlobalConfig(opts *opts.OptionsList) (*GlobalConfig, error) { + globalAsset := &GlobalConfig{} - log_level, _ := cmd.Flags().GetString("log-level") - if log_level != "" { - globalAsset.Log_Level = log_level + if opts.Log_Level != "" { + globalAsset.Log_Level = opts.Log_Level } else { globalAsset.Log_Level = "default log level" } @@ -39,13 +32,20 @@ func InitGlobalConfig(cmd *cobra.Command) (*GlobalAsset, error) { return globalAsset, nil } +// ========== Structure method ========== + +type GlobalConfig struct { + Log_Level string + ClusterConfig_Path string +} + // TODO: Delete deletes the global asset. -func (ga *GlobalAsset) Delete() error { +func (ga *GlobalConfig) Delete() error { return nil } // TODO: Persist persists the global asset. -func (ga *GlobalAsset) Persist() error { +func (ga *GlobalConfig) Persist() error { // TODO return nil } diff --git a/pkg/configmanager/manager.go b/pkg/configmanager/manager.go index f8c87441a7da1855720a7a8eedeb2306b5685271..89c299f7d7733bc34b990a67bc1e6a3791d74aa6 100644 --- a/pkg/configmanager/manager.go +++ b/pkg/configmanager/manager.go @@ -18,39 +18,47 @@ package configmanager import ( "errors" + "nestos-kubernetes-deployer/cmd/command/opts" "nestos-kubernetes-deployer/pkg/configmanager/asset" "nestos-kubernetes-deployer/pkg/configmanager/globalconfig" - - "github.com/spf13/cobra" ) // Set global data -var GlobalConfig *globalconfig.GlobalAsset -var ClusterConfig = map[string]*asset.ClusterAsset{} +var GlobalConfig *globalconfig.GlobalConfig +var ClusterAsset = map[string]*asset.ClusterAsset{} + +// var InfraAsset = map[string]*asset.InfraAsset{} + +func Initial(opts *opts.OptionsList) error { + // Init global asset + globalConfig, err := globalconfig.InitGlobalConfig(opts) + if err != nil { + return err + } + GlobalConfig = globalConfig -func Initial(cmd *cobra.Command) error { - // Init global - globalConfig, err := globalconfig.InitGlobalConfig(cmd) + // Init infra asset + infraAsset, err := asset.InitInfraAsset(opts) if err != nil { return err } - // Init cluster - clusterAsset, err := asset.InitClusterAsset(globalConfig, cmd) + // Init cluster asset + clusterAsset, err := asset.InitClusterAsset(globalConfig, infraAsset, opts) if err != nil { return err } - ClusterConfig[clusterAsset.ClusterID] = clusterAsset + ClusterAsset[clusterAsset.Cluster_ID] = clusterAsset return nil } -func GetGlobalConfig() (*globalconfig.GlobalAsset, error) { +func GetGlobalConfig() (*globalconfig.GlobalConfig, error) { return GlobalConfig, nil } func GetClusterConfig(clusterID string) (*asset.ClusterAsset, error) { - clusterConfig, ok := ClusterConfig[clusterID] + clusterConfig, ok := ClusterAsset[clusterID] if !ok { return nil, errors.New("ClusterID not found") } @@ -69,7 +77,7 @@ func Persist() error { } // Persist cluster - for _, clusterConfig := range ClusterConfig { + for _, clusterConfig := range ClusterAsset { if err := clusterConfig.Persist(); err != nil { return err }