# TP26 partie 3 : implémentation de WebApp : bucket S3 + file SQS (Floci) + Deployment + Service.
apiVersion: apiextensions.crossplane.io/v1
kind: Composition
metadata:
  name: webapp-floci
spec:
  compositeTypeRef:
    apiVersion: platform.lab.local/v1alpha1
    kind: WebApp
  mode: Pipeline
  pipeline:
    - step: patch-and-transform
      functionRef:
        name: function-patch-and-transform
      input:
        apiVersion: pt.fn.crossplane.io/v1beta1
        kind: Resources
        resources:
          - name: bucket
            base:
              apiVersion: s3.aws.upbound.io/v1beta1
              kind: Bucket
              spec:
                forProvider:
                  region: us-east-1
            patches:
              - type: ToCompositeFieldPath
                fromFieldPath: metadata.annotations[crossplane.io/external-name]
                toFieldPath: status.bucketName

          # TODO : ressource "queue" (sqs.aws.upbound.io/v1beta1, kind Queue, region us-east-1)

          - name: deployment
            base:
              apiVersion: apps/v1
              kind: Deployment
              spec:
                selector:
                  matchLabels: { app: webapp }
                template:
                  metadata:
                    labels: { app: webapp }
                  spec:
                    containers:
                      - name: app
                        image: placeholder
                        args: ["--port", "8080"]
                        ports: [{ containerPort: 8080 }]
            patches:
              - type: FromCompositeFieldPath
                fromFieldPath: spec.namespace
                toFieldPath: metadata.namespace
              - type: FromCompositeFieldPath
                fromFieldPath: spec.image
                toFieldPath: spec.template.spec.containers[0].image
              # TODO : recopier spec.replicas dans spec.replicas du Deployment

          # TODO : ressource "service" (v1 Service, selector app: webapp, port 80 → 8080),
          #        dans le namespace spec.namespace
