// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT
= image:kamelets/google-sheets-source.svg[] Google Sheets Source

*Provided by: "Apache Software Foundation"*

*Support Level for this Kamelet is: "Preview"*

Receive data from Google Sheets.

== Configuration Options

The following table summarizes the configuration options available for the `google-sheets-source` Kamelet:
[width="100%",cols="2,^2,3,^2,^2,^3",options="header"]
|===
| Property| Name| Description| Type| Default| Example
| *accessToken {empty}* *| Access Token| OAuth 2 access token for google sheets application. This typically expires after an hour so refreshToken is recommended for long term usage.| string| | 
| *applicationName {empty}* *| Application name| Google Sheets application name| string| | 
| *clientId {empty}* *| Client Id| Client ID of the sheets application| string| | 
| *clientSecret {empty}* *| Client Secret| Client Secret of the sheets application| string| | 
| *index {empty}* *| Index| An index for the google sheets endpoint| string| | 
| *refreshToken {empty}* *| Refresh Token| OAuth 2 refresh token for google sheets application. Using this, the Google Calendar component can obtain a new accessToken whenever the current one expires - a necessity if the application is long-lived.| string| | 
| *spreadsheetId {empty}* *| Spreadsheet ID| The Spreadsheet ID to be used as events source| string| | 
| delay| Delay| Milliseconds before the next poll| integer| `500`| 
| range| Consume from now| the range of rows and columns in a sheet to get data from.| boolean| | `"A1:B3"`
| splitResults| Split Results| True if value range result should be split into rows or columns to process each of them individually.| boolean| `true`| 
|===

NOTE: Fields marked with ({empty}*) are mandatory.

== Usage

This section summarizes how the `google-sheets-source` can be used in various contexts.

=== Knative Source

The `google-sheets-source` Kamelet can be used as Knative source by binding it to a Knative object.

.google-sheets-source-binding.yaml
[source,yaml]
----
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
  name: google-sheets-source-binding
spec:
  source:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1alpha1
      name: google-sheets-source
    properties:
      accessToken: "The Access Token"
      applicationName: "The Application name"
      clientId: "The Client Id"
      clientSecret: "The Client Secret"
      index: "The Index"
      refreshToken: "The Refresh Token"
      spreadsheetId: "The Spreadsheet ID"
  sink:
    ref:
      kind: InMemoryChannel
      apiVersion: messaging.knative.dev/v1
      name: mychannel
  
----
Make sure you have xref:latest@camel-k::installation/installation.adoc[Camel K installed] into the Kubernetes cluster you're connected to.

Save the `google-sheets-source-binding.yaml` file into your hard drive, then configure it according to your needs.

You can run the source using the following command:

[source,shell]
----
kubectl apply -f google-sheets-source-binding.yaml
----

==== *Dependencies*

The Kamelet needs the following dependencies:


- camel:jackson

- camel:kamelet

- camel:google-sheets
 

==== *Binding to Knative using the Kamel CLI:*

The procedure described above can be simplified into a single execution of the `kamel bind` command:

[source,shell]
----
kamel bind google-sheets-source -p "source.accessToken=The Access Token" -p "source.applicationName=The Application name" -p "source.clientId=The Client Id" -p "source.clientSecret=The Client Secret" -p "source.index=The Index" -p "source.refreshToken=The Refresh Token" -p "source.spreadsheetId=The Spreadsheet ID" channel/mychannel
----

This will create the KameletBinding under the hood and apply it to the current namespace in the cluster.

=== Kafka Source

The `google-sheets-source` Kamelet can be used as Kafka source by binding it to a Kafka topic.

.google-sheets-source-binding.yaml
[source,yaml]
----
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
  name: google-sheets-source-binding
spec:
  source:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1alpha1
      name: google-sheets-source
    properties:
      accessToken: "The Access Token"
      applicationName: "The Application name"
      clientId: "The Client Id"
      clientSecret: "The Client Secret"
      index: "The Index"
      refreshToken: "The Refresh Token"
      spreadsheetId: "The Spreadsheet ID"
  sink:
    ref:
      kind: KafkaTopic
      apiVersion: kafka.strimzi.io/v1beta1
      name: my-topic
  
----

Ensure that you've installed https://strimzi.io/[Strimzi] and created a topic named `my-topic` in the current namespace.
Make also sure you have xref:latest@camel-k::installation/installation.adoc[Camel K installed] into the Kubernetes cluster you're connected to.

Save the `google-sheets-source-binding.yaml` file into your hard drive, then configure it according to your needs.

You can run the source using the following command:

[source,shell]
----
kubectl apply -f google-sheets-source-binding.yaml
----

==== *Binding to Kafka using the Kamel CLI:*

The procedure described above can be simplified into a single execution of the `kamel bind` command:

[source,shell]
----
kamel bind google-sheets-source -p "source.accessToken=The Access Token" -p "source.applicationName=The Application name" -p "source.clientId=The Client Id" -p "source.clientSecret=The Client Secret" -p "source.index=The Index" -p "source.refreshToken=The Refresh Token" -p "source.spreadsheetId=The Spreadsheet ID" kafka.strimzi.io/v1beta1:KafkaTopic:my-topic
----

This will create the KameletBinding under the hood and apply it to the current namespace in the cluster.

// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT
