mirror of https://github.com/prometheus/prometheus
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
2.7 KiB
90 lines
2.7 KiB
// Copyright 2016 The Prometheus 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 kubernetes |
|
|
|
import ( |
|
v1 "k8s.io/api/networking/v1" |
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" |
|
) |
|
|
|
// ingressAdaptor is an adaptor for the different Ingress versions. |
|
type ingressAdaptor interface { |
|
getObjectMeta() metav1.ObjectMeta |
|
name() string |
|
namespace() string |
|
labels() map[string]string |
|
annotations() map[string]string |
|
tlsHosts() []string |
|
ingressClassName() *string |
|
rules() []ingressRuleAdaptor |
|
} |
|
|
|
type ingressRuleAdaptor interface { |
|
paths() []string |
|
host() string |
|
} |
|
|
|
// Adaptor for networking.k8s.io/v1. |
|
type ingressAdaptorV1 struct { |
|
ingress *v1.Ingress |
|
} |
|
|
|
func newIngressAdaptorFromV1(ingress *v1.Ingress) ingressAdaptor { |
|
return &ingressAdaptorV1{ingress: ingress} |
|
} |
|
|
|
func (i *ingressAdaptorV1) getObjectMeta() metav1.ObjectMeta { return i.ingress.ObjectMeta } |
|
func (i *ingressAdaptorV1) name() string { return i.ingress.Name } |
|
func (i *ingressAdaptorV1) namespace() string { return i.ingress.Namespace } |
|
func (i *ingressAdaptorV1) labels() map[string]string { return i.ingress.Labels } |
|
func (i *ingressAdaptorV1) annotations() map[string]string { return i.ingress.Annotations } |
|
func (i *ingressAdaptorV1) ingressClassName() *string { return i.ingress.Spec.IngressClassName } |
|
|
|
func (i *ingressAdaptorV1) tlsHosts() []string { |
|
var hosts []string |
|
for _, tls := range i.ingress.Spec.TLS { |
|
hosts = append(hosts, tls.Hosts...) |
|
} |
|
return hosts |
|
} |
|
|
|
func (i *ingressAdaptorV1) rules() []ingressRuleAdaptor { |
|
var rules []ingressRuleAdaptor |
|
for _, rule := range i.ingress.Spec.Rules { |
|
rules = append(rules, newIngressRuleAdaptorFromV1(rule)) |
|
} |
|
return rules |
|
} |
|
|
|
type ingressRuleAdaptorV1 struct { |
|
rule v1.IngressRule |
|
} |
|
|
|
func newIngressRuleAdaptorFromV1(rule v1.IngressRule) ingressRuleAdaptor { |
|
return &ingressRuleAdaptorV1{rule: rule} |
|
} |
|
|
|
func (i *ingressRuleAdaptorV1) paths() []string { |
|
rv := i.rule.IngressRuleValue |
|
if rv.HTTP == nil { |
|
return nil |
|
} |
|
paths := make([]string, len(rv.HTTP.Paths)) |
|
for n, p := range rv.HTTP.Paths { |
|
paths[n] = p.Path |
|
} |
|
return paths |
|
} |
|
|
|
func (i *ingressRuleAdaptorV1) host() string { return i.rule.Host }
|
|
|