53 lines
1.3 KiB
Go

package store
import (
"bitbucket.org/lightcodelabs/ingress/internal/caddy"
"k8s.io/api/extensions/v1beta1"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
"k8s.io/klog"
)
// Store represents a collection of ingresses and secrets that we are monitoring.
type Store struct {
Ingresses []*v1beta1.Ingress
Secrets []interface{} // TODO :- should we store the secrets in the ingress object?
CaddyConfig *caddy.Config
}
// NewStore returns a new store that keeps track of ingresses and secrets. It will attempt to get
// all current ingresses before returning.
func NewStore(kubeClient *kubernetes.Clientset) *Store {
ingresses, err := kubeClient.ExtensionsV1beta1().Ingresses("").List(v1.ListOptions{})
if err != nil {
klog.Errorf("could not get existing ingresses in cluster")
return &Store{}
}
s := &Store{
Ingresses: []*v1beta1.Ingress{},
CaddyConfig: caddy.NewConfig(),
}
for _, i := range ingresses.Items {
s.Ingresses = append(s.Ingresses, &i)
}
return s
}
// AddIngress adds an ingress to the store
func (s *Store) AddIngress(ing *v1beta1.Ingress) {
isUniq := true
for _, i := range s.Ingresses {
if i.GetUID() == ing.GetUID() {
isUniq = false
}
}
if isUniq {
s.Ingresses = append(s.Ingresses, ing)
}
}