You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ni...@apache.org on 2021/04/29 14:00:50 UTC

[ignite] branch ignite-ducktape updated: IGNITE-14520 Plugins support in Ignite configuration (#9008)

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

nizhikov pushed a commit to branch ignite-ducktape
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/ignite-ducktape by this push:
     new ee3f454  IGNITE-14520   Plugins support in Ignite configuration (#9008)
ee3f454 is described below

commit ee3f454b7c26b67faed7fd8a668f729ba2d0daaf
Author: Mikhail Filatov <mi...@mfilatov.ru>
AuthorDate: Thu Apr 29 17:00:29 2021 +0300

    IGNITE-14520   Plugins support in Ignite configuration (#9008)
    
    Co-authored-by: Nikolay <ni...@apache.org>
---
 .../utils/check_get_ssl_params_from_globals.py     | 12 +++++--
 modules/ducktests/tests/docker/ducker-ignite       |  5 +++
 .../ignitetest/services/utils/config_template.py   | 20 +++++------
 .../ignitetest/services/utils/ignite_aware.py      |  6 ++--
 .../utils/ignite_configuration/__init__.py         | 15 +++++---
 .../binary_configuration.py}                       |  9 +++--
 .../tests/ignitetest/services/utils/ignite_spec.py | 13 ++++---
 .../tests/ignitetest/services/utils/path.py        |  4 +++
 .../utils/ssl/client_connector_configuration.py    | 10 ++++++
 .../services/utils/ssl/connector_configuration.py  |  1 +
 .../ignitetest/services/utils/ssl/ssl_params.py    |  5 ++-
 .../utils/templates/connector_configuration.j2     |  1 +
 .../services/utils/templates/ignite.xml.j2         | 40 ++++++++++++++++++++--
 .../services/utils/templates/misc_macro.j2         | 22 ++++++++++++
 .../services/utils/templates/ssl_params_macro.j2   |  8 +++++
 15 files changed, 139 insertions(+), 32 deletions(-)

diff --git a/modules/ducktests/tests/checks/utils/check_get_ssl_params_from_globals.py b/modules/ducktests/tests/checks/utils/check_get_ssl_params_from_globals.py
index 4d0b7c7..67343dd 100644
--- a/modules/ducktests/tests/checks/utils/check_get_ssl_params_from_globals.py
+++ b/modules/ducktests/tests/checks/utils/check_get_ssl_params_from_globals.py
@@ -95,15 +95,21 @@ class TestParams:
     expected_ssl_params_jks = {'key_store_path': os.path.join(CERT_DIR1, TEST_KEYSTORE_JKS),
                                'key_store_password': TEST_PASSWORD,
                                'trust_store_path': os.path.join(CERT_DIR1, TEST_TRUSTSTORE_JKS),
-                               'trust_store_password': TEST_PASSWORD}
+                               'trust_store_password': TEST_PASSWORD,
+                               'cipher_suites': None,
+                               'trust_managers': None}
     expected_ssl_params_path = {'key_store_path': os.path.join(CERT_DIR2, TEST_KEYSTORE_JKS),
                                 'key_store_password': TEST_PASSWORD,
                                 'trust_store_path': os.path.join(CERT_DIR2, TEST_TRUSTSTORE_JKS),
-                                'trust_store_password': TEST_PASSWORD}
+                                'trust_store_password': TEST_PASSWORD,
+                                'cipher_suites': None,
+                                'trust_managers': None}
     expected_ssl_params_default = {'key_store_path': os.path.join(CERT_DIR1, DEFAULT_CLIENT_KEYSTORE),
                                    'key_store_password': DEFAULT_PASSWORD,
                                    'trust_store_path': os.path.join(CERT_DIR1, DEFAULT_TRUSTSTORE),
-                                   'trust_store_password': DEFAULT_PASSWORD}
+                                   'trust_store_password': DEFAULT_PASSWORD,
+                                   'cipher_suites': None,
+                                   'trust_managers': None}
 
 
 class CheckCaseJks:
