Skip to content

Commit 37087ec

Browse files
authored
Merge pull request #153 from PureStorage-OpenConnect/148-feature-request-add-tls-to-exporter-array-interface
Add secure mode to the exporter
2 parents 1568ae8 + af60512 commit 37087ec

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+62
-56
lines changed

README.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,19 +101,20 @@ The `X-Request-ID` Header, as used in the Purity API, may be used when calling t
101101

102102
```shell
103103

104-
usage: pure-fa-om-exporter [-h|--help] [-a|--address "<value>"] [-p|--port <integer>] [-d|--debug] [-t|--tokens <file>] [-k|--key <file>] [-c|--cert <file>]
104+
usage: pure-fa-om-exporter [-h|--help] [-a|--address "<value>"] [-p|--port <integer>] [-d|--debug] [-s|--secure] [-t|--tokens <file>] [-c|--cert "<value>"] [-k|--key "<value>"]
105105

106-
Pure Storage FA OpenMetrics exporter
106+
Pure Storage FA OpenMetrics exporter
107107

108108
Arguments:
109109

110110
-h --help Print help information
111111
-a --address IP address for this exporter to bind to. Default: 0.0.0.0
112112
-p --port Port for this exporter to listen. Default: 9490
113113
-d --debug Enable debug. Default: false
114+
-s --secure Enable TLS verification when connecting to array. Default: false
114115
-t --tokens API token(s) map file
115-
-c --cert SSL/TLS certificate file. Required only for TLS
116-
-k --key SSL/TLS private key file. Required only for TLS
116+
-c --cert SSL/TLS certificate file. Required only for Exporter TLS
117+
-k --key SSL/TLS private key file. Required only for Exporter TLS
117118
```
118119

119120
The array token configuration file must have to following syntax:

cmd/fa-om-exporter/main.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020

2121
var version string = "development"
2222
var debug bool = false
23+
var secure bool = false
2324
var arraytokens config.FlashArrayList
2425

