Skip to content

Commit

Permalink
Add CRD label selector for e2e tests (#200)
Browse files Browse the repository at this point in the history
On KVM e2e tests there are multiple instances of operators running at
the same time. In order to prevent race conditions, add label selector
to informer to only process CRs meant for current instance of operator.
  • Loading branch information
tuommaki committed Oct 3, 2018
1 parent 8ab2487 commit 36e42d4
Show file tree
Hide file tree
Showing 7 changed files with 26 additions and 0 deletions.
5 changes: 5 additions & 0 deletions flag/service/crd/crd.go
@@ -0,0 +1,5 @@
package crd

type CRD struct {
LabelSelector string
}
2 changes: 2 additions & 0 deletions flag/service/service.go
@@ -1,12 +1,14 @@
package service

import (
"github.com/giantswarm/cert-operator/flag/service/crd"
"github.com/giantswarm/cert-operator/flag/service/kubernetes"
"github.com/giantswarm/cert-operator/flag/service/resource"
"github.com/giantswarm/cert-operator/flag/service/vault"
)

type Service struct {
CRD crd.CRD
Kubernetes kubernetes.Kubernetes
Resource resource.Resource
Vault vault.Vault
Expand Down
2 changes: 2 additions & 0 deletions helm/cert-operator-chart/templates/configmap.yaml
Expand Up @@ -12,6 +12,8 @@ data:
listen:
address: 'http://0.0.0.0:8000'
service:
crd:
labelSelector: '{{ .Values.service.crd.labelSelector }}'
kubernetes:
address: ''
inCluster: true
Expand Down
3 changes: 3 additions & 0 deletions helm/cert-operator-chart/values.yaml
@@ -1 +1,4 @@
namespace: giantswarm
service:
crd:
labelSelector: ''
2 changes: 2 additions & 0 deletions main.go
Expand Up @@ -99,6 +99,8 @@ func main() {

daemonCommand := newCommand.DaemonCommand().CobraCommand()

daemonCommand.PersistentFlags().String(f.Service.CRD.LabelSelector, "", "Label selector for CRD informer ListOptions.")

daemonCommand.PersistentFlags().String(f.Service.Kubernetes.Address, "http://127.0.0.1:6443", "Address used to connect to Kubernetes. When empty in-cluster config is created.")
daemonCommand.PersistentFlags().Bool(f.Service.Kubernetes.InCluster, false, "Whether to use the in-cluster config to authenticate with Kubernetes.")
daemonCommand.PersistentFlags().String(f.Service.Kubernetes.TLS.CAFile, "", "Certificate authority file path to use to authenticate with Kubernetes.")
Expand Down
11 changes: 11 additions & 0 deletions service/controller/cert.go
Expand Up @@ -15,6 +15,7 @@ import (
"github.com/giantswarm/vaultrole"
vaultapi "github.com/hashicorp/vault/api"
apiextensionsclient "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"

"github.com/giantswarm/cert-operator/service/controller/v2"
Expand All @@ -28,12 +29,21 @@ type CertConfig struct {
VaultClient *vaultapi.Client

CATTL string
CRDLabelSelector string
CommonNameFormat string
ExpirationThreshold time.Duration
Namespace string
ProjectName string
}

func (c CertConfig) newInformerListOptions() metav1.ListOptions {
listOptions := metav1.ListOptions{
LabelSelector: c.CRDLabelSelector,
}

return listOptions
}

type Cert struct {
*controller.Controller
}
Expand Down Expand Up @@ -136,6 +146,7 @@ func NewCert(config CertConfig) (*Cert, error) {
Logger: config.Logger,
Watcher: config.G8sClient.CoreV1alpha1().CertConfigs(""),

ListOptions: config.newInformerListOptions(),
RateWait: informer.DefaultRateWait,
ResyncPeriod: informer.DefaultResyncPeriod,
}
Expand Down
1 change: 1 addition & 0 deletions service/service.go
Expand Up @@ -128,6 +128,7 @@ func New(config Config) (*Service, error) {
VaultClient: vaultClient,

CATTL: config.Viper.GetString(config.Flag.Service.Vault.Config.PKI.CA.TTL),
CRDLabelSelector: config.Viper.GetString(config.Flag.Service.CRD.LabelSelector),
CommonNameFormat: config.Viper.GetString(config.Flag.Service.Vault.Config.PKI.CommonName.Format),
ExpirationThreshold: config.Viper.GetDuration(config.Flag.Service.Resource.VaultCrt.ExpirationThreshold),
Namespace: config.Viper.GetString(config.Flag.Service.Resource.VaultCrt.Namespace),
Expand Down

0 comments on commit 36e42d4

Please sign in to comment.