diff --git a/modules/ducktests/tests/docker/ducker-ignite b/modules/ducktests/tests/docker/ducker-ignite
index 22cb4d3..b56c64c 100755
--- a/modules/ducktests/tests/docker/ducker-ignite
+++ b/modules/ducktests/tests/docker/ducker-ignite
@@ -479,6 +479,11 @@ ducker_test() {
     must_pushd "${ignite_dir}"
     #(test mvn) && mvn package -DskipTests -Dmaven.javadoc.skip=true -Plgpl,-examples,-clean-libs,-release,-scala,-clientDocs
     must_popd
+    if [[ -n "${DUCKTAPE_EXTRA_SETUP}" ]]; then
+        echo "executing extra ducktape setup with '${DUCKTAPE_EXTRA_SETUP}'"
+        docker exec --user=root ducker01 bash -c "${DUCKTAPE_EXTRA_SETUP}"
+        [[ $? -ne 0 ]] && die "failed to execute extra ducktape setup."
+    fi
     cmd="cd /opt/ignite-dev && ducktape --cluster-file /opt/ignite-dev/modules/ducktests/tests/docker/build/cluster.json $args"
     echo "docker exec ducker01 bash -c \"${cmd}\""
     exec docker exec --user=ducker ducker01 bash -c "${cmd}"
diff --git a/modules/ducktests/tests/ignitetest/services/utils/config_template.py b/modules/ducktests/tests/ignitetest/services/utils/config_template.py
index 7ed35f9..2d430aa 100644
--- a/modules/ducktests/tests/ignitetest/services/utils/config_template.py
+++ b/modules/ducktests/tests/ignitetest/services/utils/config_template.py
@@ -20,9 +20,13 @@ import os
 
 from jinja2 import FileSystemLoader, Environment
 
-DEFAULT_CONFIG_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), "templates")
-DEFAULT_IGNITE_CONF = os.path.join(DEFAULT_CONFIG_PATH, "ignite.xml.j2")
-DEFAULT_THIN_CLIENT_CONF = os.path.join(DEFAULT_CONFIG_PATH, "thin_client_config.xml.j2")
+IGNITE_TEMPLATE_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), "templates")
+ZK_TEMPLATE_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "zk", "templates")
+DEFAULT_IGNITE_CONF = "ignite.xml.j2"
+DEFAULT_THIN_CLIENT_CONF = "thin_client_config.xml.j2"
+DEFAULT_LOG4J_CONF = "log4j.xml.j2"
+
+TEMPLATE_PATHES = [IGNITE_TEMPLATE_PATH, ZK_TEMPLATE_PATH]
 
 
 class ConfigTemplate:
@@ -30,13 +34,9 @@ class ConfigTemplate:
     Basic configuration.
     """
     def __init__(self, path):
-        tmpl_dir = os.path.dirname(path)
-        tmpl_file = os.path.basename(path)
-
-        tmpl_loader = FileSystemLoader(searchpath=[DEFAULT_CONFIG_PATH, tmpl_dir])
-        env = Environment(loader=tmpl_loader)
+        env = Environment(loader=FileSystemLoader(searchpath=TEMPLATE_PATHES))
 
-        self.template = env.get_template(tmpl_file)
+        self.template = env.get_template(path)
         self.default_params = {}
 
     def render(self, **kwargs):
@@ -79,4 +79,4 @@ class IgniteLoggerConfigTemplate(ConfigTemplate):
     Ignite logger configuration.
     """
     def __init__(self):
