194 lines
5.5 KiB
Go
194 lines
5.5 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"gopkg.in/yaml.v2"
|
|
"io/ioutil"
|
|
"kubesphere.io/kubesphere/pkg/simple/client/alerting"
|
|
"kubesphere.io/kubesphere/pkg/simple/client/devops"
|
|
esclient "kubesphere.io/kubesphere/pkg/simple/client/elasticsearch"
|
|
"kubesphere.io/kubesphere/pkg/simple/client/k8s"
|
|
"kubesphere.io/kubesphere/pkg/simple/client/kubesphere"
|
|
"kubesphere.io/kubesphere/pkg/simple/client/ldap"
|
|
"kubesphere.io/kubesphere/pkg/simple/client/mysql"
|
|
"kubesphere.io/kubesphere/pkg/simple/client/notification"
|
|
"kubesphere.io/kubesphere/pkg/simple/client/openpitrix"
|
|
"kubesphere.io/kubesphere/pkg/simple/client/prometheus"
|
|
"kubesphere.io/kubesphere/pkg/simple/client/redis"
|
|
"kubesphere.io/kubesphere/pkg/simple/client/s2is3"
|
|
"kubesphere.io/kubesphere/pkg/simple/client/servicemesh"
|
|
"kubesphere.io/kubesphere/pkg/simple/client/sonarqube"
|
|
"kubesphere.io/kubesphere/pkg/utils/reflectutils"
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func newTestConfig() *Config {
|
|
conf := &Config{
|
|
MySQLOptions: &mysql.MySQLOptions{
|
|
Host: "10.68.96.5:3306",
|
|
Username: "root",
|
|
Password: "admin",
|
|
MaxIdleConnections: 10,
|
|
MaxOpenConnections: 20,
|
|
MaxConnectionLifeTime: time.Duration(10) * time.Second,
|
|
},
|
|
DevopsOptions: &devops.DevopsOptions{
|
|
Host: "http://ks-devops.kubesphere-devops-system.svc",
|
|
Username: "jenkins",
|
|
Password: "kubesphere",
|
|
MaxConnections: 10,
|
|
},
|
|
SonarQubeOptions: &sonarqube.SonarQubeOptions{
|
|
Host: "http://sonarqube.kubesphere-devops-system.svc",
|
|
Token: "ABCDEFG",
|
|
},
|
|
KubernetesOptions: &k8s.KubernetesOptions{
|
|
KubeConfig: "/Users/zry/.kube/config",
|
|
Master: "https://127.0.0.1:6443",
|
|
QPS: 1e6,
|
|
Burst: 1e6,
|
|
},
|
|
ServiceMeshOptions: &servicemesh.ServiceMeshOptions{
|
|
IstioPilotHost: "http://istio-pilot.istio-system.svc:9090",
|
|
JaegerQueryHost: "http://jaeger-query.istio-system.svc:80",
|
|
ServicemeshPrometheusHost: "http://prometheus-k8s.kubesphere-monitoring-system.svc",
|
|
},
|
|
LdapOptions: &ldap.LdapOptions{
|
|
Host: "http://openldap.kubesphere-system.svc",
|
|
ManagerDN: "cn=admin,dc=example,dc=org",
|
|
ManagerPassword: "P@88w0rd",
|
|
UserSearchBase: "ou=Users,dc=example,dc=org",
|
|
GroupSearchBase: "ou=Groups,dc=example,dc=org",
|
|
},
|
|
RedisOptions: &redis.RedisOptions{
|
|
Host: "10.10.111.110",
|
|
Port: 6379,
|
|
Password: "",
|
|
DB: 0,
|
|
},
|
|
S3Options: &s2is3.S3Options{
|
|
Endpoint: "http://minio.openpitrix-system.svc",
|
|
Region: "us-east-1",
|
|
DisableSSL: true,
|
|
ForcePathStyle: false,
|
|
AccessKeyID: "ABCDEFGHIJKLMN",
|
|
SecretAccessKey: "OPQRSTUVWXYZ",
|
|
SessionToken: "abcdefghijklmn",
|
|
Bucket: "ssss",
|
|
},
|
|
OpenPitrixOptions: &openpitrix.OpenPitrixOptions{
|
|
APIServer: "http://api-gateway.openpitrix-system.svc",
|
|
Token: "ABCDEFGHIJKLMN",
|
|
},
|
|
MonitoringOptions: &prometheus.PrometheusOptions{
|
|
Endpoint: "http://prometheus.kubesphere-monitoring-system.svc",
|
|
SecondaryEndpoint: "http://prometheus.kubesphere-monitoring-system.svc",
|
|
},
|
|
LoggingOptions: &esclient.ElasticSearchOptions{
|
|
Host: "http://elasticsearch-logging.kubesphere-logging-system.svc:9200",
|
|
LogstashFormat: false,
|
|
Index: "",
|
|
LogstashPrefix: "elk",
|
|
Match: "kube.*",
|
|
Version: "6",
|
|
},
|
|
KubeSphereOptions: &kubesphere.KubeSphereOptions{
|
|
APIServer: "http://ks-apiserver.kubesphere-system.svc",
|
|
AccountServer: "http://ks-account.kubesphere-system.svc",
|
|
},
|
|
AlertingOptions: &alerting.AlertingOptions{
|
|
Endpoint: "http://alerting.kubesphere-alerting-system.svc:9200",
|
|
},
|
|
NotificationOptions: ¬ification.NotificationOptions{
|
|
Endpoint: "http://notification.kubesphere-alerting-system.svc:9200",
|
|
},
|
|
}
|
|
return conf
|
|
}
|
|
|
|
func saveTestConfig(t *testing.T, conf *Config) {
|
|
content, err := yaml.Marshal(conf)
|
|
if err != nil {
|
|
t.Fatalf("error marshal config. %v", err)
|
|
}
|
|
|
|
err = ioutil.WriteFile(fmt.Sprintf("%s.yaml", DefaultConfigurationName), content, 0640)
|
|
if err != nil {
|
|
t.Fatalf("error write configuration file, %v", err)
|
|
}
|
|
}
|
|
|
|
func cleanTestConfig(t *testing.T) {
|
|
file := fmt.Sprintf("%s.yaml", DefaultConfigurationName)
|
|
if _, err := os.Stat(file); os.IsNotExist(err) {
|
|
t.Log("file not exists, skipping")
|
|
return
|
|
}
|
|
|
|
err := os.Remove(file)
|
|
if err != nil {
|
|
t.Fatalf("remove %s file failed", file)
|
|
}
|
|
|
|
}
|
|
|
|
func TestGet(t *testing.T) {
|
|
conf := newTestConfig()
|
|
saveTestConfig(t, conf)
|
|
//defer cleanTestConfig(t)
|
|
|
|
err := Load()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
conf2 := Get()
|
|
|
|
if diff := reflectutils.Equal(conf, conf2); diff != nil {
|
|
t.Fatal(diff)
|
|
}
|
|
}
|
|
|
|
func TestKubeSphereOptions(t *testing.T) {
|
|
conf := newTestConfig()
|
|
|
|
t.Run("save nil kubesphere options", func(t *testing.T) {
|
|
savedConf := *conf
|
|
savedConf.KubeSphereOptions = nil
|
|
saveTestConfig(t, &savedConf)
|
|
defer cleanTestConfig(t)
|
|
|
|
err := Load()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
loadedConf := Get()
|
|
|
|
if diff := reflectutils.Equal(conf, loadedConf); diff != nil {
|
|
t.Fatal(diff)
|
|
}
|
|
})
|
|
|
|
t.Run("save partially kubesphere options", func(t *testing.T) {
|
|
savedConf := *conf
|
|
savedConf.KubeSphereOptions.APIServer = "http://example.com"
|
|
savedConf.KubeSphereOptions.AccountServer = ""
|
|
|
|
saveTestConfig(t, &savedConf)
|
|
defer cleanTestConfig(t)
|
|
|
|
err := Load()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
loadedConf := Get()
|
|
|
|
savedConf.KubeSphereOptions.AccountServer = "http://ks-account.kubesphere-system.svc"
|
|
|
|
if diff := reflectutils.Equal(&savedConf, loadedConf); diff != nil {
|
|
t.Fatal(diff)
|
|
}
|
|
})
|
|
}
|