Global configuration - generally set as environment variables but it works as system properties too.

IMPORTANT

for object lists, ensure to set xxxxx_LENGTH (or --xxxx-length for CLI style configuration) to specify the size of the related list. You can spot them by the $index keyword in the key and a subkey after.

yupiik.chords.dags.$index.edges.$index.condition (env: YUPIIK_CHORDS_DAGS_INDEX_EDGES_INDEX_CONDITION)

When to enable this edge. Default: io.yupiik.kubernetes.chords.core.ConfiguredDagContributor.DagsConfiguration.ConfigurableEdge.Condition.ON_SUCCESS.

yupiik.chords.dags.$index.edges.$index.from (env: YUPIIK_CHORDS_DAGS_INDEX_EDGES_INDEX_FROM)

Id the edge starts from (required).

yupiik.chords.dags.$index.edges.$index.to (env: YUPIIK_CHORDS_DAGS_INDEX_EDGES_INDEX_TO)

Id the edge ends to (required).

yupiik.chords.dags.$index.name (env: YUPIIK_CHORDS_DAGS_INDEX_NAME)

DAG identifier (required).

yupiik.chords.dags.$index.nodes.$index.descriptors (env: YUPIIK_CHORDS_DAGS_INDEX_NODES_INDEX_DESCRIPTORS)

List of descriptor to return for this node - as of today only JSON is supported. In this static mode, only a few placeholders are supported: ${now:datepattern} where datepattern is a DateTimeFormatter pattern used to format the OffsetDateTime representing current datetime in UTC zone. They can be a file path if easier to define because by default it will be split on a comma or the value set using sep=xxx|values..... Default: java.util.List.of().

yupiik.chords.dags.$index.nodes.$index.id (env: YUPIIK_CHORDS_DAGS_INDEX_NODES_INDEX_ID)

Node identifier.

Sample

YUPIIK_CHORDS_DAGS_LENGTH: 1

#
# DAG demo
#

YUPIIK_CHORDS_DAGS_0_NAME: demo

YUPIIK_CHORDS_DAGS_0_NODES_LENGTH: 3

YUPIIK_CHORDS_DAGS_0_NODES_0_ID: pre1
YUPIIK_CHORDS_DAGS_0_NODES_0_DESCRIPTORS_LENGTH: 0

YUPIIK_CHORDS_DAGS_0_NODES_1_ID: pre2
YUPIIK_CHORDS_DAGS_0_NODES_1_DESCRIPTORS_LENGTH: 0

YUPIIK_CHORDS_DAGS_0_NODES_2_ID: downstream
YUPIIK_CHORDS_DAGS_0_NODES_2_DESCRIPTORS: |\
  sep: _|{\
    "metadata":{"name":"second"},\
    ....\
  }

YUPIIK_CHORDS_DAGS_0_EDGES_LENGTH: 2

YUPIIK_CHORDS_DAGS_0_EDGES_0_FROM: pre1
YUPIIK_CHORDS_DAGS_0_EDGES_0_TO: second

YUPIIK_CHORDS_DAGS_0_EDGES_1_FROM: pre2
YUPIIK_CHORDS_DAGS_0_EDGES_1_TO: second

this does define a DAG where pre1 and pre2 can be CronJob or manually triggered Job - self managed by Kubernetes directly, and downstream is only triggered when both are finished for the same execution (see Getting Started ).

TIP

this is because the root node triggers is external that they don't define descriptors but just nodes, i.e. dependencies for downstream jobs.

Since the syntax for inline descriptors (YUPIIK_CHORDS_DAGS_0_NODES_2_DESCRIPTORS in previous example) is not always convenient that you can also pass a path: YUPIIK_CHORDS_DAGS_0_NODES_2_DESCRIPTORS: /opt/dags/downstream.json.