88 lines
2.5 KiB
Go
88 lines
2.5 KiB
Go
/* Copyright © INFINI Ltd. All rights reserved.
|
|
* web: https://infinilabs.com
|
|
* mail: hello#infini.ltd */
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/buger/jsonparser"
|
|
log "github.com/cihub/seelog"
|
|
"infini.sh/framework/core/elastic"
|
|
"infini.sh/framework/core/env"
|
|
"infini.sh/framework/core/global"
|
|
"infini.sh/framework/core/util"
|
|
)
|
|
|
|
func bootstrapRequirementCheck() error{
|
|
err := checkElasticsearchRequirements()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
|
|
func checkElasticsearchRequirements() error{
|
|
log.Trace("start to check system cluster requirement")
|
|
var esConfigs = []elastic.ElasticsearchConfig{}
|
|
ok, err := env.ParseConfig("elasticsearch", &esConfigs)
|
|
if err != nil {
|
|
return fmt.Errorf("parse elasticsearch config section error: %v", err)
|
|
}
|
|
if !ok {
|
|
return fmt.Errorf("elasticsearch config section not found")
|
|
}
|
|
|
|
elasticsearchID:=global.Lookup(elastic.GlobalSystemElasticsearchID)
|
|
|
|
if elasticsearchID == nil||elasticsearchID=="" {
|
|
return fmt.Errorf("cluster config in web section can not be empty")
|
|
}
|
|
|
|
esID:=elasticsearchID.(string)
|
|
|
|
var targetEsConfig *elastic.ElasticsearchConfig
|
|
for _, esConfig := range esConfigs {
|
|
if esConfig.ID == esID||(esConfig.ID==""&&esConfig.Name==esID) {
|
|
targetEsConfig = &esConfig
|
|
}
|
|
}
|
|
|
|
if targetEsConfig == nil {
|
|
return fmt.Errorf("cluster config %s was not found", esID)
|
|
}
|
|
var req = util.NewGetRequest(targetEsConfig.Endpoint, nil)
|
|
if targetEsConfig.BasicAuth != nil {
|
|
req.SetBasicAuth(targetEsConfig.BasicAuth.Username, targetEsConfig.BasicAuth.Password)
|
|
}
|
|
|
|
result, err := util.ExecuteRequest(req)
|
|
if err != nil {
|
|
return fmt.Errorf("check system cluster requirement error: %v", err)
|
|
}
|
|
|
|
if result==nil||result.Body==nil||len(result.Body)==0{
|
|
return fmt.Errorf("failed to retrive cluster version info")
|
|
}
|
|
|
|
|
|
versionNumber, err := jsonparser.GetString(result.Body, "version", "number")
|
|
if err != nil {
|
|
return fmt.Errorf("check system cluster requirement error: %v, got response: %s", err, string(result.Body))
|
|
}
|
|
distribution, _ := jsonparser.GetString(result.Body, "version", "distribution")
|
|
if distribution == elastic.Easysearch || distribution == elastic.Opensearch {
|
|
return nil
|
|
} else if distribution != "" {
|
|
return fmt.Errorf("unkonw cluster distribution: %v", distribution)
|
|
}
|
|
cr, err := util.VersionCompare(versionNumber, "5.3")
|
|
if err !=nil {
|
|
return fmt.Errorf("check system cluster requirement error: %v", err)
|
|
}
|
|
if cr == -1 {
|
|
return fmt.Errorf("system cluster version with distribution elasticsearch required to be version 5.3 and above, but got %s", versionNumber)
|
|
}
|
|
return nil
|
|
} |