Skip to content

Functions

FunctionDefinition

Functions refer to anything executable by Direktiv as a unit of logic within a subflow that isn't otherwise part of basic state functionality. Usually this means either a purpose-built container or another workflow executed as a subflow. In some cases functions can be extensively configured, and they are often reused repeatedly within a workflow. To manage the size of Direktiv workflow definitions functions are predefined as much as possible and referenced when called.

These are the currently available function types:

The following example demonstrate how to define and reference a function within a workflow:

Workflow
direktiv_api: workflow/v1
description: |
  A basic demonstration of functions.
functions:
- type: knative-workflow
  id: request
  image: direktiv/request:latest
  size: small
states:
- id: getter
  type: action
  action:
    function: request
    input:
      method: "GET"
      url: "https://jsonplaceholder.typicode.com/todos/1"
Input
{}
Output
{
  "return": {
    "userId": 1,
    "id": 1,
    "title": "delectus aut autem",
    "completed": false
  }
}

NamespacedKnativeFunctionDefinition

A knative-namespace refers to a function that is implemented according to the requirements for a direktiv knative service. Specifically, in this case referring to a service configured to be available on the namespace.

This function type supports files.

Parameter Description Type Required
type Identifies which kind of FunctionDefinition is being used. In this case it must be set to knative-namespace. string yes
id A unique identifier for the function within the workflow definition. string yes
service URI to a function on the namespace. string yes
cmd Custom command to execute within the container. string no
envs Environment variables EnvironmentVariablesDefinition no
patches Patching the user container PatchDefinition no

WorkflowKnativeFunctionDefinition

A knative-workflow refers to a function that is implemented according to the requirements for a direktiv knative service. Specifically, in this case referring to a service that Direktiv can create on-demand for the exclusive use by this workflow.

This function type supports files.

Parameter Description Type Required
type Identifies which kind of FunctionDefinition is being used. In this case it must be set to knative-workflow. string yes
id A unique identifier for the function within the workflow definition. string yes
image URI to a knative-workflow compliant container. string yes
size Specifies the container size. ContainerSizeDefinition no
cmd Custom command to execute within the container. string no
envs Environment variables EnvironmentVariablesDefinition no
patches Patching the user container PatchDefinition no

PatchDefinition

With patches the configuration of the function can be changed. Direktiv is using Kubernetes' patching feature to apply those. The following commands can be applied: add, remove and replace. Not all of the paths inside a function can be modified. To ensure that changes don't break Direktiv's functionality the following list of paths can be used within the patch section.

  • /spec/template/metadata/labels
  • /spec/template/metadata/annotations
  • /spec/template/spec/affinity
  • /spec/template/spec/securityContext
  • /spec/template/spec/containers/0
Patching
  patches:
  - op: add
    path: /spec/template/metadata/annotations
    Value: { "my": "annotation" }
  - op: add
    path: /spec/template/spec/containers[0]/env
    Value: { "name": "hello", "value": "world" }

EnvironmentVariablesDefinition

Environment variables can be defined for namespace services as well as in function definitions. It is an array with name and value.

Environment Variables
envs:
- name: key
  value: value

Examples for environment variables can be found in the example section

ContainerSizeDefinition

When functions use containers you may be able to specify what size the container should be. This is done using one of three keywords, each representing a different size preset defined in Direktiv's configuration files:

  • small
  • medium
  • large

SubflowFunctionDefinition

A subflow refers to a function that is actually another workflow. The other workflow is called with some input and its output is returned to this workflow.

This function type does not support files.

Parameter Description Type Required
type Identifies which kind of FunctionDefinition is being used. In this case it must be set to subflow. string yes
id A unique identifier for the function within the workflow definition. string yes
workflow URI to a workflow within the same namespace. string yes