Skip to content

Instantly share code, notes, and snippets.

@benjaminws
Last active October 13, 2019 19:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save benjaminws/190b480a03843cda58b59271bc6cf375 to your computer and use it in GitHub Desktop.
Save benjaminws/190b480a03843cda58b59271bc6cf375 to your computer and use it in GitHub Desktop.
argo workflow in starlark
metav1 = proto.package("k8s.io.apimachinery.pkg.apis.meta.v1")
wfv1 = proto.package("github.com.argoproj.argo.pkg.apis.workflow.v1alpha1")
def workflow(name = None):
""" Common workflow metadata to be used in many workflows """
if not name:
name = "workflow"
return wfv1.Workflow(
metadata = metav1.ObjectMeta(
namespace = "argo",
generateName = "{}-".format(name),
labels = {
"workflows.argoproj.io/controller-instanceid": "argo",
},
),
)
load("//common.bzl", "workflow")
corev1 = proto.package("k8s.io.api.core.v1")
metav1 = proto.package("k8s.io.apimachinery.pkg.apis.meta.v1")
wfv1 = proto.package("github.com.argoproj.argo.pkg.apis.workflow.v1alpha1")
def main(ctx):
w = workflow(name = "nested-dag")
w.spec = wfv1.WorkflowSpec(
entrypoint = "diamond",
ttlSecondsAfterFinished = 90,
templates = [
wfv1.Template(
name = "echo",
inputs = wfv1.Inputs(
parameters = [
wfv1.Parameter(name = "message"),
],
),
container = corev1.Container(
name = "alpine",
image = "alpine:2.7",
command = [
"echo",
"{{inputs.parameters.message}}",
],
),
),
wfv1.Template(
name = "diamond",
dag = wfv1.DAGTemplate(
tasks = [
wfv1.DAGTask(
name = "A",
template = "nested-diamond",
arguments = wfv1.Arguments(
parameters = [
wfv1.Parameter(name = "message", value = "A"),
],
),
),
wfv1.DAGTask(
name = "B",
template = "nested-diamond",
dependencies = ["A"],
arguments = wfv1.Arguments(
parameters = [
wfv1.Parameter(name = "message", value = "B"),
],
),
),
wfv1.DAGTask(
name = "C",
template = "nested-diamond",
dependencies = ["A"],
arguments = wfv1.Arguments(
parameters = [
wfv1.Parameter(name = "message", value = "C"),
],
),
),
wfv1.DAGTask(
name = "D",
template = "nested-diamond",
dependencies = ["B", "C"],
arguments = wfv1.Arguments(
parameters = [
wfv1.Parameter(name = "message", value = "D"),
],
),
),
],
),
),
wfv1.Template(
name = "nested-diamond",
inputs = wfv1.Inputs(
parameters = [
wfv1.Parameter(name = "message"),
],
),
dag = wfv1.DAGTemplate(
tasks = [
wfv1.DAGTask(
name = "A",
template = "echo",
arguments = wfv1.Arguments(
parameters = [
wfv1.Parameter(name = "message", value = "{{inputs.parameters.message}}A"),
],
),
),
wfv1.DAGTask(
name = "B",
template = "echo",
dependencies = ["A"],
arguments = wfv1.Arguments(
parameters = [
wfv1.Parameter(name = "message", value = "{{inputs.parameters.message}}B"),
],
),
),
wfv1.DAGTask(
name = "C",
template = "echo",
dependencies = ["A"],
arguments = wfv1.Arguments(
parameters = [
wfv1.Parameter(name = "message", value = "{{inputs.parameters.message}}C"),
],
),
),
wfv1.DAGTask(
name = "D",
template = "echo",
dependencies = ["B", "C"],
arguments = wfv1.Arguments(
parameters = [
wfv1.Parameter(name = "message", value = "{{inputs.parameters.message}}D"),
],
),
),
],
),
),
],
)
return [w]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment