You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by al...@apache.org on 2021/04/12 15:11:38 UTC

[camel-quarkus] branch main updated: Added native support for camel-openstack * components #1943

This is an automated email from the ASF dual-hosted git repository.

aldettinger pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git


The following commit(s) were added to refs/heads/main by this push:
     new bc11d03  Added native support for camel-openstack * components #1943
bc11d03 is described below

commit bc11d03a612911a52b8d1c2c166afdc992ad1b89
Author: aldettinger <al...@gmail.com>
AuthorDate: Thu Apr 8 14:36:20 2021 +0200

    Added native support for camel-openstack * components #1943
---
 .../ROOT/pages/reference/extensions/openstack.adoc |  20 +-
 .../reference/components/openstack-cinder.adoc     |   6 +-
 .../reference/components/openstack-glance.adoc     |   6 +-
 .../reference/components/openstack-keystone.adoc   |   6 +-
 .../reference/components/openstack-neutron.adoc    |   6 +-
 .../reference/components/openstack-nova.adoc       |   6 +-
 .../reference/components/openstack-swift.adoc      |   6 +-
 .../openstack/deployment/OpenstackProcessor.java   |  47 --
 extensions-jvm/pom.xml                             |   1 -
 .../openstack/deployment/pom.xml                   |   4 +
 .../deployment/BuildTimeDefaultAPIProvider.java    | 603 +++++++++++++++++++++
 .../openstack/deployment/OpenstackProcessor.java   |  93 ++++
 {extensions-jvm => extensions}/openstack/pom.xml   |   1 -
 .../openstack/runtime/pom.xml                      |   5 +
 .../main/resources/META-INF/quarkus-extension.yaml |   3 +-
 extensions/pom.xml                                 |   1 +
 .../openstack}/pom.xml                             |  37 +-
 .../it/OpenstackCinderSnapshotResource.java        |   0
 .../it/OpenstackCinderVolumeResource.java          |   0
 .../openstack/it/OpenstackGlanceResource.java      |   0
 .../it/OpenstackKeystoneDomainResource.java        |   0
 .../it/OpenstackKeystoneGroupResource.java         |   0
 .../it/OpenstackKeystoneProjectResource.java       |   0
 .../it/OpenstackKeystoneRegionResource.java        |   0
 .../it/OpenstackKeystoneUserResource.java          |   0
 .../it/OpenstackNeutronNetworkResource.java        |   0
 .../openstack/it/OpenstackNeutronPortResource.java |   0
 .../it/OpenstackNeutronSubnetResource.java         |   0
 .../openstack/it/OpenstackNovaFlavorResource.java  |   0
 .../openstack/it/OpenstackNovaServerResource.java  |   6 +-
 .../it/OpenstackSwiftContainerResource.java        |   0
 .../openstack/it/OpenstackSwiftObjectResource.java |   0
 .../openstack/it/OpenStackTestResource.java        |   0
 .../openstack/it/OpenstackCinderSnapshotIT.java    |  16 +-
 .../openstack/it/OpenstackCinderSnapshotTest.java  |   0
 .../openstack/it/OpenstackCinderVolumeIT.java      |  16 +-
 .../openstack/it/OpenstackCinderVolumeTest.java    |   0
 .../component/openstack/it/OpenstackGlanceIT.java  |  16 +-
 .../openstack/it/OpenstackGlanceTest.java          |   0
 .../openstack/it/OpenstackKeystoneDomainIT.java    |  16 +-
 .../openstack/it/OpenstackKeystoneDomainTest.java  |   0
 .../openstack/it/OpenstackKeystoneGroupIT.java     |  16 +-
 .../openstack/it/OpenstackKeystoneGroupTest.java   |   0
 .../openstack/it/OpenstackKeystoneProjectIT.java   |  16 +-
 .../openstack/it/OpenstackKeystoneProjectTest.java |   0
 .../openstack/it/OpenstackKeystoneRegionIT.java    |  16 +-
 .../openstack/it/OpenstackKeystoneRegionTest.java  |   0
 .../openstack/it/OpenstackKeystoneUserIT.java      |  16 +-
 .../openstack/it/OpenstackKeystoneUserTest.java    |   0
 .../openstack/it/OpenstackNeutronNetworkIT.java    |  16 +-
 .../openstack/it/OpenstackNeutronNetworkTest.java  |   0
 .../openstack/it/OpenstackNeutronPortIT.java       |  16 +-
 .../openstack/it/OpenstackNeutronPortTest.java     |   0
 .../openstack/it/OpenstackNeutronSubnetIT.java     |  16 +-
 .../openstack/it/OpenstackNeutronSubnetTest.java   |   0
 .../openstack/it/OpenstackNovaFlavorIT.java        |  16 +-
 .../openstack/it/OpenstackNovaFlavorTest.java      |   0
 .../openstack/it/OpenstackNovaServerIT.java        |  16 +-
 .../openstack/it/OpenstackNovaServerTest.java      |   0
 .../openstack/it/OpenstackSwiftContainerIT.java    |  16 +-
 .../openstack/it/OpenstackSwiftContainerTest.java  |   0
 .../openstack/it/OpenstackSwiftObjectIT.java       |  16 +-
 .../openstack/it/OpenstackSwiftObjectTest.java     |   0
 .../mappings/cinder/snapshot/volume_snapshots.json |   0
 .../cinder/volume/createVolume_multiattach.json    |   0
 .../resources/mappings/cinder/volume/volume.json   |   0
 .../mappings/cinder/volume/volume_delete.json      |   0
 .../mappings/cinder/volume/volume_types.json       |   0
 .../mappings/cinder/volume/volume_update.json      |   0
 .../resources/mappings/cinder/volume/volumes.json  |   0
 .../src/test/resources/mappings/glance/image.json  |   0
 .../resources/mappings/glance/image_delete.json    |   0
 .../resources/mappings/glance/image_upload.json    |   0
 .../src/test/resources/mappings/glance/images.json |   0
 .../resources/mappings/glance/images_detail.json   |   0
 .../mappings/keystone/authv3_project.json          |   0
 .../keystone/domains/domains_create_response.json  |   0
 .../mappings/keystone/domains/domains_delete.json  |   0
 .../keystone/domains/domains_get_byId.json         |   0
 .../keystone/domains/domains_update_response.json  |   0
 .../keystone/domains/domains_with_options.json     |   0
 .../mappings/keystone/groups/groups_add_user.json  |   0
 .../keystone/groups/groups_check_user.json         |   0
 .../keystone/groups/groups_create_response.json    |   0
 .../mappings/keystone/groups/groups_delete.json    |   0
 .../mappings/keystone/groups/groups_get_byId.json  |   0
 .../mappings/keystone/groups/groups_list.json      |   0
 .../keystone/groups/groups_remove_user.json        |   0
 .../keystone/groups/groups_update_response.json    |   0
 .../projects/projects_create_response.json         |   0
 .../keystone/projects/projects_delete.json         |   0
 .../keystone/projects/projects_get_byId.json       |   0
 .../projects/projects_update_response.json         |   0
 .../keystone/projects/projects_with_options.json   |   0
 .../keystone/regions/regions_create_response.json  |   0
 .../mappings/keystone/regions/regions_delete.json  |   0
 .../keystone/regions/regions_get_byId.json         |   0
 .../keystone/regions/regions_get_nonExistent.json  |   0
 .../mappings/keystone/regions/regions_list.json    |   0
 .../keystone/regions/regions_update_response.json  |   0
 .../mappings/keystone/users/create_user.json       |   0
 .../mappings/keystone/users/update_user.json       |   0
 .../mappings/keystone/users/user_delete.json       |   0
 .../mappings/keystone/users/user_get_byId.json     |   0
 .../resources/mappings/keystone/users/users.json   |   0
 .../mappings/neutron/networks/network.json         |   0
 .../mappings/neutron/networks/network_delete.json  |   0
 .../neutron/networks/network_external.json         |   0
 .../neutron/networks/networks_filtered.json        |   0
 .../mappings/neutron/ports/port_external.json      |   0
 .../mappings/neutron/ports/ports_external.json     |   0
 .../mappings/neutron/subnets/subnet_ipv6.json      |   0
 .../resources/mappings/nova/flavors/flavor.json    |   0
 .../mappings/nova/flavors/flavor_create.json       |   0
 .../mappings/nova/flavors/flavors_detailed.json    |   0
 .../mappings/nova/servers/server_create.json       |   0
 .../nova/servers/server_snapshot_create.json       |   0
 .../mappings/nova/servers/server_wrong_id_get.json |   0
 .../resources/mappings/nova/servers/servers.json   |   0
 .../swift/containers/container_metadata_get.json   |   0
 .../mappings/swift/containers/containers.json      |   0
 .../mappings/swift/objects/object_get.json         |   0
 integration-tests/pom.xml                          |   1 +
 tooling/scripts/test-categories.yaml               |   1 +
 124 files changed, 825 insertions(+), 274 deletions(-)

diff --git a/docs/modules/ROOT/pages/reference/extensions/openstack.adoc b/docs/modules/ROOT/pages/reference/extensions/openstack.adoc
index 056d6e5..2c02cc4 100644
--- a/docs/modules/ROOT/pages/reference/extensions/openstack.adoc
+++ b/docs/modules/ROOT/pages/reference/extensions/openstack.adoc
@@ -4,16 +4,16 @@
 :page-aliases: extensions/openstack.adoc
 :linkattrs:
 :cq-artifact-id: camel-quarkus-openstack
-:cq-native-supported: false
-:cq-status: Preview
-:cq-status-deprecation: Preview
+:cq-native-supported: true
+:cq-status: Stable
+:cq-status-deprecation: Stable
 :cq-description: Interact with OpenStack APIs
 :cq-deprecated: false
 :cq-jvm-since: 1.0.0
-:cq-native-since: n/a
+:cq-native-since: 1.9.0
 
 [.badges]
-[.badge-key]##JVM since##[.badge-supported]##1.0.0## [.badge-key]##Native##[.badge-unsupported]##unsupported##
+[.badge-key]##JVM since##[.badge-supported]##1.0.0## [.badge-key]##Native since##[.badge-supported]##1.9.0##
 
 Interact with OpenStack APIs
 
@@ -30,6 +30,10 @@ Please refer to the above links for usage and configuration details.
 
 == Maven coordinates
 
+Create a new project image:https://img.shields.io/badge/code.quarkus.io-camel%E2%80%92quarkus%E2%80%92openstack-blue.svg?logo=quarkus&logoColor=white&labelColor=3678db&color=e97826[link="https://code.quarkus.io/?extension-search=camel-quarkus-openstack", window="_blank"]
+
+Or add the coordinates to your existing project:
+
 [source,xml]
 ----
 <dependency>
@@ -39,3 +43,9 @@ Please refer to the above links for usage and configuration details.
 ----
 
 Check the xref:user-guide/index.adoc[User guide] for more information about writing Camel Quarkus applications.
+
+== SSL in native mode
+
+This extension auto-enables SSL support in native mode. Hence you do not need to add
+`quarkus.ssl.native=true` to your `application.properties` yourself. See also
+https://quarkus.io/guides/native-and-ssl[Quarkus SSL guide].
diff --git a/docs/modules/ROOT/partials/reference/components/openstack-cinder.adoc b/docs/modules/ROOT/partials/reference/components/openstack-cinder.adoc
index 2d9e917..a6f92a5 100644
--- a/docs/modules/ROOT/partials/reference/components/openstack-cinder.adoc
+++ b/docs/modules/ROOT/partials/reference/components/openstack-cinder.adoc
@@ -2,11 +2,11 @@
 // This file was generated by camel-quarkus-maven-plugin:update-extension-doc-page
 :cq-artifact-id: camel-quarkus-openstack
 :cq-artifact-id-base: openstack
-:cq-native-supported: false
-:cq-status: Preview
+:cq-native-supported: true
+:cq-status: Stable
 :cq-deprecated: false
 :cq-jvm-since: 1.0.0
-:cq-native-since: n/a
+:cq-native-since: 1.9.0
 :cq-camel-part-name: openstack-cinder
 :cq-camel-part-title: OpenStack Cinder
 :cq-camel-part-description: Access data in OpenStack Cinder block storage.
diff --git a/docs/modules/ROOT/partials/reference/components/openstack-glance.adoc b/docs/modules/ROOT/partials/reference/components/openstack-glance.adoc
index 5d477f1..1681c3b 100644
--- a/docs/modules/ROOT/partials/reference/components/openstack-glance.adoc
+++ b/docs/modules/ROOT/partials/reference/components/openstack-glance.adoc
@@ -2,11 +2,11 @@
 // This file was generated by camel-quarkus-maven-plugin:update-extension-doc-page
 :cq-artifact-id: camel-quarkus-openstack
 :cq-artifact-id-base: openstack
-:cq-native-supported: false
-:cq-status: Preview
+:cq-native-supported: true
+:cq-status: Stable
 :cq-deprecated: false
 :cq-jvm-since: 1.0.0
-:cq-native-since: n/a
+:cq-native-since: 1.9.0
 :cq-camel-part-name: openstack-glance
 :cq-camel-part-title: OpenStack Glance
 :cq-camel-part-description: Manage VM images and metadata definitions in OpenStack Glance.
diff --git a/docs/modules/ROOT/partials/reference/components/openstack-keystone.adoc b/docs/modules/ROOT/partials/reference/components/openstack-keystone.adoc
index ac85f35..fec09fb 100644
--- a/docs/modules/ROOT/partials/reference/components/openstack-keystone.adoc
+++ b/docs/modules/ROOT/partials/reference/components/openstack-keystone.adoc
@@ -2,11 +2,11 @@
 // This file was generated by camel-quarkus-maven-plugin:update-extension-doc-page
 :cq-artifact-id: camel-quarkus-openstack
 :cq-artifact-id-base: openstack
-:cq-native-supported: false
-:cq-status: Preview
+:cq-native-supported: true
+:cq-status: Stable
 :cq-deprecated: false
 :cq-jvm-since: 1.0.0
-:cq-native-since: n/a
+:cq-native-since: 1.9.0
 :cq-camel-part-name: openstack-keystone
 :cq-camel-part-title: OpenStack Keystone
 :cq-camel-part-description: Access OpenStack Keystone for API client authentication, service discovery and distributed multi-tenant authorization.
diff --git a/docs/modules/ROOT/partials/reference/components/openstack-neutron.adoc b/docs/modules/ROOT/partials/reference/components/openstack-neutron.adoc
index b7c5cc6..0ddfe86 100644
--- a/docs/modules/ROOT/partials/reference/components/openstack-neutron.adoc
+++ b/docs/modules/ROOT/partials/reference/components/openstack-neutron.adoc
@@ -2,11 +2,11 @@
 // This file was generated by camel-quarkus-maven-plugin:update-extension-doc-page
 :cq-artifact-id: camel-quarkus-openstack
 :cq-artifact-id-base: openstack
-:cq-native-supported: false
-:cq-status: Preview
+:cq-native-supported: true
+:cq-status: Stable
 :cq-deprecated: false
 :cq-jvm-since: 1.0.0
-:cq-native-since: n/a
+:cq-native-since: 1.9.0
 :cq-camel-part-name: openstack-neutron
 :cq-camel-part-title: OpenStack Neutron
 :cq-camel-part-description: Access OpenStack Neutron for network services.
diff --git a/docs/modules/ROOT/partials/reference/components/openstack-nova.adoc b/docs/modules/ROOT/partials/reference/components/openstack-nova.adoc
index 6556a1e..d8ecff4 100644
--- a/docs/modules/ROOT/partials/reference/components/openstack-nova.adoc
+++ b/docs/modules/ROOT/partials/reference/components/openstack-nova.adoc
@@ -2,11 +2,11 @@
 // This file was generated by camel-quarkus-maven-plugin:update-extension-doc-page
 :cq-artifact-id: camel-quarkus-openstack
 :cq-artifact-id-base: openstack
-:cq-native-supported: false
-:cq-status: Preview
+:cq-native-supported: true
+:cq-status: Stable
 :cq-deprecated: false
 :cq-jvm-since: 1.0.0
-:cq-native-since: n/a
+:cq-native-since: 1.9.0
 :cq-camel-part-name: openstack-nova
 :cq-camel-part-title: OpenStack Nova
 :cq-camel-part-description: Access OpenStack to manage compute resources.
diff --git a/docs/modules/ROOT/partials/reference/components/openstack-swift.adoc b/docs/modules/ROOT/partials/reference/components/openstack-swift.adoc
index 5930619..8e013cc 100644
--- a/docs/modules/ROOT/partials/reference/components/openstack-swift.adoc
+++ b/docs/modules/ROOT/partials/reference/components/openstack-swift.adoc
@@ -2,11 +2,11 @@
 // This file was generated by camel-quarkus-maven-plugin:update-extension-doc-page
 :cq-artifact-id: camel-quarkus-openstack
 :cq-artifact-id-base: openstack
-:cq-native-supported: false
-:cq-status: Preview
+:cq-native-supported: true
+:cq-status: Stable
 :cq-deprecated: false
 :cq-jvm-since: 1.0.0
-:cq-native-since: n/a
+:cq-native-since: 1.9.0
 :cq-camel-part-name: openstack-swift
 :cq-camel-part-title: OpenStack Swift
 :cq-camel-part-description: Access OpenStack Swift object/blob store.
diff --git a/extensions-jvm/openstack/deployment/src/main/java/org/apache/camel/quarkus/component/openstack/deployment/OpenstackProcessor.java b/extensions-jvm/openstack/deployment/src/main/java/org/apache/camel/quarkus/component/openstack/deployment/OpenstackProcessor.java
deleted file mode 100644
index 338dc8d..0000000
--- a/extensions-jvm/openstack/deployment/src/main/java/org/apache/camel/quarkus/component/openstack/deployment/OpenstackProcessor.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.quarkus.component.openstack.deployment;
-
-import io.quarkus.deployment.annotations.BuildStep;
-import io.quarkus.deployment.annotations.ExecutionTime;
-import io.quarkus.deployment.annotations.Record;
-import io.quarkus.deployment.builditem.FeatureBuildItem;
-import io.quarkus.deployment.pkg.steps.NativeBuild;
-import org.apache.camel.quarkus.core.JvmOnlyRecorder;
-import org.jboss.logging.Logger;
-
-class OpenstackProcessor {
-    private static final Logger LOG = Logger.getLogger(OpenstackProcessor.class);
-
-    private static final String FEATURE = "camel-openstack";
-
-    @BuildStep
-    FeatureBuildItem feature() {
-        return new FeatureBuildItem(FEATURE);
-    }
-
-    /**
-     * Remove this once this extension starts supporting the native mode.
-     */
-    @BuildStep(onlyIf = NativeBuild.class)
-    @Record(value = ExecutionTime.RUNTIME_INIT)
-    void warnJvmInNative(JvmOnlyRecorder recorder) {
-        JvmOnlyRecorder.warnJvmInNative(LOG, FEATURE); // warn at build time
-        recorder.warnJvmInNative(FEATURE); // warn at runtime
-    }
-
-}
diff --git a/extensions-jvm/pom.xml b/extensions-jvm/pom.xml
index 12f524f..b4c3b64 100644
--- a/extensions-jvm/pom.xml
+++ b/extensions-jvm/pom.xml
@@ -95,7 +95,6 @@
         <module>mvel</module>
         <module>mybatis</module>
         <module>ognl</module>
-        <module>openstack</module>
         <module>printer</module>
         <module>pulsar</module>
         <module>quickfix</module>
diff --git a/extensions-jvm/openstack/deployment/pom.xml b/extensions/openstack/deployment/pom.xml
similarity index 94%
rename from extensions-jvm/openstack/deployment/pom.xml
rename to extensions/openstack/deployment/pom.xml
index 35c84e2..0b779ca 100644
--- a/extensions-jvm/openstack/deployment/pom.xml
+++ b/extensions/openstack/deployment/pom.xml
@@ -38,6 +38,10 @@
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-openstack</artifactId>
         </dependency>
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-jackson-deployment</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/extensions/openstack/deployment/src/main/java/org/apache/camel/quarkus/component/openstack/deployment/BuildTimeDefaultAPIProvider.java b/extensions/openstack/deployment/src/main/java/org/apache/camel/quarkus/component/openstack/deployment/BuildTimeDefaultAPIProvider.java
new file mode 100644
index 0000000..a1d0937
--- /dev/null
+++ b/extensions/openstack/deployment/src/main/java/org/apache/camel/quarkus/component/openstack/deployment/BuildTimeDefaultAPIProvider.java
@@ -0,0 +1,603 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.quarkus.component.openstack.deployment;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.openstack4j.api.artifact.ArtifactService;
+import org.openstack4j.api.artifact.ToscaTemplatesArtifactService;
+import org.openstack4j.api.barbican.BarbicanService;
+import org.openstack4j.api.barbican.ContainerService;
+import org.openstack4j.api.barbican.SecretService;
+import org.openstack4j.api.compute.ComputeFloatingIPService;
+import org.openstack4j.api.compute.ComputeImageService;
+import org.openstack4j.api.compute.ComputeSecurityGroupService;
+import org.openstack4j.api.compute.ComputeService;
+import org.openstack4j.api.compute.FlavorService;
+import org.openstack4j.api.compute.HostAggregateService;
+import org.openstack4j.api.compute.HostService;
+import org.openstack4j.api.compute.KeypairService;
+import org.openstack4j.api.compute.QuotaSetService;
+import org.openstack4j.api.compute.ServerActionsService;
+import org.openstack4j.api.compute.ServerGroupService;
+import org.openstack4j.api.compute.ServerService;
+import org.openstack4j.api.compute.ServerTagService;
+import org.openstack4j.api.compute.ext.FloatingIPDNSDomainService;
+import org.openstack4j.api.compute.ext.FloatingIPDNSEntryService;
+import org.openstack4j.api.compute.ext.FloatingIPDNSService;
+import org.openstack4j.api.compute.ext.HypervisorService;
+import org.openstack4j.api.compute.ext.InstanceActionsService;
+import org.openstack4j.api.compute.ext.InterfaceService;
+import org.openstack4j.api.compute.ext.MigrationService;
+import org.openstack4j.api.compute.ext.ServicesService;
+import org.openstack4j.api.compute.ext.ZoneService;
+import org.openstack4j.api.dns.v2.DNSService;
+import org.openstack4j.api.dns.v2.RecordsetService;
+import org.openstack4j.api.gbp.ExternalPolicyService;
+import org.openstack4j.api.gbp.ExternalSegmentService;
+import org.openstack4j.api.gbp.GbpService;
+import org.openstack4j.api.gbp.L2policyService;
+import org.openstack4j.api.gbp.L3policyService;
+import org.openstack4j.api.gbp.NatPoolService;
+import org.openstack4j.api.gbp.NetworkPolicyService;
+import org.openstack4j.api.gbp.PolicyActionService;
+import org.openstack4j.api.gbp.PolicyClassifierService;
+import org.openstack4j.api.gbp.PolicyRuleService;
+import org.openstack4j.api.gbp.PolicyRuleSetService;
+import org.openstack4j.api.gbp.PolicyTargetService;
+import org.openstack4j.api.gbp.ServiceProfileService;
+import org.openstack4j.api.gbp.ServicechainService;
+import org.openstack4j.api.heat.EventsService;
+import org.openstack4j.api.heat.HeatService;
+import org.openstack4j.api.heat.ResourcesService;
+import org.openstack4j.api.heat.SoftwareConfigService;
+import org.openstack4j.api.heat.StackService;
+import org.openstack4j.api.heat.TemplateService;
+import org.openstack4j.api.identity.v2.ServiceManagerService;
+import org.openstack4j.api.identity.v2.TenantService;
+import org.openstack4j.api.identity.v3.CredentialService;
+import org.openstack4j.api.identity.v3.DomainService;
+import org.openstack4j.api.identity.v3.GroupService;
+import org.openstack4j.api.identity.v3.PolicyService;
+import org.openstack4j.api.identity.v3.ProjectService;
+import org.openstack4j.api.identity.v3.RegionService;
+import org.openstack4j.api.identity.v3.RoleService;
+import org.openstack4j.api.identity.v3.ServiceEndpointService;
+import org.openstack4j.api.identity.v3.TokenService;
+import org.openstack4j.api.identity.v3.UserService;
+import org.openstack4j.api.image.ImageService;
+import org.openstack4j.api.image.v2.TaskService;
+import org.openstack4j.api.magnum.MagnumService;
+import org.openstack4j.api.manila.SchedulerStatsService;
+import org.openstack4j.api.manila.SecurityServiceService;
+import org.openstack4j.api.manila.ShareInstanceService;
+import org.openstack4j.api.manila.ShareNetworkService;
+import org.openstack4j.api.manila.ShareServerService;
+import org.openstack4j.api.manila.ShareService;
+import org.openstack4j.api.manila.ShareSnapshotService;
+import org.openstack4j.api.manila.ShareTypeService;
+import org.openstack4j.api.manila.SharesService;
+import org.openstack4j.api.murano.v1.AppCatalogService;
+import org.openstack4j.api.murano.v1.MuranoActionService;
+import org.openstack4j.api.murano.v1.MuranoApplicationService;
+import org.openstack4j.api.murano.v1.MuranoDeploymentService;
+import org.openstack4j.api.murano.v1.MuranoEnvironmentService;
+import org.openstack4j.api.murano.v1.MuranoSessionService;
+import org.openstack4j.api.networking.AvailabilityZoneService;
+import org.openstack4j.api.networking.NetFloatingIPService;
+import org.openstack4j.api.networking.NetworkService;
+import org.openstack4j.api.networking.NetworkingService;
+import org.openstack4j.api.networking.PortService;
+import org.openstack4j.api.networking.RouterService;
+import org.openstack4j.api.networking.SecurityGroupRuleService;
+import org.openstack4j.api.networking.SecurityGroupService;
+import org.openstack4j.api.networking.SubnetService;
+import org.openstack4j.api.networking.TrunkService;
+import org.openstack4j.api.networking.ext.AgentService;
+import org.openstack4j.api.networking.ext.FirewallAsService;
+import org.openstack4j.api.networking.ext.FirewallPolicyService;
+import org.openstack4j.api.networking.ext.FirewallRuleService;
+import org.openstack4j.api.networking.ext.FirewallService;
+import org.openstack4j.api.networking.ext.FlowClassifierService;
+import org.openstack4j.api.networking.ext.HealthMonitorService;
+import org.openstack4j.api.networking.ext.HealthMonitorV2Service;
+import org.openstack4j.api.networking.ext.LbPoolService;
+import org.openstack4j.api.networking.ext.LbPoolV2Service;
+import org.openstack4j.api.networking.ext.LbaasV2Service;
+import org.openstack4j.api.networking.ext.ListenerV2Service;
+import org.openstack4j.api.networking.ext.LoadBalancerService;
+import org.openstack4j.api.networking.ext.LoadBalancerV2Service;
+import org.openstack4j.api.networking.ext.MemberService;
+import org.openstack4j.api.networking.ext.NetQuotaService;
+import org.openstack4j.api.networking.ext.NetworkIPAvailabilityService;
+import org.openstack4j.api.networking.ext.PortChainService;
+import org.openstack4j.api.networking.ext.PortPairGroupService;
+import org.openstack4j.api.networking.ext.PortPairService;
+import org.openstack4j.api.networking.ext.ServiceFunctionChainService;
+import org.openstack4j.api.networking.ext.VipService;
+import org.openstack4j.api.octavia.OctaviaService;
+import org.openstack4j.api.sahara.ClusterService;
+import org.openstack4j.api.sahara.ClusterTemplateService;
+import org.openstack4j.api.sahara.DataSourceService;
+import org.openstack4j.api.sahara.JobBinaryInternalService;
+import org.openstack4j.api.sahara.JobBinaryService;
+import org.openstack4j.api.sahara.JobExecutionService;
+import org.openstack4j.api.sahara.JobService;
+import org.openstack4j.api.sahara.NodeGroupTemplateService;
+import org.openstack4j.api.sahara.SaharaImageService;
+import org.openstack4j.api.sahara.SaharaPluginService;
+import org.openstack4j.api.sahara.SaharaService;
+import org.openstack4j.api.senlin.SenlinActionService;
+import org.openstack4j.api.senlin.SenlinBuildInfoService;
+import org.openstack4j.api.senlin.SenlinClusterPolicyService;
+import org.openstack4j.api.senlin.SenlinClusterService;
+import org.openstack4j.api.senlin.SenlinEventService;
+import org.openstack4j.api.senlin.SenlinNodeService;
+import org.openstack4j.api.senlin.SenlinPolicyService;
+import org.openstack4j.api.senlin.SenlinPolicyTypeService;
+import org.openstack4j.api.senlin.SenlinProfileService;
+import org.openstack4j.api.senlin.SenlinProfileTypeService;
+import org.openstack4j.api.senlin.SenlinReceiverService;
+import org.openstack4j.api.senlin.SenlinService;
+import org.openstack4j.api.senlin.SenlinVersionService;
+import org.openstack4j.api.senlin.SenlinWebHookService;
+import org.openstack4j.api.storage.BlockQuotaSetService;
+import org.openstack4j.api.storage.BlockStorageService;
+import org.openstack4j.api.storage.BlockVolumeBackupService;
+import org.openstack4j.api.storage.BlockVolumeService;
+import org.openstack4j.api.storage.BlockVolumeSnapshotService;
+import org.openstack4j.api.storage.BlockVolumeTransferService;
+import org.openstack4j.api.storage.CinderZoneService;
+import org.openstack4j.api.storage.ObjectStorageAccountService;
+import org.openstack4j.api.storage.ObjectStorageContainerService;
+import org.openstack4j.api.storage.ObjectStorageObjectService;
+import org.openstack4j.api.storage.ObjectStorageService;
+import org.openstack4j.api.storage.SchedulerStatsGetPoolService;
+import org.openstack4j.api.storage.ext.BlockStorageServiceService;
+import org.openstack4j.api.tacker.TackerService;
+import org.openstack4j.api.tacker.TackerServiceImpl;
+import org.openstack4j.api.tacker.VimService;
+import org.openstack4j.api.tacker.VnfService;
+import org.openstack4j.api.tacker.VnfdService;
+import org.openstack4j.api.telemetry.AlarmAodhService;
+import org.openstack4j.api.telemetry.AlarmService;
+import org.openstack4j.api.telemetry.CapabilitiesService;
+import org.openstack4j.api.telemetry.EventService;
+import org.openstack4j.api.telemetry.MeterService;
+import org.openstack4j.api.telemetry.ResourceService;
+import org.openstack4j.api.telemetry.SampleService;
+import org.openstack4j.api.telemetry.TelemetryAodhService;
+import org.openstack4j.api.telemetry.TelemetryService;
+import org.openstack4j.api.trove.DatabaseService;
+import org.openstack4j.api.trove.DatastoreService;
+import org.openstack4j.api.trove.InstanceFlavorService;
+import org.openstack4j.api.trove.InstanceService;
+import org.openstack4j.api.trove.TroveService;
+import org.openstack4j.api.workflow.ActionDefinitionService;
+import org.openstack4j.api.workflow.ActionExecutionService;
+import org.openstack4j.api.workflow.CronTriggerService;
+import org.openstack4j.api.workflow.TaskExecutionService;
+import org.openstack4j.api.workflow.WorkbookDefinitionService;
+import org.openstack4j.api.workflow.WorkflowDefinitionService;
+import org.openstack4j.api.workflow.WorkflowEnvironmentService;
+import org.openstack4j.api.workflow.WorkflowExecutionService;
+import org.openstack4j.api.workflow.WorkflowService;
+import org.openstack4j.openstack.artifact.internal.ArtifactServiceImpl;
+import org.openstack4j.openstack.artifact.internal.ToscaTemplatesArtifactServiceImpl;
+import org.openstack4j.openstack.barbican.internal.BarbicanServiceImpl;
+import org.openstack4j.openstack.barbican.internal.ContainerServiceImpl;
+import org.openstack4j.openstack.barbican.internal.SecretServiceImpl;
+import org.openstack4j.openstack.compute.internal.ComputeFloatingIPServiceImpl;
+import org.openstack4j.openstack.compute.internal.ComputeImageServiceImpl;
+import org.openstack4j.openstack.compute.internal.ComputeSecurityGroupServiceImpl;
+import org.openstack4j.openstack.compute.internal.ComputeServiceImpl;
+import org.openstack4j.openstack.compute.internal.FlavorServiceImpl;
+import org.openstack4j.openstack.compute.internal.HostAggregateServiceImpl;
+import org.openstack4j.openstack.compute.internal.HostServiceImpl;
+import org.openstack4j.openstack.compute.internal.KeypairServiceImpl;
+import org.openstack4j.openstack.compute.internal.NovaServerActionsService;
+import org.openstack4j.openstack.compute.internal.QuotaSetServiceImpl;
+import org.openstack4j.openstack.compute.internal.ServerGroupServiceImpl;
+import org.openstack4j.openstack.compute.internal.ServerServiceImpl;
+import org.openstack4j.openstack.compute.internal.ServerTagServiceImpl;
+import org.openstack4j.openstack.compute.internal.ServicesServiceImpl;
+import org.openstack4j.openstack.compute.internal.ext.FloatingIPDNSDomainServiceImpl;
+import org.openstack4j.openstack.compute.internal.ext.FloatingIPDNSEntryServiceImpl;
+import org.openstack4j.openstack.compute.internal.ext.FloatingIPDNSServiceImpl;
+import org.openstack4j.openstack.compute.internal.ext.HypervisorServiceImpl;
+import org.openstack4j.openstack.compute.internal.ext.InstanceActionsServiceImpl;
+import org.openstack4j.openstack.compute.internal.ext.InterfaceServiceImpl;
+import org.openstack4j.openstack.compute.internal.ext.MigrationServiceImpl;
+import org.openstack4j.openstack.compute.internal.ext.ZoneServiceImpl;
+import org.openstack4j.openstack.dns.v2.internal.DNSServiceImpl;
+import org.openstack4j.openstack.dns.v2.internal.RecordsetServiceImpl;
+import org.openstack4j.openstack.gbp.internal.ExternalPolicyServiceImpl;
+import org.openstack4j.openstack.gbp.internal.ExternalSegmentServiceImpl;
+import org.openstack4j.openstack.gbp.internal.GbpServiceImpl;
+import org.openstack4j.openstack.gbp.internal.L2policyServiceImpl;
+import org.openstack4j.openstack.gbp.internal.L3policyServiceImpl;
+import org.openstack4j.openstack.gbp.internal.NatPoolServiceImpl;
+import org.openstack4j.openstack.gbp.internal.NetworkPolicyServiceImpl;
+import org.openstack4j.openstack.gbp.internal.PolicyActionServiceImpl;
+import org.openstack4j.openstack.gbp.internal.PolicyClassifierServiceImpl;
+import org.openstack4j.openstack.gbp.internal.PolicyRuleServiceImpl;
+import org.openstack4j.openstack.gbp.internal.PolicyRuleSetServiceImpl;
+import org.openstack4j.openstack.gbp.internal.PolicyTargetServiceImpl;
+import org.openstack4j.openstack.gbp.internal.ServiceProfileServiceImpl;
+import org.openstack4j.openstack.gbp.internal.ServicechainServiceImpl;
+import org.openstack4j.openstack.heat.internal.EventsServiceImpl;
+import org.openstack4j.openstack.heat.internal.HeatServiceImpl;
+import org.openstack4j.openstack.heat.internal.ResourcesServiceImpl;
+import org.openstack4j.openstack.heat.internal.SoftwareConfigServiceImpl;
+import org.openstack4j.openstack.heat.internal.StackServiceImpl;
+import org.openstack4j.openstack.heat.internal.TemplateServiceImpl;
+import org.openstack4j.openstack.identity.v2.internal.ServiceManagerServiceImpl;
+import org.openstack4j.openstack.identity.v2.internal.TenantServiceImpl;
+import org.openstack4j.openstack.identity.v3.internal.CredentialServiceImpl;
+import org.openstack4j.openstack.identity.v3.internal.DomainServiceImpl;
+import org.openstack4j.openstack.identity.v3.internal.GroupServiceImpl;
+import org.openstack4j.openstack.identity.v3.internal.PolicyServiceImpl;
+import org.openstack4j.openstack.identity.v3.internal.ProjectServiceImpl;
+import org.openstack4j.openstack.identity.v3.internal.RegionServiceImpl;
+import org.openstack4j.openstack.identity.v3.internal.RoleServiceImpl;
+import org.openstack4j.openstack.identity.v3.internal.ServiceEndpointServiceImpl;
+import org.openstack4j.openstack.identity.v3.internal.TokenServiceImpl;
+import org.openstack4j.openstack.identity.v3.internal.UserServiceImpl;
+import org.openstack4j.openstack.image.internal.ImageServiceImpl;
+import org.openstack4j.openstack.image.v2.internal.TaskServiceImpl;
+import org.openstack4j.openstack.magnum.internal.MagnumServiceImpl;
+import org.openstack4j.openstack.manila.internal.SchedulerStatsServiceImpl;
+import org.openstack4j.openstack.manila.internal.SecurityServiceServiceImpl;
+import org.openstack4j.openstack.manila.internal.ShareInstanceServiceImpl;
+import org.openstack4j.openstack.manila.internal.ShareNetworkServiceImpl;
+import org.openstack4j.openstack.manila.internal.ShareServerServiceImpl;
+import org.openstack4j.openstack.manila.internal.ShareServiceImpl;
+import org.openstack4j.openstack.manila.internal.ShareSnapshotServiceImpl;
+import org.openstack4j.openstack.manila.internal.ShareTypeServiceImpl;
+import org.openstack4j.openstack.manila.internal.SharesServiceImpl;
+import org.openstack4j.openstack.murano.v1.internal.MuranoActionServiceImpl;
+import org.openstack4j.openstack.murano.v1.internal.MuranoApplicationServiceImpl;
+import org.openstack4j.openstack.murano.v1.internal.MuranoDeploymentServiceImpl;
+import org.openstack4j.openstack.murano.v1.internal.MuranoEnvironmentServiceImpl;
+import org.openstack4j.openstack.murano.v1.internal.MuranoService;
+import org.openstack4j.openstack.murano.v1.internal.MuranoSessionServiceImpl;
+import org.openstack4j.openstack.networking.internal.AvailabilityZoneServiceImpl;
+import org.openstack4j.openstack.networking.internal.FloatingIPServiceImpl;
+import org.openstack4j.openstack.networking.internal.NetworkServiceImpl;
+import org.openstack4j.openstack.networking.internal.NetworkingServiceImpl;
+import org.openstack4j.openstack.networking.internal.PortServiceImpl;
+import org.openstack4j.openstack.networking.internal.RouterServiceImpl;
+import org.openstack4j.openstack.networking.internal.SecurityGroupRuleServiceImpl;
+import org.openstack4j.openstack.networking.internal.SecurityGroupServiceImpl;
+import org.openstack4j.openstack.networking.internal.SubnetServiceImpl;
+import org.openstack4j.openstack.networking.internal.TrunkServiceImpl;
+import org.openstack4j.openstack.networking.internal.ext.AgentServiceImpl;
+import org.openstack4j.openstack.networking.internal.ext.FirewallAsServiceImpl;
+import org.openstack4j.openstack.networking.internal.ext.FirewallPolicyServiceImpl;
+import org.openstack4j.openstack.networking.internal.ext.FirewallRuleServiceImpl;
+import org.openstack4j.openstack.networking.internal.ext.FirewallServiceImpl;
+import org.openstack4j.openstack.networking.internal.ext.FlowClassifierServiceImpl;
+import org.openstack4j.openstack.networking.internal.ext.HealthMonitorServiceImpl;
+import org.openstack4j.openstack.networking.internal.ext.HealthMonitorV2ServiceImpl;
+import org.openstack4j.openstack.networking.internal.ext.LbPoolServiceImpl;
+import org.openstack4j.openstack.networking.internal.ext.LbPoolV2ServiceImpl;
+import org.openstack4j.openstack.networking.internal.ext.LbaasV2ServiceImpl;
+import org.openstack4j.openstack.networking.internal.ext.ListenerV2ServiceImpl;
+import org.openstack4j.openstack.networking.internal.ext.LoadBalancerServiceImpl;
+import org.openstack4j.openstack.networking.internal.ext.LoadBalancerV2ServiceImpl;
+import org.openstack4j.openstack.networking.internal.ext.MemberServiceImpl;
+import org.openstack4j.openstack.networking.internal.ext.NetQuotaServiceImpl;
+import org.openstack4j.openstack.networking.internal.ext.NetworkIPAvailabilityServiceImpl;
+import org.openstack4j.openstack.networking.internal.ext.PortChainServiceImpl;
+import org.openstack4j.openstack.networking.internal.ext.PortPairGroupServiceImpl;
+import org.openstack4j.openstack.networking.internal.ext.PortPairServiceImpl;
+import org.openstack4j.openstack.networking.internal.ext.ServiceFunctionChainServiceImpl;
+import org.openstack4j.openstack.networking.internal.ext.VipServiceImpl;
+import org.openstack4j.openstack.octavia.internal.OctaviaServiceImpl;
+import org.openstack4j.openstack.sahara.internal.ClusterServiceImpl;
+import org.openstack4j.openstack.sahara.internal.ClusterTemplateServiceImpl;
+import org.openstack4j.openstack.sahara.internal.DataSourceServiceImpl;
+import org.openstack4j.openstack.sahara.internal.JobBinaryInternalServiceImpl;
+import org.openstack4j.openstack.sahara.internal.JobBinaryServiceImpl;
+import org.openstack4j.openstack.sahara.internal.JobExecutionServiceImpl;
+import org.openstack4j.openstack.sahara.internal.JobServiceImpl;
+import org.openstack4j.openstack.sahara.internal.NodeGroupTemplateServiceImpl;
+import org.openstack4j.openstack.sahara.internal.SaharaImageServiceImpl;
+import org.openstack4j.openstack.sahara.internal.SaharaPluginServiceImpl;
+import org.openstack4j.openstack.sahara.internal.SaharaServiceImpl;
+import org.openstack4j.openstack.senlin.internal.SenlinActionServiceImpl;
+import org.openstack4j.openstack.senlin.internal.SenlinBuildInfoServiceImpl;
+import org.openstack4j.openstack.senlin.internal.SenlinClusterPolicyServiceImpl;
+import org.openstack4j.openstack.senlin.internal.SenlinClusterServiceImpl;
+import org.openstack4j.openstack.senlin.internal.SenlinEventServiceImpl;
+import org.openstack4j.openstack.senlin.internal.SenlinNodeServiceImpl;
+import org.openstack4j.openstack.senlin.internal.SenlinPolicyServiceImpl;
+import org.openstack4j.openstack.senlin.internal.SenlinPolicyTypeServiceImpl;
+import org.openstack4j.openstack.senlin.internal.SenlinProfileServiceImpl;
+import org.openstack4j.openstack.senlin.internal.SenlinProfileTypeServiceImpl;
+import org.openstack4j.openstack.senlin.internal.SenlinReceiverServiceImpl;
+import org.openstack4j.openstack.senlin.internal.SenlinServiceImpl;
+import org.openstack4j.openstack.senlin.internal.SenlinVersionServiceImpl;
+import org.openstack4j.openstack.senlin.internal.SenlinWebHookServiceImpl;
+import org.openstack4j.openstack.storage.block.internal.BlockQuotaSetServiceImpl;
+import org.openstack4j.openstack.storage.block.internal.BlockStorageServiceImpl;
+import org.openstack4j.openstack.storage.block.internal.BlockStorageServiceServiceImpl;
+import org.openstack4j.openstack.storage.block.internal.BlockVolumeBackupServiceImpl;
+import org.openstack4j.openstack.storage.block.internal.BlockVolumeServiceImpl;
+import org.openstack4j.openstack.storage.block.internal.BlockVolumeSnapshotServiceImpl;
+import org.openstack4j.openstack.storage.block.internal.BlockVolumeTransferServiceImpl;
+import org.openstack4j.openstack.storage.block.internal.CinderZoneServiceImpl;
+import org.openstack4j.openstack.storage.block.internal.SchedulerStatsGetPoolServiceImpl;
+import org.openstack4j.openstack.storage.object.internal.ObjectStorageAccountServiceImpl;
+import org.openstack4j.openstack.storage.object.internal.ObjectStorageContainerServiceImpl;
+import org.openstack4j.openstack.storage.object.internal.ObjectStorageObjectServiceImpl;
+import org.openstack4j.openstack.storage.object.internal.ObjectStorageServiceImpl;
+import org.openstack4j.openstack.tacker.internal.VimServiceImpl;
+import org.openstack4j.openstack.tacker.internal.VnfServiceImpl;
+import org.openstack4j.openstack.tacker.internal.VnfdServiceImpl;
+import org.openstack4j.openstack.telemetry.internal.AlarmAodhServiceImpl;
+import org.openstack4j.openstack.telemetry.internal.AlarmServiceImpl;
+import org.openstack4j.openstack.telemetry.internal.CapabilitiesServiceImpl;
+import org.openstack4j.openstack.telemetry.internal.EventServiceImpl;
+import org.openstack4j.openstack.telemetry.internal.MeterServiceImpl;
+import org.openstack4j.openstack.telemetry.internal.ResourceServiceImpl;
+import org.openstack4j.openstack.telemetry.internal.SampleServiceImpl;
+import org.openstack4j.openstack.telemetry.internal.TelemetryAodhServiceImpl;
+import org.openstack4j.openstack.telemetry.internal.TelemetryServiceImpl;
+import org.openstack4j.openstack.trove.internal.DBDatabaseServiceImpl;
+import org.openstack4j.openstack.trove.internal.DBDatastoreServiceImpl;
+import org.openstack4j.openstack.trove.internal.DBFlavorServiceImpl;
+import org.openstack4j.openstack.trove.internal.DBInstanceServiceImpl;
+import org.openstack4j.openstack.trove.internal.DBUserServiceImpl;
+import org.openstack4j.openstack.trove.internal.TroveServiceImpl;
+import org.openstack4j.openstack.workflow.internal.ActionDefinitionServiceImpl;
+import org.openstack4j.openstack.workflow.internal.ActionExecutionServiceImpl;
+import org.openstack4j.openstack.workflow.internal.CronTriggerServiceImpl;
+import org.openstack4j.openstack.workflow.internal.TaskExecutionServiceImpl;
+import org.openstack4j.openstack.workflow.internal.WorkbookDefinitionServiceImpl;
+import org.openstack4j.openstack.workflow.internal.WorkflowDefinitionServiceImpl;
+import org.openstack4j.openstack.workflow.internal.WorkflowEnvironmentServiceImpl;
+import org.openstack4j.openstack.workflow.internal.WorkflowExecutionServiceImpl;
+import org.openstack4j.openstack.workflow.internal.WorkflowServiceImpl;
+
+@SuppressWarnings("deprecation")
+public class BuildTimeDefaultAPIProvider {
+
+    private final List<String> bindings = new ArrayList<>();
+
+    public BuildTimeDefaultAPIProvider() {
+        initialize();
+    }
+
+    // This method is a mere copy of org.openstack4j.openstack.provider.DefaultAPIProvider for maintenance reason.
+    public void initialize() {
+        bind(org.openstack4j.api.identity.v2.IdentityService.class,
+                org.openstack4j.openstack.identity.v2.internal.IdentityServiceImpl.class);
+        bind(TenantService.class, TenantServiceImpl.class);
+        bind(ServiceManagerService.class, ServiceManagerServiceImpl.class);
+        bind(org.openstack4j.api.identity.v2.UserService.class,
+                org.openstack4j.openstack.identity.v2.internal.UserServiceImpl.class);
+        bind(org.openstack4j.api.identity.v2.RoleService.class,
+                org.openstack4j.openstack.identity.v2.internal.RoleServiceImpl.class);
+        bind(org.openstack4j.api.identity.v3.IdentityService.class,
+                org.openstack4j.openstack.identity.v3.internal.IdentityServiceImpl.class);
+        bind(ServiceEndpointService.class, ServiceEndpointServiceImpl.class);
+        bind(CredentialService.class, CredentialServiceImpl.class);
+        bind(UserService.class, UserServiceImpl.class);
+        bind(ProjectService.class, ProjectServiceImpl.class);
+        bind(RoleService.class, RoleServiceImpl.class);
+        bind(DomainService.class, DomainServiceImpl.class);
+        bind(GroupService.class, GroupServiceImpl.class);
+        bind(PolicyService.class, PolicyServiceImpl.class);
+        bind(RegionService.class, RegionServiceImpl.class);
+        bind(TokenService.class, TokenServiceImpl.class);
+        bind(ComputeService.class, ComputeServiceImpl.class);
+        bind(FlavorService.class, FlavorServiceImpl.class);
+        bind(ComputeImageService.class, ComputeImageServiceImpl.class);
+        bind(ServerService.class, ServerServiceImpl.class);
+        bind(QuotaSetService.class, QuotaSetServiceImpl.class);
+        bind(HostService.class, HostServiceImpl.class);
+        bind(NetworkingService.class, NetworkingServiceImpl.class);
+        bind(NetworkService.class, NetworkServiceImpl.class);
+        bind(ServiceFunctionChainService.class, ServiceFunctionChainServiceImpl.class);
+        bind(FlowClassifierService.class, FlowClassifierServiceImpl.class);
+        bind(PortPairService.class, PortPairServiceImpl.class);
+        bind(PortPairGroupService.class, PortPairGroupServiceImpl.class);
+        bind(PortChainService.class, PortChainServiceImpl.class);
+        bind(ArtifactService.class, ArtifactServiceImpl.class);
+        bind(ToscaTemplatesArtifactService.class, ToscaTemplatesArtifactServiceImpl.class);
+        bind(SubnetService.class, SubnetServiceImpl.class);
+        bind(AvailabilityZoneService.class, AvailabilityZoneServiceImpl.class);
+        bind(PortService.class, PortServiceImpl.class);
+        bind(RouterService.class, RouterServiceImpl.class);
+        bind(OctaviaService.class, OctaviaServiceImpl.class);
+        bind(org.openstack4j.api.octavia.LoadBalancerV2Service.class,
+                org.openstack4j.openstack.octavia.internal.LoadBalancerV2ServiceImpl.class);
+        bind(org.openstack4j.api.octavia.ListenerV2Service.class,
+                org.openstack4j.openstack.octavia.internal.ListenerV2ServiceImpl.class);
+        bind(org.openstack4j.api.octavia.LbPoolV2Service.class,
+                org.openstack4j.openstack.octavia.internal.LbPoolV2ServiceImpl.class);
+        bind(org.openstack4j.api.octavia.HealthMonitorV2Service.class,
+                org.openstack4j.openstack.octavia.internal.HealthMonitorV2ServiceImpl.class);
+        bind(ImageService.class, ImageServiceImpl.class);
+        bind(BlockStorageService.class, BlockStorageServiceImpl.class);
+        bind(BlockVolumeService.class, BlockVolumeServiceImpl.class);
+        bind(BlockVolumeSnapshotService.class, BlockVolumeSnapshotServiceImpl.class);
+        bind(BlockVolumeBackupService.class, BlockVolumeBackupServiceImpl.class);
+        bind(ComputeSecurityGroupService.class, ComputeSecurityGroupServiceImpl.class);
+        bind(KeypairService.class, KeypairServiceImpl.class);
+        bind(NetFloatingIPService.class, FloatingIPServiceImpl.class);
+        bind(ComputeFloatingIPService.class, ComputeFloatingIPServiceImpl.class);
+        bind(SecurityGroupService.class, SecurityGroupServiceImpl.class);
+        bind(SecurityGroupRuleService.class, SecurityGroupRuleServiceImpl.class);
+        bind(TelemetryService.class, TelemetryServiceImpl.class);
+        bind(MeterService.class, MeterServiceImpl.class);
+        bind(SampleService.class, SampleServiceImpl.class);
+        bind(AlarmService.class, AlarmServiceImpl.class);
+        bind(EventService.class, EventServiceImpl.class);
+        bind(CapabilitiesService.class, CapabilitiesServiceImpl.class);
+        bind(ResourceService.class, ResourceServiceImpl.class);
+        bind(HypervisorService.class, HypervisorServiceImpl.class);
+        bind(ZoneService.class, ZoneServiceImpl.class);
+        bind(CinderZoneService.class, CinderZoneServiceImpl.class);
+        bind(HeatService.class, HeatServiceImpl.class);
+        bind(SenlinService.class, SenlinServiceImpl.class);
+        bind(SenlinPolicyService.class, SenlinPolicyServiceImpl.class);
+        bind(SenlinVersionService.class, SenlinVersionServiceImpl.class);
+        bind(SenlinActionService.class, SenlinActionServiceImpl.class);
+        bind(SenlinBuildInfoService.class, SenlinBuildInfoServiceImpl.class);
+        bind(SenlinClusterService.class, SenlinClusterServiceImpl.class);
+        bind(SenlinClusterPolicyService.class, SenlinClusterPolicyServiceImpl.class);
+        bind(SenlinEventService.class, SenlinEventServiceImpl.class);
+        bind(SenlinNodeService.class, SenlinNodeServiceImpl.class);
+        bind(SenlinProfileService.class, SenlinProfileServiceImpl.class);
+        bind(SenlinProfileTypeService.class, SenlinProfileTypeServiceImpl.class);
+        bind(SenlinPolicyTypeService.class, SenlinPolicyTypeServiceImpl.class);
+        bind(SenlinReceiverService.class, SenlinReceiverServiceImpl.class);
+        bind(SenlinWebHookService.class, SenlinWebHookServiceImpl.class);
+        bind(StackService.class, StackServiceImpl.class);
+        bind(TemplateService.class, TemplateServiceImpl.class);
+        bind(EventsService.class, EventsServiceImpl.class);
+        bind(ResourcesService.class, ResourcesServiceImpl.class);
+        bind(MigrationService.class, MigrationServiceImpl.class);
+        bind(SoftwareConfigService.class, SoftwareConfigServiceImpl.class);
+        bind(ObjectStorageService.class, ObjectStorageServiceImpl.class);
+        bind(ObjectStorageAccountService.class, ObjectStorageAccountServiceImpl.class);
+        bind(ObjectStorageContainerService.class, ObjectStorageContainerServiceImpl.class);
+        bind(ServerGroupService.class, ServerGroupServiceImpl.class);
+        bind(ObjectStorageObjectService.class, ObjectStorageObjectServiceImpl.class);
+        bind(NetQuotaService.class, NetQuotaServiceImpl.class);
+        bind(InterfaceService.class, InterfaceServiceImpl.class);
+        bind(InstanceActionsService.class, InstanceActionsServiceImpl.class);
+        bind(FloatingIPDNSService.class, FloatingIPDNSServiceImpl.class);
+        bind(FloatingIPDNSDomainService.class, FloatingIPDNSDomainServiceImpl.class);
+        bind(FloatingIPDNSEntryService.class, FloatingIPDNSEntryServiceImpl.class);
+        bind(HostAggregateService.class, HostAggregateServiceImpl.class);
+        bind(MemberService.class, MemberServiceImpl.class);
+        bind(VipService.class, VipServiceImpl.class);
+        bind(HealthMonitorService.class, HealthMonitorServiceImpl.class);
+        bind(LbPoolService.class, LbPoolServiceImpl.class);
+        bind(LoadBalancerService.class, LoadBalancerServiceImpl.class);
+        bind(BlockVolumeTransferService.class, BlockVolumeTransferServiceImpl.class);
+        bind(SaharaPluginService.class, SaharaPluginServiceImpl.class);
+        bind(SaharaImageService.class, SaharaImageServiceImpl.class);
+        bind(SaharaService.class, SaharaServiceImpl.class);
+        bind(ClusterService.class, ClusterServiceImpl.class);
+        bind(AppCatalogService.class, MuranoService.class);
+        bind(MuranoEnvironmentService.class, MuranoEnvironmentServiceImpl.class);
+        bind(MuranoSessionService.class, MuranoSessionServiceImpl.class);
+        bind(MuranoApplicationService.class, MuranoApplicationServiceImpl.class);
+        bind(MuranoDeploymentService.class, MuranoDeploymentServiceImpl.class);
+        bind(MuranoActionService.class, MuranoActionServiceImpl.class);
+        bind(ClusterTemplateService.class, ClusterTemplateServiceImpl.class);
+        bind(NodeGroupTemplateService.class, NodeGroupTemplateServiceImpl.class);
+        bind(DataSourceService.class, DataSourceServiceImpl.class);
+        bind(JobBinaryInternalService.class, JobBinaryInternalServiceImpl.class);
+        bind(JobBinaryService.class, JobBinaryServiceImpl.class);
+        bind(JobService.class, JobServiceImpl.class);
+        bind(JobExecutionService.class, JobExecutionServiceImpl.class);
+        bind(ShareService.class, ShareServiceImpl.class);
+        bind(SecurityServiceService.class, SecurityServiceServiceImpl.class);
+        bind(ShareSnapshotService.class, ShareSnapshotServiceImpl.class);
+        bind(ShareNetworkService.class, ShareNetworkServiceImpl.class);
+        bind(SharesService.class, SharesServiceImpl.class);
+        bind(ShareServerService.class, ShareServerServiceImpl.class);
+        bind(ShareInstanceService.class, ShareInstanceServiceImpl.class);
+        bind(ShareTypeService.class, ShareTypeServiceImpl.class);
+        bind(SchedulerStatsService.class, SchedulerStatsServiceImpl.class);
+        bind(org.openstack4j.api.manila.QuotaSetService.class,
+                org.openstack4j.openstack.manila.internal.QuotaSetServiceImpl.class);
+        bind(GbpService.class, GbpServiceImpl.class);
+        bind(ExternalPolicyService.class, ExternalPolicyServiceImpl.class);
+        bind(ExternalSegmentService.class, ExternalSegmentServiceImpl.class);
+        bind(org.openstack4j.api.gbp.GroupService.class, org.openstack4j.openstack.gbp.internal.GroupServiceImpl.class);
+        bind(L2policyService.class, L2policyServiceImpl.class);
+        bind(L3policyService.class, L3policyServiceImpl.class);
+        bind(NatPoolService.class, NatPoolServiceImpl.class);
+        bind(NetworkService.class, NetworkServiceImpl.class);
+        bind(PolicyActionService.class, PolicyActionServiceImpl.class);
+        bind(PolicyRuleService.class, PolicyRuleServiceImpl.class);
+        bind(PolicyRuleSetService.class, PolicyRuleSetServiceImpl.class);
+        bind(PolicyTargetService.class, PolicyTargetServiceImpl.class);
+        bind(PolicyClassifierService.class, PolicyClassifierServiceImpl.class);
+        bind(ServicechainService.class, ServicechainServiceImpl.class);
+        bind(ServiceProfileService.class, ServiceProfileServiceImpl.class);
+        bind(BlockQuotaSetService.class, BlockQuotaSetServiceImpl.class);
+        bind(FirewallAsService.class, FirewallAsServiceImpl.class);
+        bind(FirewallService.class, FirewallServiceImpl.class);
+        bind(FirewallRuleService.class, FirewallRuleServiceImpl.class);
+        bind(FirewallPolicyService.class, FirewallPolicyServiceImpl.class);
+        bind(NetworkPolicyService.class, NetworkPolicyServiceImpl.class);
+        bind(LbaasV2Service.class, LbaasV2ServiceImpl.class);
+        bind(LoadBalancerV2Service.class, LoadBalancerV2ServiceImpl.class);
+        bind(ListenerV2Service.class, ListenerV2ServiceImpl.class);
+        bind(HealthMonitorV2Service.class, HealthMonitorV2ServiceImpl.class);
+        bind(LbPoolV2Service.class, LbPoolV2ServiceImpl.class);
+        bind(TroveService.class, TroveServiceImpl.class);
+        bind(InstanceFlavorService.class, DBFlavorServiceImpl.class);
+        bind(DatastoreService.class, DBDatastoreServiceImpl.class);
+        bind(DatabaseService.class, DBDatabaseServiceImpl.class);
+        bind(org.openstack4j.api.trove.UserService.class, DBUserServiceImpl.class);
+        bind(InstanceService.class, DBInstanceServiceImpl.class);
+        bind(SchedulerStatsGetPoolService.class, SchedulerStatsGetPoolServiceImpl.class);
+        bind(BarbicanService.class, BarbicanServiceImpl.class);
+        bind(ContainerService.class, ContainerServiceImpl.class);
+        bind(SecretService.class, SecretServiceImpl.class);
+        bind(TackerService.class, TackerServiceImpl.class);
+        bind(VnfdService.class, VnfdServiceImpl.class);
+        bind(VnfService.class, VnfServiceImpl.class);
+        bind(VimService.class, VimServiceImpl.class);
+        bind(AgentService.class, AgentServiceImpl.class);
+        bind(org.openstack4j.api.image.v2.ImageService.class,
+                org.openstack4j.openstack.image.v2.internal.ImageServiceImpl.class);
+        bind(TaskService.class, TaskServiceImpl.class);
+        bind(TaskService.class, TaskServiceImpl.class);
+        bind(ServerTagService.class, ServerTagServiceImpl.class);
+        bind(TelemetryAodhService.class, TelemetryAodhServiceImpl.class);
+        bind(AlarmAodhService.class, AlarmAodhServiceImpl.class);
+        bind(ServicesService.class, ServicesServiceImpl.class);
+        bind(BlockStorageServiceService.class, BlockStorageServiceServiceImpl.class);
+        bind(MagnumService.class, MagnumServiceImpl.class);
+        bind(WorkflowService.class, WorkflowServiceImpl.class);
+        bind(WorkflowDefinitionService.class, WorkflowDefinitionServiceImpl.class);
+        bind(DNSService.class, DNSServiceImpl.class);
+        bind(org.openstack4j.api.dns.v2.ZoneService.class, org.openstack4j.openstack.dns.v2.internal.ZoneServiceImpl.class);
+        bind(RecordsetService.class, RecordsetServiceImpl.class);
+        bind(WorkflowService.class, WorkflowServiceImpl.class);
+        bind(WorkflowDefinitionService.class, WorkflowDefinitionServiceImpl.class);
+        bind(WorkbookDefinitionService.class, WorkbookDefinitionServiceImpl.class);
+        bind(ActionDefinitionService.class, ActionDefinitionServiceImpl.class);
+        bind(WorkflowExecutionService.class, WorkflowExecutionServiceImpl.class);
+        bind(TaskExecutionService.class, TaskExecutionServiceImpl.class);
+        bind(ActionExecutionService.class, ActionExecutionServiceImpl.class);
+        bind(WorkflowEnvironmentService.class, WorkflowEnvironmentServiceImpl.class);
+        bind(CronTriggerService.class, CronTriggerServiceImpl.class);
+        bind(NetworkIPAvailabilityService.class, NetworkIPAvailabilityServiceImpl.class);
+        bind(TrunkService.class, TrunkServiceImpl.class);
+        bind(ServerActionsService.class, NovaServerActionsService.class);
+    }
+
+    private void bind(Class<?> api, Class<?> impl) {
+        bindings.add(impl.getName());
+    }
+
+    public String[] getReflectiveClasses() {
+        return this.bindings.toArray(new String[0]);
+    }
+
+}
diff --git a/extensions/openstack/deployment/src/main/java/org/apache/camel/quarkus/component/openstack/deployment/OpenstackProcessor.java b/extensions/openstack/deployment/src/main/java/org/apache/camel/quarkus/component/openstack/deployment/OpenstackProcessor.java
new file mode 100644
index 0000000..f00b99f
--- /dev/null
+++ b/extensions/openstack/deployment/src/main/java/org/apache/camel/quarkus/component/openstack/deployment/OpenstackProcessor.java
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.quarkus.component.openstack.deployment;
+
+import io.quarkus.deployment.annotations.BuildProducer;
+import io.quarkus.deployment.annotations.BuildStep;
+import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
+import io.quarkus.deployment.builditem.ExtensionSslNativeSupportBuildItem;
+import io.quarkus.deployment.builditem.FeatureBuildItem;
+import io.quarkus.deployment.builditem.IndexDependencyBuildItem;
+import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
+import io.quarkus.deployment.builditem.nativeimage.RuntimeInitializedClassBuildItem;
+import io.quarkus.deployment.builditem.nativeimage.ServiceProviderBuildItem;
+import org.apache.camel.quarkus.core.deployment.util.CamelSupport;
+import org.jboss.jandex.DotName;
+import org.jboss.jandex.IndexView;
+import org.jboss.logging.Logger;
+import org.openstack4j.connectors.okhttp.HttpExecutorServiceImpl;
+import org.openstack4j.core.transport.HttpExecutorService;
+import org.openstack4j.model.ModelEntity;
+import org.openstack4j.openstack.identity.v3.domain.KeystoneAuth;
+
+class OpenstackProcessor {
+    private static final Logger LOG = Logger.getLogger(OpenstackProcessor.class);
+
+    private static final String FEATURE = "camel-openstack";
+
+    @BuildStep
+    FeatureBuildItem feature() {
+        return new FeatureBuildItem(FEATURE);
+    }
+
+    @BuildStep
+    ExtensionSslNativeSupportBuildItem activateSslNativeSupport() {
+        return new ExtensionSslNativeSupportBuildItem(FEATURE);
+    }
+
+    @BuildStep
+    RuntimeInitializedClassBuildItem runtimeInitOpenstack4jUntrustedSSL() {
+        // This class uses a SecureRandom which needs to be initialized at run time
+        return new RuntimeInitializedClassBuildItem("org.openstack4j.core.transport.UntrustedSSL");
+    }
+
+    @BuildStep
+    void registerOkhttpServiceProvider(BuildProducer<ServiceProviderBuildItem> services) {
+        services.produce(
+                new ServiceProviderBuildItem(HttpExecutorService.class.getName(), HttpExecutorServiceImpl.class.getName()));
+    }
+
+    @BuildStep
+    void registerForReflection(BuildProducer<ReflectiveClassBuildItem> reflectiveClasses,
+            CombinedIndexBuildItem combinedIndex) {
+        IndexView index = combinedIndex.getIndex();
+
+        // Register ModelEntity implementations for reflection
+        index.getAllKnownImplementors(DotName.createSimple(ModelEntity.class.getName())).stream()
+                .filter(CamelSupport::isConcrete).forEach(ci -> {
+                    String className = ci.asClass().name().toString();
+                    LOG.debugf("Registered openstack4j model class %s as reflective", className);
+                    reflectiveClasses.produce(new ReflectiveClassBuildItem(true, true, className));
+                });
+
+        // Some ModelEntity sub-interfaces embed nested interfaces that are not themselves ModelEntity, so registering manually
+        reflectiveClasses.produce(new ReflectiveClassBuildItem(true, true, KeystoneAuth.AuthIdentity.class));
+        reflectiveClasses.produce(new ReflectiveClassBuildItem(true, true, KeystoneAuth.AuthIdentity.AuthPassword.class));
+        reflectiveClasses.produce(new ReflectiveClassBuildItem(true, true, KeystoneAuth.AuthIdentity.AuthToken.class));
+        reflectiveClasses.produce(new ReflectiveClassBuildItem(true, true, KeystoneAuth.AuthScope.class));
+
+        // Register open stack services for reflection
+        BuildTimeDefaultAPIProvider prov = new BuildTimeDefaultAPIProvider();
+        reflectiveClasses.produce(new ReflectiveClassBuildItem(false, false, prov.getReflectiveClasses()));
+    }
+
+    @BuildStep
+    void addDependencies(BuildProducer<IndexDependencyBuildItem> indexDependency) {
+        indexDependency.produce(new IndexDependencyBuildItem("com.github.openstack4j.core", "openstack4j-core"));
+    }
+
+}
diff --git a/extensions-jvm/openstack/pom.xml b/extensions/openstack/pom.xml
similarity index 97%
rename from extensions-jvm/openstack/pom.xml
rename to extensions/openstack/pom.xml
index e9d2039..3852b9d 100644
--- a/extensions-jvm/openstack/pom.xml
+++ b/extensions/openstack/pom.xml
@@ -33,6 +33,5 @@
     <modules>
         <module>deployment</module>
         <module>runtime</module>
