Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sftp Binding Component Docs #4418

Merged
merged 10 commits into from
Nov 25, 2024
Original file line number Diff line number Diff line change
@@ -0,0 +1,231 @@
---
type: docs
title: "Sftp binding spec"
arslanmusta marked this conversation as resolved.
Show resolved Hide resolved
linkTitle: "Sftp"
arslanmusta marked this conversation as resolved.
Show resolved Hide resolved
description: "Detailed documentation on the Sftp binding component"
arslanmusta marked this conversation as resolved.
Show resolved Hide resolved
aliases:
- "/operations/components/setup-bindings/supported-bindings/sftp/"
---

## Component format

To set up the Sftp binding, create a component of type `bindings.sftp`. See this guide on how to create and apply a binding configuration.
arslanmusta marked this conversation as resolved.
Show resolved Hide resolved

```yaml
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: <NAME>
spec:
type: bindings.sftp
version: v1
metadata:
- name: rootPath
value: "<string>"
- name: address
value: "<string>"
- name: username
value: "<string>"
- name: password
value: "*****************"
- name: privateKey
value: "*****************"
- name: privateKeyPassphrase
value: "*****************"
- name: hostPublicKey
value: "*****************"
- name: knownHostsFile
value: "<string>"
- name: insecureIgnoreHostKey
value: "<bool>"
```

## Spec metadata fields

| Field | Required | Binding support | Details | Example |
|--------------------|:--------:|------------|-----|---------|
| `rootPath` | Y | Output | Root path for default working directory | `"/path"` |
| `address` | Y | Output | Address of Sftp server | `"localhost:22"` |
arslanmusta marked this conversation as resolved.
Show resolved Hide resolved
| `username` | Y | Output | Username for authentication | `"username"` |
| `password` | N | Output | Password for username/password authentication | `"password"` |
| `privateKey` | N | Output | Private key for public key authentication | <pre>"\|-<br>-----BEGIN OPENSSH PRIVATE KEY-----<br>*****************<br>-----END OPENSSH PRIVATE KEY-----"</pre> |
| `privateKeyPassphrase` | N | Output | Private key passphrase for public key authentication | `"passphrase"` |
| `hostPublicKey` | N | Output | Host public key for host validation | `"ecdsa-sha2-nistp256 *** root@openssh-server"` |
| `knownHostsFile` | N | Output | Known hosts file for host validation | `"/path/file"` |
| `insecureIgnoreHostKey` | N | Output | Allows to skip host validation. Defaults to `"false"` | `"true"`, `"false"` |

## Binding support

This component supports **output binding** with the following operations:

- `create` : [Create file](#create-file)
- `get` : [Get file](#get-file)
- `list` : [List files](#list-files)
- `delete` : [Delete file](#delete-file)

### Create file

To perform a create file operation, invoke the Sftp binding with a `POST` method and the following JSON body:
arslanmusta marked this conversation as resolved.
Show resolved Hide resolved

```json
{
"operation": "create",
"data": "<YOUR_BASE_64_CONTENT>",
"metadata": {
"fileName": "<filename>",
}
}
```

#### Example

{{< tabs Windows Linux >}}

{{% codetab %}}
```bash
curl -d "{ \"operation\": \"create\", \"data\": \"YOUR_BASE_64_CONTENT\", \"metadata\": { \"fileName\": \"my-test-file.jpg\" } }" http://localhost:<dapr-port>/v1.0/bindings/<binding-name>
```
{{% /codetab %}}

{{% codetab %}}
```bash
curl -d '{ "operation": "create", "data": "YOUR_BASE_64_CONTENT", "metadata": { "fileName": "my-test-file.jpg" } }' \
http://localhost:<dapr-port>/v1.0/bindings/<binding-name>
```
{{% /codetab %}}

{{< /tabs >}}

#### Response

The response body will contain the following JSON:
arslanmusta marked this conversation as resolved.
Show resolved Hide resolved

```json
{
"fileName": "<filename>"
}

```

### Get file

To perform a get file operation, invoke the Sftp binding with a `POST` method and the following JSON body:
arslanmusta marked this conversation as resolved.
Show resolved Hide resolved

```json
{
"operation": "get",
"metadata": {
"fileName": "<filename>"
}
}
```

#### Example

{{< tabs Windows Linux >}}

{{% codetab %}}
```bash
curl -d '{ \"operation\": \"get\", \"metadata\": { \"fileName\": \"filename\" }}' http://localhost:<dapr-port>/v1.0/bindings/<binding-name>
```
{{% /codetab %}}

{{% codetab %}}
```bash
curl -d '{ "operation": "get", "metadata": { "fileName": "filename" }}' \
http://localhost:<dapr-port>/v1.0/bindings/<binding-name>
```
{{% /codetab %}}

{{< /tabs >}}

#### Response

The response body contains the value stored in the file.

### List files

To perform a list files operation, invoke the Sftp binding with a `POST` method and the following JSON body:
arslanmusta marked this conversation as resolved.
Show resolved Hide resolved

```json
{
"operation": "list"
}
```

If you only want to list the files beneath a particular directory below the `rootPath`, specify the relative directory name as the `fileName` in the metadata.

```json
{
"operation": "list",
"metadata": {
"fileName": "my/cool/directory"
}
}
```

#### Example

{{< tabs Windows Linux >}}

{{% codetab %}}
```bash
curl -d '{ \"operation\": \"list\", \"metadata\": { \"fileName\": \"my/cool/directory\" }}' http://localhost:<dapr-port>/v1.0/bindings/<binding-name>
```
{{% /codetab %}}

{{% codetab %}}
```bash
curl -d '{ "operation": "list", "metadata": { "fileName": "my/cool/directory" }}' \
http://localhost:<dapr-port>/v1.0/bindings/<binding-name>
```
{{% /codetab %}}

{{< /tabs >}}

#### Response

The response is a JSON array of file names.

### Delete file

To perform a delete file operation, invoke the Sftp binding with a `POST` method and the following JSON body:
arslanmusta marked this conversation as resolved.
Show resolved Hide resolved

```json
{
"operation": "delete",
"metadata": {
"fileName": "myfile"
}
}
```

#### Example

{{< tabs Windows Linux >}}

{{% codetab %}}
```bash
curl -d '{ \"operation\": \"delete\", \"metadata\": { \"fileName\": \"myfile\" }}' http://localhost:<dapr-port>/v1.0/bindings/<binding-name>
```
{{% /codetab %}}

{{% codetab %}}
```bash
curl -d '{ "operation": "delete", "metadata": { "fileName": "myfile" }}' \
http://localhost:<dapr-port>/v1.0/bindings/<binding-name>
```
{{% /codetab %}}

{{< /tabs >}}

#### Response

An HTTP 204 (No Content) and empty body will be returned if successful.
arslanmusta marked this conversation as resolved.
Show resolved Hide resolved

## Related links

- [Basic schema for a Dapr component]({{< ref component-schema >}})
- [Bindings building block]({{< ref bindings >}})
- [How-To: Use bindings to interface with external resources]({{< ref howto-bindings.md >}})
- [Bindings API reference]({{< ref bindings_api.md >}})
8 changes: 8 additions & 0 deletions daprdocs/data/components/bindings/generic.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,14 @@
features:
input: true
output: false
- component: Sftp
arslanmusta marked this conversation as resolved.
Show resolved Hide resolved
link: sftp
state: Alpha
version: v1
since: "1.15"
features:
input: false
output: true
- component: SMTP
link: smtp
state: Alpha
Expand Down
Loading