1
1
package grafana
2
2
3
3
import (
4
+ "crypto/tls"
5
+ "crypto/x509"
6
+ "io/ioutil"
4
7
"net/url"
5
8
"strings"
6
9
@@ -28,6 +31,30 @@ func Provider() terraform.ResourceProvider {
28
31
DefaultFunc : schema .EnvDefaultFunc ("GRAFANA_AUTH" , nil ),
29
32
Description : "Credentials for accessing the Grafana API." ,
30
33
},
34
+ "tls_key" : {
35
+ Type : schema .TypeString ,
36
+ Optional : true ,
37
+ DefaultFunc : schema .EnvDefaultFunc ("GRAFANA_TLS_KEY" , nil ),
38
+ Description : "Client TLS key for accessing the Grafana API." ,
39
+ },
40
+ "tls_cert" : {
41
+ Type : schema .TypeString ,
42
+ Optional : true ,
43
+ DefaultFunc : schema .EnvDefaultFunc ("GRAFANA_TLS_CERT" , nil ),
44
+ Description : "Client TLS cert for accessing the Grafana API." ,
45
+ },
46
+ "ca_cert" : {
47
+ Type : schema .TypeString ,
48
+ Optional : true ,
49
+ DefaultFunc : schema .EnvDefaultFunc ("GRAFANA_CA_CERT" , nil ),
50
+ Description : "CA cert bundle for validating the Grafana API's certificate." ,
51
+ },
52
+ "insecure_skip_verify" : {
53
+ Type : schema .TypeBool ,
54
+ Optional : true ,
55
+ DefaultFunc : schema .EnvDefaultFunc ("GRAFANA_INSECURE_SKIP_VERIFY" , nil ),
56
+ Description : "Skip TLS certificate verification" ,
57
+ },
31
58
},
32
59
33
60
ResourcesMap : map [string ]* schema.Resource {
@@ -49,7 +76,34 @@ func Provider() terraform.ResourceProvider {
49
76
func providerConfigure (d * schema.ResourceData ) (interface {}, error ) {
50
77
auth := strings .SplitN (d .Get ("auth" ).(string ), ":" , 2 )
51
78
cli := cleanhttp .DefaultClient ()
52
- cli .Transport = logging .NewTransport ("Grafana" , cli .Transport )
79
+ transport := cleanhttp .DefaultTransport ()
80
+
81
+ // TLS Config
82
+ tlsKey := d .Get ("tls_key" ).(string )
83
+ tlsCert := d .Get ("tls_cert" ).(string )
84
+ caCert := d .Get ("ca_cert" ).(string )
85
+ insecure := d .Get ("insecure_skip_verify" ).(bool )
86
+ if caCert != "" {
87
+ ca , err := ioutil .ReadFile (caCert )
88
+ if err != nil {
89
+ return nil , err
90
+ }
91
+ pool := x509 .NewCertPool ()
92
+ pool .AppendCertsFromPEM (ca )
93
+ transport .TLSClientConfig .RootCAs = pool
94
+ }
95
+ if tlsKey != "" && tlsCert != "" {
96
+ cert , err := tls .LoadX509KeyPair (tlsCert , tlsKey )
97
+ if err != nil {
98
+ return nil , err
99
+ }
100
+ transport .TLSClientConfig .Certificates = []tls.Certificate {cert }
101
+ }
102
+ if insecure {
103
+ transport .TLSClientConfig .InsecureSkipVerify = true
104
+ }
105
+
106
+ cli .Transport = logging .NewTransport ("Grafana" , transport )
53
107
cfg := gapi.Config {
54
108
Client : cli ,
55
109
}
0 commit comments