Skip to content

Commit 1c66c50

Browse files
Refactor TLS config to use in both manual and generated client (#1046)
1 parent 6769348 commit 1c66c50

File tree

3 files changed

+62
-42
lines changed

3 files changed

+62
-42
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ require (
77
github.com/go-openapi/strfmt v0.21.7
88
github.com/grafana/amixr-api-go-client v0.0.9
99
github.com/grafana/grafana-api-golang-client v0.24.0
10-
github.com/grafana/grafana-openapi-client-go v0.0.0-20230914111743-66765674683b
10+
github.com/grafana/grafana-openapi-client-go v0.0.0-20230918131703-659d2cff09a7
1111
github.com/grafana/machine-learning-go-client v0.5.0
1212
github.com/grafana/synthetic-monitoring-agent v0.17.1
1313
github.com/grafana/synthetic-monitoring-api-go-client v0.7.0

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,10 @@ github.com/grafana/grafana-api-golang-client v0.24.0 h1:9cUvft7xCMnnL/Uscwy7eold
137137
github.com/grafana/grafana-api-golang-client v0.24.0/go.mod h1:24W29gPe9yl0/3A9X624TPkAOR8DpHno490cPwnkv8E=
138138
github.com/grafana/grafana-openapi-client-go v0.0.0-20230914111743-66765674683b h1:UI49lvb/o1kfVtLPKZMZkozkRIxczD+qDUoHC41TvnM=
139139
github.com/grafana/grafana-openapi-client-go v0.0.0-20230914111743-66765674683b/go.mod h1:2vJ8YEgriYoHaNg5eijRU/q7eJTxT078VrGRSTTLeRk=
140+
github.com/grafana/grafana-openapi-client-go v0.0.0-20230918123310-e81801151dbd h1:y4K34xlu2mD0uBWbW2iqNwQBU93Y2/QoZ9vSMUGuScw=
141+
github.com/grafana/grafana-openapi-client-go v0.0.0-20230918123310-e81801151dbd/go.mod h1:2vJ8YEgriYoHaNg5eijRU/q7eJTxT078VrGRSTTLeRk=
142+
github.com/grafana/grafana-openapi-client-go v0.0.0-20230918131703-659d2cff09a7 h1:LPPNA/l6jCMRheMWvMPdni3WlOGL6Wjw3d/A1IbWCVg=
143+
github.com/grafana/grafana-openapi-client-go v0.0.0-20230918131703-659d2cff09a7/go.mod h1:2vJ8YEgriYoHaNg5eijRU/q7eJTxT078VrGRSTTLeRk=
140144
github.com/grafana/machine-learning-go-client v0.5.0 h1:Q1K+MPSy8vfMm2jsk3WQ7O77cGr2fM5hxwtPSoPc5NU=
141145
github.com/grafana/machine-learning-go-client v0.5.0/go.mod h1:QFfZz8NkqVF8++skjkKQXJEZfpCYd8S0yTWJUpsLLTA=
142146
github.com/grafana/synthetic-monitoring-agent v0.17.1 h1:2IKA8QzgWA+tqmE3AMzSwQBhZ6Pa4whgOHTs6tk3V6I=

internal/provider/provider.go

Lines changed: 57 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -359,54 +359,15 @@ func configure(version string, p *schema.Provider) func(context.Context, *schema
359359
func createGrafanaClient(d *schema.ResourceData) (string, *gapi.Config, *gapi.Client, error) {
360360
cli := cleanhttp.DefaultClient()
361361
transport := cleanhttp.DefaultTransport()
362-
transport.TLSClientConfig = &tls.Config{}
363362
// limiting the amount of concurrent HTTP connections from the provider
364363
// makes it not overload the API and DB
365364
transport.MaxConnsPerHost = 2
366365

367-
// TLS Config
368-
tlsKeyFile, tempFile, err := createTempFileIfLiteral(d.Get("tls_key").(string))
366+
tlsClientConfig, err := parseTLSconfig(d)
369367
if err != nil {
370368
return "", nil, nil, err
371369
}
372-
if tempFile {
373-
defer os.Remove(tlsKeyFile)
374-
}
375-
tlsCertFile, tempFile, err := createTempFileIfLiteral(d.Get("tls_cert").(string))
376-
if err != nil {
377-
return "", nil, nil, err
378-
}
379-
if tempFile {
380-
defer os.Remove(tlsCertFile)
381-
}
382-
caCertFile, tempFile, err := createTempFileIfLiteral(d.Get("ca_cert").(string))
383-
if err != nil {
384-
return "", nil, nil, err
385-
}
386-
if tempFile {
387-
defer os.Remove(caCertFile)
388-
}
389-
390-
insecure := d.Get("insecure_skip_verify").(bool)
391-
if caCertFile != "" {
392-
ca, err := os.ReadFile(caCertFile)
393-
if err != nil {
394-
return "", nil, nil, err
395-
}
396-
pool := x509.NewCertPool()
397-
pool.AppendCertsFromPEM(ca)
398-
transport.TLSClientConfig.RootCAs = pool
399-
}
400-
if tlsKeyFile != "" && tlsCertFile != "" {
401-
cert, err := tls.LoadX509KeyPair(tlsCertFile, tlsKeyFile)
402-
if err != nil {
403-
return "", nil, nil, err
404-
}
405-
transport.TLSClientConfig.Certificates = []tls.Certificate{cert}
406-
}
407-
if insecure {
408-
transport.TLSClientConfig.InsecureSkipVerify = true
409-
}
370+
transport.TLSClientConfig = tlsClientConfig
410371

411372
apiURL := d.Get("url").(string)
412373
cli.Transport = logging.NewSubsystemLoggingHTTPTransport("Grafana", transport)
@@ -440,6 +401,11 @@ func createGrafanaClient(d *schema.ResourceData) (string, *gapi.Config, *gapi.Cl
440401
}
441402

442403
func createGrafanaOAPIClient(apiURL string, d *schema.ResourceData) (*goapi.GrafanaHTTPAPI, error) {
404+
tlsClientConfig, err := parseTLSconfig(d)
405+
if err != nil {
406+
return nil, err
407+
}
408+
443409
u, err := url.Parse(apiURL)
444410
if err != nil {
445411
return nil, fmt.Errorf("failed to parse API url: %v", err.Error())
@@ -454,6 +420,7 @@ func createGrafanaOAPIClient(apiURL string, d *schema.ResourceData) (*goapi.Graf
454420
Host: u.Host,
455421
BasePath: "/api",
456422
Schemes: []string{u.Scheme},
423+
TLSConfig: tlsClientConfig,
457424
BasicAuth: userInfo,
458425
OrgID: orgID,
459426
APIKey: APIKey,
@@ -589,3 +556,52 @@ func parseAuth(d *schema.ResourceData) (*url.Userinfo, int64, string, error) {
589556
}
590557
return nil, 0, "", nil
591558
}
559+
560+
func parseTLSconfig(d *schema.ResourceData) (*tls.Config, error) {
561+
tlsClientConfig := &tls.Config{}
562+
563+
tlsKeyFile, tempFile, err := createTempFileIfLiteral(d.Get("tls_key").(string))
564+
if err != nil {
565+
return nil, err
566+
}
567+
if tempFile {
568+
defer os.Remove(tlsKeyFile)
569+
}
570+
tlsCertFile, tempFile, err := createTempFileIfLiteral(d.Get("tls_cert").(string))
571+
if err != nil {
572+
return nil, err
573+
}
574+
if tempFile {
575+
defer os.Remove(tlsCertFile)
576+
}
577+
caCertFile, tempFile, err := createTempFileIfLiteral(d.Get("ca_cert").(string))
578+
if err != nil {
579+
return nil, err
580+
}
581+
if tempFile {
582+
defer os.Remove(caCertFile)
583+
}
584+
585+
insecure := d.Get("insecure_skip_verify").(bool)
586+
if caCertFile != "" {
587+
ca, err := os.ReadFile(caCertFile)
588+
if err != nil {
589+
return nil, err
590+
}
591+
pool := x509.NewCertPool()
592+
pool.AppendCertsFromPEM(ca)
593+
tlsClientConfig.RootCAs = pool
594+
}
595+
if tlsKeyFile != "" && tlsCertFile != "" {
596+
cert, err := tls.LoadX509KeyPair(tlsCertFile, tlsKeyFile)
597+
if err != nil {
598+
return nil, err
599+
}
600+
tlsClientConfig.Certificates = []tls.Certificate{cert}
601+
}
602+
if insecure {
603+
tlsClientConfig.InsecureSkipVerify = true
604+
}
605+
606+
return tlsClientConfig, nil
607+
}

0 commit comments

Comments
 (0)