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

*Available as of Camel version 2.19*


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

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

----
openstack-neutron: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 Neutron 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
// 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-neutron.enabled* | Enable openstack-neutron component | true | Boolean
| *camel.component.openstack-neutron.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



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

== networks

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

|`create` | Create new network.

|`get` | Get the network.

|`getAll` | Get all networks.

|`delete` | Delete the network.
|=========================================================================

=== Message headers evaluated by the Network producer

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

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

|`ID` | `String` | ID of the network.

|`name` |`String` |The network name.

|`tenantId` |`String` |Tenant ID.

|`adminStateUp` |`Boolean` |AdminStateUp header.

|`networkType` |`org.openstack4j.model.network.NetworkType` |Network type.

|`physicalNetwork` |`String` |Physical network.

|`segmentId` |`String` |Segment ID.

|`isShared` |`Boolean` |Is shared.

|`isRouterExternal` |`Boolean` | Is router external.
|=========================================================================

If you need more precise network settings you can create new object of the type *org.openstack4j.model.network.Network* and send in the message body.

== subnets

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

|`create` | Create new subnet.

|`get` | Get the subnet.

|`getAll` | Get all subnets.

|`delete` | Delete the subnet.

|`action` | Perform an action on the subnet.
|=========================================================================

=== Message headers evaluated by the Subnet producer

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

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

|`ID` | `String` | ID of the subnet.

|`name` |`String` |The subnet name.

|`networkId` |`String` |Network ID.

|`enableDHCP` |`Boolean` | Enable DHCP.

|`gateway` |`String` |Gateway.
|=========================================================================

If you need more precise subnet settings you can create new object of the type *org.openstack4j.model.network.Subnet* and send in the message body.

== ports

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

|`create` | Create new port.

|`get` | Get the port.

|`getAll` | Get all ports.

|`update` | Update the port.

|`delete` | Delete the port.

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

=== Message headers evaluated by the Port producer

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

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

|`name` |`String` |The port name.

|`networkId` |`String` |Network ID.

|`tenantId` |`String` |Tenant ID.

|`deviceId` | `String` | Device ID.

|`macAddress` | `String` | MAC address.
|=========================================================================

== routers

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

|`create` | Create new router.

|`get` | Get the router.

|`getAll` | Get all routers.

|`update` | Update the router.

|`delete` | Delete the router.

|`attachInterface` | Attach an interface.

|`detachInterface` | Detach an interface.

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

=== Message headers evaluated by the Port producer

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

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

|`name` |`String` |The router name.

|`routerId` |`String` |Router ID.

|`subnetId` |`String` |Subnet ID.

|`portId` |`String` |Port ID.

|`interfaceType` | `org.openstack4j.model.network.AttachInterfaceType` | Interface type.

|`tenantId` | `String` | Tenant ID.
|=========================================================================