🚀 New! Kestra raises $3 million to grow Learn more

Trigger Trigger

yaml
type: "io.kestra.plugin.fs.ftp.Trigger"

Trigger a flow as soon as new files are detected in a given FTP server's directory.

Examples

Wait for one or more files in a given FTP server's directory and process each of these files sequentially.

yaml
id: ftp_trigger_flow
namespace: dev

tasks:
  - id: for_each_file
    type: io.kestra.core.tasks.flows.EachSequential
    value: "{{ trigger.files | jq('.path') }}"
    tasks:
      - id: return
        type: io.kestra.core.tasks.debugs.Return
        format: "{{ taskrun.value }}"

triggers:
  - id: watch
    type: io.kestra.plugin.fs.ftp.Trigger
    host: localhost
    port: 21
    username: foo
    password: bar
    from: "/in/"
    interval: PT10S
    action: MOVE
    moveDirectory: "/archive/"

Wait for one or more files in a given FTP server's directory and process each of these files sequentially. Delete files manually after processing to prevent infinite triggering.

yaml
id: ftp_trigger_flow
namespace: dev

tasks:
  - id: for_each_file
    type: io.kestra.core.tasks.flows.EachSequential
    value: "{{ trigger.files | jq('.name') }}"
    tasks:
      - id: return
        type: io.kestra.core.tasks.debugs.Return
        format: "{{ taskrun.value }}"
      - id: delete
        type: io.kestra.plugin.fs.ftp.Delete
        host: localhost
        port: 21
        username: foo
        password: bar
        uri: "/in/{{ taskrun.value }}"

triggers:
  - id: watch
    type: io.kestra.plugin.fs.ftp.Trigger
    host: localhost
    port: 21
    username: foo
    password: bar
    from: "/in/"
    interval: PT10S
    action: NONE

Wait for one or more files in a given FTP server's directory and process each of these files sequentially. In this example, we restrict the trigger to only wait for CSV files in the mydir directory.

yaml
id: ftp_wait_for_csv_in_mydir
namespace: dev

tasks:
  - id: each
    type: io.kestra.core.tasks.flows.EachSequential
    value: "{{ trigger.files | jq('.path') }}"
    tasks:
      - id: return
        type: io.kestra.core.tasks.debugs.Return
        format: "{{ taskrun.value }}"

triggers:
  - id: watch
    type: io.kestra.plugin.fs.ftp.Trigger
    host: localhost
    port: "21"
    username: foo
    password: bar
    from: "mydir/"
    regExp: ".*.csv"
    action: MOVE
    moveDirectory: "archive/"
    interval: PTS

Properties

action

  • Type: string
  • Dynamic: ✔️
  • Required: ✔️
  • Possible Values:
    • MOVE
    • DELETE
    • NONE

The action to perform on the retrieved files. If using 'NONE' make sure to handle the files inside your flow to avoid infinite triggering.

from

  • Type: string
  • Dynamic: ✔️
  • Required: ✔️

The directory to list

host

  • Type: string
  • Dynamic: ✔️
  • Required: ✔️

Hostname of the remote server

conditions

List of conditions in order to limit the flow trigger.

interval

  • Type: string
  • Dynamic:
  • Required:
  • Default: 60.000000000
  • Format: duration

The interval between test of triggers

moveDirectory

  • Type: string
  • Dynamic: ✔️
  • Required:

The destination directory in case off MOVE

passiveMode

  • Type: boolean
  • Dynamic:
  • Required:
  • Default: true

Whether to use a passive mode. Passive mode is generally considered more secure as it's less likely to encounter issues with NAT and firewalls. Therefore, this property is by default set to true. To use active mode instead, set the property to false.

password

  • Type: string
  • Dynamic: ✔️
  • Required:

Password on the remote server

port

  • Type: string
  • Dynamic: ✔️
  • Required:
  • Default: 21

Port of the remote server

proxyHost

  • Type: string
  • Dynamic: ✔️
  • Required:

FTP proxy host

proxyPort

  • Type: string
  • Dynamic: ✔️
  • Required:

FTP proxy port

proxyType

  • Type: string
  • Dynamic: ✔️
  • Required:
  • Possible Values:
    • DIRECT
    • HTTP
    • SOCKS

FTP proxy type

recursive

  • Type: boolean
  • Dynamic:
  • Required:
  • Default: false

List file recursively

regExp

  • Type: string
  • Dynamic: ✔️
  • Required:

A regexp to filter on full path

remoteIpVerification

  • Type: boolean
  • Dynamic:
  • Required:
  • Default: true

Control that the server ip that emit the request is the same than send response.

rootDir

  • Type: boolean
  • Dynamic:
  • Required:
  • Default: true

Is path is relative to root dir

stopAfter

  • Type: array
  • SubType: string
  • Dynamic:
  • Required:

List of execution states after which a trigger should be stopped (a.k.a. disabled).

username

  • Type: string
  • Dynamic: ✔️
  • Required:

Username on the remote server

Outputs

files

The bucket of the downloaded file

Definitions

io.kestra.plugin.fs.vfs.models.File

Properties

accessDate
  • Type: string
  • Dynamic:
  • Required:
  • Format: date-time
fileType
  • Type: string
  • Dynamic:
  • Required:
  • Possible Values:
    • FOLDER
    • FILE
    • FILE_OR_FOLDER
    • IMAGINARY
flags
  • Type: integer
  • Dynamic:
  • Required:
groupId
  • Type: integer
  • Dynamic:
  • Required:
name
  • Type: string
  • Dynamic:
  • Required:
path
  • Type: string
  • Dynamic:
  • Required:
  • Format: uri
permissions
  • Type: integer
  • Dynamic:
  • Required:
size
  • Type: integer
  • Dynamic:
  • Required:
  • Type: boolean
  • Dynamic:
  • Required:
  • Default: false
updatedDate
  • Type: string
  • Dynamic:
  • Required:
  • Format: date-time
userId
  • Type: integer
  • Dynamic:
  • Required:

io.kestra.core.models.conditions.Condition