Skip to content

Template Level Volume

This is an upstream example that only appears in the docs.

See https://argo-workflows.readthedocs.io/en/latest/walk-through/volumes/

from hera.workflows import (
    Container,
    ExistingVolume,
    Parameter,
    Resource,
    Step,
    Steps,
    Workflow,
)

with Workflow(
    generate_name="template-level-volume-",
    entrypoint="generate-and-use-volume",
) as w:
    generate_volume = Resource(
        name="generate-volume",
        inputs=[Parameter(name="pvc-size")],
        outputs=[Parameter(name="pvc-name", value_from={"jsonPath": "{.metadata.name}"})],
        action="create",
        set_owner_reference=True,
        manifest="""apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  generateName: pvc-example-
spec:
  accessModes: ['ReadWriteOnce', 'ReadOnlyMany']
  resources:
    requests:
      storage: '{{inputs.parameters.pvc-size}}'
""",
    )
    whalesay = Container(
        name="whalesay",
        inputs=[Parameter(name="pvc-name")],
        volumes=[ExistingVolume(name="workdir", claim_name="{{inputs.parameters.pvc-name}}", mount_path="/mnt/vol")],
        image="docker/whalesay:latest",
        command=["sh", "-c"],
        args=["echo generating message in volume; cowsay hello world | tee /mnt/vol/hello_world.txt"],
    )
    print_message = Container(
        name="print-message",
        inputs=[Parameter(name="pvc-name")],
        volumes=[ExistingVolume(name="workdir", claim_name="{{inputs.parameters.pvc-name}}", mount_path="/mnt/vol")],
        image="alpine:latest",
        command=["sh", "-c"],
        args=["echo getting message from volume; find /mnt/vol; cat /mnt/vol/hello_world.txt"],
    )
    with Steps(name="generate-and-use-volume") as s:
        generate_vol_step: Step = generate_volume(name="generate-volume", arguments={"pvc-size": "1Gi"})
        whalesay(name="generate", arguments=generate_vol_step.get_parameter("pvc-name"))
        print_message(name="print", arguments=generate_vol_step.get_parameter("pvc-name"))
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: template-level-volume-
spec:
  entrypoint: generate-and-use-volume
  templates:
  - inputs:
      parameters:
      - name: pvc-size
    name: generate-volume
    outputs:
      parameters:
      - name: pvc-name
        valueFrom:
          jsonPath: '{.metadata.name}'
    resource:
      action: create
      manifest: |
        apiVersion: v1
        kind: PersistentVolumeClaim
        metadata:
          generateName: pvc-example-
        spec:
          accessModes: ['ReadWriteOnce', 'ReadOnlyMany']
          resources:
            requests:
              storage: '{{inputs.parameters.pvc-size}}'
      setOwnerReference: true
  - container:
      args:
      - echo generating message in volume; cowsay hello world | tee /mnt/vol/hello_world.txt
      command:
      - sh
      - -c
      image: docker/whalesay:latest
      volumeMounts:
      - mountPath: /mnt/vol
        name: workdir
    inputs:
      parameters:
      - name: pvc-name
    name: whalesay
    volumes:
    - name: workdir
      persistentVolumeClaim:
        claimName: '{{inputs.parameters.pvc-name}}'
  - container:
      args:
      - echo getting message from volume; find /mnt/vol; cat /mnt/vol/hello_world.txt
      command:
      - sh
      - -c
      image: alpine:latest
      volumeMounts:
      - mountPath: /mnt/vol
        name: workdir
    inputs:
      parameters:
      - name: pvc-name
    name: print-message
    volumes:
    - name: workdir
      persistentVolumeClaim:
        claimName: '{{inputs.parameters.pvc-name}}'
  - name: generate-and-use-volume
    steps:
    - - arguments:
          parameters:
          - name: pvc-size
            value: 1Gi
        name: generate-volume
        template: generate-volume
    - - arguments:
          parameters:
          - name: pvc-name
            value: '{{steps.generate-volume.outputs.parameters.pvc-name}}'
        name: generate
        template: whalesay
    - - arguments:
          parameters:
          - name: pvc-name
            value: '{{steps.generate-volume.outputs.parameters.pvc-name}}'
        name: print
        template: print-message

Comments