Node
type: "io.kestra.core.tasks.scripts.Node"
Execute a Node.js script
With this Node task, we can execute a full javascript script.
The task will create a temprorary folder for every tasks and allows you to install some npm packages defined in an optional package.json
file.
By convention, you need to define at least a main.js
files in inputFiles
that will be the script used.
You can also add as many javascript files as you need in inputFiles
.
You can send outputs & metrics from your node script that can be used by others tasks. In order to help, we inject a node package directly on the working dir.Here is an example usage:
const Kestra = require("./kestra");
Kestra.outputs({test: 'value', int: 2, bool: true, float: 3.65});
Kestra.counter('count', 1, {tag1: 'i', tag2: 'win'});
Kestra.timer('timer1', (callback) => { setTimeout(callback, 1000) }, {tag1: 'i', tag2: 'lost'});
Kestra.timer('timer2', 2.12, {tag1: 'i', tag2: 'destroy'});
# Examples
Execute a node script
id: "node"
type: "io.kestra.core.tasks.scripts.Node"
inputFiles:
main.js: |
const Kestra = require("./kestra");
const fs = require('fs')
const result = fs.readFileSync(process.argv[2], "utf-8")
console.log(JSON.parse(result).status)
const axios = require('axios')
axios.get('http://google.fr').then(d => console.log(d.status); Kestra.outputs({'status': d.status, 'text': d.data}))
console.log(require('./mymodule').value)
data.json: |
{"status": "OK"}
mymodule.js: |
module.exports.value = 'hello world'
package.json: |
{
"name": "tmp",
"version": "1.0.0",
"description": "",
"main": "index.js",
"dependencies": {
"axios": "^0.20.0"
},
"devDependencies": {},
"scripts": {
"test": "echo "Error: no test specified" && exit 1"
},
"author": "",
"license": "ISC"
}
args:
- data.json
# Properties
# args
- Type: array
- SubType: string
- Dynamic: ✔️
- Required: ❌
node command args
Arguments list to pass to main javascript script
# dockerOptions
- Type: DockerOptions
- Dynamic: ❓
- Required: ❌
Docker options when using runner
DOCKER
# env
- Type: object
- SubType: string
- Dynamic: ✔️
- Required: ❌
Additional environnements variable to add for current process.
# exitOnFailed
- Type: boolean
- Dynamic: ❌
- Required: ✔️
- Default:
true
Exit if any non true return value
This tells bash that it should exit the script if any statement returns a non-true return value.
The benefit of using -e is that it prevents errors snowballing into serious issues when they could have been caught earlier.
# files
🔒 Deprecated
- Type: array
- SubType: string
- Dynamic: ✔️
- Required: ❌
The list of files that will be uploaded to internal storage,
use outputFiles
property instead
# inputFiles
- Type: object
- SubType: string
- Dynamic: ✔️
- Required: ❌
Input files are extra files supplied by user that make it simpler organize code.
Describe a files map that will be written and usable in execution context. In python execution context is in a temp folder, for bash scripts, you can reach files using a workingDir variable like 'source /myfile.sh'
# interpreter
- Type: string
- Dynamic: ❌
- Required: ✔️
- Default:
/bin/sh
- Min length:
1
Interpreter to used
# interpreterArgs
- Type: array
- SubType: string
- Dynamic: ❌
- Required: ❌
- Default:
[-c]
Interpreter args used
# nodePath
- Type: string
- Dynamic: ❓
- Required: ❌
- Default:
node
The node interpreter to use
Set the node interpreter path to use
# npmPath
- Type: string
- Dynamic: ❓
- Required: ❌
- Default:
npm
The npm binary to use
Set the npm binary path for node dependencies setup
# outputFiles
- Type: array
- SubType: string
- Dynamic: ❌
- Required: ❌
Output file list that will be uploaded to internal storage
List of key that will generate temporary files.
On the command, just can use with special variable named outputFiles.key
.
If you add a files with ["first"]
, you can use the special vars echo 1 >> {[ outputFiles.first }}
and you used on others tasks using {{ outputs.task-id.files.first }}
# outputsFiles
🔒 Deprecated
- Type: array
- SubType: string
- Dynamic: ❌
- Required: ❌
Deprecated Output file
use outputFiles
# runner
Type: string
Dynamic: ❌
Required: ✔️
Default:
PROCESS
Possible Values:
PROCESS
DOCKER
Runner to use
# warningOnStdErr
- Type: boolean
- Dynamic: ❌
- Required: ✔️
- Default:
true
Use
WARNING
state if any stdErr is sent
# Outputs
# exitCode
- Type: integer
- Default:
0
The exit code of the whole execution
# files
🔒 Deprecated
- Type: object
- SubType: string
Deprecated output files
use outputFiles
# outputFiles
- Type: object
- SubType: string
The output files uri in Kestra internal storage
# stdErrLineCount
- Type: integer
- Default:
0
The standard error line count
# stdOutLineCount
- Type: integer
- Default:
0
The standard output line count
# vars
- Type: object
The value extract from output of the commands
# Definitions
# DockerOptions
# dockerConfig
- Type: string
- Dynamic: ✔️
- Required: ❌
Docker config file
Full file that can be used to configure private registries, ...
# dockerHost
- Type: string
- Dynamic: ✔️
- Required: ❌
- Default:
unix:///var/run/docker.sock
Docker api uri
# entryPoint
- Type: array
- SubType: string
- Dynamic: ✔️
- Required: ❌
Docker entrypoint to use
# extraHosts
- Type: array
- SubType: string
- Dynamic: ✔️
- Required: ❌
Docker extra host to use
# image
- Type: string
- Dynamic: ✔️
- Required: ✔️
- Min length:
1
Docker image to use
# networkMode
- Type: string
- Dynamic: ✔️
- Required: ❌
Docker network mode to use
# user
- Type: string
- Dynamic: ✔️
- Required: ❌
Docker user to use
# volumes
- Type: array
- SubType: string
- Dynamic: ✔️
- Required: ❌
List of volumes to mount
Must be a valid mount expression as string, example : /home/user:/app
Volumes mount are disabled by default for security reasons, you must enabled on server configuration with kestra.tasks.scripts.docker.volume-enabled
to true