-        <module>integration-test</module>
     </modules>
 </project>
diff --git a/extensions-jvm/openstack/runtime/pom.xml b/extensions/openstack/runtime/pom.xml
similarity index 95%
rename from extensions-jvm/openstack/runtime/pom.xml
rename to extensions/openstack/runtime/pom.xml
index 3587e69..96f07f8 100644
--- a/extensions-jvm/openstack/runtime/pom.xml
+++ b/extensions/openstack/runtime/pom.xml
@@ -32,6 +32,7 @@
 
     <properties>
         <camel.quarkus.jvmSince>1.0.0</camel.quarkus.jvmSince>
+        <camel.quarkus.nativeSince>1.9.0</camel.quarkus.nativeSince>
     </properties>
 
     <dependencyManagement>
@@ -55,6 +56,10 @@
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-openstack</artifactId>
         </dependency>
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-jackson</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/extensions-jvm/openstack/runtime/src/main/resources/META-INF/quarkus-extension.yaml b/extensions/openstack/runtime/src/main/resources/META-INF/quarkus-extension.yaml
similarity index 97%
rename from extensions-jvm/openstack/runtime/src/main/resources/META-INF/quarkus-extension.yaml
rename to extensions/openstack/runtime/src/main/resources/META-INF/quarkus-extension.yaml
index 785bee3..938d58b 100644
--- a/extensions-jvm/openstack/runtime/src/main/resources/META-INF/quarkus-extension.yaml
+++ b/extensions/openstack/runtime/src/main/resources/META-INF/quarkus-extension.yaml
@@ -24,9 +24,8 @@
 name: "Camel OpenStack"
 description: "Interact with OpenStack APIs"
 metadata:
