Skip to content

Outputs

Operation outputs can be useful for communicating and reusing computation results across operations.

Chainsaw evaluates outputs after an operation has finished executing. The results of output evaluations are registered in the bindings and are made available for the following operations.

Syntax

Basic

The test below illustrates output usage:

apiVersion: chainsaw.kyverno.io/v1alpha1
kind: Test
metadata:
  name: example
spec:
  bindings:
  - name: chainsaw
    value: chainsaw
  steps:
  - bindings:
    - name: hello
      value: hello
    try:
    - script:
        bindings:
        - name: awesome
          value: awesome
        env:
        - name: GREETINGS
          value: (join(' ', [$hello, $chainsaw, 'is', $awesome]))
        # output is used to register a new `$OUTPUT` binding
        outputs:
        - name: OUTPUT
          value: ($stdout)
        content: echo $GREETINGS
    - script:
        # output from the previous operation is used
        # to configure an evironment variable
        env:
        - name: INPUT
          value: ($OUTPUT)
        content: echo $INPUT

Matching

An output supports an optional match field. The match statement is used to conditionally assign the output binding.

The test below illustrates output with matching:

apiVersion: chainsaw.kyverno.io/v1alpha1
kind: Test
metadata:
  name: example
spec:
  bindings:
  - name: chainsaw
    value: chainsaw
  steps:
  - bindings:
    - name: hello
      value: hello
    try:
    - script:
        bindings:
        - name: awesome
          value: awesome
        env:
        - name: GREETINGS
          value: (join(' ', [$hello, $chainsaw, 'is', $awesome]))
        # output is used to register a new `$OUTPUT` binding
        outputs:
          # by default, the `$OUTPUT` binding is assigned
          # the content of the standard output
        - name: OUTPUT
          value: ($stdout)
          # if the match statement evaluates to true,
          # the `$OUTPUT` binding will be set to
          # 'YES! chainsaw is awesome'
        - match:
            ($OUTPUT): hello chainsaw is awesome
          name: OUTPUT
          value: YES! chainsaw is awesome
        content: echo $GREETINGS
    - script:
        # output from the previous operation is used
        # to configure an evironment variable
        env:
        - name: INPUT
          value: ($OUTPUT)
        content: echo $INPUT

Reference

Browse the reference documentation to see the syntax details and where outputs can be declared.

Templating

Both name and value of an output can use templating.