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

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

commit e62512c1b0cfadb30350f29ba886b3963838e350
Author: Croway <[email protected]>
AuthorDate: Tue Jan 14 13:41:33 2025 +0100

    Add description to test services exposed via camel jbang
---
 .../apache/camel/spi/annotations/InfraService.java |  9 +++
 .../core/commands/infra/InfraBaseCommand.java      | 71 ++++++++++++++++++++++
 .../jbang/core/commands/infra/InfraCommand.java    | 21 +------
 .../dsl/jbang/core/commands/infra/InfraList.java   | 62 ++++++++++---------
 .../dsl/jbang/core/commands/infra/InfraRun.java    | 26 ++------
 .../camel-jbang-main/dist/CamelJBang.java          |  2 +-
 .../src/main/jbang/main/CamelJBang.java            |  2 +-
 test-infra/camel-test-infra-all/pom.xml            |  1 +
 .../resources/META-INF/test-infra-metadata.json    |  2 +-
 .../ArangoDBLocalContainerInfraService.java        |  4 +-
 .../artemis/services/ArtemisAMQPInfraService.java  |  4 +-
 .../artemis/services/ArtemisMQTTInfraService.java  |  4 +-
 .../services/ArtemisPersistentVMInfraService.java  |  4 +-
 .../artemis/services/ArtemisVMInfraService.java    |  4 +-
 .../AWSCloudWatchLocalContainerInfraService.java   |  5 +-
 .../AWSConfigLocalContainerInfraService.java       |  4 +-
 .../AWSDynamodbLocalContainerInfraService.java     |  4 +-
 .../services/AWSEC2LocalContainerInfraService.java |  4 +-
 .../AWSEventBridgeLocalContainerInfraService.java  |  4 +-
 .../services/AWSIAMLocalContainerInfraService.java |  4 +-
 .../services/AWSKMSLocalContainerInfraService.java |  4 +-
 .../AWSKinesisLocalContainerInfraService.java      |  4 +-
 .../AWSLambdaLocalContainerInfraService.java       |  4 +-
 .../services/AWSS3LocalContainerInfraService.java  |  4 +-
 .../services/AWSSNSLocalContainerInfraService.java |  4 +-
 .../services/AWSSQSLocalContainerInfraService.java |  4 +-
 .../services/AWSSTSLocalContainerInfraService.java |  4 +-
 ...WSSecretsManagerLocalContainerInfraService.java |  4 +-
 ...AzureStorageBlobLocalContainerInfraService.java |  5 +-
 ...zureStorageQueueLocalContainerInfraService.java |  5 +-
 .../CassandraLocalContainerInfraService.java       |  4 +-
 .../ChatScriptLocalContainerInfraService.java      |  4 +-
 .../services/ConsulLocalContainerInfraService.java |  4 +-
 .../CouchbaseLocalContainerInfraService.java       |  4 +-
 .../CouchDbLocalContainerInfraService.java         |  4 +-
 .../ElasticSearchLocalContainerInfraService.java   |  4 +-
 .../services/Etcd3LocalContainerInfraService.java  |  4 +-
 .../services/FhirLocalContainerInfraService.java   |  4 +-
 .../services/embedded/FtpEmbeddedInfraService.java |  4 +-
 .../embedded/FtpsEmbeddedInfraService.java         |  4 +-
 .../embedded/SftpEmbeddedInfraService.java         |  4 +-
 .../GooglePubSubLocalContainerInfraService.java    |  4 +-
 .../HashicorpVaultLocalContainerInfraService.java  |  4 +-
 .../services/HazelcastEmbeddedInfraService.java    |  4 +-
 .../hivemq/services/LocalHiveMQInfraService.java   |  4 +-
 .../LocalHiveMQSparkplugTCKInfraService.java       |  4 +-
 .../services/IgniteEmbeddedInfraService.java       |  4 +-
 .../InfinispanLocalContainerInfraService.java      |  4 +-
 .../services/ContainerLocalKafkaInfraService.java  |  4 +-
 .../infra/kafka/services/RedpandaInfraService.java |  4 +-
 .../infra/kafka/services/StrimziInfraService.java  |  4 +-
 .../MicroprofileLRALocalContainerInfraService.java |  6 +-
 .../services/MilvusLocalContainerInfraService.java |  4 +-
 .../services/MinioLocalContainerInfraService.java  |  4 +-
 .../MongoDBLocalContainerInfraService.java         |  4 +-
 .../MosquittoLocalContainerInfraService.java       |  4 +-
 .../services/NatsLocalContainerInfraService.java   |  4 +-
 .../services/OllamaLocalContainerInfraService.java |  4 +-
 .../OpenldapLocalContainerInfraService.java        |  4 +-
 .../PostgresLocalContainerInfraService.java        |  4 +-
 .../services/PulsarLocalContainerInfraService.java |  4 +-
 .../services/QdrantLocalContainerInfraService.java |  4 +-
 .../RabbitMQLocalContainerInfraService.java        |  4 +-
 .../services/RedisLocalContainerInfraService.java  |  4 +-
 .../services/RocketMQContainerInfraService.java    |  4 +-
 .../services/SmbLocalContainerInfraService.java    |  4 +-
 .../services/SolrLocalContainerInfraService.java   |  4 +-
 .../TorchServeLocalContainerInfraService.java      |  4 +-
 .../services/XmppLocalContainerInfraService.java   |  4 +-
 .../ZooKeeperLocalContainerInfraService.java       |  4 +-
 .../CamelTestInfraGenerateMetadataMojo.java        | 11 ++++
 .../apache/camel/spi/annotations/InfraService.java |  9 +++
 72 files changed, 328 insertions(+), 137 deletions(-)

diff --git 
a/core/camel-api/src/generated/java/org/apache/camel/spi/annotations/InfraService.java
 
