1717package cmdutil
1818
1919import (
20- "errors"
21- "fmt"
22- "github.com/apache/doris-operator/pkg/common/cmd/types"
23- _ "github.com/go-sql-driver/mysql"
24- "github.com/jmoiron/sqlx"
20+ "crypto/tls"
21+ "crypto/x509"
22+ "errors"
23+ "fmt"
24+ "os"
25+ "strconv"
26+
27+ "github.com/apache/doris-operator/pkg/common/cmd/types"
28+ "github.com/go-sql-driver/mysql"
29+ _ "github.com/go-sql-driver/mysql"
30+ "github.com/jmoiron/sqlx"
2531)
2632
2733//Client provides abstractions that access doris cluster methods.
@@ -31,16 +37,47 @@ type Client interface {
3137}
3238
3339var _ Client = & DorisClient {}
40+
3441type DorisClient struct {
3542 db * sqlx.DB
3643}
3744
38- func NewDorisClient (user , password , host , queryPort string ) (* DorisClient , error ) {
45+ func NewDorisClient (dc * DorisConfig ) (* DorisClient , error ) {
46+ user := dc .User
47+ password := dc .Password
48+ host := dc .FeHost
49+ queryPort := strconv .Itoa (dc .QueryPort )
3950 dsn := fmt .Sprintf ("%s:%s@tcp(%s:%s)/%s" , user , password , host , queryPort , "mysql" )
40- db , err := sqlx .Open ("mysql" , dsn )
41- if err != nil {
42- return nil , errors .New ("NewDorisSqlDB sqlx.Open failed open doris sql client connection, err: " + err .Error ())
51+ rootCertPool := x509 .NewCertPool ()
52+ if dc .SSLCaPath != "" {
53+ pem , err := os .ReadFile (dc .SSLCaPath )
54+ if err != nil {
55+ return nil , errors .New ("read root ca cert failed," + err .Error ())
56+ }
57+
58+ if ok := rootCertPool .AppendCertsFromPEM (pem ); ! ok {
59+ return nil , errors .New ("Failed to append ca cert or pem failed." )
60+ }
61+
62+ clientCerts := make ([]tls.Certificate , 0 , 1 )
63+ cCert , err := tls .LoadX509KeyPair (dc .SSLCrtPath , dc .SSLKeyPath )
64+ if err != nil {
65+ return nil , errors .New ("load x509 key pair failed," + err .Error ())
66+ }
67+
68+ clientCerts = append (clientCerts , cCert )
69+ if err = mysql .RegisterTLSConfig ("doris" , & tls.Config {
70+ RootCAs : rootCertPool ,
71+ Certificates : clientCerts ,
72+ }); err != nil {
73+ return nil , errors .New ("register tls config failed," + err .Error ())
74+ }
75+ dsn = dsn + "?tls=doris"
4376 }
77+ db , err := sqlx .Open ("mysql" , dsn )
78+ if err != nil {
79+ return nil , errors .New ("NewDorisSqlDB sqlx.Open failed open doris sql client connection, err: " + err .Error ())
80+ }
4481
4582 return & DorisClient {
4683 db :db ,
0 commit comments