[[openstack-swift-component]]
== OpenStack Swift Component

*Available as of Camel version 2.19*

The openstack-swift component allows messages to be sent to an OpenStack object 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-swift://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 Swift component has no options.
// component options: END

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

----
openstack-swift: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 Swift 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:

### containers

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

|`create` | Create new container.

|`get` | Get the container.

|`getAll` | Get all containers.

|`update` | Update the container.

|`delete` | Delete the container.

|`getMetadata` | Get metadata.

|`createUpdateMetadata` | Create/update metadata.

|`deleteMetadata` | Delete metadata.
|=========================================================================

#### Message headers evaluated by the Volume producer

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

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

|`name` |`String` |The container name.

|`X-Container-Meta-` |`Map` | Container metadata prefix.

|`X-Versions-Location` |`String` | Versions location.

|`X-Container-Read` |`String` |  ACL - container read.

|`X-Container-Write` |`String` | ACL - container write.

|`limit` | `Integer` | List options - limit.

|`marker` | `String` | List options - marker.

|`end_marker` | `String` | List options - end marker.

|`delimiter` | `Character` | List options - delimiter.

|`path` | `String` | List options - path.

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

If you need more precise container settings you can create new object of the type *org.openstack4j.model.storage.object.options.CreateUpdateContainerOptions* (in case of create or update operation) 
or *org.openstack4j.model.storage.object.options.ContainerListOptions* for listing containers and send in the message body.

### objects

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

|`create` | Create new object.

|`get` | Get the object.

|`getAll` | Get all objects.

|`update` | Get update the object.

|`delete` | Delete the object.

|`getMetadata` | Get metadata.

|`createUpdateMetadata` | Create/update metadata.

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

#### Message headers evaluated by the Object producer

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

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

|`containerName` |`String` |The container name.

|`objectName` |`String` |The object name.

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

### See Also

* Configuring Camel
* Component
* Endpoint
* Getting Started

* openstack Component
