[[openstack-cinder-component]]
== OpenStack Cinder Component

*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 has no options.
// 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 (9 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
| *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
| *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


### 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.

### See Also

* Configuring Camel
* Component
* Endpoint
* Getting Started

* openstack Component