b/core/camel-api/src/generated/java/org/apache/camel/spi/annotations/InfraService.java
index 354fcce94c4..83fc356ab32 100644
--- 
a/core/camel-api/src/generated/java/org/apache/camel/spi/annotations/InfraService.java
+++ 
b/core/camel-api/src/generated/java/org/apache/camel/spi/annotations/InfraService.java
@@ -42,6 +42,15 @@ public @interface InfraService {
      */
     Class service();
 
+    /**
+     * Returns a description of this Service.
+     *
+     * This is used for documentation and tooling.
+     *
+     * @return
+     */
+    String description() default "";
+
     /**
      * List of names that can be used to run the service
      *
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraBaseCommand.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraBaseCommand.java
new file mode 100644
index 00000000000..46622f74261
--- /dev/null
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraBaseCommand.java
@@ -0,0 +1,71 @@
+/*
+ * 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.dsl.jbang.core.commands.infra;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import java.util.List;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+import org.apache.camel.dsl.jbang.core.commands.CamelCommand;
+import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
+import picocli.CommandLine;
+
+public abstract class InfraBaseCommand extends CamelCommand {
+
+    protected final ObjectMapper jsonMapper = new ObjectMapper();
+
+    @CommandLine.Option(names = { "--json" },
+                        description = "Output in JSON Format")
+    boolean jsonOutput;
+
+    public InfraBaseCommand(CamelJBangMain main) {
+        super(main);
+
+        jsonMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
+        jsonMapper.registerModule(new JavaTimeModule());
+        jsonMapper.registerModule(new Jdk8Module());
+        jsonMapper.enable(SerializationFeature.INDENT_OUTPUT);
+    }
+
+    protected List<TestInfraService> getMetadata() throws IOException {
+        List<TestInfraService> metadata;
+
+        try (InputStream is
+                = 
this.getClass().getClassLoader().getResourceAsStream("META-INF/test-infra-metadata.json"))
 {
+            String json = new String(is.readAllBytes(), 
StandardCharsets.UTF_8);
+
+            metadata = jsonMapper.readValue(json, new 
TypeReference<List<TestInfraService>>() {
+            });
+        }
+
+        return metadata;
+    }
+
+    record TestInfraService(
+            String service,
+            String implementation,
+            String description,
+            List<String> alias,
+            List<String> aliasImplementation) {
+    }
+}
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraCommand.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraCommand.java
index 9369d9a4a76..47ceaa5527d 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraCommand.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraCommand.java
@@ -16,28 +16,12 @@
  */
 package org.apache.camel.dsl.jbang.core.commands.infra;
 
-import java.util.List;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
-import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
-import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
-import org.apache.camel.dsl.jbang.core.commands.CamelCommand;
 import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
 import picocli.CommandLine;
 
 @CommandLine.Command(name = "infra",
                      description = "List and Run external services for testing 
and prototyping")
-public class InfraCommand extends CamelCommand {
-
-    static final ObjectMapper JSON_MAPPER = new ObjectMapper();
-
-    {
-        JSON_MAPPER.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
-        JSON_MAPPER.registerModule(new JavaTimeModule());
-        JSON_MAPPER.registerModule(new Jdk8Module());
-        JSON_MAPPER.enable(SerializationFeature.INDENT_OUTPUT);
-    }
+public class InfraCommand extends InfraBaseCommand {
 
     public InfraCommand(CamelJBangMain main) {
         super(main);
@@ -49,7 +33,4 @@ public class InfraCommand extends CamelCommand {
         new CommandLine(new InfraList(getMain())).execute();
         return 0;
     }
-
-    record TestInfraService(String service, String implementation, 
List<String> alias, List<String> aliasImplementation) {
-    }
 }
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraList.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraList.java
index e73a3ede419..fa5ec999237 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraList.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraList.java
@@ -16,8 +16,6 @@
  */
 package org.apache.camel.dsl.jbang.core.commands.infra;
 
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -27,22 +25,16 @@ import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
-import com.fasterxml.jackson.core.type.TypeReference;
 import com.github.freva.asciitable.AsciiTable;
 import com.github.freva.asciitable.Column;
 import com.github.freva.asciitable.HorizontalAlign;
-import org.apache.camel.dsl.jbang.core.commands.CamelCommand;
 import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
 import org.apache.camel.util.json.Jsoner;
 import picocli.CommandLine;
 
 @CommandLine.Command(name = "list", description = "Displays available external 
services", sortOptions = false,
                      showDefaultValues = true)
-public class InfraList extends CamelCommand {
-
-    @CommandLine.Option(names = { "--json" },
-                        description = "Output in JSON Format")
-    boolean jsonOutput;
+public class InfraList extends InfraBaseCommand {
 
     public InfraList(CamelJBangMain main) {
         super(main);
@@ -50,38 +42,31 @@ public class InfraList extends CamelCommand {
 
     @Override
     public Integer doCall() throws Exception {
-        Map<String, Set<String>> services = new HashMap<>();
-
-        List<InfraCommand.TestInfraService> metadata;
-
-        try (InputStream is
-                = 
this.getClass().getClassLoader().getResourceAsStream("META-INF/test-infra-metadata.json"))
 {
-            String json = new String(is.readAllBytes(), 
StandardCharsets.UTF_8);
+        Map<String, InfraServiceAlias> services = new HashMap<>();
 
-            metadata = InfraCommand.JSON_MAPPER.readValue(json, new 
TypeReference<List<InfraCommand.TestInfraService>>() {
-            });
-        }
+        List<TestInfraService> metadata = getMetadata();
 
         List<Row> rows = new ArrayList<>(metadata.size());
 
-        for (InfraCommand.TestInfraService service : metadata) {
+        for (TestInfraService service : metadata) {
             for (String alias : service.alias()) {
                 if (!services.containsKey(alias)) {
-                    services.put(alias, new HashSet<>());
+                    services.put(alias, new 
InfraServiceAlias(service.description()));
                 }
 
                 if (service.aliasImplementation() != null) {
-                    for (String aliasImplementation : 
service.aliasImplementation()) {
-                        services.get(alias).add(aliasImplementation);
-                    }
+                    
services.get(alias).getAliasImplementation().addAll(service.aliasImplementation());
                 }
             }
         }
 
         int width = 0;
-        for (Map.Entry<String, Set<String>> entry : services.entrySet()) {
+        for (Map.Entry<String, InfraServiceAlias> entry : services.entrySet()) 
{
             width = Math.max(width, entry.getKey().length());
-            rows.add(new Row(entry.getKey(), String.join(", ", 
entry.getValue())));
+            rows.add(new Row(
+                    entry.getKey(),
+                    String.join(", ", 
entry.getValue().getAliasImplementation()),
+                    entry.getValue().getDescription()));
         }
 
         if (jsonOutput) {
@@ -89,19 +74,38 @@ public class InfraList extends CamelCommand {
                     Jsoner.serialize(
                             rows.stream().map(row -> Map.of(
                                     "alias", row.alias(),
-                                    "aliasImplementation", 
row.aliasImplementation()))
+                                    "aliasImplementation", 
row.aliasImplementation(),
+                                    "description", row.description() == null ? 
"" : row.description()))
                                     .collect(Collectors.toList())));
         } else {
             printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
                     new Column().header("ALIAS").minWidth(width + 
5).dataAlign(HorizontalAlign.LEFT)
                             .with(r -> r.alias()),
-                    new 
Column().header("IMPLEMENTATION").dataAlign(HorizontalAlign.LEFT).with(r -> 
r.aliasImplementation()))));
+                    new 
Column().header("IMPLEMENTATION").dataAlign(HorizontalAlign.LEFT).with(r -> 
r.aliasImplementation()),
+                    new 
Column().header("DESCRIPTION").dataAlign(HorizontalAlign.LEFT).with(r -> 
r.description()))));
         }
 
         return 0;
     }
 
-    record Row(String alias, String aliasImplementation) {
+    record Row(String alias, String aliasImplementation, String description) {
+    }
+
+    private class InfraServiceAlias {
+        private final String description;
+        private final Set<String> aliasImplementation = new HashSet<>();
+
+        public InfraServiceAlias(String description) {
+            this.description = description;
+        }
+
+        public String getDescription() {
+            return description;
+        }
+
+        public Set<String> getAliasImplementation() {
+            return aliasImplementation;
+        }
     }
 
 }
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraRun.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraRun.java
index e201f86e8ea..f80321d9e23 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraRun.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraRun.java
@@ -16,31 +16,23 @@
  */
 package org.apache.camel.dsl.jbang.core.commands.infra;
 
-import java.io.InputStream;
 import java.lang.reflect.Method;
-import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Scanner;
 
-import com.fasterxml.jackson.core.type.TypeReference;
 import com.google.common.base.Strings;
-import org.apache.camel.dsl.jbang.core.commands.CamelCommand;
 import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
 import org.apache.camel.test.infra.common.services.InfrastructureService;
 import picocli.CommandLine;
 
 @CommandLine.Command(name = "run",
                      description = "Run an external service")
-public class InfraRun extends CamelCommand {
+public class InfraRun extends InfraBaseCommand {
 
     @CommandLine.Parameters(description = "Service name", arity = "1")
     private List<String> serviceName;
 
-    @CommandLine.Option(names = { "--json" },
-                        description = "Output in JSON Format")
-    boolean jsonOutput;
-
     public InfraRun(CamelJBangMain main) {
         super(main);
     }
@@ -60,19 +52,9 @@ public class InfraRun extends CamelCommand {
     }
 
     private void run(String testService, String testServiceImplementation) 
throws Exception {
-        List<InfraCommand.TestInfraService> metadata;
-
-        try (InputStream is
-                = 
this.getClass().getClassLoader().getResourceAsStream("META-INF/test-infra-metadata.json"))
 {
-            String json = new String(is.readAllBytes(), 
StandardCharsets.UTF_8);
-
-            metadata = InfraCommand.JSON_MAPPER.readValue(json, new 
TypeReference<List<InfraCommand.TestInfraService>>() {
-            });
-        }
-
-        List<InfraCommand.TestInfraService> services = metadata;
+        List<TestInfraService> services = getMetadata();
 
-        InfraCommand.TestInfraService testInfraService = services
+        TestInfraService testInfraService = services
                 .stream()
                 .filter(service -> {
                     if (testServiceImplementation != null && 
!testServiceImplementation.isEmpty()
@@ -134,7 +116,7 @@ public class InfraRun extends CamelCommand {
             }
         }
 
-        
printer().println(InfraCommand.JSON_MAPPER.writeValueAsString(properties));
+        printer().println(jsonMapper.writeValueAsString(properties));
 
         if (!jsonOutput) {
             printer().println("To stop the execution press q");
diff --git a/dsl/camel-jbang/camel-jbang-main/dist/CamelJBang.java 
b/dsl/camel-jbang/camel-jbang-main/dist/CamelJBang.java
index 3639949964a..c560e769b39 100755
--- a/dsl/camel-jbang/camel-jbang-main/dist/CamelJBang.java
+++ b/dsl/camel-jbang/camel-jbang-main/dist/CamelJBang.java
@@ -33,7 +33,7 @@ import 
org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
 public class CamelJBang {
 
     public static void main(String... args) {
-        CamelJBangMain.run(args);
+        CamelJBangMain.run("infra", "run", "kafka");
     }
 
 }
diff --git 
a/dsl/camel-jbang/camel-jbang-main/src/main/jbang/main/CamelJBang.java 
b/dsl/camel-jbang/camel-jbang-main/src/main/jbang/main/CamelJBang.java
index 3639949964a..c560e769b39 100755
--- a/dsl/camel-jbang/camel-jbang-main/src/main/jbang/main/CamelJBang.java
+++ b/dsl/camel-jbang/camel-jbang-main/src/main/jbang/main/CamelJBang.java
@@ -33,7 +33,7 @@ import 
org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
 public class CamelJBang {
 
     public static void main(String... args) {
-        CamelJBangMain.run(args);
+        CamelJBangMain.run("infra", "run", "kafka");
     }
 
 }
diff --git a/test-infra/camel-test-infra-all/pom.xml 
b/test-infra/camel-test-infra-all/pom.xml
index 22ec93474db..d87898f777e 100644
--- a/test-infra/camel-test-infra-all/pom.xml
+++ b/test-infra/camel-test-infra-all/pom.xml
@@ -28,6 +28,7 @@
     </parent>
 
     <artifactId>camel-test-infra-all</artifactId>
+    <name>Camel :: Test Infra :: Collection of all test services</name>
 
     <dependencies>
         <dependency>
diff --git 
a/test-infra/camel-test-infra-all/src/generated/resources/META-INF/test-infra-metadata.json
 
b/test-infra/camel-test-infra-all/src/generated/resources/META-INF/test-infra-metadata.json
index ff2c7f144fe..a4e3357fa78 100644
--- 
a/test-infra/camel-test-infra-all/src/generated/resources/META-INF/test-infra-metadata.json
+++ 
b/test-infra/camel-test-infra-all/src/generated/resources/META-INF/test-infra-metadata.json
@@ -1 +1 @@
-[{"service":"org.apache.camel.test.infra.milvus.services.MilvusInfraService","implementation":"org.apache.camel.test.infra.milvus.services.MilvusLocalContainerInfraService","alias":["milvus"],"aliasImplementation":[]},{"service":"org.apache.camel.test.infra.aws.common.services.AWSInfraService","implementation":"org.apache.camel.test.infra.aws2.services.AWSKinesisLocalContainerInfraService","alias":["kinesis","aws-kinesis"],"aliasImplementation":[]},{"service":"org.apache.camel.test.infra
 [...]
\ No newline at end of file
+[{"service":"org.apache.camel.test.infra.milvus.services.MilvusInfraService","description":"Milvus
 Vector 
Database","implementation":"org.apache.camel.test.infra.milvus.services.MilvusLocalContainerInfraService","alias":["milvus"],"aliasImplementation":[]},{"service":"org.apache.camel.test.infra.aws.common.services.AWSInfraService","description":"Local
 AWS Services with 
LocalStack","implementation":"org.apache.camel.test.infra.aws2.services.AWSKinesisLocalContainerInfraService","alias":[
 [...]
\ No newline at end of file
diff --git 
a/test-infra/camel-test-infra-arangodb/src/main/java/org/apache/camel/test/infra/arangodb/services/ArangoDBLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-arangodb/src/main/java/org/apache/camel/test/infra/arangodb/services/ArangoDBLocalContainerInfraService.java
index 5ba269b5df5..a62ed60c47b 100644
--- 
a/test-infra/camel-test-infra-arangodb/src/main/java/org/apache/camel/test/infra/arangodb/services/ArangoDBLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-arangodb/src/main/java/org/apache/camel/test/infra/arangodb/services/ArangoDBLocalContainerInfraService.java
@@ -24,7 +24,9 @@ import 
org.apache.camel.test.infra.common.services.ContainerService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@InfraService(service = ArangoDBInfraService.class, serviceAlias = "arangodb")
+@InfraService(service = ArangoDBInfraService.class,
+              description = "ArangoDB is a multi-model database for 
high-performance applications.",
+              serviceAlias = "arangodb")
 public class ArangoDBLocalContainerInfraService implements 
ArangoDBInfraService, ContainerService<ArangoDbContainer> {
     private static final Logger LOG = 
LoggerFactory.getLogger(ArangoDBLocalContainerInfraService.class);
 
diff --git 
a/test-infra/camel-test-infra-artemis/src/main/java/org/apache/camel/test/infra/artemis/services/ArtemisAMQPInfraService.java
 
b/test-infra/camel-test-infra-artemis/src/main/java/org/apache/camel/test/infra/artemis/services/ArtemisAMQPInfraService.java
index fbdd20cc3f6..9cb57be143c 100644
--- 
a/test-infra/camel-test-infra-artemis/src/main/java/org/apache/camel/test/infra/artemis/services/ArtemisAMQPInfraService.java
+++ 
b/test-infra/camel-test-infra-artemis/src/main/java/org/apache/camel/test/infra/artemis/services/ArtemisAMQPInfraService.java
@@ -33,7 +33,9 @@ import org.apache.camel.spi.annotations.InfraService;
 import org.apache.camel.test.infra.artemis.common.ArtemisProperties;
 import org.apache.camel.test.infra.artemis.common.ArtemisRunException;
 
-@InfraService(service = ArtemisInfraService.class, serviceAlias = "artemis", 
serviceImplementationAlias = "amqp")
+@InfraService(service = ArtemisInfraService.class,
+              description = "Apache Artemis is an open source message broker",
+              serviceAlias = "artemis", serviceImplementationAlias = "amqp")
 public class ArtemisAMQPInfraService extends AbstractArtemisEmbeddedService {
 
     private String brokerURL;
diff --git 
a/test-infra/camel-test-infra-artemis/src/main/java/org/apache/camel/test/infra/artemis/services/ArtemisMQTTInfraService.java
 
b/test-infra/camel-test-infra-artemis/src/main/java/org/apache/camel/test/infra/artemis/services/ArtemisMQTTInfraService.java
index 05a6aff6327..458b91ec011 100644
--- 
a/test-infra/camel-test-infra-artemis/src/main/java/org/apache/camel/test/infra/artemis/services/ArtemisMQTTInfraService.java
+++ 
b/test-infra/camel-test-infra-artemis/src/main/java/org/apache/camel/test/infra/artemis/services/ArtemisMQTTInfraService.java
@@ -22,7 +22,9 @@ import 
org.apache.activemq.artemis.core.settings.impl.AddressSettings;
 import org.apache.camel.spi.annotations.InfraService;
 import org.apache.camel.test.infra.artemis.common.ArtemisRunException;
 
-@InfraService(service = ArtemisInfraService.class, serviceAlias = "artemis", 
serviceImplementationAlias = "mqtt")
+@InfraService(service = ArtemisInfraService.class,
+              description = "Apache Artemis is an open source message broker",
+              serviceAlias = "artemis", serviceImplementationAlias = "mqtt")
 public class ArtemisMQTTInfraService extends AbstractArtemisEmbeddedService {
 
     private String brokerURL;
diff --git 
a/test-infra/camel-test-infra-artemis/src/main/java/org/apache/camel/test/infra/artemis/services/ArtemisPersistentVMInfraService.java
 
b/test-infra/camel-test-infra-artemis/src/main/java/org/apache/camel/test/infra/artemis/services/ArtemisPersistentVMInfraService.java
index bc2b65721c0..eba181205d5 100644
--- 
a/test-infra/camel-test-infra-artemis/src/main/java/org/apache/camel/test/infra/artemis/services/ArtemisPersistentVMInfraService.java
+++ 
b/test-infra/camel-test-infra-artemis/src/main/java/org/apache/camel/test/infra/artemis/services/ArtemisPersistentVMInfraService.java
@@ -24,7 +24,9 @@ import 
org.apache.activemq.artemis.core.settings.impl.AddressSettings;
 import org.apache.camel.spi.annotations.InfraService;
 import org.apache.camel.test.infra.artemis.common.ArtemisRunException;
 
-@InfraService(service = ArtemisInfraService.class, serviceAlias = "artemis", 
serviceImplementationAlias = "persistent")
+@InfraService(service = ArtemisInfraService.class,
+              description = "Apache Artemis is an open source message broker",
+              serviceAlias = "artemis", serviceImplementationAlias = 
"persistent")
 public class ArtemisPersistentVMInfraService extends 
AbstractArtemisEmbeddedService {
 
     private String brokerURL;
diff --git 
a/test-infra/camel-test-infra-artemis/src/main/java/org/apache/camel/test/infra/artemis/services/ArtemisVMInfraService.java
 
b/test-infra/camel-test-infra-artemis/src/main/java/org/apache/camel/test/infra/artemis/services/ArtemisVMInfraService.java
index e020aec6cd7..2bbe09d4832 100644
--- 
a/test-infra/camel-test-infra-artemis/src/main/java/org/apache/camel/test/infra/artemis/services/ArtemisVMInfraService.java
+++ 
b/test-infra/camel-test-infra-artemis/src/main/java/org/apache/camel/test/infra/artemis/services/ArtemisVMInfraService.java
@@ -25,7 +25,9 @@ import 
org.apache.camel.test.infra.artemis.common.ArtemisRunException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@InfraService(service = ArtemisInfraService.class, serviceAlias = "artemis")
+@InfraService(service = ArtemisInfraService.class,
+              description = "Apache Artemis is an open source message broker",
+              serviceAlias = "artemis")
 public class ArtemisVMInfraService extends AbstractArtemisEmbeddedService {
     private static final Logger LOG = 
LoggerFactory.getLogger(ArtemisVMInfraService.class);
 
diff --git 
a/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSCloudWatchLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSCloudWatchLocalContainerInfraService.java
index 6378345af99..83d2d5b0b16 100644
--- 
a/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSCloudWatchLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSCloudWatchLocalContainerInfraService.java
@@ -20,7 +20,10 @@ package org.apache.camel.test.infra.aws2.services;
 import org.apache.camel.spi.annotations.InfraService;
 import org.apache.camel.test.infra.aws.common.services.AWSInfraService;
 
-@InfraService(service = AWSInfraService.class, serviceAlias = { "cloud-watch", 
"aws-cloud-watch" })
+@InfraService(
+              service = AWSInfraService.class,
+              description = "Local AWS Services with LocalStack",
+              serviceAlias = "aws", serviceImplementationAlias = "cloud-watch")
 public class AWSCloudWatchLocalContainerInfraService extends 
AWSLocalContainerInfraService {
     public AWSCloudWatchLocalContainerInfraService() {
         super(Service.CLOUD_WATCH);
diff --git 
a/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSConfigLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSConfigLocalContainerInfraService.java
index 444d6a45b3e..04ff0b3df58 100644
--- 
a/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSConfigLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSConfigLocalContainerInfraService.java
@@ -20,7 +20,9 @@ package org.apache.camel.test.infra.aws2.services;
 import org.apache.camel.spi.annotations.InfraService;
 import org.apache.camel.test.infra.aws.common.services.AWSInfraService;
 
-@InfraService(service = AWSInfraService.class, serviceAlias = { "aws-config" })
+@InfraService(service = AWSInfraService.class,
+              description = "Local AWS Services with LocalStack",
+              serviceAlias = "aws", serviceImplementationAlias = "config")
 public class AWSConfigLocalContainerInfraService extends 
AWSLocalContainerInfraService {
     public AWSConfigLocalContainerInfraService() {
         super(Service.CONFIG);
diff --git 
a/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSDynamodbLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSDynamodbLocalContainerInfraService.java
index db80b28dc7a..004b6b43198 100644
--- 
a/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSDynamodbLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSDynamodbLocalContainerInfraService.java
@@ -20,7 +20,9 @@ package org.apache.camel.test.infra.aws2.services;
 import org.apache.camel.spi.annotations.InfraService;
 import org.apache.camel.test.infra.aws.common.services.AWSInfraService;
 
-@InfraService(service = AWSInfraService.class, serviceAlias = { "dynamodb", 
"aws-dynamo-db", "dynamo-db" })
+@InfraService(service = AWSInfraService.class,
+              description = "Local AWS Services with LocalStack",
+              serviceAlias = "aws", serviceImplementationAlias = { "dynamodb", 
"dynamo-db" })
 public class AWSDynamodbLocalContainerInfraService extends 
AWSLocalContainerInfraService {
 
     public AWSDynamodbLocalContainerInfraService() {
diff --git 
a/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSEC2LocalContainerInfraService.java
 
b/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSEC2LocalContainerInfraService.java
index 5a6bae4c830..64921fe6a49 100644
--- 
a/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSEC2LocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSEC2LocalContainerInfraService.java
@@ -20,7 +20,9 @@ package org.apache.camel.test.infra.aws2.services;
 import org.apache.camel.spi.annotations.InfraService;
 import org.apache.camel.test.infra.aws.common.services.AWSInfraService;
 
-@InfraService(service = AWSInfraService.class, serviceAlias = { "ec2", 
"aws-ec2" })
+@InfraService(service = AWSInfraService.class,
+              description = "Local AWS Services with LocalStack",
+              serviceAlias = "aws", serviceImplementationAlias = "ec2")
 public class AWSEC2LocalContainerInfraService extends 
AWSLocalContainerInfraService {
     public AWSEC2LocalContainerInfraService() {
         super(Service.EC2);
diff --git 
a/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSEventBridgeLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSEventBridgeLocalContainerInfraService.java
index 9a294ec67e2..1958e9f9f32 100644
--- 
a/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSEventBridgeLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSEventBridgeLocalContainerInfraService.java
@@ -20,7 +20,9 @@ package org.apache.camel.test.infra.aws2.services;
 import org.apache.camel.spi.annotations.InfraService;
 import org.apache.camel.test.infra.aws.common.services.AWSInfraService;
 
-@InfraService(service = AWSInfraService.class, serviceAlias = { 
"event-bridge", "aws-event-bridge" })
+@InfraService(service = AWSInfraService.class,
+              description = "Local AWS Services with LocalStack",
+              serviceAlias = "aws", serviceImplementationAlias = 
"event-bridge")
 public class AWSEventBridgeLocalContainerInfraService extends 
AWSLocalContainerInfraService {
 
     public AWSEventBridgeLocalContainerInfraService() {
diff --git 
a/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSIAMLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSIAMLocalContainerInfraService.java
index aa76aa0aeff..34c54d2855a 100644
--- 
a/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSIAMLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSIAMLocalContainerInfraService.java
@@ -19,7 +19,9 @@ package org.apache.camel.test.infra.aws2.services;
 import org.apache.camel.spi.annotations.InfraService;
 import org.apache.camel.test.infra.aws.common.services.AWSInfraService;
 
-@InfraService(service = AWSInfraService.class, serviceAlias = { "aws-iam" })
+@InfraService(service = AWSInfraService.class,
+              description = "Local AWS Services with LocalStack",
+              serviceAlias = "aws", serviceImplementationAlias = "iam")
 public class AWSIAMLocalContainerInfraService extends 
AWSLocalContainerInfraService {
     public AWSIAMLocalContainerInfraService() {
         super(Service.IAM);
diff --git 
a/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSKMSLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSKMSLocalContainerInfraService.java
index 492a2c50bc7..eaeb5e47ad6 100644
--- 
a/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSKMSLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSKMSLocalContainerInfraService.java
@@ -20,7 +20,9 @@ package org.apache.camel.test.infra.aws2.services;
 import org.apache.camel.spi.annotations.InfraService;
 import org.apache.camel.test.infra.aws.common.services.AWSInfraService;
 
-@InfraService(service = AWSInfraService.class, serviceAlias = { "aws-kms" })
+@InfraService(service = AWSInfraService.class,
+              description = "Local AWS Services with LocalStack",
+              serviceAlias = "aws", serviceImplementationAlias = "kms")
 public class AWSKMSLocalContainerInfraService extends 
AWSLocalContainerInfraService {
     public AWSKMSLocalContainerInfraService() {
         super(Service.KMS);
diff --git 
a/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSKinesisLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSKinesisLocalContainerInfraService.java
index e46872181e5..eb490688582 100644
--- 
a/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSKinesisLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSKinesisLocalContainerInfraService.java
@@ -23,7 +23,9 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import software.amazon.awssdk.core.SdkSystemSetting;
 
-@InfraService(service = AWSInfraService.class, serviceAlias = { "kinesis", 
"aws-kinesis" })
+@InfraService(service = AWSInfraService.class,
+              description = "Local AWS Services with LocalStack",
+              serviceAlias = "aws", serviceImplementationAlias = "kinesis")
 public class AWSKinesisLocalContainerInfraService extends 
AWSLocalContainerInfraService {
     private static final Logger LOG = 
LoggerFactory.getLogger(AWSKinesisLocalContainerInfraService.class);
 
diff --git 
a/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSLambdaLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSLambdaLocalContainerInfraService.java
index 69feb90e07b..d5fcfb836ec 100644
--- 
a/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSLambdaLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSLambdaLocalContainerInfraService.java
@@ -20,7 +20,9 @@ package org.apache.camel.test.infra.aws2.services;
 import org.apache.camel.spi.annotations.InfraService;
 import org.apache.camel.test.infra.aws.common.services.AWSInfraService;
 
-@InfraService(service = AWSInfraService.class, serviceAlias = { "lambda", 
"aws-lambda" })
+@InfraService(service = AWSInfraService.class,
+              description = "Local AWS Services with LocalStack",
+              serviceAlias = "aws", serviceImplementationAlias = "lambda")
 public class AWSLambdaLocalContainerInfraService extends 
AWSLocalContainerInfraService {
     public AWSLambdaLocalContainerInfraService() {
         super(Service.LAMBDA);
diff --git 
a/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSS3LocalContainerInfraService.java
 
b/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSS3LocalContainerInfraService.java
index c7aa0c262b9..51fa3a3a02e 100644
--- 
a/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSS3LocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSS3LocalContainerInfraService.java
@@ -22,7 +22,9 @@ import 
org.apache.camel.test.infra.aws.common.services.AWSInfraService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@InfraService(service = AWSInfraService.class, serviceAlias = { "s3", "aws-s3" 
})
+@InfraService(service = AWSInfraService.class,
+              description = "Local AWS Services with LocalStack",
+              serviceAlias = "aws", serviceImplementationAlias = "s3")
 public class AWSS3LocalContainerInfraService extends 
AWSLocalContainerInfraService {
     private static final Logger LOG = 
LoggerFactory.getLogger(AWSS3LocalContainerInfraService.class);
 
diff --git 
a/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSSNSLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSSNSLocalContainerInfraService.java
index 34bfc4014ea..d859dce3aaf 100644
--- 
a/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSSNSLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSSNSLocalContainerInfraService.java
@@ -20,7 +20,9 @@ package org.apache.camel.test.infra.aws2.services;
 import org.apache.camel.spi.annotations.InfraService;
 import org.apache.camel.test.infra.aws.common.services.AWSInfraService;
 
-@InfraService(service = AWSInfraService.class, serviceAlias = { "aws-sns" })
+@InfraService(service = AWSInfraService.class,
+              description = "Local AWS Services with LocalStack",
+              serviceAlias = "aws", serviceImplementationAlias = "sns")
 public class AWSSNSLocalContainerInfraService extends 
AWSLocalContainerInfraService {
 
     public AWSSNSLocalContainerInfraService() {
diff --git 
a/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSSQSLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSSQSLocalContainerInfraService.java
index 70d54ea9238..67c93e6a50d 100644
--- 
a/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSSQSLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSSQSLocalContainerInfraService.java
@@ -20,7 +20,9 @@ package org.apache.camel.test.infra.aws2.services;
 import org.apache.camel.spi.annotations.InfraService;
 import org.apache.camel.test.infra.aws.common.services.AWSInfraService;
 
-@InfraService(service = AWSInfraService.class, serviceAlias = { "aws-sqs" })
+@InfraService(service = AWSInfraService.class,
+              description = "Local AWS Services with LocalStack",
+              serviceAlias = "aws", serviceImplementationAlias = "sqs")
 public class AWSSQSLocalContainerInfraService extends 
AWSLocalContainerInfraService {
 
     public AWSSQSLocalContainerInfraService() {
diff --git 
a/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSSTSLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSSTSLocalContainerInfraService.java
index 4ad73162ce9..85f9acdff1c 100644
--- 
a/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSSTSLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSSTSLocalContainerInfraService.java
@@ -20,7 +20,9 @@ package org.apache.camel.test.infra.aws2.services;
 import org.apache.camel.spi.annotations.InfraService;
 import org.apache.camel.test.infra.aws.common.services.AWSInfraService;
 
-@InfraService(service = AWSInfraService.class, serviceAlias = { "aws-sts" })
+@InfraService(service = AWSInfraService.class,
+              description = "Local AWS Services with LocalStack",
+              serviceAlias = "aws", serviceImplementationAlias = "sts")
 public class AWSSTSLocalContainerInfraService extends 
AWSLocalContainerInfraService {
     public AWSSTSLocalContainerInfraService() {
         super(Service.STS);
diff --git 
a/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSSecretsManagerLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSSecretsManagerLocalContainerInfraService.java
index a76fb015f74..bebc22991a9 100644
--- 
a/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSSecretsManagerLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-aws-v2/src/main/java/org/apache/camel/test/infra/aws2/services/AWSSecretsManagerLocalContainerInfraService.java
@@ -20,7 +20,9 @@ package org.apache.camel.test.infra.aws2.services;
 import org.apache.camel.spi.annotations.InfraService;
 import org.apache.camel.test.infra.aws.common.services.AWSInfraService;
 
-@InfraService(service = AWSInfraService.class, serviceAlias = { 
"aws-secrets-manager" })
+@InfraService(service = AWSInfraService.class,
+              description = "Local AWS Services with LocalStack",
+              serviceAlias = "aws", serviceImplementationAlias = 
"secrets-manager")
 public class AWSSecretsManagerLocalContainerInfraService extends 
AWSLocalContainerInfraService {
 
     public AWSSecretsManagerLocalContainerInfraService() {
diff --git 
a/test-infra/camel-test-infra-azure-storage-blob/src/main/java/org/apache/camel/test/infra/azure/storage/blob/services/AzureStorageBlobLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-azure-storage-blob/src/main/java/org/apache/camel/test/infra/azure/storage/blob/services/AzureStorageBlobLocalContainerInfraService.java
index 8e0152f0471..42f077c7773 100644
--- 
a/test-infra/camel-test-infra-azure-storage-blob/src/main/java/org/apache/camel/test/infra/azure/storage/blob/services/AzureStorageBlobLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-azure-storage-blob/src/main/java/org/apache/camel/test/infra/azure/storage/blob/services/AzureStorageBlobLocalContainerInfraService.java
@@ -24,8 +24,9 @@ import 
org.apache.camel.test.infra.azure.common.services.AzureInfraService;
 import org.apache.camel.test.infra.azure.common.services.AzureServices;
 import 
org.apache.camel.test.infra.azure.common.services.AzureStorageInfraService;
 
-@InfraService(service = AzureInfraService.class, serviceAlias = { 
"azure-storage-blob", "azure" },
-              serviceImplementationAlias = "storage-blob")
+@InfraService(service = AzureInfraService.class,
+              description = "Local Azure services with Azurite",
+              serviceAlias = "azure", serviceImplementationAlias = 
"storage-blob")
 public class AzureStorageBlobLocalContainerInfraService extends 
AzureStorageInfraService {
 
     @Override
diff --git 
a/test-infra/camel-test-infra-azure-storage-queue/src/main/java/org/apache/camel/test/infra/azure/storage/queue/services/AzureStorageQueueLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-azure-storage-queue/src/main/java/org/apache/camel/test/infra/azure/storage/queue/services/AzureStorageQueueLocalContainerInfraService.java
index 61d7f3f48de..49d1c206039 100644
--- 
a/test-infra/camel-test-infra-azure-storage-queue/src/main/java/org/apache/camel/test/infra/azure/storage/queue/services/AzureStorageQueueLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-azure-storage-queue/src/main/java/org/apache/camel/test/infra/azure/storage/queue/services/AzureStorageQueueLocalContainerInfraService.java
@@ -24,8 +24,9 @@ import 
org.apache.camel.test.infra.azure.common.services.AzureInfraService;
 import org.apache.camel.test.infra.azure.common.services.AzureServices;
 import 
org.apache.camel.test.infra.azure.common.services.AzureStorageInfraService;
 
-@InfraService(service = AzureInfraService.class, serviceAlias = { 
"azure-storage-queue", "azure" },
-              serviceImplementationAlias = "storage-queue")
+@InfraService(service = AzureInfraService.class,
+              description = "Local Azure services with Azurite",
+              serviceAlias = "azure", serviceImplementationAlias = 
"storage-queue")
 public class AzureStorageQueueLocalContainerInfraService extends 
AzureStorageInfraService {
 
     @Override
diff --git 
a/test-infra/camel-test-infra-cassandra/src/main/java/org/apache/camel/test/infra/cassandra/services/CassandraLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-cassandra/src/main/java/org/apache/camel/test/infra/cassandra/services/CassandraLocalContainerInfraService.java
index 0f881ef8b27..eaa87960ec8 100644
--- 
a/test-infra/camel-test-infra-cassandra/src/main/java/org/apache/camel/test/infra/cassandra/services/CassandraLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-cassandra/src/main/java/org/apache/camel/test/infra/cassandra/services/CassandraLocalContainerInfraService.java
@@ -28,7 +28,9 @@ import org.testcontainers.utility.DockerImageName;
 /**
  * A service for a local instance of Apache Cassandra running with 
TestContainers
  */
-@InfraService(service = CassandraInfraService.class, serviceAlias = { 
"cassandra" })
+@InfraService(service = CassandraInfraService.class,
+              description = "Apache Cassandra NoSQL Database",
+              serviceAlias = { "cassandra" })
 public class CassandraLocalContainerInfraService implements 
CassandraInfraService, ContainerService<CassandraContainer> {
     private static final Logger LOG = 
LoggerFactory.getLogger(CassandraLocalContainerInfraService.class);
 
diff --git 
a/test-infra/camel-test-infra-chatscript/src/main/java/org/apache/camel/test/infra/chatscript/services/ChatScriptLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-chatscript/src/main/java/org/apache/camel/test/infra/chatscript/services/ChatScriptLocalContainerInfraService.java
index 02213f3bddb..89d280a43b4 100644
--- 
a/test-infra/camel-test-infra-chatscript/src/main/java/org/apache/camel/test/infra/chatscript/services/ChatScriptLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-chatscript/src/main/java/org/apache/camel/test/infra/chatscript/services/ChatScriptLocalContainerInfraService.java
@@ -24,7 +24,9 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.GenericContainer;
 
-@InfraService(service = ChatScriptInfraService.class, serviceAlias = { 
"chatscript", "chat-script" })
+@InfraService(service = ChatScriptInfraService.class,
+              description = "ChatBot Engine",
+              serviceAlias = { "chatscript", "chat-script" })
 public class ChatScriptLocalContainerInfraService implements 
ChatScriptInfraService, ContainerService<GenericContainer> {
     private static final Logger LOG = 
LoggerFactory.getLogger(ChatScriptLocalContainerInfraService.class);
     private static final int SERVICE_PORT = 1024;
diff --git 
a/test-infra/camel-test-infra-consul/src/main/java/org/apache/camel/test/infra/consul/services/ConsulLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-consul/src/main/java/org/apache/camel/test/infra/consul/services/ConsulLocalContainerInfraService.java
index adc85a2b3ef..b903b4aa29c 100644
--- 
a/test-infra/camel-test-infra-consul/src/main/java/org/apache/camel/test/infra/consul/services/ConsulLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-consul/src/main/java/org/apache/camel/test/infra/consul/services/ConsulLocalContainerInfraService.java
@@ -26,7 +26,9 @@ import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.GenericContainer;
 import org.testcontainers.containers.wait.strategy.Wait;
 
-@InfraService(service = ConsulInfraService.class, serviceAlias = { "consul" })
+@InfraService(service = ConsulInfraService.class,
+              description = "Consul is a service networking solution",
+              serviceAlias = { "consul" })
 public class ConsulLocalContainerInfraService implements ConsulInfraService, 
ContainerService<GenericContainer> {
     public static final String CONTAINER_NAME = "consul";
 
diff --git 
a/test-infra/camel-test-infra-couchbase/src/main/java/org/apache/camel/test/infra/couchbase/services/CouchbaseLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-couchbase/src/main/java/org/apache/camel/test/infra/couchbase/services/CouchbaseLocalContainerInfraService.java
index a892ce9ad2a..63c091eaca5 100644
--- 
a/test-infra/camel-test-infra-couchbase/src/main/java/org/apache/camel/test/infra/couchbase/services/CouchbaseLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-couchbase/src/main/java/org/apache/camel/test/infra/couchbase/services/CouchbaseLocalContainerInfraService.java
@@ -26,7 +26,9 @@ import org.slf4j.LoggerFactory;
 import org.testcontainers.couchbase.CouchbaseContainer;
 import org.testcontainers.utility.DockerImageName;
 
-@InfraService(service = CouchbaseInfraService.class, serviceAlias = { 
"couchbase" })
+@InfraService(service = CouchbaseInfraService.class,
+              description = "NoSQL database Couchbase",
+              serviceAlias = { "couchbase" })
 public class CouchbaseLocalContainerInfraService implements 
CouchbaseInfraService, ContainerService<CouchbaseContainer> {
 
     /*
diff --git 
a/test-infra/camel-test-infra-couchdb/src/main/java/org/apache/camel/test/infra/couchdb/services/CouchDbLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-couchdb/src/main/java/org/apache/camel/test/infra/couchdb/services/CouchDbLocalContainerInfraService.java
index ff0541c1b95..d7c649a2b0a 100644
--- 
a/test-infra/camel-test-infra-couchdb/src/main/java/org/apache/camel/test/infra/couchdb/services/CouchDbLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-couchdb/src/main/java/org/apache/camel/test/infra/couchdb/services/CouchDbLocalContainerInfraService.java
@@ -26,7 +26,9 @@ import org.testcontainers.containers.GenericContainer;
 import org.testcontainers.containers.wait.strategy.Wait;
 import org.testcontainers.utility.DockerImageName;
 
-@InfraService(service = CouchDbInfraService.class, serviceAlias = { "couchdb" 
})
+@InfraService(service = CouchDbInfraService.class,
+              description = "SQL Clustered database CouchDB",
+              serviceAlias = { "couchdb" })
 public class CouchDbLocalContainerInfraService implements CouchDbInfraService, 
ContainerService<GenericContainer> {
     public static final String CONTAINER_NAME = "couchdb";
 
diff --git 
a/test-infra/camel-test-infra-elasticsearch/src/main/java/org/apache/camel/test/infra/elasticsearch/services/ElasticSearchLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-elasticsearch/src/main/java/org/apache/camel/test/infra/elasticsearch/services/ElasticSearchLocalContainerInfraService.java
index 55d598e6503..d2fe3c47d30 100644
--- 
a/test-infra/camel-test-infra-elasticsearch/src/main/java/org/apache/camel/test/infra/elasticsearch/services/ElasticSearchLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-elasticsearch/src/main/java/org/apache/camel/test/infra/elasticsearch/services/ElasticSearchLocalContainerInfraService.java
@@ -36,7 +36,9 @@ import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.wait.strategy.LogMessageWaitStrategy;
 import org.testcontainers.elasticsearch.ElasticsearchContainer;
 
-@InfraService(service = ElasticSearchInfraService.class, serviceAlias = { 
"elasticsearch", "elastic-search" })
+@InfraService(service = ElasticSearchInfraService.class,
+              description = "NoSQL Database Elasticsearch",
+              serviceAlias = "elasticsearch")
 public class ElasticSearchLocalContainerInfraService
         implements ElasticSearchInfraService, 
ContainerService<ElasticsearchContainer> {
     private static final Logger LOG = 
LoggerFactory.getLogger(ElasticSearchLocalContainerInfraService.class);
diff --git 
a/test-infra/camel-test-infra-etcd3/src/main/java/org/apache/camel/test/infra/etcd3/services/Etcd3LocalContainerInfraService.java
 
b/test-infra/camel-test-infra-etcd3/src/main/java/org/apache/camel/test/infra/etcd3/services/Etcd3LocalContainerInfraService.java
index cd69c8c3675..f30970fa80a 100644
--- 
a/test-infra/camel-test-infra-etcd3/src/main/java/org/apache/camel/test/infra/etcd3/services/Etcd3LocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-etcd3/src/main/java/org/apache/camel/test/infra/etcd3/services/Etcd3LocalContainerInfraService.java
@@ -28,7 +28,9 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.wait.strategy.Wait;
 
-@InfraService(service = Etcd3InfraService.class, serviceAlias = { "etcd3" })
+@InfraService(service = Etcd3InfraService.class,
+              description = "Key Value store etcd3",
+              serviceAlias = { "etcd3" })
 public class Etcd3LocalContainerInfraService implements Etcd3InfraService, 
ContainerService<EtcdContainer> {
     public static final String CONTAINER_NAME = "etcd";
     public static final int ETCD_CLIENT_PORT = 2379;
diff --git 
a/test-infra/camel-test-infra-fhir/src/main/java/org/apache/camel/test/infra/fhir/services/FhirLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-fhir/src/main/java/org/apache/camel/test/infra/fhir/services/FhirLocalContainerInfraService.java
index b59e60cc772..3b895ffaa00 100644
--- 
a/test-infra/camel-test-infra-fhir/src/main/java/org/apache/camel/test/infra/fhir/services/FhirLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-fhir/src/main/java/org/apache/camel/test/infra/fhir/services/FhirLocalContainerInfraService.java
@@ -27,7 +27,9 @@ import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.GenericContainer;
 import org.testcontainers.containers.wait.strategy.Wait;
 
-@InfraService(service = FhirInfraService.class, serviceAlias = { "fhir" })
+@InfraService(service = FhirInfraService.class,
+              description = "HAPI FHIR RESTful test server",
+              serviceAlias = { "fhir" })
 public class FhirLocalContainerInfraService implements FhirInfraService, 
ContainerService<GenericContainer> {
     // needs 
https://github.com/hapifhir/hapi-fhir-jpaserver-starter/commit/54120f374eea5084634830d34c99a9137b22a310
     public static final String CONTAINER_NAME = "fhir";
diff --git 
a/test-infra/camel-test-infra-ftp/src/main/java/org/apache/camel/test/infra/ftp/services/embedded/FtpEmbeddedInfraService.java
 
b/test-infra/camel-test-infra-ftp/src/main/java/org/apache/camel/test/infra/ftp/services/embedded/FtpEmbeddedInfraService.java
index d8353764326..3d9a1c3025f 100644
--- 
a/test-infra/camel-test-infra-ftp/src/main/java/org/apache/camel/test/infra/ftp/services/embedded/FtpEmbeddedInfraService.java
+++ 
b/test-infra/camel-test-infra-ftp/src/main/java/org/apache/camel/test/infra/ftp/services/embedded/FtpEmbeddedInfraService.java
@@ -46,7 +46,9 @@ import org.apache.ftpserver.usermanager.impl.WritePermission;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@InfraService(service = FtpInfraService.class, serviceAlias = { "ftp" })
+@InfraService(service = FtpInfraService.class,
+              description = "Embedded FTP Server",
+              serviceAlias = { "ftp" })
 public class FtpEmbeddedInfraService extends AbstractService implements 
FtpInfraService {
     protected static final String DEFAULT_LISTENER = "default";
     private static final Logger LOG = 
LoggerFactory.getLogger(FtpEmbeddedInfraService.class);
diff --git 
a/test-infra/camel-test-infra-ftp/src/main/java/org/apache/camel/test/infra/ftp/services/embedded/FtpsEmbeddedInfraService.java
 
b/test-infra/camel-test-infra-ftp/src/main/java/org/apache/camel/test/infra/ftp/services/embedded/FtpsEmbeddedInfraService.java
index 4ef888d57f9..ab04f99ab6e 100644
--- 
a/test-infra/camel-test-infra-ftp/src/main/java/org/apache/camel/test/infra/ftp/services/embedded/FtpsEmbeddedInfraService.java
+++ 
b/test-infra/camel-test-infra-ftp/src/main/java/org/apache/camel/test/infra/ftp/services/embedded/FtpsEmbeddedInfraService.java
@@ -25,7 +25,9 @@ import org.apache.ftpserver.FtpServerFactory;
 import org.apache.ftpserver.listener.ListenerFactory;
 import org.apache.ftpserver.ssl.SslConfigurationFactory;
 
-@InfraService(service = FtpInfraService.class, serviceAlias = { "ftps" })
+@InfraService(service = FtpInfraService.class,
+              description = "Embedded FTPS Server",
+              serviceAlias = { "ftps" })
 public class FtpsEmbeddedInfraService extends FtpEmbeddedInfraService {
 
     /**
diff --git 
a/test-infra/camel-test-infra-ftp/src/main/java/org/apache/camel/test/infra/ftp/services/embedded/SftpEmbeddedInfraService.java
 
b/test-infra/camel-test-infra-ftp/src/main/java/org/apache/camel/test/infra/ftp/services/embedded/SftpEmbeddedInfraService.java
index f81e6522cac..6529efb77fd 100644
--- 
a/test-infra/camel-test-infra-ftp/src/main/java/org/apache/camel/test/infra/ftp/services/embedded/SftpEmbeddedInfraService.java
+++ 
b/test-infra/camel-test-infra-ftp/src/main/java/org/apache/camel/test/infra/ftp/services/embedded/SftpEmbeddedInfraService.java
@@ -44,7 +44,9 @@ import org.apache.sshd.sftp.server.SftpSubsystemFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@InfraService(service = FtpInfraService.class, serviceAlias = { "sftp" })
+@InfraService(service = FtpInfraService.class,
+              description = "Embedded SFTP Server",
+              serviceAlias = { "sftp" })
 public class SftpEmbeddedInfraService extends AbstractService implements 
FtpInfraService {
     private static final Logger LOG = 
LoggerFactory.getLogger(SftpEmbeddedInfraService.class);
 
diff --git 
a/test-infra/camel-test-infra-google-pubsub/src/main/java/org/apache/camel/test/infra/google/pubsub/services/GooglePubSubLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-google-pubsub/src/main/java/org/apache/camel/test/infra/google/pubsub/services/GooglePubSubLocalContainerInfraService.java
index 6cb160ad70c..f794fad90cd 100644
--- 
a/test-infra/camel-test-infra-google-pubsub/src/main/java/org/apache/camel/test/infra/google/pubsub/services/GooglePubSubLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-google-pubsub/src/main/java/org/apache/camel/test/infra/google/pubsub/services/GooglePubSubLocalContainerInfraService.java
@@ -25,7 +25,9 @@ import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.PubSubEmulatorContainer;
 import org.testcontainers.utility.DockerImageName;
 
-@InfraService(service = GooglePubSubInfraService.class, serviceAlias = { 
"google", "google-pub-sub" },
+@InfraService(service = GooglePubSubInfraService.class,
+              description = "Google Cloud SDK Tool",
+              serviceAlias = "google",
               serviceImplementationAlias = "pub-sub")
 public class GooglePubSubLocalContainerInfraService
         implements GooglePubSubInfraService, 
ContainerService<PubSubEmulatorContainer> {
diff --git 
a/test-infra/camel-test-infra-hashicorp-vault/src/main/java/org/apache/camel/test/infra/hashicorp/vault/services/HashicorpVaultLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-hashicorp-vault/src/main/java/org/apache/camel/test/infra/hashicorp/vault/services/HashicorpVaultLocalContainerInfraService.java
index d92e39ba2d0..ad829a84669 100644
--- 
a/test-infra/camel-test-infra-hashicorp-vault/src/main/java/org/apache/camel/test/infra/hashicorp/vault/services/HashicorpVaultLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-hashicorp-vault/src/main/java/org/apache/camel/test/infra/hashicorp/vault/services/HashicorpVaultLocalContainerInfraService.java
@@ -45,7 +45,9 @@ import org.testcontainers.containers.output.OutputFrame;
 import org.testcontainers.containers.output.Slf4jLogConsumer;
 import org.testcontainers.containers.wait.strategy.Wait;
 
-@InfraService(service = HashicorpVaultInfraService.class, serviceAlias = { 
"hashicorp-vault", "hashicorp" },
+@InfraService(service = HashicorpVaultInfraService.class,
+              description = "Vault is a tool for securely accessing secrets",
+              serviceAlias = "hashicorp",
               serviceImplementationAlias = "vault")
 public class HashicorpVaultLocalContainerInfraService
         implements HashicorpVaultInfraService, 
ContainerService<GenericContainer<?>> {
diff --git 
a/test-infra/camel-test-infra-hazelcast/src/main/java/org/apache/camel/test/infra/hazelcast/services/HazelcastEmbeddedInfraService.java
 
b/test-infra/camel-test-infra-hazelcast/src/main/java/org/apache/camel/test/infra/hazelcast/services/HazelcastEmbeddedInfraService.java
index 6a3ae550dc6..1af1ff86353 100644
--- 
a/test-infra/camel-test-infra-hazelcast/src/main/java/org/apache/camel/test/infra/hazelcast/services/HazelcastEmbeddedInfraService.java
+++ 
b/test-infra/camel-test-infra-hazelcast/src/main/java/org/apache/camel/test/infra/hazelcast/services/HazelcastEmbeddedInfraService.java
@@ -20,7 +20,9 @@ package org.apache.camel.test.infra.hazelcast.services;
 import com.hazelcast.config.Config;
 import org.apache.camel.spi.annotations.InfraService;
 
-@InfraService(service = HazelcastInfraService.class, serviceAlias = { 
"hazelcast" })
+@InfraService(service = HazelcastInfraService.class,
+              description = "In Memory Database Hazelcast",
+              serviceAlias = { "hazelcast" })
 public class HazelcastEmbeddedInfraService implements HazelcastInfraService {
 
     @Override
diff --git 
a/test-infra/camel-test-infra-hivemq/src/main/java/org/apache/camel/test/infra/hivemq/services/LocalHiveMQInfraService.java
 
b/test-infra/camel-test-infra-hivemq/src/main/java/org/apache/camel/test/infra/hivemq/services/LocalHiveMQInfraService.java
index 2506c38eda9..a0acd8e06e2 100644
--- 
a/test-infra/camel-test-infra-hivemq/src/main/java/org/apache/camel/test/infra/hivemq/services/LocalHiveMQInfraService.java
+++ 
b/test-infra/camel-test-infra-hivemq/src/main/java/org/apache/camel/test/infra/hivemq/services/LocalHiveMQInfraService.java
@@ -22,7 +22,9 @@ import 
org.apache.camel.test.infra.hivemq.common.HiveMQProperties;
 import org.testcontainers.hivemq.HiveMQContainer;
 import org.testcontainers.utility.DockerImageName;
 
-@InfraService(service = HiveMQInfraService.class, serviceAlias = { "hivemq", 
"hive-mq" })
+@InfraService(service = HiveMQInfraService.class,
+              description = "MQTT Platform HiveMQ",
+              serviceAlias = { "hivemq", "hive-mq" })
 public class LocalHiveMQInfraService extends 
AbstractLocalHiveMQService<LocalHiveMQInfraService> {
 
     LocalHiveMQInfraService() {
diff --git 
a/test-infra/camel-test-infra-hivemq/src/main/java/org/apache/camel/test/infra/hivemq/services/LocalHiveMQSparkplugTCKInfraService.java
 
b/test-infra/camel-test-infra-hivemq/src/main/java/org/apache/camel/test/infra/hivemq/services/LocalHiveMQSparkplugTCKInfraService.java
index 7ee36e269fc..0f64364b297 100644
--- 
a/test-infra/camel-test-infra-hivemq/src/main/java/org/apache/camel/test/infra/hivemq/services/LocalHiveMQSparkplugTCKInfraService.java
+++ 
b/test-infra/camel-test-infra-hivemq/src/main/java/org/apache/camel/test/infra/hivemq/services/LocalHiveMQSparkplugTCKInfraService.java
@@ -23,7 +23,9 @@ import org.testcontainers.hivemq.HiveMQContainer;
 import org.testcontainers.images.builder.ImageFromDockerfile;
 import org.testcontainers.utility.DockerImageName;
 
-@InfraService(service = HiveMQInfraService.class, serviceAlias = { "hivemq", 
"hive-mq" },
+@InfraService(service = HiveMQInfraService.class,
+              description = "MQTT Platform HiveMQ",
+              serviceAlias = { "hivemq", "hive-mq" },
               serviceImplementationAlias = "sparkplug")
 public class LocalHiveMQSparkplugTCKInfraService extends 
AbstractLocalHiveMQService<LocalHiveMQSparkplugTCKInfraService> {
 
diff --git 
a/test-infra/camel-test-infra-ignite/src/main/java/org/apache/camel/test/infra/ignite/services/IgniteEmbeddedInfraService.java
 
b/test-infra/camel-test-infra-ignite/src/main/java/org/apache/camel/test/infra/ignite/services/IgniteEmbeddedInfraService.java
index d7428389178..aec3a25603d 100644
--- 
a/test-infra/camel-test-infra-ignite/src/main/java/org/apache/camel/test/infra/ignite/services/IgniteEmbeddedInfraService.java
+++ 
b/test-infra/camel-test-infra-ignite/src/main/java/org/apache/camel/test/infra/ignite/services/IgniteEmbeddedInfraService.java
@@ -32,7 +32,9 @@ import 
org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@InfraService(service = IgniteInfraService.class, serviceAlias = { "ignite" })
+@InfraService(service = IgniteInfraService.class,
+              description = "Distribuited Database Apache Ignite",
+              serviceAlias = { "ignite" })
 public class IgniteEmbeddedInfraService implements IgniteInfraService {
     private static final Logger LOG = 
LoggerFactory.getLogger(IgniteEmbeddedInfraService.class);
 
diff --git 
a/test-infra/camel-test-infra-infinispan/src/main/java/org/apache/camel/test/infra/infinispan/services/InfinispanLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-infinispan/src/main/java/org/apache/camel/test/infra/infinispan/services/InfinispanLocalContainerInfraService.java
index 9baad3c9053..ab334c92090 100644
--- 
a/test-infra/camel-test-infra-infinispan/src/main/java/org/apache/camel/test/infra/infinispan/services/InfinispanLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-infinispan/src/main/java/org/apache/camel/test/infra/infinispan/services/InfinispanLocalContainerInfraService.java
@@ -30,7 +30,9 @@ import org.testcontainers.containers.output.OutputFrame;
 import org.testcontainers.containers.output.Slf4jLogConsumer;
 import org.testcontainers.containers.wait.strategy.Wait;
 
-@InfraService(service = InfinispanInfraService.class, serviceAlias = { 
"infinispan" })
+@InfraService(service = InfinispanInfraService.class,
+              description = "Distributed Database For High‑Performance 
Applications With In‑Memory Speed",
+              serviceAlias = { "infinispan" })
 public class InfinispanLocalContainerInfraService implements 
InfinispanInfraService, ContainerService<GenericContainer<?>> {
     public static final String CONTAINER_NAME = "infinispan";
     private static final String DEFAULT_USERNAME = "admin";
diff --git 
a/test-infra/camel-test-infra-kafka/src/main/java/org/apache/camel/test/infra/kafka/services/ContainerLocalKafkaInfraService.java
 
b/test-infra/camel-test-infra-kafka/src/main/java/org/apache/camel/test/infra/kafka/services/ContainerLocalKafkaInfraService.java
index ef7569d49e9..e50b73494e7 100644
--- 
a/test-infra/camel-test-infra-kafka/src/main/java/org/apache/camel/test/infra/kafka/services/ContainerLocalKafkaInfraService.java
+++ 
b/test-infra/camel-test-infra-kafka/src/main/java/org/apache/camel/test/infra/kafka/services/ContainerLocalKafkaInfraService.java
@@ -26,7 +26,9 @@ import org.slf4j.LoggerFactory;
 import org.testcontainers.kafka.KafkaContainer;
 import org.testcontainers.utility.DockerImageName;
 
-@InfraService(service = KafkaInfraService.class, serviceAlias = "kafka")
+@InfraService(service = KafkaInfraService.class,
+              description = "Apache Kafka, Distributed event streaming 
platform",
+              serviceAlias = "kafka")
 public class ContainerLocalKafkaInfraService implements KafkaInfraService, 
ContainerService<KafkaContainer> {
     public static final String KAFKA3_IMAGE_NAME = 
LocalPropertyResolver.getProperty(
             ContainerLocalKafkaInfraService.class,
diff --git 
a/test-infra/camel-test-infra-kafka/src/main/java/org/apache/camel/test/infra/kafka/services/RedpandaInfraService.java
 
b/test-infra/camel-test-infra-kafka/src/main/java/org/apache/camel/test/infra/kafka/services/RedpandaInfraService.java
index 677e8b8c9a6..7803c0ab502 100644
--- 
a/test-infra/camel-test-infra-kafka/src/main/java/org/apache/camel/test/infra/kafka/services/RedpandaInfraService.java
+++ 
b/test-infra/camel-test-infra-kafka/src/main/java/org/apache/camel/test/infra/kafka/services/RedpandaInfraService.java
@@ -25,7 +25,9 @@ import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.Network;
 import org.testcontainers.redpanda.RedpandaContainer;
 
-@InfraService(service = KafkaInfraService.class, serviceAlias = "kafka", 
serviceImplementationAlias = "redpanda")
+@InfraService(service = KafkaInfraService.class,
+              description = "Apache Kafka, Distributed event streaming 
platform",
+              serviceAlias = "kafka", serviceImplementationAlias = "redpanda")
 public class RedpandaInfraService implements KafkaInfraService, 
ContainerService<RedpandaContainer> {
     private static final Logger LOG = 
LoggerFactory.getLogger(RedpandaInfraService.class);
 
diff --git 
a/test-infra/camel-test-infra-kafka/src/main/java/org/apache/camel/test/infra/kafka/services/StrimziInfraService.java
 
b/test-infra/camel-test-infra-kafka/src/main/java/org/apache/camel/test/infra/kafka/services/StrimziInfraService.java
index 3803bfac220..623066ba0b9 100644
--- 
a/test-infra/camel-test-infra-kafka/src/main/java/org/apache/camel/test/infra/kafka/services/StrimziInfraService.java
+++ 
b/test-infra/camel-test-infra-kafka/src/main/java/org/apache/camel/test/infra/kafka/services/StrimziInfraService.java
@@ -25,7 +25,9 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.Network;
 
-@InfraService(service = KafkaInfraService.class, serviceAlias = "kafka", 
serviceImplementationAlias = "strimzi")
+@InfraService(service = KafkaInfraService.class,
+              description = "Apache Kafka, Distributed event streaming 
platform",
+              serviceAlias = "kafka", serviceImplementationAlias = "strimzi")
 public class StrimziInfraService implements KafkaInfraService, 
ContainerService<StrimziContainer> {
     private static final Logger LOG = 
LoggerFactory.getLogger(StrimziInfraService.class);
 
diff --git 
a/test-infra/camel-test-infra-microprofile-lra/src/main/java/org/apache/camel/test/infra/microprofile/lra/services/MicroprofileLRALocalContainerInfraService.java
 
b/test-infra/camel-test-infra-microprofile-lra/src/main/java/org/apache/camel/test/infra/microprofile/lra/services/MicroprofileLRALocalContainerInfraService.java
index 066fdeb21b5..350b043ac2e 100644
--- 
a/test-infra/camel-test-infra-microprofile-lra/src/main/java/org/apache/camel/test/infra/microprofile/lra/services/MicroprofileLRALocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-microprofile-lra/src/main/java/org/apache/camel/test/infra/microprofile/lra/services/MicroprofileLRALocalContainerInfraService.java
@@ -27,7 +27,11 @@ import org.testcontainers.containers.GenericContainer;
 import org.testcontainers.containers.wait.strategy.Wait;
 import org.testcontainers.utility.DockerImageName;
 
-@InfraService(service = MicroprofileLRAInfraService.class, serviceAlias = { 
"microprofile-lra", "microprofile" },
+@InfraService(service = MicroprofileLRAInfraService.class,
+              description = "MicroProfile LRA provides a simple, " +
+                            "loosely coupled transaction model for 
microservices that is based on the SAGA pattern" +
+                            " for distributed transaction.",
+              serviceAlias = { "microprofile" },
               serviceImplementationAlias = "lra")
 public class MicroprofileLRALocalContainerInfraService
         implements MicroprofileLRAInfraService, 
ContainerService<GenericContainer> {
diff --git 
a/test-infra/camel-test-infra-milvus/src/main/java/org/apache/camel/test/infra/milvus/services/MilvusLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-milvus/src/main/java/org/apache/camel/test/infra/milvus/services/MilvusLocalContainerInfraService.java
index c580931c1cc..39325164df2 100644
--- 
a/test-infra/camel-test-infra-milvus/src/main/java/org/apache/camel/test/infra/milvus/services/MilvusLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-milvus/src/main/java/org/apache/camel/test/infra/milvus/services/MilvusLocalContainerInfraService.java
@@ -29,7 +29,9 @@ import org.slf4j.LoggerFactory;
 import org.testcontainers.milvus.MilvusContainer;
 import org.testcontainers.utility.DockerImageName;
 
-@InfraService(service = MilvusInfraService.class, serviceAlias = { "milvus" })
+@InfraService(service = MilvusInfraService.class,
+              description = "Milvus Vector Database",
+              serviceAlias = { "milvus" })
 public class MilvusLocalContainerInfraService implements MilvusInfraService, 
ContainerService<MilvusContainer> {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(MilvusLocalContainerInfraService.class);
diff --git 
a/test-infra/camel-test-infra-minio/src/main/java/org/apache/camel/test/infra/minio/services/MinioLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-minio/src/main/java/org/apache/camel/test/infra/minio/services/MinioLocalContainerInfraService.java
index 2e7b0fb2f09..c28003548fb 100644
--- 
a/test-infra/camel-test-infra-minio/src/main/java/org/apache/camel/test/infra/minio/services/MinioLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-minio/src/main/java/org/apache/camel/test/infra/minio/services/MinioLocalContainerInfraService.java
@@ -27,7 +27,9 @@ import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.GenericContainer;
 import org.testcontainers.containers.wait.strategy.HttpWaitStrategy;
 
-@InfraService(service = MinioInfraService.class, serviceAlias = { "minio" })
+@InfraService(service = MinioInfraService.class,
+              description = "MinIO Object Storage, S3 compatible",
+              serviceAlias = { "minio" })
 public class MinioLocalContainerInfraService implements MinioInfraService, 
ContainerService<GenericContainer> {
     public static final String CONTAINER_NAME = "minio";
     private static final String ACCESS_KEY;
diff --git 
a/test-infra/camel-test-infra-mongodb/src/main/java/org/apache/camel/test/infra/mongodb/services/MongoDBLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-mongodb/src/main/java/org/apache/camel/test/infra/mongodb/services/MongoDBLocalContainerInfraService.java
index 15bbd95d00f..733b7ba54fc 100644
--- 
a/test-infra/camel-test-infra-mongodb/src/main/java/org/apache/camel/test/infra/mongodb/services/MongoDBLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-mongodb/src/main/java/org/apache/camel/test/infra/mongodb/services/MongoDBLocalContainerInfraService.java
@@ -26,7 +26,9 @@ import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.MongoDBContainer;
 import org.testcontainers.utility.DockerImageName;
 
-@InfraService(service = MongoDBInfraService.class, serviceAlias = { "mongodb" 
})
+@InfraService(service = MongoDBInfraService.class,
+              description = "MongoDB NoSql Database",
+              serviceAlias = { "mongodb" })
 public class MongoDBLocalContainerInfraService implements MongoDBInfraService, 
ContainerService<MongoDBContainer> {
     private static final Logger LOG = 
LoggerFactory.getLogger(MongoDBLocalContainerInfraService.class);
     private static final int DEFAULT_MONGODB_PORT = 27017;
diff --git 
a/test-infra/camel-test-infra-mosquitto/src/main/java/org/apache/camel/test/infra/mosquitto/services/MosquittoLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-mosquitto/src/main/java/org/apache/camel/test/infra/mosquitto/services/MosquittoLocalContainerInfraService.java
index 2d0bde91a0c..99e2d2bac70 100644
--- 
a/test-infra/camel-test-infra-mosquitto/src/main/java/org/apache/camel/test/infra/mosquitto/services/MosquittoLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-mosquitto/src/main/java/org/apache/camel/test/infra/mosquitto/services/MosquittoLocalContainerInfraService.java
@@ -27,7 +27,9 @@ import 
org.testcontainers.containers.FixedHostPortGenericContainer;
 import org.testcontainers.containers.GenericContainer;
 import org.testcontainers.containers.wait.strategy.Wait;
 
-@InfraService(service = MosquittoInfraService.class, serviceAlias = { 
"mosquitto" })
+@InfraService(service = MosquittoInfraService.class,
+              description = "Mosquitto is a message broker that implements 
MQTT protocol",
+              serviceAlias = { "mosquitto" })
 public class MosquittoLocalContainerInfraService implements 
MosquittoInfraService, ContainerService<GenericContainer> {
     public static final String CONTAINER_NAME = "mosquitto";
     public static final int CONTAINER_PORT = 1883;
diff --git 
a/test-infra/camel-test-infra-nats/src/main/java/org/apache/camel/test/infra/nats/services/NatsLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-nats/src/main/java/org/apache/camel/test/infra/nats/services/NatsLocalContainerInfraService.java
index b1939327cdf..1fa3e8ad6fe 100644
--- 
a/test-infra/camel-test-infra-nats/src/main/java/org/apache/camel/test/infra/nats/services/NatsLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-nats/src/main/java/org/apache/camel/test/infra/nats/services/NatsLocalContainerInfraService.java
@@ -25,7 +25,9 @@ import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.GenericContainer;
 import org.testcontainers.containers.wait.strategy.Wait;
 
-@InfraService(service = NatsInfraService.class, serviceAlias = { "nats" })
+@InfraService(service = NatsInfraService.class,
+              description = "Messaging Platform NATS",
+              serviceAlias = { "nats" })
 public class NatsLocalContainerInfraService implements NatsInfraService, 
ContainerService<GenericContainer> {
     public static final String CONTAINER_NAME = "nats";
     private static final int PORT = 4222;
diff --git 
a/test-infra/camel-test-infra-ollama/src/main/java/org/apache/camel/test/infra/ollama/services/OllamaLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-ollama/src/main/java/org/apache/camel/test/infra/ollama/services/OllamaLocalContainerInfraService.java
index a53aeac2cc4..c6896bab074 100644
--- 
a/test-infra/camel-test-infra-ollama/src/main/java/org/apache/camel/test/infra/ollama/services/OllamaLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-ollama/src/main/java/org/apache/camel/test/infra/ollama/services/OllamaLocalContainerInfraService.java
@@ -27,7 +27,9 @@ import org.slf4j.LoggerFactory;
 import org.testcontainers.ollama.OllamaContainer;
 import org.testcontainers.utility.DockerImageName;
 
-@InfraService(service = OllamaInfraService.class, serviceAlias = { "ollama" })
+@InfraService(service = OllamaInfraService.class,
+              description = "Build and run LLMs with Ollama",
+              serviceAlias = { "ollama" })
 public class OllamaLocalContainerInfraService implements OllamaInfraService, 
ContainerService<OllamaContainer> {
     private static class DefaultServiceConfiguration implements 
OllamaServiceConfiguration {
 
diff --git 
a/test-infra/camel-test-infra-openldap/src/main/java/org/apache/camel/test/infra/openldap/services/OpenldapLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-openldap/src/main/java/org/apache/camel/test/infra/openldap/services/OpenldapLocalContainerInfraService.java
index f3b2e3689b6..68978f1a00c 100644
--- 
a/test-infra/camel-test-infra-openldap/src/main/java/org/apache/camel/test/infra/openldap/services/OpenldapLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-openldap/src/main/java/org/apache/camel/test/infra/openldap/services/OpenldapLocalContainerInfraService.java
@@ -22,7 +22,9 @@ import 
org.apache.camel.test.infra.openldap.common.OpenldapProperties;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@InfraService(service = OpenldapInfraService.class, serviceAlias = { 
"openldap" })
+@InfraService(service = OpenldapInfraService.class,
+              description = "OpenLDAP is an implementation of the Lightweight 
Directory Access Protocol",
+              serviceAlias = { "openldap" })
 public class OpenldapLocalContainerInfraService implements 
OpenldapInfraService, ContainerService<OpenLdapContainer> {
     public static final int CONTAINER_PORT_LDAP = 389;
     public static final int CONTAINER_PORT_LDAP_OVER_SSL = 636;
diff --git 
a/test-infra/camel-test-infra-postgres/src/main/java/org/apache/camel/test/infra/postgres/services/PostgresLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-postgres/src/main/java/org/apache/camel/test/infra/postgres/services/PostgresLocalContainerInfraService.java
index 9ff3e51c73e..613c73894e8 100644
--- 
a/test-infra/camel-test-infra-postgres/src/main/java/org/apache/camel/test/infra/postgres/services/PostgresLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-postgres/src/main/java/org/apache/camel/test/infra/postgres/services/PostgresLocalContainerInfraService.java
@@ -25,7 +25,9 @@ import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.PostgreSQLContainer;
 import org.testcontainers.utility.DockerImageName;
 
-@InfraService(service = PostgresInfraService.class, serviceAlias = { 
"postgres" })
+@InfraService(service = PostgresInfraService.class,
+              description = "Postgres SQL Database",
+              serviceAlias = { "postgres" })
 public class PostgresLocalContainerInfraService implements 
PostgresInfraService, ContainerService<PostgreSQLContainer> {
     public static final String DEFAULT_POSTGRES_CONTAINER
             = 
LocalPropertyResolver.getProperty(PostgresLocalContainerInfraService.class,
diff --git 
a/test-infra/camel-test-infra-pulsar/src/main/java/org/apache/camel/test/infra/pulsar/services/PulsarLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-pulsar/src/main/java/org/apache/camel/test/infra/pulsar/services/PulsarLocalContainerInfraService.java
index 62946d75acf..5e268e5f34f 100644
--- 
a/test-infra/camel-test-infra-pulsar/src/main/java/org/apache/camel/test/infra/pulsar/services/PulsarLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-pulsar/src/main/java/org/apache/camel/test/infra/pulsar/services/PulsarLocalContainerInfraService.java
@@ -27,7 +27,9 @@ import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.PulsarContainer;
 import org.testcontainers.utility.DockerImageName;
 
-@InfraService(service = PulsarInfraService.class, serviceAlias = { "pulsar" })
+@InfraService(service = PulsarInfraService.class,
+              description = "Distributed messaging and streaming platform",
+              serviceAlias = { "pulsar" })
 public class PulsarLocalContainerInfraService implements PulsarInfraService, 
ContainerService<PulsarContainer> {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(PulsarLocalContainerInfraService.class);
diff --git 
a/test-infra/camel-test-infra-qdrant/src/main/java/org/apache/camel/test/infra/qdrant/services/QdrantLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-qdrant/src/main/java/org/apache/camel/test/infra/qdrant/services/QdrantLocalContainerInfraService.java
index 4998f3830d5..df64ddf6841 100644
--- 
a/test-infra/camel-test-infra-qdrant/src/main/java/org/apache/camel/test/infra/qdrant/services/QdrantLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-qdrant/src/main/java/org/apache/camel/test/infra/qdrant/services/QdrantLocalContainerInfraService.java
@@ -26,7 +26,9 @@ import org.testcontainers.containers.output.Slf4jLogConsumer;
 import org.testcontainers.qdrant.QdrantContainer;
 import org.testcontainers.utility.DockerImageName;
 
-@InfraService(service = QdrantInfraService.class, serviceAlias = { "qdrant" })
+@InfraService(service = QdrantInfraService.class,
+              description = "Vector Database and Vector Search Engine",
+              serviceAlias = { "qdrant" })
 public class QdrantLocalContainerInfraService implements QdrantInfraService, 
ContainerService<QdrantContainer> {
     public static final int HTTP_PORT = 6333;
     public static final int GRPC_PORT = 6334;
diff --git 
a/test-infra/camel-test-infra-rabbitmq/src/main/java/org/apache/camel/test/infra/rabbitmq/services/RabbitMQLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-rabbitmq/src/main/java/org/apache/camel/test/infra/rabbitmq/services/RabbitMQLocalContainerInfraService.java
index 8212e757de7..e101cef1e18 100644
--- 
a/test-infra/camel-test-infra-rabbitmq/src/main/java/org/apache/camel/test/infra/rabbitmq/services/RabbitMQLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-rabbitmq/src/main/java/org/apache/camel/test/infra/rabbitmq/services/RabbitMQLocalContainerInfraService.java
@@ -26,7 +26,9 @@ import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.RabbitMQContainer;
 import org.testcontainers.utility.DockerImageName;
 
-@InfraService(service = RabbitMQInfraService.class, serviceAlias = { 
"rabbitmq" })
+@InfraService(service = RabbitMQInfraService.class,
+              description = "Messaging and streaming broker",
+              serviceAlias = { "rabbitmq" })
 public class RabbitMQLocalContainerInfraService implements 
RabbitMQInfraService, ContainerService<RabbitMQContainer> {
     private static final Logger LOG = 
LoggerFactory.getLogger(RabbitMQLocalContainerInfraService.class);
 
diff --git 
a/test-infra/camel-test-infra-redis/src/main/java/org/apache/camel/test/infra/redis/services/RedisLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-redis/src/main/java/org/apache/camel/test/infra/redis/services/RedisLocalContainerInfraService.java
index 41a061e5e8e..9c1251ef14d 100644
--- 
a/test-infra/camel-test-infra-redis/src/main/java/org/apache/camel/test/infra/redis/services/RedisLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-redis/src/main/java/org/apache/camel/test/infra/redis/services/RedisLocalContainerInfraService.java
@@ -22,7 +22,9 @@ import 
org.apache.camel.test.infra.redis.common.RedisProperties;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@InfraService(service = RedisInfraService.class, serviceAlias = { "redis" })
+@InfraService(service = RedisInfraService.class,
+              description = "In Memory Database",
+              serviceAlias = { "redis" })
 public class RedisLocalContainerInfraService implements RedisInfraService, 
ContainerService<RedisContainer> {
     private static final Logger LOG = 
LoggerFactory.getLogger(RedisLocalContainerInfraService.class);
 
diff --git 
a/test-infra/camel-test-infra-rocketmq/src/main/java/org/apache/camel/test/infra/rocketmq/services/RocketMQContainerInfraService.java
 
b/test-infra/camel-test-infra-rocketmq/src/main/java/org/apache/camel/test/infra/rocketmq/services/RocketMQContainerInfraService.java
index b406c6124cd..36aca171f80 100644
--- 
a/test-infra/camel-test-infra-rocketmq/src/main/java/org/apache/camel/test/infra/rocketmq/services/RocketMQContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-rocketmq/src/main/java/org/apache/camel/test/infra/rocketmq/services/RocketMQContainerInfraService.java
@@ -29,7 +29,9 @@ import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.Container;
 import org.testcontainers.containers.Network;
 
-@InfraService(service = RocketMQInfraService.class, serviceAlias = { 
"rocketmq" })
+@InfraService(service = RocketMQInfraService.class,
+              description = "Apache RocketMQ is a distributed messaging and 
streaming platform",
+              serviceAlias = { "rocketmq" })
 public class RocketMQContainerInfraService implements RocketMQInfraService, 
ContainerService<RocketMQNameserverContainer> {
     private static final Logger LOG = 
LoggerFactory.getLogger(RocketMQContainerInfraService.class);
     public static final String ROCKETMQ_VERSION = 
LocalPropertyResolver.getProperty(
diff --git 
a/test-infra/camel-test-infra-smb/src/main/java/org/apache/camel/test/infra/smb/services/SmbLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-smb/src/main/java/org/apache/camel/test/infra/smb/services/SmbLocalContainerInfraService.java
index d96763be8df..a6141779566 100644
--- 
a/test-infra/camel-test-infra-smb/src/main/java/org/apache/camel/test/infra/smb/services/SmbLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-smb/src/main/java/org/apache/camel/test/infra/smb/services/SmbLocalContainerInfraService.java
@@ -21,7 +21,9 @@ import org.apache.camel.util.IOHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@InfraService(service = SmbLocalContainerInfraService.class, serviceAlias = { 
"smb" })
+@InfraService(service = SmbLocalContainerInfraService.class,
+              description = "SAMBA File Server",
+              serviceAlias = "smb")
 public class SmbLocalContainerInfraService implements SmbInfraService {
     protected static final Logger LOG = 
LoggerFactory.getLogger(SmbLocalContainerInfraService.class);
     protected final SmbContainer container = new SmbContainer();
diff --git 
a/test-infra/camel-test-infra-solr/src/main/java/org/apache/camel/test/infra/solr/services/SolrLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-solr/src/main/java/org/apache/camel/test/infra/solr/services/SolrLocalContainerInfraService.java
index ca3b5ac8569..5784dc7d309 100644
--- 
a/test-infra/camel-test-infra-solr/src/main/java/org/apache/camel/test/infra/solr/services/SolrLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-solr/src/main/java/org/apache/camel/test/infra/solr/services/SolrLocalContainerInfraService.java
@@ -22,7 +22,9 @@ import org.apache.camel.test.infra.solr.common.SolrProperties;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@InfraService(service = SolrInfraService.class, serviceAlias = { "solr" })
+@InfraService(service = SolrInfraService.class,
+              description = "Apache Solr is a Search Platform",
+              serviceAlias = { "solr" })
 public class SolrLocalContainerInfraService implements SolrInfraService, 
ContainerService<SolrContainer> {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(SolrLocalContainerInfraService.class);
diff --git 
a/test-infra/camel-test-infra-torchserve/src/main/java/org/apache/camel/test/infra/torchserve/services/TorchServeLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-torchserve/src/main/java/org/apache/camel/test/infra/torchserve/services/TorchServeLocalContainerInfraService.java
index 9fd8a68392f..6db5574cd7b 100644
--- 
a/test-infra/camel-test-infra-torchserve/src/main/java/org/apache/camel/test/infra/torchserve/services/TorchServeLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-torchserve/src/main/java/org/apache/camel/test/infra/torchserve/services/TorchServeLocalContainerInfraService.java
@@ -27,7 +27,9 @@ import org.testcontainers.containers.wait.strategy.Wait;
 import org.testcontainers.utility.DockerImageName;
 import org.testcontainers.utility.MountableFile;
 
-@InfraService(service = TorchServeInfraService.class, serviceAlias = { 
"torch-serve" })
+@InfraService(service = TorchServeInfraService.class,
+              description = "TorchServe is a flexible tool for serving 
PyTorch",
+              serviceAlias = { "torch-serve" })
 public class TorchServeLocalContainerInfraService implements 
TorchServeInfraService, ContainerService<GenericContainer<?>> {
     private static final Logger LOG = 
LoggerFactory.getLogger(TorchServeLocalContainerInfraService.class);
 
diff --git 
a/test-infra/camel-test-infra-xmpp/src/main/java/org/apache/camel/test/infra/xmpp/services/XmppLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-xmpp/src/main/java/org/apache/camel/test/infra/xmpp/services/XmppLocalContainerInfraService.java
index b76a27bc982..aad09b7b955 100644
--- 
a/test-infra/camel-test-infra-xmpp/src/main/java/org/apache/camel/test/infra/xmpp/services/XmppLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-xmpp/src/main/java/org/apache/camel/test/infra/xmpp/services/XmppLocalContainerInfraService.java
@@ -23,7 +23,9 @@ import org.apache.camel.test.infra.xmpp.common.XmppProperties;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@InfraService(service = XmppInfraService.class, serviceAlias = { "xmpp" })
+@InfraService(service = XmppInfraService.class,
+              description = "Test XMPP Server",
+              serviceAlias = { "xmpp" })
 public class XmppLocalContainerInfraService implements XmppInfraService, 
ContainerService<XmppServerContainer> {
     private static final Logger LOG = 
LoggerFactory.getLogger(XmppLocalContainerInfraService.class);
 
diff --git 
a/test-infra/camel-test-infra-zookeeper/src/main/java/org/apache/camel/test/infra/zookeeper/services/ZooKeeperLocalContainerInfraService.java
 
b/test-infra/camel-test-infra-zookeeper/src/main/java/org/apache/camel/test/infra/zookeeper/services/ZooKeeperLocalContainerInfraService.java
index dd22dcf4b82..7b89060a265 100644
--- 
a/test-infra/camel-test-infra-zookeeper/src/main/java/org/apache/camel/test/infra/zookeeper/services/ZooKeeperLocalContainerInfraService.java
+++ 
b/test-infra/camel-test-infra-zookeeper/src/main/java/org/apache/camel/test/infra/zookeeper/services/ZooKeeperLocalContainerInfraService.java
@@ -23,7 +23,9 @@ import 
org.apache.camel.test.infra.zookeeper.common.ZooKeeperProperties;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@InfraService(service = ZooKeeperInfraService.class, serviceAlias = { 
"zookeeper" })
+@InfraService(service = ZooKeeperInfraService.class,
+              description = "Zookeeper is a server for highly reliable 
distributed coordination of cloud applications",
+              serviceAlias = { "zookeeper" })
 public class ZooKeeperLocalContainerInfraService implements 
ZooKeeperInfraService, ContainerService<ZooKeeperContainer> {
     private static final Logger LOG = 
LoggerFactory.getLogger(ZooKeeperLocalContainerInfraService.class);
 
diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/CamelTestInfraGenerateMetadataMojo.java
 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/CamelTestInfraGenerateMetadataMojo.java
index 63d8866e437..2becaf7f5cf 100644
--- 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/CamelTestInfraGenerateMetadataMojo.java
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/CamelTestInfraGenerateMetadataMojo.java
@@ -80,6 +80,8 @@ public class CamelTestInfraGenerateMetadataMojo extends 
AbstractGeneratorMojo {
                     
infrastructureServiceModel.setAlias(Arrays.asList(av.asStringArray()));
                 } else if (av.name().equals("serviceImplementationAlias")) {
                     
infrastructureServiceModel.getAliasImplementation().addAll(Arrays.asList(av.asStringArray()));
+                } else if (av.name().equals("description")) {
+                    infrastructureServiceModel.setDescription(av.asString());
                 }
             }
 
@@ -103,6 +105,7 @@ public class CamelTestInfraGenerateMetadataMojo extends 
AbstractGeneratorMojo {
 
     private class InfrastructureServiceModel {
         private String service;
+        private String description;
         private String implementation;
         private List<String> alias = new ArrayList<>();
         private List<String> aliasImplementation = new ArrayList<>();
@@ -138,5 +141,13 @@ public class CamelTestInfraGenerateMetadataMojo extends 
AbstractGeneratorMojo {
         public void setAliasImplementation(List<String> aliasImplementation) {
             this.aliasImplementation = aliasImplementation;
         }
+
+        public String getDescription() {
+            return description;
+        }
+
+        public void setDescription(String description) {
+            this.description = description;
+        }
     }
 }
diff --git 
a/tooling/spi-annotations/src/main/java/org/apache/camel/spi/annotations/InfraService.java
 
b/tooling/spi-annotations/src/main/java/org/apache/camel/spi/annotations/InfraService.java
index 354fcce94c4..83fc356ab32 100644
--- 
a/tooling/spi-annotations/src/main/java/org/apache/camel/spi/annotations/InfraService.java
+++ 
b/tooling/spi-annotations/src/main/java/org/apache/camel/spi/annotations/InfraService.java
@@ -42,6 +42,15 @@ public @interface InfraService {
      */
     Class service();
 
+    /**
+     * Returns a description of this Service.
+     *
+     * This is used for documentation and tooling.
+     *
+     * @return
+     */
+    String description() default "";
+
     /**
      * List of names that can be used to run the service
      *

Reply via email to