---
kind: EndpointSlice
apiVersion: discovery.k8s.io/v1
metadata:
  name: whoami6-abc
  namespace: baz
  labels:
    kubernetes.io/service-name: whoami6

addressType: IPv4
ports:
  - name: web
    port: 8080
endpoints:
  - addresses:
      - 10.10.0.5
      - 10.10.0.6
    conditions:
      ready: true

---
kind: EndpointSlice
apiVersion: discovery.k8s.io/v1
metadata:
  name: whoami5-abc
  namespace: foo
  labels:
    kubernetes.io/service-name: whoami5

addressType: IPv4
ports:
  - name: web
    port: 8080
endpoints:
  - addresses:
      - 10.10.0.3
      - 10.10.0.4
    conditions:
      ready: true

---
kind: EndpointSlice
apiVersion: discovery.k8s.io/v1
metadata:
  name: whoami4-abc
  namespace: foo
  labels:
    kubernetes.io/service-name: whoami4

addressType: IPv4
ports:
  - name: web
    port: 8080
endpoints:
  - addresses:
      - 10.10.0.1
      - 10.10.0.2
    conditions:
      ready: true

---
apiVersion: v1
kind: Service
metadata:
  name: whoami6
  namespace: baz

spec:
  ports:
    - name: web
      port: 8080
  selector:
    app: traefiklabs
    task: whoami6

---
apiVersion: v1
kind: Service
metadata:
  name: whoami5
  namespace: foo

spec:
  ports:
    - name: web
      port: 8080
  selector:
    app: traefiklabs
    task: whoami5

---
apiVersion: v1
kind: Service
metadata:
  name: whoami4
  namespace: foo

spec:
  ports:
    - name: web
      port: 8080
  selector:
    app: traefiklabs
    task: whoami4

---
apiVersion: traefik.io/v1alpha1
kind: TraefikService
metadata:
  name: mirror1
  namespace: foo

spec:
  mirroring:
    name: whoami5
    port: 8080
    namespace: foo
    mirrors:
      - name: whoami4
        port: 8080
      - name: whoami6
        port: 8080
        namespace: baz
      - name: mirrored
        kind: TraefikService
        namespace: bar

---
apiVersion: traefik.io/v1alpha1
kind: TraefikService
metadata:
  name: wrr2
  namespace: bar

spec:
  weighted:
    services:
      - name: whoami5
        namespace: foo
        weight: 1
        port: 8080

---
apiVersion: traefik.io/v1alpha1
kind: TraefikService
metadata:
  name: mirror2
  namespace: foo

spec:
  mirroring:
    name: whoami5
    port: 8080
    mirrors:
      - name: whoami4
        port: 8080
      - name: whoami6
        port: 8080
        namespace: baz
      - name: mirrored
        kind: TraefikService
        namespace: bar
      - name: wrr1
        kind: TraefikService
        namespace: foo

---
apiVersion: traefik.io/v1alpha1
kind: TraefikService
metadata:
  name: mirror3
  namespace: foo

spec:
  mirroring:
    name: wrr1
    kind: TraefikService
    namespace: foo
    mirrors:
      - name: whoami4
        port: 8080
      - name: whoami6
        port: 8080
        namespace: baz
      - name: mirrored
        kind: TraefikService
        namespace: bar
      - name: wrr1
        kind: TraefikService
        namespace: foo


---
apiVersion: traefik.io/v1alpha1
kind: TraefikService
metadata:
  name: mirror4
  namespace: foo

spec:
  mirroring:
    name: wrr1
    kind: TraefikService
    mirrors:
      - name: whoami4
        port: 8080
      - name: whoami6
        port: 8080
        namespace: baz
      - name: mirrored
        kind: TraefikService
        namespace: bar
      - name: wrr1
        kind: TraefikService
        namespace: foo

---
apiVersion: traefik.io/v1alpha1
kind: TraefikService
metadata:
  name: mirrored
  namespace: bar

spec:
  mirroring:
    name: whoami6
    port: 8080
    namespace: baz
    mirrors:
      - name: whoami4
        percent: 50
        port: 8080
        namespace: foo

---
apiVersion: traefik.io/v1alpha1
kind: TraefikService
metadata:
  name: wrr1
  namespace: foo

spec:
  weighted:
    services:
      - name: whoami4
        port: 8080
      - name: whoami6
        port: 8080
        namespace: baz
      - name: mirror1
        kind: TraefikService
      - name: wrr2
        kind: TraefikService
        namespace: bar

---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  name: test.route
  namespace: default

spec:
  entryPoints:
    - web

  routes:
    - match: Host(`foo.com`) && PathPrefix(`/foo`)
      kind: Rule
      priority: 12
      services:
      - name: whoami6
        port: 8080
        namespace: baz
      - name: wrr1
        kind: TraefikService
        namespace: foo
      - name: mirror2
        kind: TraefikService
        namespace: foo
      - name: mirror3
        kind: TraefikService
        namespace: foo
      - name: mirror4
        kind: TraefikService
        namespace: foo
