[[openstack-cinder-component]]
= OpenStack Cinder Component
:page-source: components/camel-openstack/src/main/docs/openstack-cinder-component.adoc

*Available as of Camel version 2.19*

The Openstack Cinder component allows messages to be sent to an OpenStack block storage services.

== Dependencies

Maven users will need to add the following dependency to their pom.xml.

*pom.xml*

[source,xml]
---------------------------------------
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-openstack</artifactId>
    <version>${camel-version}</version>
</dependency>
---------------------------------------

where `${camel-version`} must be replaced by the actual version of Camel.


== URI Format

[source,java]
----------------------------
openstack-cinder://hosturl[?options]
----------------------------

You can append query options to the URI in the following format
`?options=value&option2=value&...`

== URI Options

// component options: START
The OpenStack Cinder component supports 1 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
|===
// component options: END

// endpoint options: START
The OpenStack Cinder endpoint is configured using URI syntax:

----
openstack-cinder:host
----

with the following path and query parameters:

=== Path Parameters (1 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *host* | *Required* OpenStack host url |  | String
|===


=== Query Parameters (11 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *apiVersion* (producer) | OpenStack API version | V3 | String
| *config* (producer) | OpenStack configuration |  | Config
| *domain* (producer) | Authentication domain | default | String
| *lazyStartProducer* (producer) | 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 | boolean
| *operation* (producer) | The operation to do |  | String
| *password* (producer) | *Required* OpenStack password |  | String
| *project* (producer) | *Required* The project ID |  | String
| *subsystem* (producer) | *Required* OpenStack Cinder subsystem |  | String
| *username* (producer) | *Required* OpenStack username |  | String
| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
|===
// endpoint options: END
// spring-boot-auto-configure options: START
== Spring Boot Auto-Configuration

When using Spring Boot make sure to use the following Maven dependency to have support for auto configuration:

[source,xml]
----
<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-openstack-starter</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel core version -->
</dependency>
----


The component supports 2 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *camel.component.openstack-cinder.basic-property-binding* | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | Boolean
| *camel.component.openstack-cinder.enabled* | Enable openstack-cinder component | true | Boolean
|===
// spring-boot-auto-configure options: END



== Usage
You can use following settings for each subsystem:

== volumes

=== Operations you can perform with the Volume producer
[width="100%",cols="20%,80%",options="header",]
|=========================================================================
|Operation | Description

|`create` | Create new volume.

|`get` | Get the volume.

|`getAll` | Get all volumes.

|`getAllTypes` | Get volume types.

|`update` | Update the volume.

|`delete` | Delete the volume.
|=========================================================================

=== Message headers evaluated by the Volume producer

[width="100%",cols="10%,10%,80%",options="header",]
|=========================================================================
|Header |Type |Description

|`operation` | `String` | The operation to perform.

|`ID` | `String` | ID of the volume.

|`name` |`String` |The volume name.

|`description` |`String` | Volume description.

|`size` |`Integer` |Size of volume.

|`volumeType` |`String` | Volume type.

|`imageRef` |`String` | ID of image.

|`snapshotId` |`String` | ID of snapshot.

|`isBootable` |`Boolean` | Is bootable.
|=========================================================================

If you need more precise volume settings you can create new object of the type *org.openstack4j.model.storage.block.Volume* and send in the message body.

== snapshots

=== Operations you can perform with the Snapshot producer
[width="100%",cols="20%,80%",options="header",]
|=========================================================================
|Operation | Description

|`create` | Create new snapshot.

|`get` | Get the snapshot.

|`getAll` | Get all snapshots.

|`update` | Get update the snapshot.

|`delete` | Delete the snapshot.

|=========================================================================

=== Message headers evaluated by the Snapshot producer

[width="100%",cols="10%,10%,80%",options="header",]
|=========================================================================
|Header |Type |Description

|`operation` | `String` | The operation to perform.

|`ID` | `String` | ID of the server.

|`name` |`String` |The server name.

|`description` |`String` | The snapshot description.

|`VolumeId` |`String` | The Volume ID.

|`force` |`Boolean` | Force.

|=========================================================================

If you need more precise server settings you can create new object of the type *org.openstack4j.model.storage.block.VolumeSnapshot* and send in the message body.

