diff --git a/tcp_tests/tests/system/test_ceph_operations.py b/tcp_tests/tests/system/test_ceph_operations.py
new file mode 100644
index 0000000..cfff2b5
--- /dev/null
+++ b/tcp_tests/tests/system/test_ceph_operations.py
@@ -0,0 +1,165 @@
+import pytest
+
+from tcp_tests import logger
+
+LOG = logger.logger
+
+
+@pytest.fixture(scope='module')
+def add_xtra_node_to_salt(salt_actions, underlay_actions, config):
+    """
+
+    :return:
+    """
+    LOG.info("Executing pytest SETUP from add_xtra_node_to_salt fixture")
+    xtra_node = [node['node_name'] for node in config.underlay.ssh
+                 if 'xtra' in node.get('node_name')][0]
+
+    cfg_node = [node['node_name'] for node in config.underlay.ssh
+                if 'salt_master' in node.get('roles')][0]
+
+    underlay_actions.check_call(
+            "salt-key -a {node} --include-all -y".format(node=xtra_node),
+            node_name=cfg_node,
+            raise_on_err=False)
+    # Need to restart salt-minion service after accepting it in Salt Master
+    underlay_actions.check_call(
+        "systemctl restart salt-minion",
+        node_name=xtra_node,
+        raise_on_err=False)
+    yield
+
+    # LOG.info("Executing pytest TEARDOWN from add_xtra_node_to_salt fixture")
+    # underlay_actions.check_call(
+    #         "salt-key -r {node} --include-all -y".format(node=node),
+    #         node_name=cfg_node,
+    #         raise_on_err=False)
+
+
+@pytest.mark.usefixtures("add_xtra_node_to_salt")
+class TestCephOsd(object):
+
+    @pytest.fixture
+    def describe_node_in_reclass(self,
+                                 reclass_actions, salt_actions):
+        LOG.info("Executing pytest SETUP "
+                 "from describe_node_in_reclass fixture")
+        reclass = reclass_actions
+        # ---- cluster/*/ceph/init.yml ---------------
+        path = "cluster/*/ceph/init.yml"
+        reclass.add_key("parameters._param.ceph_osd_node04_hostname",
+                        "xtra",
+                        path)
+        reclass.add_key("parameters._param.ceph_osd_node04_address",
+                        "10.6.0.205",
+                        path)
+        reclass.add_key("parameters._param.ceph_osd_system_codename",
+                        "xenial",
+                        path)
+        reclass.add_key("parameters.linux.network.host.xtra.address",
+                        "${_param:ceph_osd_node04_address}",
+                        path)
+        reclass.add_key(
+            key="parameters.linux.network.host.xtra.names",
+            value="['${_param:ceph_osd_node04_hostname}', "
+            "'${_param:ceph_osd_node04_hostname}.${_param:cluster_domain}']",
+            short_path=path)
+
+        # ------- cluster/infra/config/init.yml -----------
+        path = "cluster/*/infra/config/init.yml"
+        parameter = "parameters.reclass.storage.node.ceph_osd_node04"
+        reclass.add_key(parameter + ".name",
+                        "${_param:ceph_osd_node04_hostname}",
+                        path)
+        reclass.add_key(parameter + ".domain",
+                        "${_param:cluster_domain}",
+                        path)
+        reclass.add_key(parameter + ".classes",
+                        "['cluster.${_param:cluster_name}.ceph.osd']",
+                        path)
+        reclass.add_key(parameter + ".params.salt_master_host",
+                        "${_param:reclass_config_master}",
+                        path)
+        reclass.add_key(parameter + ".params.linux_system_codename",
+                        "${_param:ceph_osd_system_codename}",
+                        path)
+        reclass.add_key(parameter + ".params.single_address",
+                        "${_param:ceph_osd_node04_address}",
+                        path)
+        reclass.add_key(parameter + ".params.ceph_crush_parent",
+                        "rack02",
+                        path)
+
+    def test_add_node_process(self, describe_node_in_reclass,
+                              drivetrain_actions):
+        """
+        https://docs.mirantis.com/mcp/q4-18/mcp-operations-guide/openstack-operations/ceph-operations/manage-nodes/add-osd-nodes.html
+        :param describe_node_in_reclass:
+        :param drivetrain_actions:
+        :return:
+        test took about 20 min
+        """
+        dt = drivetrain_actions
+
+        job_name = "ceph-add-osd-upmap"
+        job_parameters = {
+            'HOST': 'xtra*',
+            'HOST_TYPE': 'osd'
+            }
+        add_node_pipeline = dt.start_job_on_jenkins(
+            job_name=job_name,
+            job_parameters=job_parameters,
+            verbose=True)
+        assert add_node_pipeline == 'SUCCESS'
+
+    def test_added_node(self):
+        # root@osd001:~# ceph osd tree in
+        # ID CLASS WEIGHT  TYPE NAME       STATUS REWEIGHT PRI-AFF
+        # -1       0.18585 root default
+        # -3       0.04646     host osd001
+        #  0   hdd 0.01549         osd.0       up  1.00000 1.00000
+        #  1   hdd 0.01549         osd.1       up  1.00000 1.00000
+        #  2   hdd 0.01549         osd.2       up  1.00000 1.00000
+        # -5       0.04646     host osd002
+        #  3   hdd 0.01549         osd.3       up  1.00000 1.00000
+        #  5   hdd 0.01549         osd.5       up  1.00000 1.00000
+        #  6   hdd 0.01549         osd.6       up  1.00000 1.00000
+        # -7       0.04646     host osd003
+        #  4   hdd 0.01549         osd.4       up  1.00000 1.00000
+        #  7   hdd 0.01549         osd.7       up  1.00000 1.00000
+        #  8   hdd 0.01549         osd.8       up  1.00000 1.00000
+        # -9       0.04646     host xtra
+        #  9   hdd 0.01549         osd.9       up  1.00000 1.00000
+        # 10   hdd 0.01549         osd.10      up  1.00000 1.00000
+        # 11   hdd 0.01549         osd.11      up  1.00000 1.00000
+        pass
+
+    def test_delete_node_process(self, drivetrain_actions):
+        dt = drivetrain_actions
+
+        job_name = "ceph-remove-node"
+        job_parameters = {
+            'HOST': 'xtra*',
+            'HOST_TYPE': 'osd'
+            }
+        remove_node_pipeline = dt.start_job_on_jenkins(
+            job_name=job_name,
+            job_parameters=job_parameters,
+            verbose=True)
+        assert remove_node_pipeline == 'SUCCESS'
+
+
+class TestCephMon(object):
+    def test_add_node(self):
+        pass
+
+    def test_delete_node(self):
+        pass
+
+
+class TestCephMgr(object):
+    def test_add_node(self):
+        pass
+
+    def test_delete_node(self):
+        pass
