Serverless Container Workflows

Overview

direktiv


vorteil

event-based serverless container workflows


Build Go Report Card Discord

Check out our online demo: wf.direktiv.io

What is Direktiv?

Direktiv is a specification for a serverless computing workflow language that aims to be simple and powerful above all else.

Direktiv defines a selection of intentionally primitive states, which can be strung together to create workflows as simple or complex as the author requires. The powerful jq JSON processor allows authors to implement sophisticated control flow logic, and when combined with the ability to run containers as part of Direktiv workflows just about any logic can be implemented.

Workflows can be triggered by CloudEvents for event-based solutions, can use cron scheduling to handle periodic tasks, and can be scripted using the APIs for everything else.

Why use Direktiv?

Direktiv was created to address 4 problems faced with workflow engines in general:

  • Cloud agnostic: we wanted Direktiv to run on any platform or cloud, support any code or capability and NOT be dependent on the cloud provider's services for running the workflow or executing the actions (but obviously support it all)
  • Simplicity: the configuration of the workflow components should be simple more than anything else. Using only YAML and jq you should be able to express all workflow states, transitions, evaluations and actions needed to complete the workflow
  • Reusable: if you're going to the effort and trouble of pushing all your microservices, code or application components into a container platform why not have the ability to reuse and standardise this code across all of your workflows. We wanted to ensure that your code always remains reusable and portable and not tied into a specific vendor format or requirement (or vendor specific language) - so we've modelled Direktiv's specification after the CNCF Serverless Workflow Specification with the ultimate goal to make it feature-complete and easy to implement.
  • Multi-tenanted and secure: we want to use Direktiv in a multi-tenant service provider space, which means all workflow executions have to be isolated, data access secured and isolated and all workflows and actions are truly ephemeral (or serverless).

Direktiv internals?

This repository contains a reference implementation that runs Docker containers as isolated virtual machines on Firecracker using Vorteil.io.

direktiv

Quickstart

Starting the Server

Getting a local playground environment can be easily done with either Vorteil.io or Docker. Direktiv's defaul isolation level is firecracker based on vorteil machines. This behaviour can be changed in the configuration file or via environment variable.


Using Docker:

Firecracker Isolation

docker run --privileged -p6666:6666 -eDIREKTIV_INGRESS_BIND=0.0.0.0:6666 vorteil/direktiv

Container Isolation:

docker run --privileged -p6666:6666 -eDIREKTIV_INGRESS_BIND=0.0.0.0:6666 -eDIREKTIV_ISOLATION=container vorteil/direktiv

*Note: *

  • You may need to run this command as an administrator.

  • In a public cloud instance, nested virualization is needed to support the firecracker micro-VMs. Each public cloud provider has different configuration settings which need to be applied to enable nested virtualization. Examples are shown below for each public cloud provider:

Using Vorteil:

With Vorteil installed (full instructions here):

  1. download direktiv.vorteil from the releases page,
  2. run one of the following commands from within your downloads folder:

vorteil run direktiv.vorteil for firecracker/vorteil isolation

vorteil run --program[2].env="DIREKTIV_ISOLATION=container" direktiv.vorteil for container isolation

Testing Direktiv:

Download the direkcli command-line tool from the releases page and create your first namespace by running:

direkcli namespaces create demo

$ direkcli namespaces create demo
Created namespace: demo
$ direkcli namespaces list
+------+
| NAME |
+------+
| demo |
+------+

Workflow specification

The below example is the minimal configuration needed for a workflow, following the workflow language specification:

id: helloworld
states:
- id: hello
  type: noop
  transform: '{ msg: ("Hello, " + .name + "!") }'

Creating and Running a Workflow

The following script does everything required to run the first workflow. This includes creating a namespace & workflow and running the workflow the first time.

$ direkcli namespaces create demo
Created namespace: demo
$ cat > helloworld.yml <<- EOF
id: helloworld
states:
- id: hello
  type: noop
  transform: '{ msg: ("Hello, " + .name + "!") }'
EOF
$ direkcli workflows create demo helloworld.yml
Created workflow 'helloworld'
$ cat > input.json <<- EOF
{
  "name": "Alan"
}
EOF
$ direkcli workflows execute demo helloworld --input=input.json
Successfully invoked, Instance ID: demo/helloworld/aqMeFX <---CHANGE_THIS_TO_YOUR_VALUE
$ direkcli instances get demo/helloworld/aqMeFX
ID: demo/helloworld/aqMeFX
Input: {
  "name": "Alan"
}
Output: {"msg":"Hello, Alan!"}

Roadmap

  • Installation instructions (Kubernetes, Non-Kubernetes environments, Container/Vorteil setting)
  • Providing individual vorteil / docker containers for individual components (workflow, isolates etc.)
  • HTTP API & Simple UI
  • Service Mesh configuration

Code of Conduct

We have adopted the Contributor Covenant code of conduct.

Contributing

Any feedback and contributions are welcome. Read our contributing guidelines for details.

License

Distributed under the Apache 2.0 License. See LICENSE for more information.

See Also

