Skip to content

WorkflowTemplate

apiVersion: argoproj.io/v1alpha1
kind: WorkflowTemplate
metadata:
  name: http-base
spec:
  arguments:
    parameters:
      - name: endpoint
        description: Endpoint where should to be send the request
      - name: method
        description: Http method used in the request
      - name: payload
        description: Body of the request to send

  podMetadata:
    annotations:
      iam.amazonaws.com/role: arn:aws:iam::123456789012:my-role

  templates:
    - name: my-request
      inputs:
        parameters:
          - name: endpoint
          - name: method
          - name: payload
      container:
        image: 123456789012.dkr.ecr.us-east-1.amazonaws.com/mirror/curlimages/curl:latest
        command:
          - sh
          - -c
          - |-
            HTTP_CODE=$(curl -vv -s \
              -H "Authorization:Bearer $(cat /data/access_token)"  \
              -H "Content-type: application/json" \
              -H "Accept: application/json; charset=utf-8" \
              --data '{{inputs.parameters.payload}}' \
              --key /data/key.pem \
              --cert /data/cert.pem \
              -X {{inputs.parameters.method}} "{{inputs.parameters.endpoint}}" \
              -o /dev/stderr \
              -w "%{http_code}")
            if [ "$HTTP_CODE" -lt 200 ] || [ "$HTTP_CODE" -gt 299 ]; then
              echo "ERRO: A requisição falhou com status $HTTP_CODE"
              exit 1
            fi
        volumeMounts:
          - mountPath: /data
            name: data
      initContainers:
        - name: secrets-server
          command:
            - /bin/sh
            - -c
          args:
            - |-
              exec java ...
          env:
            - name: OTEL_METRICS_EXPORTER
              value: none
            - name: OTEL_LOGS_EXPORTER
              value: none
            - name: OTEL_TRACES_EXPORTER
              value: none
          image: 123456789012.dkr.ecr.us-east-1.amazonaws.com/my-image
          imagePullPolicy: Always
          resources:
            limits:
              cpu: "1"
              memory: 1Gi
            requests:
              cpu: "1"
              memory: 1Gi
          volumeMounts:
            - mountPath: /data
              name: data
      volumes:
        - emptyDir: {}
          name: data

Using a Template

apiVersion: argoproj.io/v1alpha1
kind: WorkflowTemplate
metadata:
  name: evidence-template
spec:
  arguments:
    parameters:
      - name: dashboard-id
        description: Grafana dashboard ID (numeric or UID)
      - name: variables
        description: 'JSON object with dashboard variables. Ex. {"DATASOURCE": "staging-metrics"}'
      - name: from
        description: Start datetime in ISO 8601 (UTC). Ex. 2025-12-17T18:00:00.000Z
      - name: to
        description: End datetime in ISO 8601 (UTC), after "from". Ex. 2025-12-17T20:00:00.000Z

  templates:
    - name: collect-evidences
      inputs:
        parameters:
          - name: dashboard-id
            description: Grafana dashboard ID (numeric or UID)
          - name: variables
            description: 'JSON object with dashboard variables. Ex. {"DATASOURCE": "staging-metrics-ist"}'
          - name: from
            description: Start datetime in ISO 8601 (UTC). Ex. 2025-12-17T18:00:00.000Z
          - name: to
            description: End datetime in ISO 8601 (UTC), after "from". Ex. 2025-12-17T20:00:00.000Z
      steps:
        - - name: run-request
            templateRef:
              name: http-base
              template: my-request
            arguments:
              parameters:
                - name: endpoint
                  value: "https://mygrafana.com"
                - name: method
                  value: "POST"
                - name: payload
                  value: |
                    {
                      "evidence-type": "grafana",
                      "from": "{{inputs.parameters.from}}",
                      "to": "{{inputs.parameters.to}}",
                      "dashboard-id": "{{inputs.parameters.dashboard-id}}",
                      "variables": {{inputs.parameters.variables}}
                    }