[[digitalocean-component]]
= DigitalOcean Component
//THIS FILE IS COPIED: EDIT THE SOURCE FILE:
:page-source: components/camel-digitalocean/src/main/docs/digitalocean-component.adoc
:docTitle: DigitalOcean
:artifactId: camel-digitalocean
:description: Manage Droplets and resources within the DigitalOcean cloud.
:since: 2.19
:supportLevel: Stable
:component-header: Only producer is supported

*Since Camel {since}*

*{component-header}*

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
| *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
| *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. The value can be one of: create, update, delete, list, ownList, get, listBackups, listActions, listNeighbors, listSnapshots, listKernels, listAllNeighbors, enableBackups, disableBackups, reboot, powerCycle, shutdown, powerOn, powerOff, restore, resetPassword, resize, rebuild, rename, changeKernel, enableIpv6, enablePrivateNetworking, takeSnapshot, transfer, convert, attach, detach, assign, unassign, tag, untag |  | DigitalOceanOperations
|===


=== Query Parameters (12 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *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
| *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. The value can be one of: account, actions, blockStorages, droplets, mages, snapshots, keys, regions, sizes, floatingIPs, tags |  | 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



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")
```

include::camel-spring-boot::page$digitalocean-starter.adoc[]
