diff --git a/ironic_tempest_plugin/config.py b/ironic_tempest_plugin/config.py
index 6ef2f2f..60ee113 100644
--- a/ironic_tempest_plugin/config.py
+++ b/ironic_tempest_plugin/config.py
@@ -18,6 +18,12 @@
 from tempest import config  # noqa
 
 
+service_option = cfg.BoolOpt('ironic',
+                             default=False,
+                             help='Whether or not Ironic is expected to be '
+                                  'available')
+
+
 baremetal_group = cfg.OptGroup(name='baremetal',
                                title='Baremetal provisioning service options',
                                help='When enabling baremetal tests, Nova '
diff --git a/ironic_tempest_plugin/plugin.py b/ironic_tempest_plugin/plugin.py
new file mode 100644
index 0000000..dbe0f0b
--- /dev/null
+++ b/ironic_tempest_plugin/plugin.py
@@ -0,0 +1,41 @@
+# Copyright 2015 NEC Corporation
+# All Rights Reserved.
+#
+#    Licensed 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.
+
+
+import os
+
+from tempest import config
+from tempest.test_discover import plugins
+
+from ironic_tempest_plugin import config as project_config
+
+
+class IronicTempestPlugin(plugins.TempestPlugin):
+    def load_tests(self):
+        base_path = os.path.split(os.path.dirname(
+            os.path.abspath(__file__)))[0]
+        test_dir = "ironic_tempest_plugin/tests"
+        full_test_dir = os.path.join(base_path, test_dir)
+        return full_test_dir, base_path
+
+    def register_opts(self, conf):
+        conf.register_opt(project_config.service_option,
+                          group='service_available')
+        config.register_opt_group(conf, project_config.baremetal_group,
+                                  project_config.BaremetalGroup)
+
+    def get_opt_lists(self):
+        return [(project_config.baremetal_group.name,
+                 project_config.BaremetalGroup)]
diff --git a/ironic_tempest_plugin/tests/api/admin/base.py b/ironic_tempest_plugin/tests/api/admin/base.py
index 86e4144..7aeb63d 100644
--- a/ironic_tempest_plugin/tests/api/admin/base.py
+++ b/ironic_tempest_plugin/tests/api/admin/base.py
@@ -61,6 +61,8 @@
     @classmethod
     def skip_checks(cls):
         super(BaseBaremetalTest, cls).skip_checks()
+        if not CONF.service_available.ironic:
+            raise cls.skipException('Ironic is not enabled.')
         if CONF.baremetal.driver not in SUPPORTED_DRIVERS:
             skip_msg = ('%s skipped as Ironic driver %s is not supported for '
                         'testing.' %
diff --git a/ironic_tempest_plugin/tests/scenario/baremetal_manager.py b/ironic_tempest_plugin/tests/scenario/baremetal_manager.py
index 0ada88e..286750d 100644
--- a/ironic_tempest_plugin/tests/scenario/baremetal_manager.py
+++ b/ironic_tempest_plugin/tests/scenario/baremetal_manager.py
@@ -56,6 +56,12 @@
     credentials = ['primary', 'admin']
 
     @classmethod
+    def skip_checks(cls):
+        super(BaremetalScenarioTest, cls).skip_checks()
+        if not CONF.service_available.ironic:
+            raise cls.skipException('Ironic is not enabled.')
+
+    @classmethod
     def setup_clients(cls):
         super(BaremetalScenarioTest, cls).setup_clients()
 
diff --git a/ironic_tempest_plugin/tests/scenario/test_baremetal_basic_ops.py b/ironic_tempest_plugin/tests/scenario/test_baremetal_basic_ops.py
index eb51922..6d07399 100644
--- a/ironic_tempest_plugin/tests/scenario/test_baremetal_basic_ops.py
+++ b/ironic_tempest_plugin/tests/scenario/test_baremetal_basic_ops.py
@@ -105,7 +105,7 @@
             self.assertEqual(n_port['mac_address'], port['address'])
 
     @test.idempotent_id('549173a5-38ec-42bb-b0e2-c8b9f4a08943')
-    @test.services('baremetal', 'compute', 'image', 'network')
+    @test.services('compute', 'image', 'network')
     def test_baremetal_server_ops(self):
         self.add_keypair()
         self.instance, self.node = self.boot_instance()
diff --git a/ironic_tempest_plugin/tests/scenario/test_baremetal_multitenancy.py b/ironic_tempest_plugin/tests/scenario/test_baremetal_multitenancy.py
index 3374352..45ad79f 100644
--- a/ironic_tempest_plugin/tests/scenario/test_baremetal_multitenancy.py
+++ b/ironic_tempest_plugin/tests/scenario/test_baremetal_multitenancy.py
@@ -80,7 +80,7 @@
             self.assertNotIn(success_substring, output)
 
     @test.idempotent_id('26e2f145-2a8e-4dc7-8457-7f2eb2c6749d')
-    @test.services('baremetal', 'compute', 'image', 'network')
+    @test.services('compute', 'image', 'network')
     def test_baremetal_multitenancy(self):
 
         tenant_cidr = '10.0.100.0/24'