Comments
  • Update Helm charts to make ingress-nginx more configurable

    Update Helm charts to make ingress-nginx more configurable

    Update Helm charts to make ingress-nginx more configurable

    Given we want to try out Direktiv in Kubernetes When we install the dependencies Then we want the ability to be able to bring our own ingress-nginx, and set our own annotations for the ingress so for things like external dns, cert manager etc.

    Acceptance criteria:

    API Ingress Manifest

    charts/direktiv/templates/ingress-api.yaml

    • [ ] Add Annotations to charts/direktiv/values.yaml under ingress line 92 for ingress-api.yaml

    UI Ingress Manifest

    charts/direktiv/templates/ingress-ui.yaml

    • [ ] Add Annotations to charts/direktiv/values.yaml under ingress line 92 for ingress-ui.yaml

    Note: it could be better to put the ingress configuration under the ui: and api: as it will make it scalable for the future

    Add ingress-nginx dependency as optional

    charts/direktiv/Chart.yaml

    • [ ] Have a flag for whether you install the ingress-nginx or not.
    opened by bradmccoydev 5
  • access to instance id

    access to instance id

    Is your feature request related to a problem? Please describe.

    It would be good if the instance could access the instance id. If I want to publish events and want to use something as context value to wait for e.g. multiple async subflows.

    Describe the solution you'd like

    Up for discussion

    Describe alternatives you've considered

    At the moment I'm using something like jq(.name + (now | todateiso8601 | fromdate | tostring)). Not so nice output.

    enhancement 
    opened by jensg-st 5
  • Workflow Example did not work

    Workflow Example did not work

    Describe the bug A clear and concise description of what the bug is.

    To Reproduce Steps to reproduce the behavior:

    1. docker run --privileged -p 8080:80 -ti vorteil/direktiv-kube (done,It works)
    2. direkcli namespaces create demo (done,It works)
    3. create test.yml file below content (done)

    `id: check-nsfw-image description: "Classify an image uploaded to Azure Blob Storage as SFW or NSFW using Google Vision, AWS Lambda and Azure Storage functions" start: type: event state: getRatingFromGoogleVision event: type: Microsoft.Storage.BlobCreated functions:

    • id: imageCheck image: vorteil/imagerecognition:v2
    • id: awslambda image: vorteil/lambda:v2
    • id: send-email image: vorteil/smtp:v2
    • id: azureupload image: vorteil/azure-upload:v2
    • id: azurecli image: vorteil/azgo:v2 size: large
      states:
    • id: getRatingFromGoogleVision type: action action: secrets: ["GOOGLE_SERVICE_ACCOUNT_KEY"] function: imageCheck input: '{ "url": ."Microsoft.Storage.BlobCreated".url, "serviceAccountKey": .secrets.GOOGLE_SERVICE_ACCOUNT_KEY
      }' transition: checkRatingForImage
    • id: checkRatingForImage log: "." type: switch conditions:
      • condition: .return.safeForWork == true transition: addWaterMarkApproved defaultTransition: addWaterMarkNotApproved
    • id: addWaterMarkApproved type: action action: function: awslambda secrets: ["LAMBDA_KEY", "LAMBDA_SECRET"] input: '{ key: .secrets.LAMBDA_KEY, secret: .secrets.LAMBDA_SECRET, region: "ap-southeast-2", function: "python-watermark", body: { imageurl: ."Microsoft.Storage.BlobCreated".url, message: "Approved by Direktiv.io", } }' transform: '.notify = .return | del(.return)' transition: copyFileToSafeForWork
    • id: addWaterMarkNotApproved type: action action: function: awslambda secrets: ["LAMBDA_KEY", "LAMBDA_SECRET"] input: '{ key: .secrets.LAMBDA_KEY, secret: .secrets.LAMBDA_SECRET, region: "ap-southeast-2", function: "python-watermark", body: { imageurl: ."Microsoft.Storage.BlobCreated".url, message: "Not approved by Direktiv.io", } }' transform: '.notify = .return | del(.return)' transition: sendEmail
    • id: sendEmail type: action log: "." action: function: send-email secrets: ["GMAIL_PASSWORD"] input: '{ "from": "[email protected]", "to": "[email protected]", "subject": "Direktiv NSFW Image Workflow", "message": "NSFW Image detected", "server": "smtp.gmail.com", "port": 587, "password": .secrets.GMAIL_PASSWORD }' transition: copyFileToNotSafeForWork
    • id: copyFileToNotSafeForWork type: action log: "." action: secrets: ["AZ_STORAGE_ACCOUNT", "AZ_STORAGE_KEY"] function: azureupload input: '{ "container": "not-safe-for-work", "storage-account": .secrets.AZ_STORAGE_ACCOUNT, "storage-account-key": .secrets.AZ_STORAGE_KEY, "data": .notify.body, "upload-name": ."Microsoft.Storage.BlobCreated".url | capture("(?[a-z.]+$)").filename }' transition: cleanup
    • id: copyFileToSafeForWork type: action log: "." action: secrets: ["AZ_STORAGE_ACCOUNT", "AZ_STORAGE_KEY"] function: azureupload input: '{ "container": "safe-for-work", "storage-account": .secrets.AZ_STORAGE_ACCOUNT, "storage-account-key": .secrets.AZ_STORAGE_KEY, "data": .notify.body, "upload-name": ."Microsoft.Storage.BlobCreated".url | capture("(?[a-z.]+$)").filename }' transition: cleanup
    • id: cleanup type: action action: secrets: ["AZ_STORAGE_ACCOUNT", "AZ_NAME", "AZ_PASSWORD", "AZ_TENANT","AZ_STORAGE_KEY"] function: azurecli input: '{ "name": .secrets.AZ_NAME, "password": .secrets.AZ_PASSWORD, "tenant": .secrets.AZ_TENANT, "command": ["storage", "blob", "delete", "--container", "processing", "--name", (."Microsoft.Storage.BlobCreated".url | split("processing/")[1]), "--account-name", .secrets.AZ_STORAGE_ACCOUNT, "--account-key", .secrets.AZ_STORAGE_KEY] }' `
    1. ./direkcli workflows create demo test.yml (failed)

    Expected behavior

    Screenshots image

    Desktop (please complete the following information):

    • OS: Macos Big Sur 11.3
    bug 
    opened by woniupapa 5
  • How can we create a  function to do CI job

    How can we create a function to do CI job

    I want to use direktiv to do some ci job in serverless worker , but after I look up the function document(link), I find we cannot mount something to pod, so we cannot do docker in docker , that means we cannot use docker or podman to operate image. How can we create a function to do CI job now ?

    opened by westwind027 4
  • Filter broadcast events

    Filter broadcast events

    Description

    Please describe the aim of the pull request and the changes made in the commits.

    Purpose

    • [ ] Bug fix
    • [ ] New feature
    • [ ] Other

    How was this tested? (if applicable)

    Please describe how the proposed changes have been tested, and the outcome of the tests.

    Test Platform Details (if applicable)

    Operating system: OSX/Windows 10/Ubuntu 20.04/etc.

    CLI version:

    Hypervisors/Platforms (if applicable): qemu/hyper-v/google cloud platform/vmware workstation/etc

    Kernel version (if applicable):

    Checklist

    • [ ] Code is commented
    • [ ] Unit test coverage encompasses new code
    • [ ] Existing unit tests pass with these changes
    • [ ] PR is signed
    enhancement 
    opened by Fxrdf 4
  • New ent schema will not migrate database gracefully.

    New ent schema will not migrate database gracefully.

    Describe the bug

    Upgrading to latest ent schemas will trigger the following error on postgres if it's using a older database.

    2021-11-30 13:57:10.201 AEST [864] ERROR:  column "created_at" contains null values
    2021-11-30 13:57:10.201 AEST [864] STATEMENT:  ALTER TABLE "refs" ADD COLUMN "created_at" timestamp with time zone NOT NULL
    

    We need to investigate if its possible to adjust the migration process of ent to accommodate for this new column. Or if there is something we can change in the schema.

    bug 
    opened by jalfvort 4
  • error state seems to be inconsistent to other states

    error state seems to be inconsistent to other states

    Is your feature request related to a problem? Please describe.

    All other states accept JQ input for their fields. The error state can only accept a string for the error field. I wanted to catch an error, handle it and then still raise it after. The use-case would be to do jq(.error.code) in the error field.

    The message has the same "issue". If it would be JQ instead of the args field it would be easier to use because Direktiv has a basically a sprintf with jq.

    Now:

    - id: error-out-of-date
      type: error
      error: validation.outOfDate
      message: "food item %s is out of date"
      args:
      - jq(.item.name)
    

    New

    - id: error-out-of-date
      type: error
      error: jq(.whatever) OR my.new.error
      message: 'This is an error jq(.myvalue)'
    
    enhancement 
    opened by jensg-st 4
  • Wait API with no body data now assumes JSON input even when no input …

    Wait API with no body data now assumes JSON input even when no input …

    …is provided.

    Signed-off-by: Alan Murtagh [email protected]

    I've decided for GET requests it's fine to assume JSON input. GET requests cannot reasonably handle binary data anyway, and if you really want to you can emulate it by passing ?input.input=, and setting to base64 encoded binary data.

    opened by alankm 4
  • how to config subflow

    how to config subflow

    in Previous version the parent workflow relate to the child workflow by field "id",Workflow does not has filed "id",how the parent workflow relate to the child workflow

    opened by zzqliwei 3
  • Cannot re-trigger event received: error:

    Cannot re-trigger event received: error: "send namespace event: method is not allowed"

    Describe the bug Received an event from Google Cloud EventArc via the Direktiv container as described in the document. The event is received and can execute a workflow. When I try and trigger the event again the following error appears:

    "send namespace event: method is not allowed"

    Example the event input is shown below (not the data is binary - something wrong in the direktic google eventarc container code):

    Context Attributes, specversion: 1.0 type: google.cloud.audit.log.v1.written source: //cloudaudit.googleapis.com/projects/exalted-iridium-367300/logs/activity id: projects/exalted-iridium-367300/logs/cloudaudit.googleapis.com%2Factivityr7a0hndbrmi1667689902263958 time: 2022-11-05T23:11:42.837387365Z datacontenttype: application/json Data (binary), { "protoPayload": { "authenticationInfo": { "principalEmail": "[email protected]" }, "requestMetadata": { "callerIp": "2601:643:4001:4c0:9c47:2941:e9b5:bc90", "callerSuppliedUserAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36,gzip(gfe),gzip(gfe)" }, "serviceName": "compute.googleapis.com", "methodName": "v1.compute.instances.delete", "resourceName": "projects/exalted-iridium-367300/zones/us-central1-a/instances/instance-template-1", "serviceData": {}, "request": { "@type": "type.googleapis.com/compute.instances.delete" } }, "insertId": "r7a0hndbrmi", "resource": { "type": "gce_instance", "labels": { "instance_id": "3705468946020520950", "zone": "us-central1-a", "project_id": "exalted-iridium-367300" } }, "timestamp": "2022-11-05T23:11:42.263958Z", "severity": "NOTICE", "logName": "projects/exalted-iridium-367300/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1667689855034-5ecc14d67a55a-625b9bf3-04683458", "producer": "compute.googleapis.com", "last": true }, "receiveTimestamp": "2022-11-05T23:11:42.837387365Z" }

    opened by wwonigkeit 3
  • Git sync throws ent error on renaming

    Git sync throws ent error on renaming

    Describe the bug

    I renamed a few files in https://github.com/direktiv/apps-svc. The follwoing rename actions were applied:

     rename generate-tags.yaml => generate-tags._yaml (100%)
     rename get-html.yaml => get-html._yaml (100%)
     rename get-swagger.yaml => get-swagger._yaml (100%)
     rename list.yaml => list._yaml (100%)
     rename load-spec.yaml => load-spec_.yaml (100%)
     rename load-specs.yaml => load-specs._yaml (100%)
     rename md.yaml => md._yaml (100%)
     rename pq.yaml => pq._yaml (100%)
     rename spec.yaml => spec._yaml (100%)
     rename tags.yaml => tags._yaml (100%)
     rename uri-key.yaml => uri-key._yaml (100%)
     rename uri-tag-key.yaml => uri-tag-key._yaml (100%)
    

    The sync fails with :+1:

    Mirror activity 'sync' failed: ent: validator failed for field "Inode.name": value does not match validation
    

    The last log lines:

    {"level":"info","timestamp":"2022-07-26T08:27:34Z","caller":"flow/logs.go:126","msg":"Deleted workflow '/get-swagger'.","component":"flow","build":"10e25bf","trace":"00000000000000000000000000000000","namespace":"svc","namespace-id":"8fb6dc8f-1b1d-470b-a5fa-d44b1ed75f80"}
    {"level":"debug","timestamp":"2022-07-26T08:27:34Z","caller":"flow/pubsub.go:517","msg":"PS Notify Inode: c4f1d45f-8ca0-43d3-a968-26627cdb7090","component":"flow","build":"10e25bf"}
    {"level":"info","timestamp":"2022-07-26T08:27:34Z","caller":"flow/logs.go:126","msg":"Deleted workflow '/uri-tag-key'.","component":"flow","build":"10e25bf","trace":"00000000000000000000000000000000","namespace":"svc","namespace-id":"8fb6dc8f-1b1d-470b-a5fa-d44b1ed75f80"}
    {"level":"debug","timestamp":"2022-07-26T08:27:34Z","caller":"flow/pubsub.go:517","msg":"PS Notify Inode: c4f1d45f-8ca0-43d3-a968-26627cdb7090","component":"flow","build":"10e25bf"}
    {"level":"info","timestamp":"2022-07-26T08:27:34Z","caller":"flow/logs.go:271","msg":"Mirror activity 'sync' failed: ent: validator failed for field \"Inode.name\": value does not match validation","component":"flow","build":"10e25bf","trace":"00000000000000000000000000000000","namespace":"svc","namespace-id":"8fb6dc8f-1b1d-470b-a5fa-d44b1ed75f80","mirror-id":"13340a02-1184-4ad5-b8c7-9413ae545d96"}
    
    

    It seems to be obvious that it is cause by the renaming rename load-spec.yaml => load-spec_.yaml. The solution is to improve the logs? Because this was a rename to an invalid workflow name.

    bug 
    opened by jensg-st 3
  • 738 install k3s instructions in readme is broken

    738 install k3s instructions in readme is broken

    Description

    K8s feature-gates 'TTLAfterFinished' flag was removed see this.

    This PR removes 'TTLAfterFinished' usage in the k3s installation instruction.

    opened by sir-hassan 0
  • Install k3s instructions in Readme is broken

    Install k3s instructions in Readme is broken

    Describe the bug Install k3s instructions in Readme is broken due to removal of this k8s feature.

    --kube-apiserver-arg feature-gates=TTLAfterFinished=true need to be removed.

    opened by sir-hassan 0
  • Expand service configuration

    Expand service configuration

    Is your feature request related to a problem? Please describe.

    At the moment services can define commands and environment variables (0.8.0).

    Additionally they should be able to run as privileged and potentially mount disks.

    enhancement 
    opened by jensg-st 0
  • API first approach

    API first approach

    At the moment the API has swagger configurations but it is an implementation-first approach. This can lead to discrepancies between implementation and swagger documentation.

    The API should be build on swagger first and the implementation needs to follow. That guarantees a consistent documentation and implementation.

    enhancement 
    opened by jensg-st 1
  • A few services have SSE implemenations only

    A few services have SSE implemenations only

    Is your feature request related to a problem? Please describe.

    The API has three services which are only implementing Server Side Events:

    • watchNamespaceRevisions
    • watchNamespaceRevision
    • singleNamespaceServiceSSE

    Although there are not needed for the UI they should be implemented for consistency.

    enhancement 
    opened by jensg-st 0