-        super().__init__(os.path.join(DEFAULT_CONFIG_PATH, "log4j.xml.j2"))
+        super().__init__(DEFAULT_LOG4J_CONF)
diff --git a/modules/ducktests/tests/ignitetest/services/utils/ignite_aware.py b/modules/ducktests/tests/ignitetest/services/utils/ignite_aware.py
index 936093f..663d2f2 100644
--- a/modules/ducktests/tests/ignitetest/services/utils/ignite_aware.py
+++ b/modules/ducktests/tests/ignitetest/services/utils/ignite_aware.py
@@ -190,9 +190,11 @@ class IgniteAwareService(BackgroundThreadService, IgnitePathAware, metaclass=ABC
             node.account.copy_to(os.path.join(local_shared_dir, file), self.shared_root)
 
     def _prepare_configs(self, node):
-        config = self.config.prepare_for_env(self.globals, self.shared_root, node, self)
+        config = self.spec \
+            .extend_config(self.config) \
+            .prepare_for_env(self, node)
 
-        for name, template in self.spec.config_templates:
+        for name, template in self.spec.config_templates():
             config_txt = template.render(config_dir=self.config_dir, work_dir=self.work_dir, config=config)
 
             node.account.create_file(os.path.join(self.config_dir, name), config_txt)
diff --git a/modules/ducktests/tests/ignitetest/services/utils/ignite_configuration/__init__.py b/modules/ducktests/tests/ignitetest/services/utils/ignite_configuration/__init__.py
index 5442488..18b93c1 100644
--- a/modules/ducktests/tests/ignitetest/services/utils/ignite_configuration/__init__.py
+++ b/modules/ducktests/tests/ignitetest/services/utils/ignite_configuration/__init__.py
@@ -25,6 +25,7 @@ from ignitetest.services.utils.ssl.client_connector_configuration import ClientC
 from ignitetest.services.utils.ssl.connector_configuration import ConnectorConfiguration
 from ignitetest.services.utils.ignite_configuration.data_storage import DataStorageConfiguration
 from ignitetest.services.utils.ignite_configuration.discovery import DiscoverySpi, TcpDiscoverySpi
+from ignitetest.services.utils.ignite_configuration.binary_configuration import BinaryConfiguration
 from ignitetest.services.utils.ssl.ssl_params import SslParams, is_ssl_enabled, get_ssl_params, IGNITE_CLIENT_ALIAS, \
     IGNITE_SERVER_ALIAS
 from ignitetest.utils.version import IgniteVersion, DEV_BRANCH
@@ -45,6 +46,7 @@ class IgniteConfiguration(NamedTuple):
     sys_worker_blocked_timeout: int = 10000
     properties: str = None
     data_storage: DataStorageConfiguration = None
+    binary_configuration: BinaryConfiguration = None
     caches: list = []
     local_host: str = None
     ssl_params: SslParams = None
@@ -52,11 +54,16 @@ class IgniteConfiguration(NamedTuple):
     client_connector_configuration: ClientConnectorConfiguration = None
     auth_enabled: bool = False
     plugins: list = []
+    ext_beans: list = []
+    peer_class_loading_enabled: bool = True
     metric_exporter: str = None
     rebalance_thread_pool_size: int = None
     rebalance_batch_size: int = None
     rebalance_batches_prefetch_count: int = None
     rebalance_throttle: int = None
+    local_event_listeners: str = None
+    include_event_types: str = None
+    event_storage_spi: str = None
 
     def __prepare_ssl(self, test_globals, shared_root):
         """
@@ -75,7 +82,7 @@ class IgniteConfiguration(NamedTuple):
                                                                                 ssl_params=ssl_params))
         return self
 
-    def __prepare_discovery(self, node, cluster):
+    def __prepare_discovery(self, cluster, node):
         """
         Updates discovery configuration based on current environment.
         """
@@ -90,11 +97,11 @@ class IgniteConfiguration(NamedTuple):
         return config
 
     # pylint: disable=protected-access
-    def prepare_for_env(self, test_globals, shared_root, node, cluster):
+    def prepare_for_env(self, cluster, node):
         """
         Updates configuration based on current environment.
         """
-        return self.__prepare_ssl(test_globals, shared_root).__prepare_discovery(node, cluster)
+        return self.__prepare_ssl(cluster.globals, cluster.shared_root).__prepare_discovery(cluster, node)
 
     @property
     def service_type(self):
@@ -119,7 +126,7 @@ class IgniteThinClientConfiguration(NamedTuple):
     version: IgniteVersion = DEV_BRANCH
 
     # pylint: disable=unused-argument
-    def prepare_for_env(self, test_globals, shared_root, node, cluster):
+    def prepare_for_env(self, cluster, node):
         """
         Updates configuration based on current environment.
         """
diff --git a/modules/ducktests/tests/ignitetest/services/utils/ssl/client_connector_configuration.py b/modules/ducktests/tests/ignitetest/services/utils/ignite_configuration/binary_configuration.py
similarity index 78%
copy from modules/ducktests/tests/ignitetest/services/utils/ssl/client_connector_configuration.py
copy to modules/ducktests/tests/ignitetest/services/utils/ignite_configuration/binary_configuration.py
index 819e8b1..458580f 100644
--- a/modules/ducktests/tests/ignitetest/services/utils/ssl/client_connector_configuration.py
+++ b/modules/ducktests/tests/ignitetest/services/utils/ignite_configuration/binary_configuration.py
@@ -14,15 +14,14 @@
 # limitations under the License
 
 """
-This module contains classes and utilities for Ignite ConnectorConfiguration.
+This module contains classes and utilities for Ignite Binary configuration.
 """
 
 from typing import NamedTuple
 
 
-class ClientConnectorConfiguration(NamedTuple):
+class BinaryConfiguration(NamedTuple):
     """
-    Ignite ClientConnectorConfiguration.
-    Used to configure thin client properties.
+    Ignite Binary Configuration
     """
-    port: int = 10800
+    compact_footer: bool = True
diff --git a/modules/ducktests/tests/ignitetest/services/utils/ignite_spec.py b/modules/ducktests/tests/ignitetest/services/utils/ignite_spec.py
index bdc2cd4..c4ac4b0 100644
--- a/modules/ducktests/tests/ignitetest/services/utils/ignite_spec.py
+++ b/modules/ducktests/tests/ignitetest/services/utils/ignite_spec.py
@@ -92,7 +92,6 @@ class IgniteSpec(metaclass=ABCMeta):
                             "-Dlog4j.configuration=file:" + self.service.log_config_file,
                             "-Dlog4j.configDebug=true"])
 
-    @property
     def config_templates(self):
         """
         :return: config that service will use to start on a node
@@ -111,6 +110,13 @@ class IgniteSpec(metaclass=ABCMeta):
 
         return config_templates
 
+    # pylint: disable=unused-argument,no-self-use
+    def extend_config(self, config):
+        """
+        Extend config with custom variables
+        """
+        return config
+
     def __home(self, product=None):
         """
         Get home directory for current spec.
@@ -180,8 +186,7 @@ class IgniteSpec(metaclass=ABCMeta):
 
         script_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "..", "..", "certs")
 
-        self.__runcmd(f"cp {script_dir}/*.sh {local_dir}")
-        self.__runcmd(f"{local_dir}/mkcerts.sh")
+        self._runcmd(f"{script_dir}/mkcerts.sh {local_dir}")
 
         return local_dir
 
@@ -196,7 +201,7 @@ class IgniteSpec(metaclass=ABCMeta):
         """Properly adds JVM options to current"""
         self.jvm_opts = merge_jvm_settings(self.jvm_opts, opts)
 
-    def __runcmd(self, cmd):
+    def _runcmd(self, cmd):
         self.service.logger.debug(cmd)
         proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
         stdout, _ = proc.communicate()
diff --git a/modules/ducktests/tests/ignitetest/services/utils/path.py b/modules/ducktests/tests/ignitetest/services/utils/path.py
index ed14468..efac7a3 100644
--- a/modules/ducktests/tests/ignitetest/services/utils/path.py
+++ b/modules/ducktests/tests/ignitetest/services/utils/path.py
@@ -66,6 +66,10 @@ class PathAware:
             "config": {
                 "path": self.config_dir,
                 "collect_default": True
+            },
+            "shared": {
+                "path": self.shared_root,
+                "collect_default": True
             }
         })
 
diff --git a/modules/ducktests/tests/ignitetest/services/utils/ssl/client_connector_configuration.py b/modules/ducktests/tests/ignitetest/services/utils/ssl/client_connector_configuration.py
index 819e8b1..5757fdf 100644
--- a/modules/ducktests/tests/ignitetest/services/utils/ssl/client_connector_configuration.py
+++ b/modules/ducktests/tests/ignitetest/services/utils/ssl/client_connector_configuration.py
@@ -19,6 +19,8 @@ This module contains classes and utilities for Ignite ConnectorConfiguration.
 
 from typing import NamedTuple
 
+from ignitetest.services.utils.ssl.ssl_params import SslParams
+
 
 class ClientConnectorConfiguration(NamedTuple):
     """
@@ -26,3 +28,11 @@ class ClientConnectorConfiguration(NamedTuple):
     Used to configure thin client properties.
     """
     port: int = 10800
+    ssl_enabled: bool = False
+    use_ignite_ssl_context_factory: bool = True
+    ssl_client_auth: bool = False
+    ssl_params: SslParams = None
+    ssl_enabled: bool = False
+    use_ignite_ssl_context_factory: bool = True
+    ssl_client_auth: bool = False
+    ssl_params: SslParams = None
diff --git a/modules/ducktests/tests/ignitetest/services/utils/ssl/connector_configuration.py b/modules/ducktests/tests/ignitetest/services/utils/ssl/connector_configuration.py
index 6da08c1..8770cd7 100644
--- a/modules/ducktests/tests/ignitetest/services/utils/ssl/connector_configuration.py
+++ b/modules/ducktests/tests/ignitetest/services/utils/ssl/connector_configuration.py
@@ -28,4 +28,5 @@ class ConnectorConfiguration(NamedTuple):
     Used to connect from ControlUtility (control.sh).
     """
     ssl_enabled: bool = False
+    ssl_client_auth: bool = False
     ssl_params: SslParams = None
diff --git a/modules/ducktests/tests/ignitetest/services/utils/ssl/ssl_params.py b/modules/ducktests/tests/ignitetest/services/utils/ssl/ssl_params.py
index b3b3af1..c769f6d 100644
--- a/modules/ducktests/tests/ignitetest/services/utils/ssl/ssl_params.py
+++ b/modules/ducktests/tests/ignitetest/services/utils/ssl/ssl_params.py
@@ -47,7 +47,8 @@ class SslParams:
     # pylint: disable=R0913
     def __init__(self, root_dir: str, key_store_jks: str = None, key_store_password: str = DEFAULT_PASSWORD,
                  trust_store_jks: str = DEFAULT_TRUSTSTORE, trust_store_password: str = DEFAULT_PASSWORD,
-                 key_store_path: str = None, trust_store_path: str = None):
+                 key_store_path: str = None, trust_store_path: str = None, cipher_suites: str = None,
+                 trust_managers: str = None):
         if not key_store_jks and not key_store_path:
             raise Exception("Keystore must be specified to init SslParams")
 