-  unlisted: true
   guide: "https://camel.apache.org/camel-quarkus/latest/reference/extensions/openstack.html"
   categories:
   - "integration"
   status:
-  - "preview"
+  - "stable"
diff --git a/extensions/pom.xml b/extensions/pom.xml
index 99d700c..f53e710 100644
--- a/extensions/pom.xml
+++ b/extensions/pom.xml
@@ -176,6 +176,7 @@
         <module>oaipmh</module>
         <module>olingo4</module>
         <module>openapi-java</module>
+        <module>openstack</module>
         <module>opentracing</module>
         <module>optaplanner</module>
         <module>paho</module>
diff --git a/extensions-jvm/openstack/integration-test/pom.xml b/integration-tests/openstack/pom.xml
similarity index 71%
rename from extensions-jvm/openstack/integration-test/pom.xml
rename to integration-tests/openstack/pom.xml
index 80ac53c..e90bbb7 100644
--- a/extensions-jvm/openstack/integration-test/pom.xml
+++ b/integration-tests/openstack/pom.xml
@@ -21,13 +21,12 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.camel.quarkus</groupId>
-        <artifactId>camel-quarkus-build-parent-it</artifactId>
+        <artifactId>camel-quarkus-integration-tests</artifactId>
         <version>1.9.0-SNAPSHOT</version>
