type: "io.kestra.core.tasks.scripts.Node"
Execute a Node.js script.
This task is deprecated, please use the io.kestra.plugin.scripts.node.Script or io.kestra.plugin.scripts.node.Commands task instead.
With the Node task, you can execute a full JavaScript script.
The task will create a temporary folder for each task, 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
file in inputFiles
that will be the script used.
You can also add as many JavaScript files as you need in inputFiles
.
The outputs & metrics from your Node.js script can be used by others tasks. In order to make things easy, we inject a node package directly on the working directory.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.js 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
warningOnStdErr: false
Execute a Node.js script with an input file from Kestra's internal storage created by a previous task.
id: "node"
type: "io.kestra.core.tasks.scripts.Node"
inputFiles:
data.csv: {{ outputs.previousTaskId.uri }}
main.js: |
const fs = require('fs')
const result = fs.readFileSync('data.csv', 'utf-8')
console.log(result)
Properties
exitOnFailed
- Type: boolean
- Dynamic: ❌
- Required: ✔️
- Default:
true
Exit if any non-true value is returned.
This tells bash that it should exit the script if any statement returns a non-true return value. Setting this to
true
helps catch cases where a command fails and the script continues to run anyway.
interpreter
- Type: string
- Dynamic: ❌
- Required: ✔️
- Default:
/bin/sh
- Min length:
1
Interpreter to use when launching the process.
runner
- Type: string
- Dynamic: ❌
- Required: ✔️
- Default:
PROCESS
- Possible Values:
PROCESS
DOCKER
The task runner.
warningOnStdErr
- Type: boolean
- Dynamic: ❌
- Required: ✔️
- Default:
true
Whether to set the execution state to WARNING
if any stdErr
is emitted.
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 the DOCKER
runner.
env
- Type: object
- SubType: string
- Dynamic: ✔️
- Required: ❌
One or more additional environment variable(s) to add to the task run.
files
- Type: array
- SubType: string
- Dynamic: ✔️
- Required: ❌
Deprecated The list of files that will be uploaded to Kestra's internal storage.
Use
outputFiles
instead.
inputFiles
- Type: object
- SubType: string
- Dynamic: ✔️
- Required: ❌
Input files are extra files that will be available in the script's working directory.
Define the files as a map of a file name being the key, and the value being the file's content. Alternatively, configure the files as a JSON string with the same key/value structure as the map. In both cases, you can either specify the file's content inline, or reference a file from Kestra's internal storage by its URI, e.g. a file from an input, output of a previous task, or a Namespace File.
interpreterArgs
- Type: array
- SubType: string
- Dynamic: ❌
- Required: ❌
- Default:
[ "-c" ]
Interpreter arguments to be 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.
outputDirs
- Type: array
- SubType: string
- Dynamic: ❌
- Required: ❌
List of output directories that will be uploaded to Kestra's internal storage.
List of keys that will generate temporary directories. This property can be used with a special variable named
outputDirs.key
. If you add a file with"myDir"
, you can use the special varecho 1 >> {[ outputDirs.myDir }}/file1.txt
andecho 2 >> {[ outputDirs.myDir }}/file2.txt
, and both the files will be uploaded to Kestra's internal storage. You can reference them in other tasks using.
outputFiles
- Type: array
- SubType: string
- Dynamic: ❌
- Required: ❌
Output file list that will be uploaded to Kestra's internal storage.
List of keys that will generate temporary files. This property can be used with a special variable named
outputFiles.key
. If you add a file with"first"
, you can use the special varecho 1 >> {[ outputFiles.first }}
, and on other tasks, you can reference it using.
outputsFiles
- Type: array
- SubType: string
- Dynamic: ❌
- Required: ❌
Deprecated Output files.
Use
outputFiles
instead.
Outputs
exitCode
- Type: integer
- Required: ✔️
- Default:
0
files
⚠ Deprecated
- Type: object
- SubType: string
- Required: ❌
outputFiles
- Type: object
- SubType: string
- Required: ❌
stdErrLineCount
- Type: integer
- Required: ❌
- Default:
0
stdOutLineCount
- Type: integer
- Required: ❌
- Default:
0
vars
- Type: object
- Required: ❌
Definitions
io.kestra.plugin.scripts.runner.docker.Cpu
cpus
- Type: integer
- Dynamic: ❌
- Required: ❌
io.kestra.plugin.scripts.runner.docker.Memory
kernelMemory
- Type: string
- Dynamic: ✔️
- Required: ❌
memory
- Type: string
- Dynamic: ✔️
- Required: ❌
memoryReservation
- Type: string
- Dynamic: ✔️
- Required: ❌
memorySwap
- Type: string
- Dynamic: ✔️
- Required: ❌
memorySwappiness
- Type: string
- Dynamic: ✔️
- Required: ❌
oomKillDisable
- Type: boolean
- Dynamic: ❌
- Required: ❌
io.kestra.plugin.scripts.exec.scripts.models.DockerOptions
image
- Type: string
- Dynamic: ✔️
- Required: ✔️
- Min length:
1
config
- Type:
- string
- object
- Dynamic: ✔️
- Required: ❌
- Type:
cpu
- Type: Cpu
- Dynamic: ❌
- Required: ❌
credentials
- Type: Credentials
- Dynamic: ✔️
- Required: ❌
deviceRequests
- Type: array
- SubType: DeviceRequest
- Dynamic: ❌
- Required: ❌
entryPoint
- Type: array
- SubType: string
- Dynamic: ✔️
- Required: ❌
extraHosts
- Type: array
- SubType: string
- Dynamic: ✔️
- Required: ❌
host
- Type: string
- Dynamic: ✔️
- Required: ❌
memory
- Type: Memory
- Dynamic: ❌
- Required: ❌
networkMode
- Type: string
- Dynamic: ✔️
- Required: ❌
pullPolicy
- Type: string
- Dynamic: ❌
- Required: ❌
- Default:
ALWAYS
- Possible Values:
IF_NOT_PRESENT
ALWAYS
NEVER
shmSize
- Type: string
- Dynamic: ✔️
- Required: ❌
user
- Type: string
- Dynamic: ✔️
- Required: ❌
volumes
- Type: array
- SubType: string
- Dynamic: ✔️
- Required: ❌
io.kestra.plugin.scripts.runner.docker.Credentials
auth
- Type: string
- Dynamic: ✔️
- Required: ❌
identityToken
- Type: string
- Dynamic: ✔️
- Required: ❌
password
- Type: string
- Dynamic: ✔️
- Required: ❌
registry
- Type: string
- Dynamic: ✔️
- Required: ❌
registryToken
- Type: string
- Dynamic: ✔️
- Required: ❌
username
- Type: string
- Dynamic: ✔️
- Required: ❌
io.kestra.plugin.scripts.runner.docker.DeviceRequest
capabilities
- Type: array
- SubType: array
- Dynamic: ❌
- Required: ❌
count
- Type: integer
- Dynamic: ❌
- Required: ❌
deviceIds
- Type: array
- SubType: string
- Dynamic: ✔️
- Required: ❌
driver
- Type: string
- Dynamic: ✔️
- Required: ❌
options
- Type: object
- SubType: string
- Dynamic: ❌
- Required: ❌