@@ -55,6 +56,8 @@ class SslParams:
         self.key_store_password = key_store_password
         self.trust_store_path = trust_store_path if trust_store_path else os.path.join(root_dir, trust_store_jks)
         self.trust_store_password = trust_store_password
+        self.cipher_suites = cipher_suites
+        self.trust_managers = trust_managers
 
 
 def get_ssl_params(_globals: dict, shared_root: str, alias: str):
diff --git a/modules/ducktests/tests/ignitetest/services/utils/templates/connector_configuration.j2 b/modules/ducktests/tests/ignitetest/services/utils/templates/connector_configuration.j2
index 1fe7207..ee61687 100644
--- a/modules/ducktests/tests/ignitetest/services/utils/templates/connector_configuration.j2
+++ b/modules/ducktests/tests/ignitetest/services/utils/templates/connector_configuration.j2
@@ -24,6 +24,7 @@
                 <property name="sslFactory">
                     {{ ssl_params_util.ssl_params(config.ssl_params) }}
                 </property>
+                <property name="sslClientAuth" value="{{ config.ssl_client_auth }}"/>
                 {% endif %}
         </bean>
 {% endmacro %}
diff --git a/modules/ducktests/tests/ignitetest/services/utils/templates/ignite.xml.j2 b/modules/ducktests/tests/ignitetest/services/utils/templates/ignite.xml.j2
index a74a5d8..f8993d0 100644
--- a/modules/ducktests/tests/ignitetest/services/utils/templates/ignite.xml.j2
+++ b/modules/ducktests/tests/ignitetest/services/utils/templates/ignite.xml.j2
@@ -27,8 +27,9 @@
 
 <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://www.springframework.org/schema/beans
