diff --git a/app/adminengine/engine_admin.go b/app/adminengine/engine_admin.go index 2c8cdf3ef..987074e98 100644 --- a/app/adminengine/engine_admin.go +++ b/app/adminengine/engine_admin.go @@ -28,6 +28,7 @@ import ( "github.com/douyu/juno/internal/pkg/service/appDep" "github.com/douyu/juno/internal/pkg/service/clientproxy" "github.com/douyu/juno/internal/pkg/service/confgo" + "github.com/douyu/juno/internal/pkg/service/confgov2" "github.com/douyu/juno/internal/pkg/service/k8s" "github.com/douyu/juno/internal/pkg/service/notify" "github.com/douyu/juno/internal/pkg/service/openauth" @@ -38,6 +39,7 @@ import ( "github.com/douyu/juno/pkg/pb" "github.com/douyu/jupiter" jgrpc "github.com/douyu/jupiter/pkg/client/grpc" + "github.com/douyu/jupiter/pkg/conf" "github.com/douyu/jupiter/pkg/flag" "github.com/douyu/jupiter/pkg/registry/etcdv3" "github.com/douyu/jupiter/pkg/server/governor" @@ -100,6 +102,7 @@ func New() *Admin { eng.initVersionWorker, eng.initUserVisitWorker, eng.initK8sListWorker, + eng.initEtcdConfig, ) if err != nil { @@ -311,3 +314,12 @@ func (eng *Admin) initK8sListWorker() (err error) { cron.Schedule(xcron.Every(time.Hour*12), xcron.FuncJob(k8s.SyncAll)) return eng.Schedule(cron) } + +// 初始化ETCD配置 +func (eng *Admin) initEtcdConfig() (err error) { + if !conf.GetBool("configure.initEtcdConfig") { + return + } + confgov2.PublishAllConfig() + return nil +} diff --git a/deployment/juno/data/config/juno/single-region-admin.toml b/deployment/juno/data/config/juno/single-region-admin.toml index e2862d739..3f329e394 100644 --- a/deployment/juno/data/config/juno/single-region-admin.toml +++ b/deployment/juno/data/config/juno/single-region-admin.toml @@ -6,6 +6,7 @@ [configure] dir="/tmp/www/server" prefix="juno-agent" + initEtcdConfig = true [agent] port=60814 diff --git a/internal/pkg/service/confgov2/config.go b/internal/pkg/service/confgov2/config.go index 4094c2493..347763f94 100644 --- a/internal/pkg/service/confgov2/config.go +++ b/internal/pkg/service/confgov2/config.go @@ -749,6 +749,43 @@ func assemblyJunoAgent(nodes []db.AppNode) []view.JunoAgent { return res } +func PublishAllConfig() (err error) { + var configuration []db.Configuration + // todo split page + query := mysql.Where("id > 0").Order("id desc").Limit(1000).Find(&configuration) + if query.Error != nil { + return + } + for _, item := range configuration { + var confHistory db.ConfigurationHistory + query = mysql.Where("configuration_id= ?", item.ID).Order("id desc").First(&confHistory) + if query.Error != nil { + continue + } + var appInfo db.AppInfo + appInfo, err = resource.Resource.GetApp(item.AID) + if err != nil { + continue + } + // Save the configuration in etcd + if err = publishETCD(view.ReqConfigPublish{ + AppName: appInfo.AppName, + ZoneCode: item.Zone, + Port: appInfo.GovernPort, + FileName: item.FileName(), + Format: item.Format, + Content: item.Content, + InstanceList: []string{}, + Env: item.Env, + Version: confHistory.Version, + PubK8S: true, + }); err != nil { + continue + } + } + return +} + // Publish .. func Publish(param view.ReqPublishConfig, c echo.Context) (err error) { // Complete configuration release logic diff --git a/pkg/cfg/cfg_struct.go b/pkg/cfg/cfg_struct.go index c16c15c59..02f7c4d82 100644 --- a/pkg/cfg/cfg_struct.go +++ b/pkg/cfg/cfg_struct.go @@ -208,6 +208,7 @@ type Configure struct { Agent struct { Port int `json:"port"` } `json:"agent"` + InitEtcdConfig bool `json:"initEtcdConfig"` } type Agent struct {