Trigger Trigger

yaml
type: "io.kestra.plugin.gcp.gcs.Trigger"

Wait for files on Google cloud storage

This trigger will poll every interval a GCS bucket. You can search for all files in a bucket or directory in from or you can filter the files with a regExp.The detection is atomic, internally we do a list and interact only with files listed. Once a file is detected, we download the file on internal storage and processed with declared action in order to move or delete the files from the bucket (to avoid double detection on new poll)

Examples

Wait for a list of file on a GCS bucket and iterate through the files

yaml
id: gcs-listen
namespace: io.kestra.tests

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

triggers:
  - id: watch
    type: io.kestra.plugin.gcp.gcs.Trigger
    interval: "PT5M"
    from: gs://my-bucket/kestra/listen/
    action: MOVE
    moveDirectory: gs://my-bucket/kestra/archive/

Properties

action

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

The action to do on find files

from

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

The directory to list

interval

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

Interval between polling

The interval between 2 different test of schedule, this can avoid to overload the remote system with too many call. For most of trigger that depend on external system, a minimal interval must be at least PT30S. See ISO_8601 Durations for more information of available interval value

listingType

  • Type: string
  • Dynamic:
  • Required:
  • Default: DIRECTORY
  • Possible Values:
    • RECURSIVE
    • DIRECTORY

The listing type you want (like directory or recursive)

if DIRECTORY, will only list objects in the specified directory if RECURSIVE, will list objects in the specified directory recursively Default value is DIRECTORY When using RECURSIVE value, be carefull to move your files to a location not in the from scope

moveDirectory

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

The destination directory in case off MOVE

projectId

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

The GCP project id

regExp

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

A regexp to filter on full path

ex: regExp: .* to match all files regExp: .*2020-01-0.\\.csv to match files between 01 and 09 of january ending with .csv

scopes

  • Type: array
  • SubType: string
  • Dynamic: ✔️
  • Required:
  • Default: [https://www.googleapis.com/auth/cloud-platform]

The GCP scopes to used

serviceAccount

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

The GCP service account key

Outputs

blobs

  • Type: array
  • SubType: Blob

The bucket of the downloaded file

Definitions

Blob

bucket

  • Type: string
  • Dynamic:
  • Required:

cacheControl

  • Type: string
  • Dynamic:
  • Required:

componentCount

  • Type: integer
  • Dynamic:
  • Required:

contentDisposition

  • Type: string
  • Dynamic:
  • Required:

contentEncoding

  • Type: string
  • Dynamic:
  • Required:

contentLanguage

  • Type: string
  • Dynamic:
  • Required:

contentType

  • Type: string
  • Dynamic:
  • Required:

crc32c

  • Type: string
  • Dynamic:
  • Required:

createTime

  • Type: string
  • Dynamic:
  • Required:

customTime

  • Type: string
  • Dynamic:
  • Required:

deleteTime

  • Type: string
  • Dynamic:
  • Required:

etag

  • Type: string
  • Dynamic:
  • Required:

eventBasedHold

  • Type: boolean
  • Dynamic:
  • Required:

generatedId

  • Type: string
  • Dynamic:
  • Required:

isDirectory

  • Type: boolean
  • Dynamic:
  • Required:

kmsKeyName

  • Type: string
  • Dynamic:
  • Required:

md5

  • Type: string
  • Dynamic:
  • Required:
  • Type: string
  • Dynamic:
  • Required:

metaGeneration

  • Type: integer
  • Dynamic:
  • Required:

metadata

  • Type: object
  • SubType: string
  • Dynamic:
  • Required:

name

  • Type: string
  • Dynamic:
  • Required:

retentionExpirationTime

  • Type: integer
  • Dynamic:
  • Required:
  • Type: string
  • Dynamic:
  • Required:

size

  • Type: integer
  • Dynamic:
  • Required:

temporaryHold

  • Type: boolean
  • Dynamic:
  • Required:

timeStorageClassUpdated

  • Type: string
  • Dynamic:
  • Required:

updateTime

  • Type: string
  • Dynamic:
  • Required:

uri

  • Type: string
  • Dynamic:
  • Required: