The CUE Central Registry provides a well-known location for well-known schemas, including those for the YAML workflow files used by Argo Workflows. This guide shows you how to get started defining your Argo workflows in CUE using a curated module from the schema library.
The latest pre-release of the cue
command is required – please
upgrade to this version if it’s not already installed:
$ cue version
cue version v0.13.0-alpha.3
...
Login to the Central Registry
$ cue login # only during beta
The Central Registry requires authentication while it’s in beta testing, so you need to login before you can use its schemas.
Initialise your local CUE module
CUE that uses schemas and modules from the Central Registry needs to exist within its own CUE module.
$ cue mod init cue.example
You can choose any module name you like - it’s easy to change it later. It makes sense for your CUE module to exist at the root of a source code repository, but the commands in this guide will work in any setup.
Create an Argo workflow
Declare an Argo workflow in CUE. This one comes from Argo’s examples:
// filepath: workflow.cue
package cicd
import argoworkflows "test.cue.works/x1/argocd"
workflows: example: argoworkflows.#Workflow & {
// This template demonstrates a steps template and how to control sequential vs. parallel steps.
// In this example, the hello1 completes before the hello2a, and hello2b steps, which run in parallel.
apiVersion: "argoproj.io/v1alpha1"
kind: "Workflow"
metadata: generateName: "steps-"
spec: {
entrypoint: "hello-hello-hello"
templates: [{
name: "hello-hello-hello"
steps: [[{
name: "hello1"
template: "print-message"
arguments: parameters: [{name: "message", value: "hello1"}]
}], [{
name: "hello2a"
template: "print-message"
arguments: parameters: [{name: "message", value: "hello2a"}]
}, {
name: "hello2b"
template: "print-message"
arguments: parameters: [{name: "message", value: "hello2b"}]
}],
]
}, {
name: "print-message"
inputs: parameters: [{name: "message"}]
container: {
image: "busybox"
command: ["echo"]
args: ["{{inputs.parameters.message}}"]
}
}]
}
}
In later guides we’ll add more entries to the workflows
struct.
The import
at the top references the appropriate curated module for the workflow.
Its path is currently temporary, but only while its proper location is being decided.
The temporary path isn’t a problem because one important property of the
Central Registry
is that, once a schema is published, it will always be
available at that location.
When the curated module’s location is finalised and versions are published
under the new path, you can use the
cue refactor imports
command to update your CUE easily, so it reflects the new location.
Tidy your local CUE module
$ cue mod tidy
Tidying a module is an important part of using curated modules from the
Central Registry.
Always use
cue mod tidy
when you use a curated module for the first time.
Validate your workflow
$ cue vet -c
Because cue vet
doesn’t display any errors, you know that the curated schema has validated your workflow.
Export your workflow as YAML
$ cue export --outfile workflow.yml -e workflows.example
If you chose to export the workflows.example
shown above,
your validated YAML workflow will look like this:
# filepath: workflow.yml
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: steps-
spec:
entrypoint: hello-hello-hello
templates:
- name: hello-hello-hello
steps:
- - name: hello1
template: print-message
arguments:
parameters:
- name: message
value: hello1
- - name: hello2a
template: print-message
arguments:
parameters:
- name: message
value: hello2a
- name: hello2b
template: print-message
arguments:
parameters:
- name: message
value: hello2b
- name: print-message
inputs:
parameters:
- name: message
container:
image: busybox
command:
- echo
args:
- '{{inputs.parameters.message}}'
Run your workflow
You can now trigger the Argo workflow using your validated YAML workflow file.
The cue.mod
directory needs to be stored in your source code repository,
along with your workflow.cue
and workflow.yml
files.
Whenever you update your CUE workflow, re-run the cue export
command shown
above, and then record any changes to these files and directories.