Releases(v0.7.0)
  • v0.7.0(Oct 16, 2022)

    Changelog

    Direktiv v0.7.0

    Full Changelog

    Fixed bugs:

    • Secrets don't work with API-Key set #663
    • Automatic support for proxying in libgit2 logic. #679 (alankm)

    Deprecation Notice:

    • Global services will be removed in 0.8.0
    • Versioning and traffic shaping for namespace services will be removed in 0.8.0

    * This Changelog was automatically generated by github_changelog_generator

    Source code(tar.gz)
    Source code(zip)
    direktiv_sync_amd64.tar.gz(4.24 MB)
    direktiv_sync_darwin.tar.gz(4.49 MB)
    direktiv_sync_windows.tar.gz(4.31 MB)
  • v0.7.0-rc2(Sep 12, 2022)

  • v0.7.0-rc1(Sep 5, 2022)

    Changelog

    Direktiv v0.7.0-rc1

    Full Changelog

    Implemented enhancements:

    • Unauthenticated CLI throws unfriendly error #664
    • Creating a new namespace mirror needs to be followed by page refresh. #657
    • Add a direktiv ignore file for mirror functionality #623
    • Update open telemetry dependencies. #620
    • Update UI Server #619
    • Scale on workflow level #617
    • Rework pagination. #615
    • Function files still requires static values. Could be JQ. #574
    • Trim trailing slash from addr argument. #673 (alankm)
    • Issue 623 #659 (alankm)
    • Otel update #656 (alankm)
    • Removes graphql-style pagination in favour of classic LIMIT/OFFSET #649 (alankm)
    • Removes the ability to scale knative-workflow functions. #644 (alankm)
    • Makes FunctionFiles fully jq-able. #641 (alankm)
    • Internal states logic refactor. #638 (alankm)

    Fixed bugs:

    • Invalid subflows causing hanging parent flows #654
    • Flow pod panics when returning event results #650
    • Git sync throws ent error on renaming #643
    • Foreach hangs on empty arrays #633
    • Typo in state error #629
    • Editor can not render eventsAnd states #625
    • Git: Variables with uppercase characters in name don't sync #611
    • functionsHeartbeat does not work if payload is too big #603
    • Fixes bug in exec command logs (wasn't updated to new pagination). #672 (alankm)
    • Fixes a false log when a catchable error wasn't handled. #671 (alankm)
    • Secrets pagination fix #670 (alankm)
    • Closes #654 #662 (alankm)
    • Resolves issue #603 #655 (alankm)
    • Fixes #611 #642 (alankm)
    • Fixes #633. #640 (alankm)
    • Closes #629 #639 (alankm)

    Closed issues:

    • Change authentication header apikey to direktiv-token #667

    Merged pull requests:

    * This Changelog was automatically generated by github_changelog_generator

    Source code(tar.gz)
    Source code(zip)
    direktiv_sync_amd64.tar.gz(4.24 MB)
    direktiv_sync_darwin.tar.gz(4.49 MB)
    direktiv_sync_windows.tar.gz(4.31 MB)
  • v0.6.7(Jul 23, 2022)

    Changelog

    Direktiv v0.6.7

    Full Changelog

    Implemented enhancements:

    • Removed the dependency graph. #614
    • CLI exec needs option to not push the workflow #604
    • Update to new workflow examples #595
    • Improve recent events screen on UI. #525
    • Sync Tool missing pull, create workflow / folder functionality #522
    • CLI Enhancements & Fixes #608 (jalfvort)

    Fixed bugs:

    • UI: SSE Suddenly reset connections sometimes #612
    • CLI: renaming wofklow does not work #605
    • UI: Workflow editor, undo button does not work #601
    • Writable/Readable loading animation isnt working #592
    • Getter state "as" attribute is getting ignored #580
    • Action timeout finishes the workflow without error #578
    • Increase SSE Heartbeat Frequency #613 (jalfvort)
    • Minor refactor of event logic to better handle errors. #610 (alankm)
    • Updated cloudevents dependency. #607 (alankm)
    • Tweak to push auto path generation to work in more circumstances. #598 (alankm)

    Closed issues:

    • Explorer page loader did not appear. #594
    • UI: Should disable the sync button when mirror is set to writable #591
    • Input data cut off in terminal view #586
    • Yaml files for secrets and variables can not be uploaded #576
    • Variables need text filter #572
    • Variables need to highlight selected row #569
    • CLI can not handle different config files #559
    • Start event definition should accept context #476

    Merged pull requests:

    • Removed dependency graph logic and APIs from the project. #624 (jalfvort)
    • New all-in-one build and minor change to Makefile #609 (jensg-st)
    • Makefile help text updated #606 (jalfvort)
    • API: tag can now be read from query or body in tag operations #602 (jalfvort)
    • Dockerfile Update and Install Dependencies script added #600 (jalfvort)
    • Makefile target added to clone remote images to local registry #599 (jalfvort)

    * This Changelog was automatically generated by github_changelog_generator

    Source code(tar.gz)
    Source code(zip)
    direktiv_sync_amd64.tar.gz(4.19 MB)
    direktiv_sync_darwin.tar.gz(4.37 MB)
    direktiv_sync_windows.tar.gz(4.22 MB)
  • v0.6.6(Jun 2, 2022)

    Changelog

    Direktiv v0.6.6

    Full Changelog

    Implemented enhancements:

    • Namespace picker UI/UX more intuitive. #562
    • Add pagination to workflow and namespace variable lists in the UI #555
    • Allow Direktiv to pull git repositories and maintain mirrors in a namespace. #530
    • Compatibility with Amazon CloudEvents #523
    • Sync Tool added pull, create workflow / folder functionality #522
    • Added JQ in setter state's key #472
    • Support for https mirror uris with access tokens. #554 (alankm)
    • Added git mirror functionality to Direktiv. #529 (alankm)
    • Getter and setter states 'key' fields are now evaluated as JQ #527 (alankm)
    • Improves usability of cloudevents #524 (alankm)

    Fixed bugs:

    • Cancel does not work if flow is in action #575
    • Push does not work with variables with yaml extension #566
    • Setter state race condition. #543
    • Fixes #575 #584 (alankm)
    • Fixes two minor bugs in the mirror syncing logic. #571 (alankm)
    • Fixes #557 #564 (alankm)
    • Fixes an inconsistency between a streaming and a non-streaming API. #561 (alankm)
    • Enforces mirror locks better, including for crons. #553 (alankm)
    • Mirror cron bugfix. #544 (alankm)

    Closed issues:

    • Yaml files for secrets and variables can not be uploaded #576
    • Git: Add support for SSH, Access token and No Auth #563
    • Git: mirror-info api will return passphrase in plaintext and not display if private key is set when streaming #560
    • CLI can not handle different config files #559
    • Git: Event listeners don't work #557
    • Explorer list does not update contents when last item is deleted #556
    • Git: Cron keeps running after making namespace writable #552
    • Git: Write / Read-Only button is not obvious #551
    • Git: Add option to Hide/Show Public Key, Private Key and Passphrase inputs #550
    • Git: sync #549
    • Locks connection not getting closed if acquiring lock fails #547
    • Git: Private/Public Key should have an upload option #545
    • Variable names are shortened and there is now way to get the full name #542
    • Git: Input fields for public/private key too small #541
    • Drag and drop does not fit modal size #537
    • Git: PAT showing in URL #536
    • Git: Passphrase is confusing #535
    • Git: form fields have no help context. #534
    • Git: Mirror form is not getting emptied after creating a namespace. #533

    Merged pull requests:

    • Cli config #589 (alankm)
    • Sidecar can accept empty variables of type tar and tar.gz, Increased max GRPC size #588 (jensg-st)
    • Cli improvements #587 (alankm)
    • Update to remove old Discord link and update Slack #567 (wwonigkeit)
    • Fixed lock connection handling Closes #547 #548 (jensg-st)
    • Mirror syncer logic now supports targz of variable-named directories. #540 (alankm)
    • Alllow makefile to use .all docker files #532 (jensg-st)
    • All-in-one docker image update #531 (jensg-st)

    * This Changelog was automatically generated by github_changelog_generator

    Source code(tar.gz)
    Source code(zip)
    direktiv_sync_amd64.tar.gz(4.18 MB)
    direktiv_sync_darwin.tar.gz(4.36 MB)
    direktiv_sync_windows.tar.gz(4.21 MB)
  • v0.6.5(May 3, 2022)

    Changelog

    Direktiv v0.6.5

    Full Changelog

    Implemented enhancements:

    • Multiple UI improvements:
      • Visual editor added for generating/editing workflow YAML's
      • Instance now shows what was the invoker. [API, CRON, Other Instance]
      • Filtering added to Instances List results
      • Fixed bug that was causing content-type not being set correctly when setting variables.
      • Fixed connections not terminating correctly in the explorer list when switching pages.
      • Various other minor bug fixes

    Fixed bugs:

    • Cancel does not seem to forward the cancel to running actions #520

    Merged pull requests:

    • Pass cancellable context from engine to sidecar. #521 (alankm)

    * This Changelog was automatically generated by github_changelog_generator

    Source code(tar.gz)
    Source code(zip)
    direktiv_sync_amd64.tar.gz(2.85 MB)
    direktiv_sync_darwin.tar.gz(2.96 MB)
    direktiv_sync_windows.tar.gz(2.87 MB)
  • v0.6.4(Apr 20, 2022)

  • v0.6.3(Apr 11, 2022)

  • v0.6.2(Apr 4, 2022)

  • v0.6.1(Apr 4, 2022)

    Changelog

    Direktiv v0.6.1

    Full Changelog

    Implemented enhancements:

    • Limit secret name length #432
    • ActionLog tracing can be much #368
    • Access to instance id via setter state #324

    Closed issues:

    • Correlate needs to be removed from routing and db-events #503
    • Correlation for startAndEvent not needed #501
    • Dockerfile.all can not set release version #499
    • Workflows listening to same event with different context not working #493
    • Dockerfile.all ffiles executing in wrong order #490
    • Broken foreach template in UI & docs. #464
    • Secrets with Hyphen in Name Fail #452
    • Variable Setter for base64 does not work correctly #449
    • Running workflows don't behave not correct if deleted #443
    • Validation controller for new pod based isolate model #147

    Merged pull requests:

    • Tidy go.mod #507 (jensg-st)
    • Correlation removed. Fixes #503 #504 (jensg-st)
    • Remove correlation from eventAnd start definition #502 (jensg-st)
    • Minor refactor to avoid API server importing flow package. #485 (alankm)
    • Exec auto config added and push command added #484 (jalfvort)
    • Makes regex validators for variables and workflow/directory names mor… #481 (alankm)
    • Changes start-event struct field from 'filters' to 'context' to make … #480 (alankm)
    • Config flag for cmd/exec fixed and more error feedback #479 (jalfvort)
    • Direktiv remote execution added #477 (jalfvort)
    • Docker file fixes and 2 minor bugs #475 (jensg-st)
    • Rewrites docs split across a directory instead of contained in a mono… #469 (alankm)
    • Fixes a crash that can happen when calling the DiscardHead api. #468 (alankm)
    • Modify sidecar max size to API value #465 (jensg-st)
    • Tweaks the foreach state so that the array-generating query must now … #463 (alankm)
    • Deletes .private from results returned by input and output APIs, to o… #462 (alankm)
    • Fixes a bug from a bad merge that prevented files from working on wor… #460 (alankm)
    • Removed init-pod from make #459 (jensg-st)
    • Build update #458 (jensg-st)
    • Instance metadata #457 (alankm)
    • Prevents event-triggered workflows from being executed via API or as … #456 (alankm)
    • Restricts secret names to a maximum of 32 characters. #455 (alankm)
    • Removed isolated pod approach #454 (jensg-st)
    • Javascript handling #453 (jensg-st)
    • Added Pod node affinity #451 (jensg-st)
    • Added system scope to state getter #448 (jensg-st)
    • Changed functions for broadcast events #447 (jensg-st)
    • Private registry fix #446 (jensg-st)
    • TLS development registry in Makefile#445 (jensg-st)

    * This Changelog was automatically generated by github_changelog_generator

    Source code(tar.gz)
    Source code(zip)
    direktiv_sync_amd64.tar.gz(2.85 MB)
    direktiv_sync_darwin.tar.gz(2.96 MB)
    direktiv_sync_windows.tar.gz(2.86 MB)
  • v0.6.0(Feb 27, 2022)

    New:

    • Upgrade to Knative 1.1
    • Improved function name validation
    • Adds new thread scoped variables, which are passed by reference down to subflows.
    • Adds new APIs to track active event listeners.
    • Adds new APIs to view recent event history.
    • Adds new APIs to replay a historical event.
    • Changes database cascading logic so that instances spawned from an uncommitted workflow aren't cleaned up and removed when the workflow changes.
    • Various database tweaks to improve list filtering and ordering options.
    • Sankey metrics now split up by workflow revision.
    • Backend now generates dependency graphs for all resources.
    • Adds APIs to test registry connection/credentials.
    • APIs that return registries now return a partially obfuscated user.
    • Adds automatic database upgrader to maintain compatibility through version upgrades.
    • Makes the error state more consistent with other states by evaluating any embedded jq queries within the message string. The printf style design still works for now, but is deprecated.
    • Adds API to delete a workflow-level service pod, which is also good for triggering updates as they're replaced.
    • Empty variables are now explicitly supported.
    • APIs that return revisions now return the revision's ID.
    • Completely new UI.
    • Completely new Helm Charts.

    Fixes:

    • A crash that could happen with the consumeEvent state
    • Failure to invoke subflow now correctly throws uncatchable error instead of being stuck pending
    • Improved print formatting from containers
    Source code(tar.gz)
    Source code(zip)
  • v0.6.0-b1(Jan 22, 2022)

  • v0.5.9(Nov 16, 2021)

    What's Changed

    • Mime Types added to variables by @jalfvort in https://github.com/direktiv/direktiv/pull/331
    • default encryption key set by @jensg-st in https://github.com/direktiv/direktiv/pull/337
    • Global and Global Private Registries added by @jalfvort in https://github.com/direktiv/direktiv/pull/347
    • API server will auto-fill cloudevent ID, breaking the spec to make de… by @alankm in https://github.com/direktiv/direktiv/pull/349
    • New Ordering Fields Added by @jalfvort in https://github.com/direktiv/direktiv/pull/352

    Full Changelog: https://github.com/direktiv/direktiv/compare/v0.5.8...v0.5.9

    Source code(tar.gz)
    Source code(zip)
  • v0.5.8(Nov 7, 2021)

    What's Changed

    • Proxy injection via helm to the sidecar by @jensg-st in https://github.com/direktiv/direktiv/pull/322
    • Fix retry bugs by @alankm in https://github.com/direktiv/direktiv/pull/327
    • Improved error handling for services @jalfvort in https://github.com/direktiv/direktiv/pull/329

    Full Changelog: https://github.com/direktiv/direktiv/compare/v0.5.7...v0.5.8

    Source code(tar.gz)
    Source code(zip)
  • v0.5.6(Oct 26, 2021)

    What's Changed

    • Fixed a bug with renaming on nodes by @alankm in https://github.com/vorteil/direktiv/pull/305
    • Added a rename api by @trentis in https://github.com/vorteil/direktiv/pull/307
    • Fixed model pkg to call validate on the definition for generateEvent state by @trentis in https://github.com/vorteil/direktiv/pull/309
    • Builds version information into binaries and logs, and adds APIs to c… by @alankm in https://github.com/vorteil/direktiv/pull/308
    • Allow duplicate cloud events with same id to hit different namespaces by @trentis in https://github.com/vorteil/direktiv/pull/311
    • Added rename to the UI and improved settings page by @trentis in https://github.com/vorteil/direktiv-ui/pull/15

    Full Changelog: https://github.com/vorteil/direktiv/compare/v0.5.5...v0.5.6

    Source code(tar.gz)
    Source code(zip)
  • v0.5.5(Oct 25, 2021)

    What's Changed

    • Cloudevents API now supports batch http binding by @jensg-st in https://github.com/vorteil/direktiv/pull/275
    • Broadcast Events automatically for many different namespace operations by @jalfvort in https://github.com/vorteil/direktiv/pull/282
    • Added ability to provide query param for recursive delete of a namespace by @trentis in https://github.com/vorteil/direktiv/pull/284
    • Rewrite helm github actions workflow to support versioning by @jamesjmurtagh in https://github.com/vorteil/direktiv/pull/281
    • Fixed discard workflow by @trentis in https://github.com/vorteil/direktiv/pull/280
    • Fixes a bug when using an eventsAnd start with no defined correlations. by @alankm in https://github.com/vorteil/direktiv/pull/291
    • Wait API with no body data now assumes JSON input even when no input … by @alankm in https://github.com/vorteil/direktiv/pull/286
    • Improved reusable functions generation by @alankm in https://github.com/vorteil/direktiv/pull/292
    • Added Knative eventing support by @jensg-st in https://github.com/vorteil/direktiv/pull/298
    • Added API Key login screen on the UI when provided from the helm install by @trentis in https://github.com/vorteil/direktiv-ui/pull/14

    Full Changelog: https://github.com/vorteil/direktiv/compare/v0.5.4...v0.5.5

    Source code(tar.gz)
    Source code(zip)
  • v0.5.3(Oct 13, 2021)

  • v0.5.1(Oct 8, 2021)

  • v0.5.0(Oct 6, 2021)

  • v0.4.1(Sep 3, 2021)

    • Event states providing full cloud event (ConsumeEvent, EventAndState, EventXorState & start event start states)
    • Generate event state publishes events on schedule now and not immediately
    • Generate event state can fir events in the future with new delay attribute
    • UI uses server side events instead of polling
    • Improved logging with zap logging and fluentbit for log forwarding.
    Source code(tar.gz)
    Source code(zip)
  • v0.4.0(Aug 19, 2021)

    • Breaking change: Added new function attribute "type" [docs]. Possible values:

      • subflow
      • isolated
      • reusable
      • knative-namespace
      • knative-global
    • Added "isolated" type which executes the function as kubernetes job for each individual function call. [docs] [docs]

    • Knative services can now be on namespace and global level and can be shared across workflows with this approach [docs].

    • Improved "wait" and "field" handling for workflow execution

    • Better knative service handling on workflow level

    Source code(tar.gz)
    Source code(zip)
  • v0.3.4(Aug 2, 2021)

    • change number of contour replicas from 2 to 1
    • removed serviceaccount dependency
    • added Cloud SQL Proxy support to helm charts
    • added optional net shaping pod config
    • improve feedback from API server when executing workflows
    • improved pod hostname generation to gracefully handle illegal characters
    • introduced a 'blocklist', used by the API server to restrict creation of namespaces with names contained within the blocklist file
    • reject profane namespace names during namespace creation
    • the 'maxScale' value for isolate pods is now configurable
    • grpc max send/receive size values are now configurable
    Source code(tar.gz)
    Source code(zip)
    direkcli-darwin(42.35 MB)
    direkcli-linux(42.75 MB)
    direkcli-windows.exe(43.35 MB)
  • v0.3.3(Jul 5, 2021)

  • v0.3.2(Jun 30, 2021)

  • v0.3.1(Jun 25, 2021)

  • v0.3.0(Jun 11, 2021)

  • v0.2.6(Jun 7, 2021)

  • v0.2.5(May 28, 2021)

    • Workflows can be set to run only one instance at a time
    • DB performance improvements
    • API can wait for workflow to finish
    • Individual fields from worfklow results can be delivered via http, e.g. images
    • Access to workflow variables as files in containers
    • Added namespace logs to the dashboard
    • Added API keys
    Source code(tar.gz)
    Source code(zip)
    direkcli(46.90 MB)
  • v0.2.4(May 21, 2021)

    • (Engine) Workflow variables with different scopes
    • (UI) Added the ability to interact with variables
    • (UI) Improved the workflow editor with multi-line comments and tabs
    • (UI) Improved Instance logging logs are displayed like a terminal
    • Multiple bug fixes
    Source code(tar.gz)
    Source code(zip)
    direkcli(46.87 MB)
Owner
vorteil.io pty ltd
vorteil.io pty ltd
A lightweight yet powerful IoC container for Go projects

Container A lightweight yet powerful IoC container for Go projects. It provides a simple, fluent and easy-to-use interface to make dependency injectio

GoLobby 409 Dec 29, 2022
🛠 A full-featured dependency injection container for go programming language.

DI Dependency injection for Go programming language. Tutorial | Examples | Advanced features Dependency injection is one form of the broader technique

Goava 169 Dec 31, 2022
Simple Dependency Injection Container

?? gocontainer gocontainer - Dependency Injection Container ?? ABOUT Contributors: Rafał Lorenz Want to contribute ? Feel free to send pull requests!

Rafał Lorenz 18 Sep 27, 2022
Provider-generic-workflows - A generic provider which uses argo workflows to define the backend actions.

provider-generic-workflows provider-generic-workflows is a generic provider which uses argo workflows for managing the external resource. This will re

Shailendra Sirohi 0 Jan 1, 2022
Go-serverless-eth-event-listener - Go serverless, ethereum contract event listener with a sample contract

go-serverless-eth-event-listener This repository is for showing how to listen sm

Emre Ceylan 4 May 19, 2022
Argo Workflows is an open source container-native workflow engine for orchestrating parallel jobs on Kubernetes.

What is Argo Workflows? Argo Workflows is an open source container-native workflow engine for orchestrating parallel jobs on Kubernetes. Argo Workflow

null 0 Dec 10, 2021
FaaSNet: Scalable and Fast Provisioning of Custom Serverless Container Runtimes at Alibaba Cloud Function Compute (USENIX ATC'21)

FaaSNet FaaSNet is the first system that provides an end-to-end, integrated solution for FaaS-optimized container runtime provisioning. FaaSNet uses l

LeapLab @ CS_GMU 43 Jan 2, 2023
Moby Project - a collaborative project for the container ecosystem to assemble container-based systems

The Moby Project Moby is an open-source project created by Docker to enable and accelerate software containerization. It provides a "Lego set" of tool

Moby 64.9k Jan 8, 2023
Yeqllo 23 Nov 1, 2022
Moby Project - a collaborative project for the container ecosystem to assemble container-based systems

The Moby Project Moby is an open-source project created by Docker to enable and accelerate software containerization. It provides a "Lego set" of tool

Moby 64.8k Jan 2, 2023
top in container - Running the original top command in a container

Running the original top command in a container will not get information of the container, many metrics like uptime, users, load average, tasks, cpu, memory, are about the host in fact. topic(top in container) will retrieve those metrics from container instead, and shows the status of the container, not the host.

silenceshell 131 Dec 2, 2022
Boxygen is a container as code framework that allows you to build container images from code

Boxygen is a container as code framework that allows you to build container images from code, allowing integration of container image builds into other tooling such as servers or CLI tooling.

nitric 5 Dec 13, 2021
Amazon ECS Container Agent: a component of Amazon Elastic Container Service

Amazon ECS Container Agent The Amazon ECS Container Agent is a component of Amazon Elastic Container Service (Amazon ECS) and is responsible for manag

null 0 Dec 28, 2021
The Container Storage Interface (CSI) Driver for Fortress Block Storage This driver allows you to use Fortress Block Storage with your container orchestrator

fortress-csi The Container Storage Interface (CSI) Driver for Fortress Block Storage This driver allows you to use Fortress Block Storage with your co

Fortress 0 Jan 23, 2022
Ixia-c-one - A re-packaged (as a single-container) flavor of multi-container application ixia-c

ixia-c-one ixia-c-one is a re-packaged (as a single-container) flavor of multi-c

Open Traffic Generator 3 Apr 1, 2022
Assume AWS IAM roles from GitHub Actions workflows with no stored secrets

AWS IAM roles for GitHub Actions workflows Background and rationale GitHub Actions are a pretty nice solution for CI/CD. Where they fall short is inte

Glass Echidna 171 Feb 12, 2022
Machine is a library for creating data workflows.

Machine is a library for creating data workflows. These workflows can be either very concise or quite complex, even allowing for cycles for flows that need retry or self healing mechanisms.

whitaker-io 122 Dec 26, 2022
Generate mega-workflows using Wappalyzer outputs and existing tech-detect

Usage Usage of ./build/generate-nuclei-templates: -clone-path string Path to clone Wappalyzer repository (default "./wappalyzer") -debug

null 6 Nov 9, 2022
An operator to support Haschicorp Vault configuration workflows from within Kubernetes

Vault Config Operator This operator helps set up Vault Configurations. The main intent is to do so such that subsequently pods can consume the secrets

null 2 Sep 30, 2022
An operator to support Haschicorp Vault configuration workflows from within Kubernetes

Vault Config Operator This operator helps set up Vault Configurations. The main intent is to do so such that subsequently pods can consume the secrets

Red Hat Communities of Practice 48 Dec 19, 2022