Avoid duplicate 'barbican' service_available option

The cinder and barbican tempest plugins both need the 'barbican'
service_available option to be defined, but they both can't register
the option. This patch ensures the cinder plugin registers the option
only when the barbican plugin isn't present.

Closes-Bug: #1991068
Change-Id: I51a22afae4fc98e2c2b8c1e82e8211a27649022c
diff --git a/cinder_tempest_plugin/config.py b/cinder_tempest_plugin/config.py
index 9cc3573..78dd6ea 100644
--- a/cinder_tempest_plugin/config.py
+++ b/cinder_tempest_plugin/config.py
@@ -26,11 +26,11 @@
 
 # The barbican service is discovered by config_tempest [1], and will appear
 # in the [service_available] group in tempest.conf. However, the 'barbican'
-# option isn't registered by tempest itself, and so we do it here. This adds
-# the ability to test CONF.service_available.barbican.
+# option isn't registered by tempest itself, and so we may need to do it.
+# This adds the ability to test CONF.service_available.barbican.
 #
 # [1] I96800a95f844ce7675d266e456e01620e63e347a
-service_available_option = [
+barbican_service_option = [
     cfg.BoolOpt('barbican',
                 default=False,
                 help="Whether or not barbican is expected to be available"),
diff --git a/cinder_tempest_plugin/plugin.py b/cinder_tempest_plugin/plugin.py
index ed8dc2c..5d170e5 100644
--- a/cinder_tempest_plugin/plugin.py
+++ b/cinder_tempest_plugin/plugin.py
@@ -14,6 +14,7 @@
 #    under the License.
 
 import os
+import sys
 
 from tempest import config
 from tempest.test_discover import plugins
@@ -46,8 +47,12 @@
         config.register_opt_group(conf, config.volume_feature_group,
                                   project_config.cinder_option)
 
-        config.register_opt_group(conf, config.service_available_group,
-                                  project_config.service_available_option)
+        # Define the 'barbican' service_available option, but only if the
+        # barbican_tempest_plugin isn't present. It also defines the option,
+        # and we need to avoid a duplicate option registration.
+        if 'barbican_tempest_plugin' not in sys.modules:
+            config.register_opt_group(conf, config.service_available_group,
+                                      project_config.barbican_service_option)
 
     def get_opt_lists(self):
         """Get a list of options for sample config generation.
@@ -55,8 +60,12 @@
         :return: A list of tuples with the group name and options in that
                  group.
         """
-        return [
+        opt_lists = [
             (config.volume_feature_group.name, project_config.cinder_option),
-            (config.service_available_group.name,
-             project_config.service_available_option),
         ]
+
+        if 'barbican_tempest_plugin' not in sys.modules:
+            opt_lists.append((config.service_available_group.name,
+                              project_config.barbican_service_option))
+
+        return opt_lists