From cd150a724a2984b291bcd26f6317c70436f7f1dc Mon Sep 17 00:00:00 2001 From: easter1007 Date: Thu, 31 Aug 2023 16:53:20 +0800 Subject: [PATCH] adjust worker config && add config flag --- app/apis/nkd/types.go | 4 ++ app/cmd/init.go | 59 +++++++++++---------- app/cmd/phases/config/print.go | 2 - app/cmd/phases/init/cert.go | 13 +++-- app/cmd/phases/init/data.go | 3 +- app/cmd/phases/init/tf.go | 41 +++++++++++++++ app/cmd/phases/workflow/phase.go | 2 +- app/cmd/phases/workflow/runner.go | 17 ++++--- app/util/config/initconfiguration.go | 76 +++++++++++++++++++++++----- 9 files changed, 161 insertions(+), 56 deletions(-) create mode 100644 app/cmd/phases/init/tf.go diff --git a/app/apis/nkd/types.go b/app/apis/nkd/types.go index d169e77..bc8b9a1 100644 --- a/app/apis/nkd/types.go +++ b/app/apis/nkd/types.go @@ -392,3 +392,7 @@ type Worker struct { Addon Addon Worker WorkerK8s } + +type Node struct { + Node string +} diff --git a/app/cmd/init.go b/app/cmd/init.go index d67595c..1dbfb7f 100755 --- a/app/cmd/init.go +++ b/app/cmd/init.go @@ -17,8 +17,6 @@ limitations under the License. package cmd import ( - "fmt" - "nestos-kubernetes-deployer/app/apis/nkd" phases "nestos-kubernetes-deployer/app/cmd/phases/init" "nestos-kubernetes-deployer/app/cmd/phases/workflow" @@ -28,7 +26,10 @@ import ( ) type initData struct { - cfg *nkd.Master + mastercfg *nkd.Master + workercfg *nkd.Worker + // cfg *nkd.Master + // cfg *interface{} } type Config struct { @@ -42,43 +43,49 @@ func NewInitDefaultNkdConfigCommand() *cobra.Command { Use: "init", Short: "Use this command to init ign, cert config", RunE: func(cmd *cobra.Command, args []string) error { - c, err := initRunner.InitData(args) + initRunner.SetDataInitializer(func(cmd *cobra.Command, args []string) (workflow.RunData, string, error) { + data, nodetype, err := newInitData(cmd, args, config) + if err != nil { + return nil, "", err + } + return data, nodetype, nil + }) + _, _, err := initRunner.InitData(args) if err != nil { return err } - - data := c.(*initData) - fmt.Println(data.cfg) return initRunner.Run() }, } - - // fmt.Println(config) - cmd.PersistentFlags().StringVarP(&config, "config", "c", "", "config for init") phases.NewGenerateCertsCmd() initRunner.AppendPhase(phases.NewGenerateCertsCmd()) initRunner.AppendPhase(phases.NewGenerateIgnCmd()) - initRunner.SetDataInitializer(func(cmd *cobra.Command, args []string) (workflow.RunData, error) { - data, err := newInitData(cmd, args) - if err != nil { - return nil, err - } - return data, nil - }) + initRunner.AppendPhase(phases.NewGenerateTFCmd()) + cmd.PersistentFlags().StringVarP(&config, "config", "c", "", "config for init") return cmd } -func (i *initData) Cfg() *nkd.Master { - return i.cfg +func (i *initData) MasterCfg() *nkd.Master { + return i.mastercfg } -func newInitData(cmd *cobra.Command, args []string) (*initData, error) { - var newNkd *nkd.Master - cfg, err := config.LoadOrDefaultInitConfiguration("path", newNkd) +func (i *initData) WorkerCfg() *nkd.Worker { + return i.workercfg +} +func newInitData(cmd *cobra.Command, args []string, cfgPath string) (*initData, string, error) { + // var newNkd *nkd.Master + cfg, nodetype, err := config.LoadOrDefaultInitConfiguration(cfgPath) if err != nil { - return nil, err + return nil, "", err + } + _, ok := cfg.(*nkd.Master) + if ok == true { + return &initData{ + mastercfg: cfg.(*nkd.Master), + }, nodetype, nil + } else { + return &initData{ + workercfg: cfg.(*nkd.Worker), + }, nodetype, nil } - return &initData{ - cfg: cfg, - }, nil } diff --git a/app/cmd/phases/config/print.go b/app/cmd/phases/config/print.go index 4e412b1..1db6b81 100644 --- a/app/cmd/phases/config/print.go +++ b/app/cmd/phases/config/print.go @@ -52,9 +52,7 @@ func newCommandPrintDefaultNodeConfig(node string) *cobra.Command { Use: fmt.Sprintf("%s", node), Short: fmt.Sprintf("use this command to init %s default config", node), RunE: func(cmd *cobra.Command, args []string) error { - fmt.Println("111") return runPrintDefaultConfig(node) - // return nil }, } return cmd diff --git a/app/cmd/phases/init/cert.go b/app/cmd/phases/init/cert.go index cb86705..177bb67 100644 --- a/app/cmd/phases/init/cert.go +++ b/app/cmd/phases/init/cert.go @@ -17,7 +17,6 @@ package phases import ( "fmt" - "nestos-kubernetes-deployer/app/cmd/phases/workflow" ) @@ -29,8 +28,14 @@ func NewGenerateCertsCmd() workflow.Phase { } } -func runGenerateCertsConfig(r workflow.RunData) error { - data := r.(InitData) - fmt.Println(data.Cfg()) +func runGenerateCertsConfig(r workflow.RunData, node string) error { + if node == "worker" { + fmt.Println(r.(InitData).WorkerCfg()) + } else { + fmt.Println(node) + fmt.Println(r.(InitData).MasterCfg()) + } + // data := r.(InitData) + // fmt.Println(data) return nil } diff --git a/app/cmd/phases/init/data.go b/app/cmd/phases/init/data.go index d6b9a89..6409fdf 100644 --- a/app/cmd/phases/init/data.go +++ b/app/cmd/phases/init/data.go @@ -19,5 +19,6 @@ package phases import "nestos-kubernetes-deployer/app/apis/nkd" type InitData interface { - Cfg() *nkd.Master + MasterCfg() *nkd.Master + WorkerCfg() *nkd.Worker } diff --git a/app/cmd/phases/init/tf.go b/app/cmd/phases/init/tf.go new file mode 100644 index 0000000..42adeb1 --- /dev/null +++ b/app/cmd/phases/init/tf.go @@ -0,0 +1,41 @@ +/* +Copyright 2023 KylinSoft Co., Ltd. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package phases + +import ( + "fmt" + "nestos-kubernetes-deployer/app/cmd/phases/workflow" +) + +func NewGenerateTFCmd() workflow.Phase { + return workflow.Phase{ + Name: "cert", + Short: "Run certs to generate certs", + Run: runGenerateCertsConfig, + } +} + +func runGenerateTFConfig(r workflow.RunData, node string) error { + if node == "worker" { + fmt.Println(r.(InitData).WorkerCfg()) + } else { + fmt.Println(node) + fmt.Println(r.(InitData).MasterCfg()) + } + // data := r.(InitData) + // fmt.Println(data) + return nil +} diff --git a/app/cmd/phases/workflow/phase.go b/app/cmd/phases/workflow/phase.go index 6385461..a3174fb 100644 --- a/app/cmd/phases/workflow/phase.go +++ b/app/cmd/phases/workflow/phase.go @@ -19,5 +19,5 @@ type Phase struct { Name string Short string Phases []Phase - Run func(data RunData) error + Run func(data RunData, node string) error } diff --git a/app/cmd/phases/workflow/runner.go b/app/cmd/phases/workflow/runner.go index 92bb914..e444924 100644 --- a/app/cmd/phases/workflow/runner.go +++ b/app/cmd/phases/workflow/runner.go @@ -22,10 +22,11 @@ import ( ) type Runner struct { + node string Phases []Phase phaseRunners []*phaseRunner runData RunData - runDataInitializer func(*cobra.Command, []string) (RunData, error) + runDataInitializer func(*cobra.Command, []string) (RunData, string, error) runCmd *cobra.Command } @@ -46,18 +47,18 @@ func NewRunner() *Runner { } } -func (r *Runner) InitData(args []string) (RunData, error) { +func (r *Runner) InitData(args []string) (RunData, string, error) { if r.runData == nil && r.runDataInitializer != nil { var err error - if r.runData, err = r.runDataInitializer(r.runCmd, args); err != nil { - return nil, err + if r.runData, r.node, err = r.runDataInitializer(r.runCmd, args); err != nil { + return nil, "", err } - return r.runData, nil + return r.runData, r.node, nil } - return nil, nil + return nil, "", nil } -func (r *Runner) SetDataInitializer(builder func(*cobra.Command, []string) (RunData, error)) { +func (r *Runner) SetDataInitializer(builder func(*cobra.Command, []string) (RunData, string, error)) { r.runDataInitializer = builder } @@ -67,7 +68,7 @@ func (r *Runner) Run() error { err := r.VisitAll(func(p *phaseRunner) error { if p.Run != nil { - if err := p.Run(data); err != nil { + if err := p.Run(data, r.node); err != nil { return err } } diff --git a/app/util/config/initconfiguration.go b/app/util/config/initconfiguration.go index 9b9d9b9..464b22e 100644 --- a/app/util/config/initconfiguration.go +++ b/app/util/config/initconfiguration.go @@ -25,34 +25,82 @@ import ( "gopkg.in/yaml.v2" ) -func LoadOrDefaultInitConfiguration(cfgPath string, cfg *nkd.Master) (*nkd.Master, error) { +// func LoadOrDefaultInitConfiguration(cfgPath string, cfg *nkd.Master) (*nkd.Master, error) { +func LoadOrDefaultInitConfiguration(cfgPath string) (interface{}, string, error) { if cfgPath != "" { - cfg, err := LoadInitConfigurationFromFile() + cfg, nodetype, err := LoadInitConfigurationFromFile(cfgPath) if err != nil { - return nil, err + return nil, "", err } - return cfg, nil + fmt.Println(cfg) + + return cfg, nodetype, nil } cfg, err := DefaultinitConfiguration() if err != nil { - return nil, err + return nil, "", err + } + return cfg, "", nil + +} + +func LoadInitConfigurationFromFile(cfg string) (interface{}, string, error) { + // conf := new(nkd.Node) + // yamlFile, err := ioutil.ReadFile(cfg) + // if err != nil { + // return nil, err + // } + // err = yaml.Unmarshal(yamlFile, conf) + // fmt.Println(conf) + // if err != nil { + // fmt.Println("marshal error") + // } + // // return conf, nil + // return nil, nil + node := new(nkd.Node) + yamlFile, err := ioutil.ReadFile(cfg) + + if err != nil { + return nil, "", err + } + + err = yaml.Unmarshal(yamlFile, node) + if err != nil { + return nil, "", err + } + + nodetype := node.Node + + if nodetype == "master" { + master := new(nkd.Master) + masterinfo, err := Unmarshal(master, yamlFile) + if err != nil { + return nil, "", err + } + return masterinfo, nodetype, nil + + } else if nodetype == "worker" { + worker := new(nkd.Worker) + workerinfo, err := Unmarshal(worker, yamlFile) + if err != nil { + return nil, "", err + } + return workerinfo, nodetype, nil + + } else { + return nil, "", err } - return cfg, nil } -func LoadInitConfigurationFromFile() (*nkd.Master, error) { - conf := new(nkd.Master) - yamlFile, err := ioutil.ReadFile("test.yaml") - fmt.Println(err) +func Unmarshal(nodeinfo interface{}, cfg []byte) (interface{}, error) { + err := yaml.Unmarshal(cfg, nodeinfo) if err != nil { return nil, err } - err = yaml.Unmarshal(yamlFile, conf) - fmt.Println(conf.Infra.Platform) - return conf, nil + return nodeinfo, nil } -func DefaultinitConfiguration() (*nkd.Master, error) { +func DefaultinitConfiguration() (*interface{}, error) { return nil, nil } -- Gitee