// kafka-connector options: START
[[camel-jclouds-kafka-connector-sink]]
= camel-jclouds-kafka-connector sink configuration

Connector Description: Interact with jclouds compute and blobstore service.

When using camel-jclouds-kafka-connector as sink make sure to use the following Maven dependency to have support for the connector:

[source,xml]
----
<dependency>
  <groupId>org.apache.camel.kafkaconnector</groupId>
  <artifactId>camel-jclouds-kafka-connector</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel Kafka connector version -->
</dependency>
----

To use this Sink connector in Kafka connect you'll need to set the following connector.class

[source,java]
----
connector.class=org.apache.camel.kafkaconnector.jclouds.CamelJcloudsSinkConnector
----


The camel-jclouds sink connector supports 17 options, which are listed below.



[width="100%",cols="2,5,^1,1,1",options="header"]
|===
| Name | Description | Default | Required | Priority
| *camel.sink.path.command* | What command to execute such as blobstore or compute. One of: [blobstore] [compute] | null | true | HIGH
| *camel.sink.path.providerId* | The name of the cloud provider that provides the target service (e.g. aws-s3 or aws_ec2). | null | true | HIGH
| *camel.sink.endpoint.lazyStartProducer* | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | false | MEDIUM
| *camel.sink.endpoint.blobName* | The name of the blob. | null | false | MEDIUM
| *camel.sink.endpoint.container* | The name of the blob container. | null | false | MEDIUM
| *camel.sink.endpoint.group* | The group that will be assigned to the newly created node. Values depend on the actual cloud provider. | null | false | MEDIUM
| *camel.sink.endpoint.hardwareId* | The hardware that will be used for creating a node. Values depend on the actual cloud provider. | null | false | MEDIUM
| *camel.sink.endpoint.imageId* | The imageId that will be used for creating a node. Values depend on the actual cloud provider. | null | false | MEDIUM
| *camel.sink.endpoint.locationId* | The location that will be used for creating a node. Values depend on the actual cloud provider. | null | false | MEDIUM
| *camel.sink.endpoint.nodeId* | The id of the node that will run the script or destroyed. | null | false | MEDIUM
| *camel.sink.endpoint.nodeState* | To filter by node status to only select running nodes etc. One of: [PENDING] [TERMINATED] [SUSPENDED] [RUNNING] [ERROR] [UNRECOGNIZED] | null | false | MEDIUM
| *camel.sink.endpoint.operation* | Specifies the type of operation that will be performed to the blobstore. | null | false | MEDIUM
| *camel.sink.endpoint.user* | The user on the target node that will run the script. | null | false | MEDIUM
| *camel.component.jclouds.blobStores* | To use the given BlobStore which must be configured when using blobstore. | null | false | MEDIUM
| *camel.component.jclouds.computeServices* | To use the given ComputeService which must be configured when use compute. | null | false | MEDIUM
| *camel.component.jclouds.lazyStartProducer* | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | false | MEDIUM
| *camel.component.jclouds.autowiredEnabled* | Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which then gets configured on the component. This can be used for automatic configuring JDBC data sources, JMS connection factories, AWS Clients, etc. | true | false | MEDIUM
|===



The camel-jclouds sink connector has no converters out of the box.





The camel-jclouds sink connector has no transforms out of the box.





The camel-jclouds sink connector has no aggregation strategies out of the box.




// kafka-connector options: END