-                            http://www.springframework.org/schema/beans/spring-beans.xsd">
+       xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="
+        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
     <bean class="org.apache.ignite.configuration.IgniteConfiguration">
         <property name="workDirectory" value="{{ work_dir }}" />
         <property name="gridLogger">
@@ -41,6 +42,7 @@
         <property name="consistentId" value="{{ config.consistent_id }}"/>
         <property name="failureDetectionTimeout" value="{{ config.failure_detection_timeout }}"/>
         <property name="systemWorkerBlockedTimeout" value="{{ config.sys_worker_blocked_timeout }}"/>
+        <property name="peerClassLoadingEnabled" value="{{ config.peer_class_loading_enabled }}"/>
         <property name="authenticationEnabled" value="{{ config.auth_enabled | lower }}"/>
         {% if config.rebalance_thread_pool_size %}
             <property name="rebalanceThreadPoolSize" value="{{ config.rebalance_thread_pool_size }}"/>
@@ -93,9 +95,41 @@
         {% if config.client_connector_configuration %}
             <property name="clientConnectorConfiguration">
                 <bean class="org.apache.ignite.configuration.ClientConnectorConfiguration">
-                        <property name="port" value="{{ config.client_connector_configuration.port }}"/>
+                    <property name="port" value="{{ config.client_connector_configuration.port }}"/>
+                    {% if config.client_connector_configuration.ssl_enabled %}
+                        <property name="sslEnabled" value="true"/>
+                        <property name="sslContextFactory">
+                            {{ ssl_params_util.ssl_params(config.client_connector_configuration.ssl_params) }}
+                        </property>
+                        <property name="useIgniteSslContextFactory" value="{{ config.client_connector_configuration.use_ignite_ssl_context_factory }}"/>
+                        <property name="sslClientAuth" value="{{ config.client_connector_configuration.ssl_client_auth }}"/>
+                    {% endif %}
                 </bean>
             </property>
         {% endif %}
