Annotations for the InfluxDB Module
Signed-off-by: Lorenzo Fontana <lo@linux.com>
This commit is contained in:
parent
aa256ac887
commit
93be8db612
10 changed files with 256 additions and 1 deletions
|
|
@ -34,6 +34,7 @@ import (
|
|||
"k8s.io/ingress-nginx/internal/ingress/annotations/defaultbackend"
|
||||
"k8s.io/ingress-nginx/internal/ingress/annotations/grpc"
|
||||
"k8s.io/ingress-nginx/internal/ingress/annotations/healthcheck"
|
||||
"k8s.io/ingress-nginx/internal/ingress/annotations/influxdb"
|
||||
"k8s.io/ingress-nginx/internal/ingress/annotations/ipwhitelist"
|
||||
"k8s.io/ingress-nginx/internal/ingress/annotations/loadbalancing"
|
||||
"k8s.io/ingress-nginx/internal/ingress/annotations/log"
|
||||
|
|
@ -95,6 +96,7 @@ type Ingress struct {
|
|||
Logs log.Config
|
||||
GRPC bool
|
||||
LuaRestyWAF luarestywaf.Config
|
||||
InfluxDB influxdb.Config
|
||||
}
|
||||
|
||||
// Extractor defines the annotation parsers to be used in the extraction of annotations
|
||||
|
|
@ -136,6 +138,7 @@ func NewAnnotationExtractor(cfg resolver.Resolver) Extractor {
|
|||
"Logs": log.NewParser(cfg),
|
||||
"GRPC": grpc.NewParser(cfg),
|
||||
"LuaRestyWAF": luarestywaf.NewParser(cfg),
|
||||
"InfluxDB": influxdb.NewParser(cfg),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
|
|||
104
internal/ingress/annotations/influxdb/main.go
Normal file
104
internal/ingress/annotations/influxdb/main.go
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
/*
|
||||
Copyright 2018 The Kubernetes Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package influxdb
|
||||
|
||||
import (
|
||||
extensions "k8s.io/api/extensions/v1beta1"
|
||||
|
||||
"k8s.io/ingress-nginx/internal/ingress/annotations/parser"
|
||||
"k8s.io/ingress-nginx/internal/ingress/resolver"
|
||||
)
|
||||
|
||||
type influxdb struct {
|
||||
r resolver.Resolver
|
||||
}
|
||||
|
||||
// Config contains the IfluxDB configuration to be used in the Ingress
|
||||
type Config struct {
|
||||
InfluxDBEnabled bool `json:"influxDBEnabled"`
|
||||
InfluxDBMeasurement string `json:"influxDBMeasurement"`
|
||||
InfluxDBPort string `json:"influxDBPort"`
|
||||
InfluxDBHost string `json:"influxDBHost"`
|
||||
InfluxDBServerName string `json:"influxDBServerName"`
|
||||
}
|
||||
|
||||
// NewParser creates a new InfluxDB annotation parser
|
||||
func NewParser(r resolver.Resolver) parser.IngressAnnotation {
|
||||
return influxdb{r}
|
||||
}
|
||||
|
||||
// Parse parses the annotations to look for InfluxDB configurations
|
||||
func (c influxdb) Parse(ing *extensions.Ingress) (interface{}, error) {
|
||||
influxdbEnabled, err := parser.GetBoolAnnotation("enable-influxdb", ing)
|
||||
if err != nil {
|
||||
influxdbEnabled = false
|
||||
}
|
||||
|
||||
influxdbMeasurement, err := parser.GetStringAnnotation("influxdb-measurement", ing)
|
||||
if err != nil {
|
||||
influxdbMeasurement = "default"
|
||||
}
|
||||
|
||||
influxdbPort, err := parser.GetStringAnnotation("influxdb-port", ing)
|
||||
if err != nil {
|
||||
// This is not the default 8086 port but the port usually used to expose
|
||||
// influxdb in UDP, the module uses UDP to talk to influx via the line protocol.
|
||||
influxdbPort = "8089"
|
||||
}
|
||||
|
||||
influxdbHost, err := parser.GetStringAnnotation("influxdb-host", ing)
|
||||
if err != nil {
|
||||
influxdbHost = "127.0.0.1"
|
||||
}
|
||||
|
||||
influxdbServerName, err := parser.GetStringAnnotation("influxdb-server-name", ing)
|
||||
if err != nil {
|
||||
influxdbServerName = "nginx-ingress"
|
||||
}
|
||||
|
||||
return &Config{
|
||||
InfluxDBEnabled: influxdbEnabled,
|
||||
InfluxDBMeasurement: influxdbMeasurement,
|
||||
InfluxDBPort: influxdbPort,
|
||||
InfluxDBHost: influxdbHost,
|
||||
InfluxDBServerName: influxdbServerName,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Equal tests for equality between two Config types
|
||||
func (e1 *Config) Equal(e2 *Config) bool {
|
||||
if e1 == e2 {
|
||||
return true
|
||||
}
|
||||
if e1 == nil || e2 == nil {
|
||||
return false
|
||||
}
|
||||
if e1.InfluxDBEnabled != e2.InfluxDBEnabled {
|
||||
return false
|
||||
}
|
||||
if e1.InfluxDBPort != e2.InfluxDBPort {
|
||||
return false
|
||||
}
|
||||
if e1.InfluxDBHost != e2.InfluxDBHost {
|
||||
return false
|
||||
}
|
||||
if e1.InfluxDBServerName != e2.InfluxDBServerName {
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
101
internal/ingress/annotations/influxdb/main_test.go
Normal file
101
internal/ingress/annotations/influxdb/main_test.go
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
/*
|
||||
Copyright 2018 The Kubernetes Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package influxdb
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
api "k8s.io/api/core/v1"
|
||||
extensions "k8s.io/api/extensions/v1beta1"
|
||||
meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/util/intstr"
|
||||
"k8s.io/ingress-nginx/internal/ingress/annotations/parser"
|
||||
"k8s.io/ingress-nginx/internal/ingress/resolver"
|
||||
)
|
||||
|
||||
func buildIngress() *extensions.Ingress {
|
||||
defaultBackend := extensions.IngressBackend{
|
||||
ServiceName: "default-backend",
|
||||
ServicePort: intstr.FromInt(80),
|
||||
}
|
||||
|
||||
return &extensions.Ingress{
|
||||
ObjectMeta: meta_v1.ObjectMeta{
|
||||
Name: "foo",
|
||||
Namespace: api.NamespaceDefault,
|
||||
},
|
||||
Spec: extensions.IngressSpec{
|
||||
Backend: &extensions.IngressBackend{
|
||||
ServiceName: "default-backend",
|
||||
ServicePort: intstr.FromInt(80),
|
||||
},
|
||||
Rules: []extensions.IngressRule{
|
||||
{
|
||||
Host: "foo.bar.com",
|
||||
IngressRuleValue: extensions.IngressRuleValue{
|
||||
HTTP: &extensions.HTTPIngressRuleValue{
|
||||
Paths: []extensions.HTTPIngressPath{
|
||||
{
|
||||
Path: "/foo",
|
||||
Backend: defaultBackend,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func TestIngressInfluxDB(t *testing.T) {
|
||||
ing := buildIngress()
|
||||
|
||||
data := map[string]string{}
|
||||
data[parser.GetAnnotationWithPrefix("enable-influxdb")] = "true"
|
||||
data[parser.GetAnnotationWithPrefix("influxdb-measurement")] = "nginxmeasures"
|
||||
data[parser.GetAnnotationWithPrefix("influxdb-port")] = "9091"
|
||||
data[parser.GetAnnotationWithPrefix("influxdb-host")] = "mytelegrafserver.mycompany.mytld"
|
||||
data[parser.GetAnnotationWithPrefix("influxdb-server-name")] = "nginx-test-1"
|
||||
ing.SetAnnotations(data)
|
||||
|
||||
influx, _ := NewParser(&resolver.Mock{}).Parse(ing)
|
||||
nginxInflux, ok := influx.(*Config)
|
||||
if !ok {
|
||||
t.Errorf("expected a Config type")
|
||||
}
|
||||
|
||||
if !nginxInflux.InfluxDBEnabled {
|
||||
t.Errorf("expected influxdb enabled but returned %v", nginxInflux.InfluxDBEnabled)
|
||||
}
|
||||
|
||||
if nginxInflux.InfluxDBMeasurement != "nginxmeasures" {
|
||||
t.Errorf("expected measurement name not found. Found %v", nginxInflux.InfluxDBMeasurement)
|
||||
}
|
||||
|
||||
if nginxInflux.InfluxDBPort != "9091" {
|
||||
t.Errorf("expected port not found. Found %v", nginxInflux.InfluxDBPort)
|
||||
}
|
||||
|
||||
if nginxInflux.InfluxDBHost != "mytelegrafserver.mycompany.mytld" {
|
||||
t.Errorf("expected host not found. Found %v", nginxInflux.InfluxDBHost)
|
||||
}
|
||||
|
||||
if nginxInflux.InfluxDBServerName != "nginx-test-1" {
|
||||
t.Errorf("expected server name not found. Found %v", nginxInflux.InfluxDBServerName)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue