# TP26 partie 5 : la même idée avec kro : un schéma simple + un graphe de ressources reliées par des expressions CEL.
apiVersion: kro.run/v1alpha1
kind: ResourceGraphDefinition
metadata:
  name: webapplication
spec:
  schema:
    apiVersion: v1alpha1
    kind: WebApplication
    spec:
      name: string
      image: string | default="traefik/whoami:v1.10.0"
      replicas: integer | default=1
      ingress:
        enabled: boolean | default=false
        host: string | default="app.lab.local"
    status:
      availableReplicas: ${deployment.status.availableReplicas}
  resources:
    - id: deployment
      template:
        apiVersion: apps/v1
        kind: Deployment
        metadata:
          name: ${schema.spec.name}
        spec:
          replicas: ${schema.spec.replicas}
          selector:
            matchLabels: { app: "${schema.spec.name}" }
          template:
            metadata:
              labels: { app: "${schema.spec.name}" }
            spec:
              containers:
                - name: app
                  image: ${schema.spec.image}
                  args: ["--port", "8080"]
                  ports: [{ containerPort: 8080 }]
    - id: service
      template:
        apiVersion: v1
        kind: Service
        metadata:
          name: ${schema.spec.name}
        spec:
          # TODO : sélectionner les Pods du Deployment en réutilisant ses labels
          #        (${deployment.spec.selector.matchLabels}) : kro en déduit l'ordre de création
          ports: [{ port: 80, targetPort: 8080 }]
    # TODO : ressource "ingress" créée uniquement si ingress.enabled (includeWhen),
    #        vers le Service ${service.metadata.name}, hôte ${schema.spec.ingress.host}