2526
func fileExists(args []string) error {
@@ -41,9 +42,10 @@ func main() {
4142
host := parser.String("a", "address", &argparse.Options{Required: false, Help: "IP address for this exporter to bind to", Default: "0.0.0.0"})
4243
port := parser.Int("p", "port", &argparse.Options{Required: false, Help: "Port for this exporter to listen", Default: 9490})
4344
d := parser.Flag("d", "debug", &argparse.Options{Required: false, Help: "Enable debug", Default: false})
45+
s := parser.Flag("s", "secure", &argparse.Options{Required: false, Help: "Enable TLS verification when connecting to array", Default: false})
4446
at := parser.File("t", "tokens", os.O_RDONLY, 0600, &argparse.Options{Required: false, Validate: fileExists, Help: "API token(s) map file"})
45-
cert := parser.String("c", "cert", &argparse.Options{Required: false, Help: "SSL/TLS certificate file. Required only for TLS"})
46-
key := parser.String("k", "key", &argparse.Options{Required: false, Help: "SSL/TLS private key file. Required only for TLS"})
47+
cert := parser.String("c", "cert", &argparse.Options{Required: false, Help: "SSL/TLS certificate file. Required only for Exporter TLS"})
48+
key := parser.String("k", "key", &argparse.Options{Required: false, Help: "SSL/TLS private key file. Required only for Exporter TLS"})
4749
err := parser.Parse(os.Args)
4850
if err != nil {
4951
log.Fatalf("Error in token file: %v", err)
@@ -81,6 +83,7 @@ func main() {
8183
}
8284
}
8385
debug = *d
86+
secure = *s
8487
addr := fmt.Sprintf("%s:%d", *host, *port)
8588
log.Printf("Start Pure FlashArray exporter %s on %s", version, addr)
8689

@@ -159,7 +162,7 @@ func metricsHandler(w http.ResponseWriter, r *http.Request) {
159162
rid := r.Header.Get("X-Request-ID")
160163

161164
registry := prometheus.NewRegistry()
162-
faclient := client.NewRestClient(address, apitoken, apiver, uagent, rid, debug)
165+
faclient := client.NewRestClient(address, apitoken, apiver, uagent, rid, debug, secure)
163166
if faclient.Error != nil {
164167
log.Printf("[ERROR] %s %s %s %s FACLIENT ERROR: %s\n", r.RemoteAddr, r.Method, r.URL, r.Header.Get("User-Agent"), faclient.Error.Error())
165168
http.Error(w, faclient.Error.Error(), http.StatusBadRequest)

internal/openmetrics-exporter/alerts_collector_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ func TestAlertsCollector(t *testing.T) {
5252

5353
want[fmt.Sprintf("label:{name:\"category\" value:\"%s\"} label:{name:\"code\" value:\"%s\"} label:{name:\"component_type\" value:\"%s\"} label:{name:\"created\" value:\"%s\"} label:{name:\"issue\" value:\"%s\"} label:{name:\"name\" value:\"%s\"} label:{name:\"severity\" value:\"%s\"} label:{name:\"summary\" value:\"%s\"} gauge:{value:%g}", alert[0], alert[1], alert[2], alert[3], alert[4], alert[5], alert[6], alert[7], n)] = true
5454
}
55-
c := client.NewRestClient(e, "fake-api-token", "latest", "test-user-agent-string", "test-X-Request-Id-string", false)
55+
c := client.NewRestClient(e, "fake-api-token", "latest", "test-user-agent-string", "test-X-Request-Id-string", false, false)
5656
ac := NewAlertsCollector(c)
5757
metricsCheck(t, ac, want)
5858
server.Close()

internal/openmetrics-exporter/arrays_collector_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ func TestArraysCollector(t *testing.T) {
4949

5050
want[fmt.Sprintf("label:{name:\"array_name\" value:\"%s\"} label:{name:\"os\" value:\"%s\"} label:{name:\"subscription_type\" value:\"%s\"} label:{name:\"system_id\" value:\"%s\"} label:{name:\"version\" value:\"%s\"} gauge:{value:1}", a.Name, a.Os, s.Service, a.Id, a.Version)] = true
5151

52-
c := client.NewRestClient(e, "fake-api-token", "latest", "test-user-agent-string", "test-X-Request-Id-string", false)
52+
c := client.NewRestClient(e, "fake-api-token", "latest", "test-user-agent-string", "test-X-Request-Id-string", false, false)
5353
ac := NewArraysCollector(c)
5454
metricsCheck(t, ac, want)
5555
server.Close()

internal/openmetrics-exporter/arrays_controllers_collector_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ func TestArrayControllersCollector(t *testing.T) {
3939
want[fmt.Sprintf("label:{name:\"mode\" value:\"%s\"} label:{name:\"model\"value:\"%s\"} label:{name:\"name\" value:\"%s\"} label:{name:\"status\" value:\"%s\"} label:{name:\"type\" value:\"%s\"} label:{name:\"version\" value:\"%s\"} gauge:{value:\"%g\"}", ctl.Mode, ctl.Model, ctl.Name, ctl.Status, ctl.Type, ctl.Version, (float64(ctl.ModeSince)/1000))] = true
4040
}
4141

42-
c := client.NewRestClient(e, "fake-api-token", "latest", "test-user-agent-string", "test-X-Request-Id-string", false)
42+
c := client.NewRestClient(e, "fake-api-token", "latest", "test-user-agent-string", "test-X-Request-Id-string", false, false)
4343

4444
dc := NewControllersCollector(c)
4545
metricsCheck(t, dc, want)

internal/openmetrics-exporter/arrays_performance_collector_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ func TestArrayPerformanceCollector(t *testing.T) {
6464
want[fmt.Sprintf("label:{name:\"dimension\" value:\"bytes_per_read\"} gauge:{value:%g}", p.BytesPerRead)] = true
6565
want[fmt.Sprintf("label:{name:\"dimension\" value:\"bytes_per_write\"} gauge:{value:%g}", p.BytesPerWrite)] = true
6666
want[fmt.Sprintf("gauge:{value:%g}", p.QueueDepth)] = true
67-
c := client.NewRestClient(e, "fake-api-token", "latest", "test-user-agent-string", "test-X-Request-Id-string", false)
67+
c := client.NewRestClient(e, "fake-api-token", "latest", "test-user-agent-string", "test-X-Request-Id-string", false, false)
6868

6969
pc := NewArraysPerformanceCollector(c)
7070
metricsCheck(t, pc, want)

internal/openmetrics-exporter/arrays_space_collector_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ func TestArraySpaceCollector(t *testing.T) {
8686
want[fmt.Sprintf("label:{name:\"space\" value:\"empty\"} gauge:{value:%g}", a.Capacity-(float64(*a.Space.System)+float64(*a.Space.Replication)+float64(*a.Space.Shared)+float64(*a.Space.Snapshots)+float64(*a.Space.Unique)))] = true
8787
want[fmt.Sprintf("gauge:{value:%g}", (float64(*a.Space.System)+float64(*a.Space.Replication)+float64(*a.Space.Shared)+float64(*a.Space.Snapshots)+float64(*a.Space.Unique))/a.Capacity*100)] = true
8888
defer server.Close()
89-
c := client.NewRestClient(e, "fake-api-token", "latest", "test-user-agent-string", "test-X-Request-Id-string", false)
89+
c := client.NewRestClient(e, "fake-api-token", "latest", "test-user-agent-string", "test-X-Request-Id-string", false, false)
9090

9191
ac := NewArraySpaceCollector(c)
9292
metricsCheck(t, ac, want)

internal/openmetrics-exporter/dirs_performance_collector_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ func TestDirectoriesPerformanceCollector(t *testing.T) {
4949
want[fmt.Sprintf("label:{name:\"dimension\" value:\"bytes_per_read\"} label:{name:\"name\" value:\"%s\"} gauge:{value:%g}", p.Name, p.BytesPerRead)] = true
5050
want[fmt.Sprintf("label:{name:\"dimension\" value:\"bytes_per_write\"} label:{name:\"name\" value:\"%s\"} gauge:{value:%g}", p.Name, p.BytesPerWrite)] = true
5151
}
52-
c := client.NewRestClient(e, "fake-api-token", "latest", "test-user-agent-string", "test-X-Request-Id-string", false)
52+
c := client.NewRestClient(e, "fake-api-token", "latest", "test-user-agent-string", "test-X-Request-Id-string", false, false)
5353

5454
pc := NewDirectoriesPerformanceCollector(c)
5555
metricsCheck(t, pc, want)

internal/openmetrics-exporter/dirs_space_collector_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ func TestDirectoriesSpaceCollector(t *testing.T) {
8383
}
8484
}
8585
defer server.Close()
86-
c := client.NewRestClient(e, "fake-api-token", "latest", "test-user-agent-string", "test-X-Request-Id-string", false)
86+
c := client.NewRestClient(e, "fake-api-token", "latest", "test-user-agent-string", "test-X-Request-Id-string", false, false)
8787

8888
hc := NewDirectoriesSpaceCollector(c)
8989
metricsCheck(t, hc, want)

internal/openmetrics-exporter/drives_collector_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ func TestDriveCollector(t *testing.T) {
3939
want[fmt.Sprintf("label:{name:\"component_name\" value:\"%s\"} label:{name:\"component_status\" value:\"%s\"} label:{name:\"component_type\" value:\"%s\"} label:{name:\"component_type\" value:\"%s\"} gauge:{value:\"%g\"}", d.Name, d.Type, d.Status, d.Protocol, d.Capacity)] = true
4040
}
4141

42-
c := client.NewRestClient(e, "fake-api-token", "latest", "test-user-agent-string", "test-X-Request-Id-string", false)
42+
c := client.NewRestClient(e, "fake-api-token", "latest", "test-user-agent-string", "test-X-Request-Id-string", false, false)
4343

4444
dc := NewDriveCollector(c)
4545
metricsCheck(t, dc, want)

0 commit comments

Comments
 (0)