+
+        {% if config.binary_configuration %}
+            <property name="binaryConfiguration">
+                <bean class="org.apache.ignite.configuration.BinaryConfiguration">
+                    <property name="compactFooter" value="{{ config.binary_configuration.compact_footer }}"/>
+                </bean>
+            </property>
+        {% endif %}
+
+        {% if config.local_event_listeners %}
+            <property name="localEventListeners" ref="{{ config.local_event_listeners }}"/>
+        {% endif %}
+
+        {% if config.include_event_types %}
+            <property name="includeEventTypes" ref="{{ config.include_event_types }}"/>
+        {% endif %}
+
+        {% if config.event_storage_spi %}
+            <property name="eventStorageSpi" ref="{{ config.event_storage_spi }}"/>
+        {% endif %}
+
+        {{ misc_utils.plugins(config) }}
     </bean>
+
+    {{ misc_utils.ext_beans(config) }}
 </beans>
diff --git a/modules/ducktests/tests/ignitetest/services/utils/templates/misc_macro.j2 b/modules/ducktests/tests/ignitetest/services/utils/templates/misc_macro.j2
index 892453b..f34f211 100644
--- a/modules/ducktests/tests/ignitetest/services/utils/templates/misc_macro.j2
+++ b/modules/ducktests/tests/ignitetest/services/utils/templates/misc_macro.j2
@@ -22,3 +22,25 @@
         <property name="activeOnStart" value="{{ 'false' if state == 'INACTIVE' else 'true'}}"/>
     {% endif %}
 {% endmacro %}
+
+{% macro plugins(config) %}
+    {% if config.plugins %}
+        <property name="pluginProviders">
+            <list>
+            {% for plugin in config.plugins %}
+                {% import plugin[0] as plugin_template -%}
+                {{ plugin_template.apply(config, plugin[1]) }}
+            {% endfor %}
+            </list>
+        </property>
+    {% endif %}
+{% endmacro %}
+
+{% macro ext_beans(config) %}
+    {% if config.ext_beans %}
+        {% for ext_bean in config.ext_beans %}
+            {% import ext_bean[0] as bean_template -%}
+            {{ bean_template.apply(config, ext_bean[1]) }}
+        {% endfor %}
+    {% endif %}
+{% endmacro %}
diff --git a/modules/ducktests/tests/ignitetest/services/utils/templates/ssl_params_macro.j2 b/modules/ducktests/tests/ignitetest/services/utils/templates/ssl_params_macro.j2
index 8d519c9..2b21fd7 100644
--- a/modules/ducktests/tests/ignitetest/services/utils/templates/ssl_params_macro.j2
+++ b/modules/ducktests/tests/ignitetest/services/utils/templates/ssl_params_macro.j2
@@ -21,5 +21,13 @@
     <property name="keyStorePassword" value="{{ ctx.key_store_password }}"/>
     <property name="trustStoreFilePath" value="{{ ctx.trust_store_path }}"/>
     <property name="trustStorePassword" value="{{ ctx.trust_store_password }}"/>
+
+    {% if ctx.cipher_suites %}
+        <property name="cipherSuites" value="{{ ctx.cipher_suites }}"/>
+    {% endif %}
+
+    {% if ctx.trust_managers %}
+        <property name="trustManagers" ref="{{ ctx.trust_managers }}"/>
+    {% endif %}
 </bean>
 {% endmacro %}