Pterodactyl is a javascript sdk for Flyte
Pterodactyl allows you to author and register flyte workflows in javascript.
Assuming that you have a flyte installation already setup you can follow these steps to get a workflow registered in flyte.
If you don't already have a flyte installation you can use kind + helm to set up a local kubernetes cluster running flyte.
Create a workflow using the pterodactyl library in javascript. An example is
provided below. Be sure to name it workflow.js
so the remaining steps work
correctly or replace workflow.js
with your chosen file name in the remaining
steps.
import {
task,
workflow,
} from "https://raw.githubusercontent.com/NotMatthewGriffin/pterodactyl/main/pterodactyl.js";
const sum = task(function sum(x, y) {
return x + y;
});
const square = task(function square(z) {
return z * z;
});
const myWorkflow = workflow(function myWorkflow(x, y) {
return sum(square(x), square(y));
});
Create a dockerfile based on a deno image that copies your script into the
container. Be sure to name this file Dockerfile
.
FROM denoland/deno:distroless-1.21.0
COPY workflow.js workflow.js
Using the dockerfile above build the image. Its fine to change the tag provided
to docker with -t
to your prefered tag but you'll need to replace
jsworkflow:v1
in future steps with your chosen tag (you may wish to do this if
you have a private container registry to host containers changing the tag to
something like: <private-registry-url>/jsworkflow:v1
). From the directory
containing both your javascript workflow and Dockerfile run:
docker build -t jsworkflow:v1 .
This step is very dependent upon how your flyte installation is setup. If you
have a private container registry configured pushing the image you created in
the last step will provide the best user experience. Assuming that in the last
step you tagged your image with your <private-registry-url>/jsworkflow:v1
,
this can be done like:
docker push <private-registry>/jsworkflow:v1
If you're running a local installation using kind you can use the following to load the image into your cluster without deploying a private container registry:
kind load docker-image jsworkflow:v1
If the steps above worked correctly then you're ready to register your workflow
with flyte. Be sure to replace localhost:30081
with the endpoint for your
flyte installation if it is not also hosted there. Run the following to register
with the same version of pterodactyl
as was used in the example workflow:
deno run --allow-read --allow-net https://raw.githubusercontent.com/NotMatthewGriffin/pterodactyl/main/pterodactyl_register.js --pkgs workflow.js --image jsworkflow:v1 --endpoint localhost:30081 --project flytesnacks --domain development --version v1
After all above steps run successfully you can look in your flyte console under
the flytesnacks project and development domain to find the workflow
myWorkflow
. At this point it can be run like any other flyte workflow. The
flyte console interface will say that the inputs are all of type string but they
will be fed to JSON.parse
and the result of that sent as the argument to your
workflow task functions. For this example try 2 for input0
and 2 for input1
.
In order to test pterodactyl's implementation you will need the following software: kind
, helm
, deno
.
With these software installed you will also need to add the flyte helm repo: helm repo add flyteorg https://flyteorg.github.io/flyte
.
After adding the helm repo you'll need to run helm repo update
.
With the prerequisites out of the way you can test pterodactyl by running the following in this project's root directory: deno test --allow-net --allow-run --allow-read --allow-write --allow-env
or deno test -A
.