diff --git a/cmd/app/config/config.go b/cmd/app/config/config.go index e6687c02..45ecddd9 100644 --- a/cmd/app/config/config.go +++ b/cmd/app/config/config.go @@ -30,6 +30,7 @@ var ErrInvalidLogFormat = errors.New("invalid log format") type Config struct { Default DefaultOptions `yaml:"default"` Mysql MysqlOptions `yaml:"mysql"` + Worker WorkerOptions `yaml:"worker"` } type DefaultOptions struct { @@ -40,8 +41,6 @@ type DefaultOptions struct { // 自动创建指定模型的数据库表结构,不会更新已存在的数据库表 AutoMigrate bool `yaml:"auto_migrate"` - WorkDir string `yaml:"work_dir"` - LogOptions `yaml:",inline"` } @@ -79,6 +78,21 @@ func (o LogOptions) Valid() error { } } +type WorkerOptions struct { + WorkDir string `yaml:"work_dir"` + Engines []Engine `yaml:"engines"` +} + +type Engine struct { + Version string `yaml:"version"` + Image string `yaml:"image"` +} + +func (w WorkerOptions) Valid() error { + // TODO + return nil +} + func (c *Config) Valid() (err error) { if err = c.Default.Valid(); err != nil { return @@ -86,5 +100,9 @@ func (c *Config) Valid() (err error) { if err = c.Mysql.Valid(); err != nil { return } + if err = c.Worker.Valid(); err != nil { + return + } + return } diff --git a/cmd/app/options/options.go b/cmd/app/options/options.go index b774c19e..222d8409 100644 --- a/cmd/app/options/options.go +++ b/cmd/app/options/options.go @@ -29,7 +29,6 @@ import ( "github.com/caoyingjunz/pixiu/cmd/app/config" "github.com/caoyingjunz/pixiu/pkg/controller" - "github.com/caoyingjunz/pixiu/pkg/controller/plan" "github.com/caoyingjunz/pixiu/pkg/db" pixiuConfig "github.com/caoyingjunz/pixiulib/config" ) @@ -98,8 +97,8 @@ func (o *Options) Complete() error { if o.ComponentConfig.Default.LogFormat == "" { o.ComponentConfig.Default.LogFormat = defaultLogFormat } - if o.ComponentConfig.Default.WorkDir == "" { - o.ComponentConfig.Default.WorkDir = defaultWorkDir + if o.ComponentConfig.Worker.WorkDir == "" { + o.ComponentConfig.Worker.WorkDir = defaultWorkDir } if err := o.ComponentConfig.Valid(); err != nil { @@ -126,22 +125,10 @@ func (o *Options) register() error { return err } - // 注册 worker 的工作目录 - if err := o.registerWorkDir(); err != nil { - return err - } - // TODO: 注册其他依赖 return nil } -func (o *Options) registerWorkDir() error { - if err := plan.Register(o.ComponentConfig.Default.WorkDir); err != nil { - return err - } - return nil -} - func (o *Options) registerDatabase() error { sqlConfig := o.ComponentConfig.Mysql dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local", diff --git a/config.yaml b/config.yaml index 17b8e1b4..b1252766 100644 --- a/config.yaml +++ b/config.yaml @@ -17,3 +17,12 @@ mysql: password: Pixiu868686 port: 3306 name: pixiu + +worker: + engines: + - version: v2 + image: harbor.cloud.pixiuio.com/pixiuio/kubez-ansible:v2.0.1 + - version: v3 + image: harbor.cloud.pixiuio.com/pixiuio/kubez-ansible:v3.0.1 + - version: offline + image: harbor.cloud.pixiuio.com/pixiuio/kubez-ansible:v2.0.1-offline diff --git a/pkg/controller/plan/bootstrap_servers.go b/pkg/controller/plan/bootstrap_servers.go index 1d2a53d3..1d533521 100644 --- a/pkg/controller/plan/bootstrap_servers.go +++ b/pkg/controller/plan/bootstrap_servers.go @@ -41,7 +41,7 @@ func (b BootStrap) Run() error { defer cancel() // 启动执行容器 - if err = cli.StartAndWaitForContainer(ctx); err != nil { + if err = cli.StartAndWaitForContainer(ctx, "harbor.cloud.pixiuio.com/pixiuio/kubez-ansible:v3.0.1"); err != nil { return err } diff --git a/pkg/controller/plan/deploy.go b/pkg/controller/plan/deploy.go index 0de52f17..84746284 100644 --- a/pkg/controller/plan/deploy.go +++ b/pkg/controller/plan/deploy.go @@ -42,7 +42,7 @@ func (b Deploy) Run() error { defer cancel() // 启动执行容器 - if err = cli.StartAndWaitForContainer(ctx); err != nil { + if err = cli.StartAndWaitForContainer(ctx, "harbor.cloud.pixiuio.com/pixiuio/kubez-ansible:v3.0.1"); err != nil { return err } diff --git a/pkg/controller/plan/worker.go b/pkg/controller/plan/worker.go index 82c02426..13dd0ac9 100644 --- a/pkg/controller/plan/worker.go +++ b/pkg/controller/plan/worker.go @@ -18,6 +18,7 @@ package plan import ( "context" + "fmt" "time" "k8s.io/apimachinery/pkg/util/wait" @@ -161,6 +162,20 @@ func (p *plan) createPlanTasksIfNotExist(tasks ...Handler) error { return nil } +func (p *plan) WorkDir() string { + return p.cc.Worker.WorkDir +} + +func (p *plan) getImageForWorker(v string) (string, error) { + engines := p.cc.Worker.Engines + for _, engine := range engines { + if engine.Version == v { + return engine.Image, nil + } + } + return "", fmt.Errorf("version(%s) worker image not found", v) +} + // 同步任务状态 // 任务启动时设置为运行中,结束时同步为结束状态(成功或者失败) // TODO: 后续优化 diff --git a/pkg/util/container/container.go b/pkg/util/container/container.go index a253ce62..d286111b 100644 --- a/pkg/util/container/container.go +++ b/pkg/util/container/container.go @@ -47,7 +47,7 @@ func NewContainer(action string, planId int64) (*Container, error) { } // StartAndWaitForContainer 创建,启动容器,并等待容器退出 -func (c *Container) StartAndWaitForContainer(ctx context.Context) error { +func (c *Container) StartAndWaitForContainer(ctx context.Context, image string) error { // 已经存在,则先删除运行的容器 if err := c.ClearContainer(ctx); err != nil { return err @@ -58,7 +58,7 @@ func (c *Container) StartAndWaitForContainer(ctx context.Context) error { "author": "caoyingjunz", "pixiuName": c.name, }, - Image: "jacky06/kubez-ansible:v3.0.1", + Image: image, Env: []string{fmt.Sprintf("COMMAND=%s", c.action)}, } hostConfig := &container.HostConfig{