open-feature / open-feature-operator

A Kubernetes feature flag operator
https://openfeature.dev
Apache License 2.0
198 stars 36 forks source link

Additional e2e tests #438

Closed toddbaert closed 1 year ago

toddbaert commented 1 year ago

We should write some more e2e (KUTTL) tests:

odubajDT commented 1 year ago

I would like to take this issue :)

odubajDT commented 1 year ago

Do we please have a usage example of using the file or flagd-proxy sync ? Would be very helpful.

Thank you!

toddbaert commented 1 year ago

@odubajDT here is the doc on FlagSourceConfiguration.

Here is an example I've used locally. Notice how the workload is annotated with the FlagSourceConfiguration and the FlagSourceConfiguration has multiple different sources:

# A basic flag custom resource
apiVersion: core.openfeature.dev/v1alpha2
kind: FeatureFlagConfiguration
metadata:
  name: end-to-end
  labels:
    app: open-feature-demo
spec:
  featureFlagSpec:
    flags:
      new-welcome-message:
        state: ENABLED
        variants:
          'on': true
          'off': false
        defaultVariant: 'off'
      hex-color:
        variants:
          red: c05543
          green: 2f5230
          blue: 0d507b
        defaultVariant: red
        state: ENABLED
      fib-algo:
        variants:
          recursive: recursive
          memo: memo
          loop: loop
          binet: binet
        defaultVariant: recursive
        state: ENABLED
        targeting:
          if:
            - in:
              - "@faas.com"
              - var:
                - email
            - binet
            - null
      use-remote-fib-service:
        state: ENABLED
        variants:
          'on': true
          'off': false
        defaultVariant: 'off'
---
apiVersion: core.openfeature.dev/v1alpha2
kind: FeatureFlagConfiguration
metadata:
  name: end-to-end2
  labels:
    app: open-feature-demo
spec:
  featureFlagSpec:
    flags:
      some-flag:
        state: ENABLED
        variants:
          'one': one
          'two': two
        defaultVariant: 'one'
---
apiVersion: core.openfeature.dev/v1alpha3
kind: FlagSourceConfiguration
metadata:
    name: end-to-end-fsc
spec:
    sources:
    - source: default/end-to-end
      provider: filepath                     # this can be "filepath", "kubernetes" or "kube-proxy"
    - source: default/end-to-end2
      provider: kube-proxy
---
# Deployment of a demo-app using our custom resource
apiVersion: apps/v1
kind: Deployment
metadata:
  name: open-feature-demo-deployment
  labels:
    app: open-feature-demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: open-feature-demo
  template:
    metadata:
      labels:
        app: open-feature-demo
      annotations:
        openfeature.dev/enabled: "true"
        openfeature.dev/flagsourceconfiguration: "end-to-end-fsc"
    spec:
      containers:
        - name: open-feature-demo
          image: ghcr.io/open-feature/playground-app:v0.6.3 # x-release-please-version
          args:
            - flagd
          ports:
            - containerPort: 30000

---
# Service exposed using NodePort
apiVersion: v1
kind: Service
metadata:
  name: open-feature-demo-service
  labels:
    app: open-feature-demo
spec:
  type: NodePort
  selector:
    app: open-feature-demo
  ports:
    # By default and for convenience, the `targetPort` is set to the same value as the `port` field.
    - port: 30000
      targetPort: 30000
      nodePort: 30000
odubajDT commented 1 year ago

Thank you very much!