[[digitalocean-component]]
== DigitalOcean Component

*Available as of Camel version 2.19*

The **DigitalOcean** component allows you to manage Droplets and resources within the DigitalOcean cloud with **Camel** by encapsulating https://www.digitalocean.com/community/projects/api-client-in-java[digitalocean-api-java]. All of the functionality that you are familiar with in the DigitalOcean control panel is also available through this Camel component.

=== Prerequisites

You must have a valid DigitalOcean account and a valid OAuth token. You can generate an OAuth token by visiting the [Apps & API] section of the DigitalOcean control panel for your account.

=== URI format

The **DigitalOcean Component** uses the following URI format:

```
digitalocean://endpoint?[options]
```
where `endpoint` is a DigitalOcean resource type.

Example : to list your droplets:

```
digitalocean://droplets?operation=list&oAuthToken=XXXXXX&page=1&perPage=10
```

The DigitalOcean component only supports producer endpoints so you cannot use this component at the beginning of a route to listen to messages in a channel.


=== Options


// component options: START
The DigitalOcean component supports 2 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *resolveProperty Placeholders* (advanced) | Whether the component should resolve property placeholders on itself when starting. Only properties which are of String type can use property placeholders. | true | boolean
| *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 DigitalOcean endpoint is configured using URI syntax:

----
digitalocean:operation
----

with the following path and query parameters:

==== Path Parameters (1 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *operation* | The operation to perform to the given resource. |  | DigitalOceanOperations
|===


==== Query Parameters (11 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *page* (producer) | Use for pagination. Force the page number. | 1 | Integer
| *perPage* (producer) | Use for pagination. Set the number of item per request. The maximum number of results per page is 200. | 25 | Integer
| *resource* (producer) | *Required* The DigitalOcean resource type on which perform the operation. |  | DigitalOceanResources
| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *digitalOceanClient* (advanced) | To use a existing configured DigitalOceanClient as client |  | DigitalOceanClient
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
| *httpProxyHost* (proxy) | Set a proxy host if needed |  | String
| *httpProxyPassword* (proxy) | Set a proxy password if needed |  | String
| *httpProxyPort* (proxy) | Set a proxy port if needed |  | Integer
| *httpProxyUser* (proxy) | Set a proxy host if needed |  | String
| *oAuthToken* (security) | DigitalOcean OAuth Token |  | String
|===
// 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-digitalocean-starter</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel core version -->
</dependency>
----


The component supports 3 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *camel.component.digitalocean.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.digitalocean.enabled* | Enable digitalocean component | true | Boolean
| *camel.component.digitalocean.resolve-property-placeholders* | Whether the component should resolve property placeholders on itself when starting. Only properties which are of String type can use property placeholders. | true | Boolean
|===
// spring-boot-auto-configure options: END



You have to provide an **operation** value for each endpoint, with the `operation` URI option or the `CamelDigitalOceanOperation` message header.

All **operation** values are defined in `DigitalOceanOperations` enumeration.

All **header** names used by the component are defined in `DigitalOceanHeaders` enumeration.


=== Message body result

All message bodies returned are using objects provided by the **digitalocean-api-java** library.


=== API Rate Limits

DigitalOcean REST API encapsulated by camel-digitalocean component is subjected to API Rate Limiting. You can find the per method limits in the https://developers.digitalocean.com/documentation/v2/#rate-limit[API Rate Limits documentation].


=== Account endpoint

[width="100%",cols="2,5,^1,2",options="header"]
|===
| operation | Description | Headers | Result
| `get` | get account info |  | `com.myjeeva.digitalocean.pojo.Account`
|===

=== BlockStorages endpoint

[width="100%",cols="2,5,^5a,1",options="header"]
|===
| operation | Description | Headers | Result
| `list`
| list all of the Block Storage volumes available on your account
|
| `List<com.myjeeva.digitalocean.pojo.Volume>`

| `get`
| show information about a Block Storage volume
| `CamelDigitalOceanId` _Integer_
| `com.myjeeva.digitalocean.pojo.Volume`

| `get`
| show information about a Block Storage volume by name
| `CamelDigitalOceanName` _String_, +
  `CamelDigitalOceanRegion` _String_
| `com.myjeeva.digitalocean.pojo.Volume`

| `listSnapshots`
| retrieve the snapshots that have been created from a volume
| `CamelDigitalOceanId` _Integer_
| `List<com.myjeeva.digitalocean.pojo.Snapshot>`

| `create`
| create a new volume
| `CamelDigitalOceanVolumeSizeGigabytes` _Integer_, +
  `CamelDigitalOceanName` _String_, +
  `CamelDigitalOceanDescription`* _String_, +
  `CamelDigitalOceanRegion`* _String_
| `com.myjeeva.digitalocean.pojo.Volume`

| `delete`
| delete a Block Storage volume, destroying all data and removing it from your account
| `CamelDigitalOceanId`  _Integer_
| `com.myjeeva.digitalocean.pojo.Delete`

| `delete`
| delete a Block Storage volume by name
| `CamelDigitalOceanName` _String_, +
  `CamelDigitalOceanRegion` _String_
| `com.myjeeva.digitalocean.pojo.Delete`

| `attach`
| attach a Block Storage volume to a Droplet
| `CamelDigitalOceanId` _Integer_, +
  `CamelDigitalOceanDropletId` _Integer_, +
  `CamelDigitalOceanDropletRegion` _String_
| `com.myjeeva.digitalocean.pojo.Action`

| `attach`
| attach a Block Storage volume to a Droplet by name
| `CamelDigitalOceanName` _String_, +
  `CamelDigitalOceanDropletId` _Integer_, +
  `CamelDigitalOceanDropletRegion` _String_
| `com.myjeeva.digitalocean.pojo.Action`

| `detach`
| detach a Block Storage volume from a Droplet
| `CamelDigitalOceanId` _Integer_, +
  `CamelDigitalOceanDropletId` _Integer_, +
  `CamelDigitalOceanDropletRegion` _String_
| `com.myjeeva.digitalocean.pojo.Action`

| `attach`
| detach a Block Storage volume from a Droplet by name
| `CamelDigitalOceanName` _String_, +
  `CamelDigitalOceanDropletId` _Integer_, +
  `CamelDigitalOceanDropletRegion` _String_
| `com.myjeeva.digitalocean.pojo.Action`

| `resize`
| resize a Block Storage volume
| `CamelDigitalOceanVolumeSizeGigabytes` _Integer_, +
  `CamelDigitalOceanRegion` _String_
| `com.myjeeva.digitalocean.pojo.Action`

| `listActions`
| retrieve all actions that have been executed on a volume
| `CamelDigitalOceanId`  _Integer_
| `List<com.myjeeva.digitalocean.pojo.Action>`
|===

=== Droplets endpoint

[width="100%",cols="2,5,^1,2",options="header"]
|===
| operation | Description | Headers | Result
| `list` | list all Droplets in your account |  | `List<com.myjeeva.digitalocean.pojo.Droplet>`
| `get` | show an individual droplet | `CamelDigitalOceanId` _Integer_| `com.myjeeva.digitalocean.pojo.Droplet`

| `create`
| create a new Droplet
| `CamelDigitalOceanName` _String_, +
  `CamelDigitalOceanDropletImage` _String_, +
  `CamelDigitalOceanRegion` _String_, +
  `CamelDigitalOceanDropletSize` _String_, +
  `CamelDigitalOceanDropletSSHKeys`* _List<String>_, +
  `CamelDigitalOceanDropletEnableBackups`* _Boolean_, +
  `CamelDigitalOceanDropletEnableIpv6`* _Boolean_, +
  `CamelDigitalOceanDropletEnablePrivateNetworking`* _Boolean_, +
  `CamelDigitalOceanDropletUserData`* _String_, +
  `CamelDigitalOceanDropletVolumes`* _List<String>_, +
  `CamelDigitalOceanDropletTags` _List<String>_
| `com.myjeeva.digitalocean.pojo.Droplet`

| `create`
| create multiple Droplets
| `CamelDigitalOceanNames` _List<String>_, +
  `CamelDigitalOceanDropletImage` _String_, +
  `CamelDigitalOceanRegion` _String_, +
  `CamelDigitalOceanDropletSize` _String_, +
  `CamelDigitalOceanDropletSSHKeys`* _List<String>_, +
  `CamelDigitalOceanDropletEnableBackups`* _Boolean_, +
  `CamelDigitalOceanDropletEnableIpv6`* _Boolean_, +
  `CamelDigitalOceanDropletEnablePrivateNetworking`* _Boolean_, +
  `CamelDigitalOceanDropletUserData`* _String_, +
  `CamelDigitalOceanDropletVolumes`* _List<String>_, +
  `CamelDigitalOceanDropletTags` _List<String>_
| `com.myjeeva.digitalocean.pojo.Droplet`

| `delete` | delete a Droplet, | `CamelDigitalOceanId` _Integer_| `com.myjeeva.digitalocean.pojo.Delete`
| `enableBackups` | enable backups on an existing Droplet | `CamelDigitalOceanId` _Integer_| `com.myjeeva.digitalocean.pojo.Action`
| `disableBackups` | disable backups on an existing Droplet | `CamelDigitalOceanId` _Integer_| `com.myjeeva.digitalocean.pojo.Action`
| `enableIpv6` | enable IPv6 networking on an existing Droplet | `CamelDigitalOceanId` _Integer_| `com.myjeeva.digitalocean.pojo.Action`
| `enablePrivateNetworking` | enable private networking on an existing Droplet | `CamelDigitalOceanId` _Integer_| `com.myjeeva.digitalocean.pojo.Action`
| `reboot` | reboot a Droplet | `CamelDigitalOceanId` _Integer_| `com.myjeeva.digitalocean.pojo.Action`
| `powerCycle` | power cycle a Droplet | `CamelDigitalOceanId` _Integer_| `com.myjeeva.digitalocean.pojo.Action`
| `shutdown` | shutdown a Droplet | `CamelDigitalOceanId` _Integer_| `com.myjeeva.digitalocean.pojo.Action`
| `powerOff` | power off a Droplet | `CamelDigitalOceanId` _Integer_| `com.myjeeva.digitalocean.pojo.Action`
| `powerOn` | power on a Droplet | `CamelDigitalOceanId` _Integer_| `com.myjeeva.digitalocean.pojo.Action`

| `restore`
| shutdown a Droplet
| `CamelDigitalOceanId` _Integer_, +
  `CamelDigitalOceanImageId` _Integer_
| `com.myjeeva.digitalocean.pojo.Action`

| `passwordReset` | reset the password for a Droplet | `CamelDigitalOceanId` _Integer_| `com.myjeeva.digitalocean.pojo.Action`

| `resize`
| resize a Droplet
| `CamelDigitalOceanId` _Integer_, +
  `CamelDigitalOceanDropletSize` _String_
| `com.myjeeva.digitalocean.pojo.Action`

| `rebuild`
| rebuild a Droplet
| `CamelDigitalOceanId` _Integer_, +
  `CamelDigitalOceanImageId` _Integer_
| `com.myjeeva.digitalocean.pojo.Action`

| `rename`
| rename a Droplet
| `CamelDigitalOceanId` _Integer_, +
  `CamelDigitalOceanName` _String_
| `com.myjeeva.digitalocean.pojo.Action`

| `changeKernel`
| change the kernel of a Droplet
| `CamelDigitalOceanId` _Integer_, +
  `CamelDigitalOceanKernelId` _Integer_
| `com.myjeeva.digitalocean.pojo.Action`

| `takeSnapshot`
| snapshot a Droplet
| `CamelDigitalOceanId` _Integer_, +
  `CamelDigitalOceanName`* _String_
| `com.myjeeva.digitalocean.pojo.Action`

| `tag`
| tag a Droplet
| `CamelDigitalOceanId` _Integer_, +
  `CamelDigitalOceanName` _String_
| `com.myjeeva.digitalocean.pojo.Response`

| `untag`
| untag a Droplet
| `CamelDigitalOceanId` _Integer_, +
  `CamelDigitalOceanName` _String_
| `com.myjeeva.digitalocean.pojo.Response`

| `listKernels` | retrieve a list of all kernels available to a Droplet | `CamelDigitalOceanId` _Integer_ | `List<com.myjeeva.digitalocean.pojo.Kernel>`
| `listSnapshots` | retrieve the snapshots that have been created from a Droplet | `CamelDigitalOceanId` _Integer_ | `List<com.myjeeva.digitalocean.pojo.Snapshot>`
| `listBackups` |  retrieve any backups associated with a Droplet | `CamelDigitalOceanId` _Integer_ | `List<com.myjeeva.digitalocean.pojo.Backup>`
| `listActions` |  retrieve all actions that have been executed on a Droplet | `CamelDigitalOceanId` _Integer_ | `List<com.myjeeva.digitalocean.pojo.Action>`
| `listNeighbors` |  retrieve a list of droplets that are running on the same physical server | `CamelDigitalOceanId` _Integer_ | `List<com.myjeeva.digitalocean.pojo.Droplet>`
| `listAllNeighbors` |  retrieve a list of any droplets that are running on the same physical hardware | | `List<com.myjeeva.digitalocean.pojo.Droplet>`
|===

=== Images endpoint

[width="100%",cols="2,5,^1,2",options="header"]
|===
| operation | Description | Headers | Result
| `list` | list images available on your account | `CamelDigitalOceanType`* _DigitalOceanImageTypes_ | `List<com.myjeeva.digitalocean.pojo.Image>`
| `ownList` | retrieve only the private images of a user | | `List<com.myjeeva.digitalocean.pojo.Image>`
| `listActions` |  retrieve all actions that have been executed on a Image | `CamelDigitalOceanId` _Integer_ | `List<com.myjeeva.digitalocean.pojo.Action>`
| `get` | retrieve information about an image (public or private) by id| `CamelDigitalOceanId` _Integer_| `com.myjeeva.digitalocean.pojo.Image`
| `get` | retrieve information about an public image by slug| `CamelDigitalOceanDropletImage` _String_| `com.myjeeva.digitalocean.pojo.Image`

| `update`
| update an image
| `CamelDigitalOceanId` _Integer_, +
  `CamelDigitalOceanName` _String_
| `com.myjeeva.digitalocean.pojo.Image`

| `delete` | delete an image| `CamelDigitalOceanId` _Integer_ | `com.myjeeva.digitalocean.pojo.Delete`

| `transfer`
| transfer an image to another region
| `CamelDigitalOceanId` _Integer_, +
  `CamelDigitalOceanRegion` _String_
| `com.myjeeva.digitalocean.pojo.Action`

| `convert` | convert an image, for example, a backup to a snapshot| `CamelDigitalOceanId` _Integer_ | `com.myjeeva.digitalocean.pojo.Action`
|===

=== Snapshots endpoint

[width="100%",cols="2,5,^1,2",options="header"]
|===
| operation | Description | Headers | Result
| `list` | list all of the snapshots available on your account | `CamelDigitalOceanType`* _DigitalOceanSnapshotTypes_ | `List<com.myjeeva.digitalocean.pojo.Snapshot>`
| `get` | retrieve information about a snapshot| `CamelDigitalOceanId` _Integer_| `com.myjeeva.digitalocean.pojo.Snapshot`
| `delete` | delete an snapshot| `CamelDigitalOceanId` _Integer_ | `com.myjeeva.digitalocean.pojo.Delete`
|===

=== Keys endpoint

[width="100%",cols="2,5,^1,2",options="header"]
|===
| operation | Description | Headers | Result
| `list` |  list all of the keys in your account | | `List<com.myjeeva.digitalocean.pojo.Key>`
| `get` | retrieve information about a key by id| `CamelDigitalOceanId` _Integer_| `com.myjeeva.digitalocean.pojo.Key`
| `get` | retrieve information about a key by fingerprint| `CamelDigitalOceanKeyFingerprint` _String_| `com.myjeeva.digitalocean.pojo.Key`

| `update`
| update a key by id
| `CamelDigitalOceanId` _Integer_, +
  `CamelDigitalOceanName` _String_
| `com.myjeeva.digitalocean.pojo.Key`

| `update`
| update a key by fingerprint
| `CamelDigitalOceanKeyFingerprint` _String_, +
  `CamelDigitalOceanName` _String_
| `com.myjeeva.digitalocean.pojo.Key`

| `delete` | delete a key by id| `CamelDigitalOceanId` _Integer_ | `com.myjeeva.digitalocean.pojo.Delete`
| `delete` | delete a key by fingerprint| `CamelDigitalOceanKeyFingerprint` _String_ | `com.myjeeva.digitalocean.pojo.Delete`
|===

=== Regions endpoint

[width="100%",cols="2,5,^1,2",options="header"]
|===
| operation | Description | Headers | Result
| `list` |  list all of the regions that are available | | `List<com.myjeeva.digitalocean.pojo.Region>`
|===

=== Sizes endpoint

[width="100%",cols="2,5,^1,2",options="header"]
|===
| operation | Description | Headers | Result
| `list` |  list all of the sizes that are available | | `List<com.myjeeva.digitalocean.pojo.Size>`
|===

=== Floating IPs endpoint

[width="100%",cols="2,5,^1,2",options="header"]
|===
| operation | Description | Headers | Result
| `list` |  list all of the Floating IPs available on your account | | `List<com.myjeeva.digitalocean.pojo.FloatingIP>`
| `create` |  create a new Floating IP assigned to a Droplet | `CamelDigitalOceanId` _Integer_ | `List<com.myjeeva.digitalocean.pojo.FloatingIP>`
| `create` |  create a new Floating IP assigned to a Region | `CamelDigitalOceanRegion` _String_ | `List<com.myjeeva.digitalocean.pojo.FloatingIP>`
| `get` | retrieve information about a Floating IP| `CamelDigitalOceanFloatingIPAddress` _String_| `com.myjeeva.digitalocean.pojo.Key`
| `delete` | delete a Floating IP and remove it from your account| `CamelDigitalOceanFloatingIPAddress` _String_| `com.myjeeva.digitalocean.pojo.Delete`

| `assign`
| assign a Floating IP to a Droplet
| `CamelDigitalOceanFloatingIPAddress` _String_, +
  `CamelDigitalOceanDropletId` _Integer_
| `com.myjeeva.digitalocean.pojo.Action`

| `unassign` | unassign a Floating IP | `CamelDigitalOceanFloatingIPAddress` _String_ | `com.myjeeva.digitalocean.pojo.Action`
| `listActions` |  retrieve all actions that have been executed on a Floating IP | `CamelDigitalOceanFloatingIPAddress` _String_ | `List<com.myjeeva.digitalocean.pojo.Action>`
|===

=== Tags endpoint

[width="100%",cols="2,5,^4,2",options="header"]
|===
| operation | Description | Headers | Result
| `list` |  list all of your tags | | `List<com.myjeeva.digitalocean.pojo.Tag>`
| `create` |  create a Tag | `CamelDigitalOceanName` _String_ | `com.myjeeva.digitalocean.pojo.Tag`
| `get` |  retrieve an individual tag | `CamelDigitalOceanName` _String_ | `com.myjeeva.digitalocean.pojo.Tag`
| `delete` |  delete a tag | `CamelDigitalOceanName` _String_ | `com.myjeeva.digitalocean.pojo.Delete`

| `update`
|  update a tag
| `CamelDigitalOceanName` _String_, +
  `CamelDigitalOceanNewName` _String_
| `com.myjeeva.digitalocean.pojo.Tag`
|===

=== Examples

Get your account info

```
from("direct:getAccountInfo")
    .setHeader(DigitalOceanConstants.OPERATION, constant(DigitalOceanOperations.get))
    .to("digitalocean:account?oAuthToken=XXXXXX")
```

Create a droplet

```
from("direct:createDroplet")
    .setHeader(DigitalOceanConstants.OPERATION, constant("create"))
    .setHeader(DigitalOceanHeaders.NAME, constant("myDroplet"))
    .setHeader(DigitalOceanHeaders.REGION, constant("fra1"))
    .setHeader(DigitalOceanHeaders.DROPLET_IMAGE, constant("ubuntu-14-04-x64"))
    .setHeader(DigitalOceanHeaders.DROPLET_SIZE, constant("512mb"))
    .to("digitalocean:droplet?oAuthToken=XXXXXX")
```

List all your droplets

```
from("direct:getDroplets")
    .setHeader(DigitalOceanConstants.OPERATION, constant("list"))
    .to("digitalocean:droplets?oAuthToken=XXXXXX")
```

Retrieve information for the Droplet (dropletId = 34772987)

```
from("direct:getDroplet")
    .setHeader(DigitalOceanConstants.OPERATION, constant("get"))
    .setHeader(DigitalOceanConstants.ID, 34772987)
    .to("digitalocean:droplet?oAuthToken=XXXXXX")
```

Shutdown  information for the Droplet (dropletId = 34772987)

```
from("direct:shutdown")
    .setHeader(DigitalOceanConstants.ID, 34772987)
    .to("digitalocean:droplet?operation=shutdown&oAuthToken=XXXXXX")
```