-        <relativePath>../../../poms/build-parent-it/pom.xml</relativePath>
     </parent>
 
-    <artifactId>camel-quarkus-openstack-integration-test</artifactId>
-    <name>Camel Quarkus :: OpenStack :: Integration Test</name>
+    <artifactId>camel-quarkus-integration-test-openstack</artifactId>
+    <name>Camel Quarkus :: Integration Tests :: OpenStack</name>
     <description>Integration tests for Camel Quarkus OpenStack extension</description>
 
     <dependencies>
@@ -77,4 +76,34 @@
         </dependency>
     </dependencies>
 
+    <profiles>
+        <profile>
+            <id>native</id>
+            <activation>
+                <property>
+                    <name>native</name>
+                </property>
+            </activation>
+            <properties>
+                <quarkus.package.type>native</quarkus.package.type>
+            </properties>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-failsafe-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <goals>
+                                    <goal>integration-test</goal>
+                                    <goal>verify</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
+
 </project>
diff --git a/extensions-jvm/openstack/integration-test/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackCinderSnapshotResource.java b/integration-tests/openstack/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackCinderSnapshotResource.java
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackCinderSnapshotResource.java
rename to integration-tests/openstack/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackCinderSnapshotResource.java
diff --git a/extensions-jvm/openstack/integration-test/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackCinderVolumeResource.java b/integration-tests/openstack/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackCinderVolumeResource.java
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackCinderVolumeResource.java
rename to integration-tests/openstack/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackCinderVolumeResource.java
diff --git a/extensions-jvm/openstack/integration-test/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackGlanceResource.java b/integration-tests/openstack/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackGlanceResource.java
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackGlanceResource.java
rename to integration-tests/openstack/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackGlanceResource.java
diff --git a/extensions-jvm/openstack/integration-test/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneDomainResource.java b/integration-tests/openstack/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneDomainResource.java
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneDomainResource.java
rename to integration-tests/openstack/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneDomainResource.java
diff --git a/extensions-jvm/openstack/integration-test/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneGroupResource.java b/integration-tests/openstack/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneGroupResource.java
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneGroupResource.java
rename to integration-tests/openstack/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneGroupResource.java
diff --git a/extensions-jvm/openstack/integration-test/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneProjectResource.java b/integration-tests/openstack/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneProjectResource.java
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneProjectResource.java
rename to integration-tests/openstack/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneProjectResource.java
diff --git a/extensions-jvm/openstack/integration-test/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneRegionResource.java b/integration-tests/openstack/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneRegionResource.java
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneRegionResource.java
rename to integration-tests/openstack/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneRegionResource.java
diff --git a/extensions-jvm/openstack/integration-test/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneUserResource.java b/integration-tests/openstack/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneUserResource.java
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneUserResource.java
rename to integration-tests/openstack/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneUserResource.java
diff --git a/extensions-jvm/openstack/integration-test/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronNetworkResource.java b/integration-tests/openstack/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronNetworkResource.java
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronNetworkResource.java
rename to integration-tests/openstack/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronNetworkResource.java
diff --git a/extensions-jvm/openstack/integration-test/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronPortResource.java b/integration-tests/openstack/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronPortResource.java
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronPortResource.java
rename to integration-tests/openstack/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronPortResource.java
diff --git a/extensions-jvm/openstack/integration-test/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronSubnetResource.java b/integration-tests/openstack/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronSubnetResource.java
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronSubnetResource.java
rename to integration-tests/openstack/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronSubnetResource.java
diff --git a/extensions-jvm/openstack/integration-test/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNovaFlavorResource.java b/integration-tests/openstack/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNovaFlavorResource.java
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNovaFlavorResource.java
rename to integration-tests/openstack/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNovaFlavorResource.java
diff --git a/extensions-jvm/openstack/integration-test/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNovaServerResource.java b/integration-tests/openstack/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNovaServerResource.java
similarity index 95%
rename from extensions-jvm/openstack/integration-test/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNovaServerResource.java
rename to integration-tests/openstack/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNovaServerResource.java
index f15a594..8e2ec9c 100644
--- a/extensions-jvm/openstack/integration-test/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNovaServerResource.java
+++ b/integration-tests/openstack/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNovaServerResource.java
@@ -113,7 +113,11 @@ public class OpenstackNovaServerResource {
 
         assertNotNull(servers);
         assertEquals(1, servers.length);
-        assertEquals(1, servers[0].getAddresses().getAddresses("private").size());
+        Server server = servers[0];
+        assertNotNull(server);
+        assertNotNull(server.getAddresses());
+        assertNotNull(server.getAddresses().getAddresses("private"));
+        assertEquals(1, server.getAddresses().getAddresses("private").size());
         assertEquals("192.168.0.3", servers[0].getAddresses().getAddresses("private").get(0).getAddr());
         assertEquals(Status.ACTIVE, servers[0].getStatus());
         assertEquals("new-server-test", servers[0].getName());
diff --git a/extensions-jvm/openstack/integration-test/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftContainerResource.java b/integration-tests/openstack/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftContainerResource.java
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftContainerResource.java
rename to integration-tests/openstack/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftContainerResource.java
diff --git a/extensions-jvm/openstack/integration-test/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectResource.java b/integration-tests/openstack/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectResource.java
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectResource.java
rename to integration-tests/openstack/src/main/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectResource.java
diff --git a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenStackTestResource.java b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenStackTestResource.java
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenStackTestResource.java
rename to integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenStackTestResource.java
diff --git a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackCinderSnapshotIT.java
similarity index 67%
copy from extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
copy to integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackCinderSnapshotIT.java
index 8f2331a..b3c0a13 100644
--- a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
+++ b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackCinderSnapshotIT.java
@@ -16,19 +16,9 @@
  */
 package org.apache.camel.quarkus.component.openstack.it;
 
-import io.quarkus.test.common.QuarkusTestResource;
-import io.quarkus.test.junit.QuarkusTest;
-import org.junit.jupiter.api.Test;
+import io.quarkus.test.junit.NativeImageTest;
 
-import static io.restassured.RestAssured.post;
-
-@QuarkusTest
-@QuarkusTestResource(OpenStackTestResource.class)
-class OpenstackSwiftObjectTest {
-
-    @Test
-    public void getShouldSucceed() {
-        post("/openstack/swift/objects/getShouldSucceed").then().statusCode(204);
-    }
+@NativeImageTest
+class OpenstackCinderSnapshotIT extends OpenstackCinderSnapshotTest {
 
 }
diff --git a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackCinderSnapshotTest.java b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackCinderSnapshotTest.java
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackCinderSnapshotTest.java
rename to integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackCinderSnapshotTest.java
diff --git a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackCinderVolumeIT.java
similarity index 67%
copy from extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
copy to integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackCinderVolumeIT.java
index 8f2331a..3b0ab44 100644
--- a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
+++ b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackCinderVolumeIT.java
@@ -16,19 +16,9 @@
  */
 package org.apache.camel.quarkus.component.openstack.it;
 
-import io.quarkus.test.common.QuarkusTestResource;
-import io.quarkus.test.junit.QuarkusTest;
-import org.junit.jupiter.api.Test;
+import io.quarkus.test.junit.NativeImageTest;
 
-import static io.restassured.RestAssured.post;
-
-@QuarkusTest
-@QuarkusTestResource(OpenStackTestResource.class)
-class OpenstackSwiftObjectTest {
-
-    @Test
-    public void getShouldSucceed() {
-        post("/openstack/swift/objects/getShouldSucceed").then().statusCode(204);
-    }
+@NativeImageTest
+class OpenstackCinderVolumeIT extends OpenstackCinderVolumeTest {
 
 }
diff --git a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackCinderVolumeTest.java b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackCinderVolumeTest.java
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackCinderVolumeTest.java
rename to integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackCinderVolumeTest.java
diff --git a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackGlanceIT.java
similarity index 67%
copy from extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
copy to integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackGlanceIT.java
index 8f2331a..2e2e50b 100644
--- a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
+++ b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackGlanceIT.java
@@ -16,19 +16,9 @@
  */
 package org.apache.camel.quarkus.component.openstack.it;
 
-import io.quarkus.test.common.QuarkusTestResource;
-import io.quarkus.test.junit.QuarkusTest;
-import org.junit.jupiter.api.Test;
+import io.quarkus.test.junit.NativeImageTest;
 
-import static io.restassured.RestAssured.post;
-
-@QuarkusTest
-@QuarkusTestResource(OpenStackTestResource.class)
-class OpenstackSwiftObjectTest {
-
-    @Test
-    public void getShouldSucceed() {
-        post("/openstack/swift/objects/getShouldSucceed").then().statusCode(204);
-    }
+@NativeImageTest
+class OpenstackGlanceIT extends OpenstackGlanceTest {
 
 }
diff --git a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackGlanceTest.java b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackGlanceTest.java
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackGlanceTest.java
rename to integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackGlanceTest.java
diff --git a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneDomainIT.java
similarity index 67%
copy from extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
copy to integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneDomainIT.java
index 8f2331a..0a54780 100644
--- a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
+++ b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneDomainIT.java
@@ -16,19 +16,9 @@
  */
 package org.apache.camel.quarkus.component.openstack.it;
 
-import io.quarkus.test.common.QuarkusTestResource;
-import io.quarkus.test.junit.QuarkusTest;
-import org.junit.jupiter.api.Test;
+import io.quarkus.test.junit.NativeImageTest;
 
-import static io.restassured.RestAssured.post;
-
-@QuarkusTest
-@QuarkusTestResource(OpenStackTestResource.class)
-class OpenstackSwiftObjectTest {
-
-    @Test
-    public void getShouldSucceed() {
-        post("/openstack/swift/objects/getShouldSucceed").then().statusCode(204);
-    }
+@NativeImageTest
+class OpenstackKeystoneDomainIT extends OpenstackKeystoneDomainTest {
 
 }
diff --git a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneDomainTest.java b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneDomainTest.java
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneDomainTest.java
rename to integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneDomainTest.java
diff --git a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneGroupIT.java
similarity index 67%
copy from extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
copy to integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneGroupIT.java
index 8f2331a..8d031f9 100644
--- a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
+++ b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneGroupIT.java
@@ -16,19 +16,9 @@
  */
 package org.apache.camel.quarkus.component.openstack.it;
 
-import io.quarkus.test.common.QuarkusTestResource;
-import io.quarkus.test.junit.QuarkusTest;
-import org.junit.jupiter.api.Test;
+import io.quarkus.test.junit.NativeImageTest;
 
-import static io.restassured.RestAssured.post;
-
-@QuarkusTest
-@QuarkusTestResource(OpenStackTestResource.class)
-class OpenstackSwiftObjectTest {
-
-    @Test
-    public void getShouldSucceed() {
-        post("/openstack/swift/objects/getShouldSucceed").then().statusCode(204);
-    }
+@NativeImageTest
+class OpenstackKeystoneGroupIT extends OpenstackKeystoneGroupTest {
 
 }
diff --git a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneGroupTest.java b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneGroupTest.java
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneGroupTest.java
rename to integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneGroupTest.java
diff --git a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneProjectIT.java
similarity index 67%
copy from extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
copy to integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneProjectIT.java
index 8f2331a..90db51d 100644
--- a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
+++ b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneProjectIT.java
@@ -16,19 +16,9 @@
  */
 package org.apache.camel.quarkus.component.openstack.it;
 
-import io.quarkus.test.common.QuarkusTestResource;
-import io.quarkus.test.junit.QuarkusTest;
-import org.junit.jupiter.api.Test;
+import io.quarkus.test.junit.NativeImageTest;
 
-import static io.restassured.RestAssured.post;
-
-@QuarkusTest
-@QuarkusTestResource(OpenStackTestResource.class)
-class OpenstackSwiftObjectTest {
-
-    @Test
-    public void getShouldSucceed() {
-        post("/openstack/swift/objects/getShouldSucceed").then().statusCode(204);
-    }
+@NativeImageTest
+class OpenstackKeystoneProjectIT extends OpenstackKeystoneProjectTest {
 
 }
diff --git a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneProjectTest.java b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneProjectTest.java
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneProjectTest.java
rename to integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneProjectTest.java
diff --git a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneRegionIT.java
similarity index 67%
copy from extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
copy to integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneRegionIT.java
index 8f2331a..ca8fd41 100644
--- a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
+++ b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneRegionIT.java
@@ -16,19 +16,9 @@
  */
 package org.apache.camel.quarkus.component.openstack.it;
 
-import io.quarkus.test.common.QuarkusTestResource;
-import io.quarkus.test.junit.QuarkusTest;
-import org.junit.jupiter.api.Test;
+import io.quarkus.test.junit.NativeImageTest;
 
-import static io.restassured.RestAssured.post;
-
-@QuarkusTest
-@QuarkusTestResource(OpenStackTestResource.class)
-class OpenstackSwiftObjectTest {
-
-    @Test
-    public void getShouldSucceed() {
-        post("/openstack/swift/objects/getShouldSucceed").then().statusCode(204);
-    }
+@NativeImageTest
+class OpenstackKeystoneRegionIT extends OpenstackKeystoneRegionTest {
 
 }
diff --git a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneRegionTest.java b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneRegionTest.java
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneRegionTest.java
rename to integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneRegionTest.java
diff --git a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneUserIT.java
similarity index 67%
copy from extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
copy to integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneUserIT.java
index 8f2331a..e149682 100644
--- a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
+++ b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneUserIT.java
@@ -16,19 +16,9 @@
  */
 package org.apache.camel.quarkus.component.openstack.it;
 
-import io.quarkus.test.common.QuarkusTestResource;
-import io.quarkus.test.junit.QuarkusTest;
-import org.junit.jupiter.api.Test;
+import io.quarkus.test.junit.NativeImageTest;
 
-import static io.restassured.RestAssured.post;
-
-@QuarkusTest
-@QuarkusTestResource(OpenStackTestResource.class)
-class OpenstackSwiftObjectTest {
-
-    @Test
-    public void getShouldSucceed() {
-        post("/openstack/swift/objects/getShouldSucceed").then().statusCode(204);
-    }
+@NativeImageTest
+class OpenstackKeystoneUserIT extends OpenstackKeystoneUserTest {
 
 }
diff --git a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneUserTest.java b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneUserTest.java
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneUserTest.java
rename to integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackKeystoneUserTest.java
diff --git a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronNetworkIT.java
similarity index 67%
copy from extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
copy to integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronNetworkIT.java
index 8f2331a..d33e0c1 100644
--- a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
+++ b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronNetworkIT.java
@@ -16,19 +16,9 @@
  */
 package org.apache.camel.quarkus.component.openstack.it;
 
-import io.quarkus.test.common.QuarkusTestResource;
-import io.quarkus.test.junit.QuarkusTest;
-import org.junit.jupiter.api.Test;
+import io.quarkus.test.junit.NativeImageTest;
 
-import static io.restassured.RestAssured.post;
-
-@QuarkusTest
-@QuarkusTestResource(OpenStackTestResource.class)
-class OpenstackSwiftObjectTest {
-
-    @Test
-    public void getShouldSucceed() {
-        post("/openstack/swift/objects/getShouldSucceed").then().statusCode(204);
-    }
+@NativeImageTest
+class OpenstackNeutronNetworkIT extends OpenstackNeutronNetworkTest {
 
 }
diff --git a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronNetworkTest.java b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronNetworkTest.java
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronNetworkTest.java
rename to integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronNetworkTest.java
diff --git a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronPortIT.java
similarity index 67%
copy from extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
copy to integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronPortIT.java
index 8f2331a..8376c3f 100644
--- a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
+++ b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronPortIT.java
@@ -16,19 +16,9 @@
  */
 package org.apache.camel.quarkus.component.openstack.it;
 
-import io.quarkus.test.common.QuarkusTestResource;
-import io.quarkus.test.junit.QuarkusTest;
-import org.junit.jupiter.api.Test;
+import io.quarkus.test.junit.NativeImageTest;
 
-import static io.restassured.RestAssured.post;
-
-@QuarkusTest
-@QuarkusTestResource(OpenStackTestResource.class)
-class OpenstackSwiftObjectTest {
-
-    @Test
-    public void getShouldSucceed() {
-        post("/openstack/swift/objects/getShouldSucceed").then().statusCode(204);
-    }
+@NativeImageTest
+class OpenstackNeutronPortIT extends OpenstackNeutronPortTest {
 
 }
diff --git a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronPortTest.java b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronPortTest.java
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronPortTest.java
rename to integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronPortTest.java
diff --git a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronSubnetIT.java
similarity index 67%
copy from extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
copy to integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronSubnetIT.java
index 8f2331a..9bc706f 100644
--- a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
+++ b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronSubnetIT.java
@@ -16,19 +16,9 @@
  */
 package org.apache.camel.quarkus.component.openstack.it;
 
-import io.quarkus.test.common.QuarkusTestResource;
-import io.quarkus.test.junit.QuarkusTest;
-import org.junit.jupiter.api.Test;
+import io.quarkus.test.junit.NativeImageTest;
 
-import static io.restassured.RestAssured.post;
-
-@QuarkusTest
-@QuarkusTestResource(OpenStackTestResource.class)
-class OpenstackSwiftObjectTest {
-
-    @Test
-    public void getShouldSucceed() {
-        post("/openstack/swift/objects/getShouldSucceed").then().statusCode(204);
-    }
+@NativeImageTest
+class OpenstackNeutronSubnetIT extends OpenstackNeutronSubnetTest {
 
 }
diff --git a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronSubnetTest.java b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronSubnetTest.java
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronSubnetTest.java
rename to integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNeutronSubnetTest.java
diff --git a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNovaFlavorIT.java
similarity index 67%
copy from extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
copy to integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNovaFlavorIT.java
index 8f2331a..70fb02a 100644
--- a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
+++ b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNovaFlavorIT.java
@@ -16,19 +16,9 @@
  */
 package org.apache.camel.quarkus.component.openstack.it;
 
-import io.quarkus.test.common.QuarkusTestResource;
-import io.quarkus.test.junit.QuarkusTest;
-import org.junit.jupiter.api.Test;
+import io.quarkus.test.junit.NativeImageTest;
 
-import static io.restassured.RestAssured.post;
-
-@QuarkusTest
-@QuarkusTestResource(OpenStackTestResource.class)
-class OpenstackSwiftObjectTest {
-
-    @Test
-    public void getShouldSucceed() {
-        post("/openstack/swift/objects/getShouldSucceed").then().statusCode(204);
-    }
+@NativeImageTest
+class OpenstackNovaFlavorIT extends OpenstackNovaFlavorTest {
 
 }
diff --git a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNovaFlavorTest.java b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNovaFlavorTest.java
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNovaFlavorTest.java
rename to integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNovaFlavorTest.java
diff --git a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNovaServerIT.java
similarity index 67%
copy from extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
copy to integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNovaServerIT.java
index 8f2331a..ff8f393 100644
--- a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
+++ b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNovaServerIT.java
@@ -16,19 +16,9 @@
  */
 package org.apache.camel.quarkus.component.openstack.it;
 
-import io.quarkus.test.common.QuarkusTestResource;
-import io.quarkus.test.junit.QuarkusTest;
-import org.junit.jupiter.api.Test;
+import io.quarkus.test.junit.NativeImageTest;
 
-import static io.restassured.RestAssured.post;
-
-@QuarkusTest
-@QuarkusTestResource(OpenStackTestResource.class)
-class OpenstackSwiftObjectTest {
-
-    @Test
-    public void getShouldSucceed() {
-        post("/openstack/swift/objects/getShouldSucceed").then().statusCode(204);
-    }
+@NativeImageTest
+class OpenstackNovaServerIT extends OpenstackNovaServerTest {
 
 }
diff --git a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNovaServerTest.java b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNovaServerTest.java
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNovaServerTest.java
rename to integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackNovaServerTest.java
diff --git a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftContainerIT.java
similarity index 67%
copy from extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
copy to integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftContainerIT.java
index 8f2331a..43a9cba 100644
--- a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
+++ b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftContainerIT.java
@@ -16,19 +16,9 @@
  */
 package org.apache.camel.quarkus.component.openstack.it;
 
-import io.quarkus.test.common.QuarkusTestResource;
-import io.quarkus.test.junit.QuarkusTest;
-import org.junit.jupiter.api.Test;
+import io.quarkus.test.junit.NativeImageTest;
 
-import static io.restassured.RestAssured.post;
-
-@QuarkusTest
-@QuarkusTestResource(OpenStackTestResource.class)
-class OpenstackSwiftObjectTest {
-
-    @Test
-    public void getShouldSucceed() {
-        post("/openstack/swift/objects/getShouldSucceed").then().statusCode(204);
-    }
+@NativeImageTest
+class OpenstackSwiftContainerIT extends OpenstackSwiftContainerTest {
 
 }
diff --git a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftContainerTest.java b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftContainerTest.java
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftContainerTest.java
rename to integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftContainerTest.java
diff --git a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectIT.java
similarity index 67%
copy from extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
copy to integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectIT.java
index 8f2331a..aa76a00 100644
--- a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
+++ b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectIT.java
@@ -16,19 +16,9 @@
  */
 package org.apache.camel.quarkus.component.openstack.it;
 
-import io.quarkus.test.common.QuarkusTestResource;
-import io.quarkus.test.junit.QuarkusTest;
-import org.junit.jupiter.api.Test;
+import io.quarkus.test.junit.NativeImageTest;
 
-import static io.restassured.RestAssured.post;
-
-@QuarkusTest
-@QuarkusTestResource(OpenStackTestResource.class)
-class OpenstackSwiftObjectTest {
-
-    @Test
-    public void getShouldSucceed() {
-        post("/openstack/swift/objects/getShouldSucceed").then().statusCode(204);
-    }
+@NativeImageTest
+class OpenstackSwiftObjectIT extends OpenstackSwiftObjectTest {
 
 }
diff --git a/extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java b/integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
rename to integration-tests/openstack/src/test/java/org/apache/camel/quarkus/component/openstack/it/OpenstackSwiftObjectTest.java
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/cinder/snapshot/volume_snapshots.json b/integration-tests/openstack/src/test/resources/mappings/cinder/snapshot/volume_snapshots.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/cinder/snapshot/volume_snapshots.json
rename to integration-tests/openstack/src/test/resources/mappings/cinder/snapshot/volume_snapshots.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/cinder/volume/createVolume_multiattach.json b/integration-tests/openstack/src/test/resources/mappings/cinder/volume/createVolume_multiattach.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/cinder/volume/createVolume_multiattach.json
rename to integration-tests/openstack/src/test/resources/mappings/cinder/volume/createVolume_multiattach.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/cinder/volume/volume.json b/integration-tests/openstack/src/test/resources/mappings/cinder/volume/volume.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/cinder/volume/volume.json
rename to integration-tests/openstack/src/test/resources/mappings/cinder/volume/volume.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/cinder/volume/volume_delete.json b/integration-tests/openstack/src/test/resources/mappings/cinder/volume/volume_delete.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/cinder/volume/volume_delete.json
rename to integration-tests/openstack/src/test/resources/mappings/cinder/volume/volume_delete.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/cinder/volume/volume_types.json b/integration-tests/openstack/src/test/resources/mappings/cinder/volume/volume_types.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/cinder/volume/volume_types.json
rename to integration-tests/openstack/src/test/resources/mappings/cinder/volume/volume_types.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/cinder/volume/volume_update.json b/integration-tests/openstack/src/test/resources/mappings/cinder/volume/volume_update.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/cinder/volume/volume_update.json
rename to integration-tests/openstack/src/test/resources/mappings/cinder/volume/volume_update.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/cinder/volume/volumes.json b/integration-tests/openstack/src/test/resources/mappings/cinder/volume/volumes.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/cinder/volume/volumes.json
rename to integration-tests/openstack/src/test/resources/mappings/cinder/volume/volumes.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/glance/image.json b/integration-tests/openstack/src/test/resources/mappings/glance/image.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/glance/image.json
rename to integration-tests/openstack/src/test/resources/mappings/glance/image.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/glance/image_delete.json b/integration-tests/openstack/src/test/resources/mappings/glance/image_delete.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/glance/image_delete.json
rename to integration-tests/openstack/src/test/resources/mappings/glance/image_delete.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/glance/image_upload.json b/integration-tests/openstack/src/test/resources/mappings/glance/image_upload.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/glance/image_upload.json
rename to integration-tests/openstack/src/test/resources/mappings/glance/image_upload.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/glance/images.json b/integration-tests/openstack/src/test/resources/mappings/glance/images.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/glance/images.json
rename to integration-tests/openstack/src/test/resources/mappings/glance/images.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/glance/images_detail.json b/integration-tests/openstack/src/test/resources/mappings/glance/images_detail.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/glance/images_detail.json
rename to integration-tests/openstack/src/test/resources/mappings/glance/images_detail.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/authv3_project.json b/integration-tests/openstack/src/test/resources/mappings/keystone/authv3_project.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/authv3_project.json
rename to integration-tests/openstack/src/test/resources/mappings/keystone/authv3_project.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/domains/domains_create_response.json b/integration-tests/openstack/src/test/resources/mappings/keystone/domains/domains_create_response.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/domains/domains_create_response.json
rename to integration-tests/openstack/src/test/resources/mappings/keystone/domains/domains_create_response.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/domains/domains_delete.json b/integration-tests/openstack/src/test/resources/mappings/keystone/domains/domains_delete.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/domains/domains_delete.json
rename to integration-tests/openstack/src/test/resources/mappings/keystone/domains/domains_delete.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/domains/domains_get_byId.json b/integration-tests/openstack/src/test/resources/mappings/keystone/domains/domains_get_byId.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/domains/domains_get_byId.json
rename to integration-tests/openstack/src/test/resources/mappings/keystone/domains/domains_get_byId.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/domains/domains_update_response.json b/integration-tests/openstack/src/test/resources/mappings/keystone/domains/domains_update_response.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/domains/domains_update_response.json
rename to integration-tests/openstack/src/test/resources/mappings/keystone/domains/domains_update_response.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/domains/domains_with_options.json b/integration-tests/openstack/src/test/resources/mappings/keystone/domains/domains_with_options.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/domains/domains_with_options.json
rename to integration-tests/openstack/src/test/resources/mappings/keystone/domains/domains_with_options.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/groups/groups_add_user.json b/integration-tests/openstack/src/test/resources/mappings/keystone/groups/groups_add_user.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/groups/groups_add_user.json
rename to integration-tests/openstack/src/test/resources/mappings/keystone/groups/groups_add_user.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/groups/groups_check_user.json b/integration-tests/openstack/src/test/resources/mappings/keystone/groups/groups_check_user.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/groups/groups_check_user.json
rename to integration-tests/openstack/src/test/resources/mappings/keystone/groups/groups_check_user.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/groups/groups_create_response.json b/integration-tests/openstack/src/test/resources/mappings/keystone/groups/groups_create_response.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/groups/groups_create_response.json
rename to integration-tests/openstack/src/test/resources/mappings/keystone/groups/groups_create_response.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/groups/groups_delete.json b/integration-tests/openstack/src/test/resources/mappings/keystone/groups/groups_delete.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/groups/groups_delete.json
rename to integration-tests/openstack/src/test/resources/mappings/keystone/groups/groups_delete.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/groups/groups_get_byId.json b/integration-tests/openstack/src/test/resources/mappings/keystone/groups/groups_get_byId.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/groups/groups_get_byId.json
rename to integration-tests/openstack/src/test/resources/mappings/keystone/groups/groups_get_byId.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/groups/groups_list.json b/integration-tests/openstack/src/test/resources/mappings/keystone/groups/groups_list.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/groups/groups_list.json
rename to integration-tests/openstack/src/test/resources/mappings/keystone/groups/groups_list.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/groups/groups_remove_user.json b/integration-tests/openstack/src/test/resources/mappings/keystone/groups/groups_remove_user.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/groups/groups_remove_user.json
rename to integration-tests/openstack/src/test/resources/mappings/keystone/groups/groups_remove_user.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/groups/groups_update_response.json b/integration-tests/openstack/src/test/resources/mappings/keystone/groups/groups_update_response.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/groups/groups_update_response.json
rename to integration-tests/openstack/src/test/resources/mappings/keystone/groups/groups_update_response.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/projects/projects_create_response.json b/integration-tests/openstack/src/test/resources/mappings/keystone/projects/projects_create_response.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/projects/projects_create_response.json
rename to integration-tests/openstack/src/test/resources/mappings/keystone/projects/projects_create_response.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/projects/projects_delete.json b/integration-tests/openstack/src/test/resources/mappings/keystone/projects/projects_delete.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/projects/projects_delete.json
rename to integration-tests/openstack/src/test/resources/mappings/keystone/projects/projects_delete.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/projects/projects_get_byId.json b/integration-tests/openstack/src/test/resources/mappings/keystone/projects/projects_get_byId.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/projects/projects_get_byId.json
rename to integration-tests/openstack/src/test/resources/mappings/keystone/projects/projects_get_byId.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/projects/projects_update_response.json b/integration-tests/openstack/src/test/resources/mappings/keystone/projects/projects_update_response.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/projects/projects_update_response.json
rename to integration-tests/openstack/src/test/resources/mappings/keystone/projects/projects_update_response.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/projects/projects_with_options.json b/integration-tests/openstack/src/test/resources/mappings/keystone/projects/projects_with_options.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/projects/projects_with_options.json
rename to integration-tests/openstack/src/test/resources/mappings/keystone/projects/projects_with_options.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/regions/regions_create_response.json b/integration-tests/openstack/src/test/resources/mappings/keystone/regions/regions_create_response.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/regions/regions_create_response.json
rename to integration-tests/openstack/src/test/resources/mappings/keystone/regions/regions_create_response.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/regions/regions_delete.json b/integration-tests/openstack/src/test/resources/mappings/keystone/regions/regions_delete.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/regions/regions_delete.json
rename to integration-tests/openstack/src/test/resources/mappings/keystone/regions/regions_delete.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/regions/regions_get_byId.json b/integration-tests/openstack/src/test/resources/mappings/keystone/regions/regions_get_byId.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/regions/regions_get_byId.json
rename to integration-tests/openstack/src/test/resources/mappings/keystone/regions/regions_get_byId.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/regions/regions_get_nonExistent.json b/integration-tests/openstack/src/test/resources/mappings/keystone/regions/regions_get_nonExistent.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/regions/regions_get_nonExistent.json
rename to integration-tests/openstack/src/test/resources/mappings/keystone/regions/regions_get_nonExistent.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/regions/regions_list.json b/integration-tests/openstack/src/test/resources/mappings/keystone/regions/regions_list.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/regions/regions_list.json
rename to integration-tests/openstack/src/test/resources/mappings/keystone/regions/regions_list.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/regions/regions_update_response.json b/integration-tests/openstack/src/test/resources/mappings/keystone/regions/regions_update_response.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/regions/regions_update_response.json
rename to integration-tests/openstack/src/test/resources/mappings/keystone/regions/regions_update_response.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/users/create_user.json b/integration-tests/openstack/src/test/resources/mappings/keystone/users/create_user.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/users/create_user.json
rename to integration-tests/openstack/src/test/resources/mappings/keystone/users/create_user.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/users/update_user.json b/integration-tests/openstack/src/test/resources/mappings/keystone/users/update_user.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/users/update_user.json
rename to integration-tests/openstack/src/test/resources/mappings/keystone/users/update_user.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/users/user_delete.json b/integration-tests/openstack/src/test/resources/mappings/keystone/users/user_delete.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/users/user_delete.json
rename to integration-tests/openstack/src/test/resources/mappings/keystone/users/user_delete.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/users/user_get_byId.json b/integration-tests/openstack/src/test/resources/mappings/keystone/users/user_get_byId.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/users/user_get_byId.json
rename to integration-tests/openstack/src/test/resources/mappings/keystone/users/user_get_byId.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/users/users.json b/integration-tests/openstack/src/test/resources/mappings/keystone/users/users.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/keystone/users/users.json
rename to integration-tests/openstack/src/test/resources/mappings/keystone/users/users.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/neutron/networks/network.json b/integration-tests/openstack/src/test/resources/mappings/neutron/networks/network.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/neutron/networks/network.json
rename to integration-tests/openstack/src/test/resources/mappings/neutron/networks/network.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/neutron/networks/network_delete.json b/integration-tests/openstack/src/test/resources/mappings/neutron/networks/network_delete.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/neutron/networks/network_delete.json
rename to integration-tests/openstack/src/test/resources/mappings/neutron/networks/network_delete.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/neutron/networks/network_external.json b/integration-tests/openstack/src/test/resources/mappings/neutron/networks/network_external.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/neutron/networks/network_external.json
rename to integration-tests/openstack/src/test/resources/mappings/neutron/networks/network_external.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/neutron/networks/networks_filtered.json b/integration-tests/openstack/src/test/resources/mappings/neutron/networks/networks_filtered.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/neutron/networks/networks_filtered.json
rename to integration-tests/openstack/src/test/resources/mappings/neutron/networks/networks_filtered.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/neutron/ports/port_external.json b/integration-tests/openstack/src/test/resources/mappings/neutron/ports/port_external.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/neutron/ports/port_external.json
rename to integration-tests/openstack/src/test/resources/mappings/neutron/ports/port_external.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/neutron/ports/ports_external.json b/integration-tests/openstack/src/test/resources/mappings/neutron/ports/ports_external.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/neutron/ports/ports_external.json
rename to integration-tests/openstack/src/test/resources/mappings/neutron/ports/ports_external.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/neutron/subnets/subnet_ipv6.json b/integration-tests/openstack/src/test/resources/mappings/neutron/subnets/subnet_ipv6.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/neutron/subnets/subnet_ipv6.json
rename to integration-tests/openstack/src/test/resources/mappings/neutron/subnets/subnet_ipv6.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/nova/flavors/flavor.json b/integration-tests/openstack/src/test/resources/mappings/nova/flavors/flavor.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/nova/flavors/flavor.json
rename to integration-tests/openstack/src/test/resources/mappings/nova/flavors/flavor.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/nova/flavors/flavor_create.json b/integration-tests/openstack/src/test/resources/mappings/nova/flavors/flavor_create.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/nova/flavors/flavor_create.json
rename to integration-tests/openstack/src/test/resources/mappings/nova/flavors/flavor_create.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/nova/flavors/flavors_detailed.json b/integration-tests/openstack/src/test/resources/mappings/nova/flavors/flavors_detailed.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/nova/flavors/flavors_detailed.json
rename to integration-tests/openstack/src/test/resources/mappings/nova/flavors/flavors_detailed.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/nova/servers/server_create.json b/integration-tests/openstack/src/test/resources/mappings/nova/servers/server_create.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/nova/servers/server_create.json
rename to integration-tests/openstack/src/test/resources/mappings/nova/servers/server_create.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/nova/servers/server_snapshot_create.json b/integration-tests/openstack/src/test/resources/mappings/nova/servers/server_snapshot_create.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/nova/servers/server_snapshot_create.json
rename to integration-tests/openstack/src/test/resources/mappings/nova/servers/server_snapshot_create.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/nova/servers/server_wrong_id_get.json b/integration-tests/openstack/src/test/resources/mappings/nova/servers/server_wrong_id_get.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/nova/servers/server_wrong_id_get.json
rename to integration-tests/openstack/src/test/resources/mappings/nova/servers/server_wrong_id_get.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/nova/servers/servers.json b/integration-tests/openstack/src/test/resources/mappings/nova/servers/servers.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/nova/servers/servers.json
rename to integration-tests/openstack/src/test/resources/mappings/nova/servers/servers.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/swift/containers/container_metadata_get.json b/integration-tests/openstack/src/test/resources/mappings/swift/containers/container_metadata_get.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/swift/containers/container_metadata_get.json
rename to integration-tests/openstack/src/test/resources/mappings/swift/containers/container_metadata_get.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/swift/containers/containers.json b/integration-tests/openstack/src/test/resources/mappings/swift/containers/containers.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/swift/containers/containers.json
rename to integration-tests/openstack/src/test/resources/mappings/swift/containers/containers.json
diff --git a/extensions-jvm/openstack/integration-test/src/test/resources/mappings/swift/objects/object_get.json b/integration-tests/openstack/src/test/resources/mappings/swift/objects/object_get.json
similarity index 100%
rename from extensions-jvm/openstack/integration-test/src/test/resources/mappings/swift/objects/object_get.json
rename to integration-tests/openstack/src/test/resources/mappings/swift/objects/object_get.json
diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
index 2fdfafe..cb38bb3 100644
--- a/integration-tests/pom.xml
+++ b/integration-tests/pom.xml
@@ -162,6 +162,7 @@
         <module>oaipmh</module>
         <module>olingo4</module>
         <module>openapi-java</module>
+        <module>openstack</module>
         <module>opentracing</module>
         <module>optaplanner</module>
         <module>paho-mqtt5</module>
diff --git a/tooling/scripts/test-categories.yaml b/tooling/scripts/test-categories.yaml
index cc52a5e..5c9c3ab 100644
--- a/tooling/scripts/test-categories.yaml
+++ b/tooling/scripts/test-categories.yaml
@@ -94,6 +94,7 @@ foundation:
   - kamelet
   - lra
   - micrometer
+  - openstack
   - quartz
   - saga
 xml-json-olingo4: