diff --git a/ironic_tempest_plugin/common/waiters.py b/ironic_tempest_plugin/common/waiters.py
index c9d87bd..2b35279 100644
--- a/ironic_tempest_plugin/common/waiters.py
+++ b/ironic_tempest_plugin/common/waiters.py
@@ -13,7 +13,6 @@
 #    under the License.
 
 from oslo_log import log
-import six
 from tempest import config
 from tempest.lib.common.utils import test_utils
 from tempest.lib import exceptions as lib_exc
@@ -31,8 +30,8 @@
         timeout = default_timeout
     if interval is None:
         interval = default_interval
-    if (not isinstance(timeout, six.integer_types)
-            or not isinstance(interval, six.integer_types)
+    if (not isinstance(timeout, int)
+            or not isinstance(interval, int)
             or timeout < 0 or interval < 0):
         raise AssertionError(
             'timeout and interval should be >= 0 or None, current values are: '
diff --git a/ironic_tempest_plugin/services/baremetal/base.py b/ironic_tempest_plugin/services/baremetal/base.py
index 3c52fcd..2acad18 100644
--- a/ironic_tempest_plugin/services/baremetal/base.py
+++ b/ironic_tempest_plugin/services/baremetal/base.py
@@ -11,10 +11,11 @@
 #    under the License.
 
 
+import functools
+from http import client as http_client
+from urllib import parse as urllib_parse
+
 from oslo_serialization import jsonutils as json
-import six
-from six.moves import http_client
-from six.moves.urllib import parse as urllib
 from tempest.lib.common import api_version_utils
 from tempest.lib.common import rest_client
 
@@ -36,7 +37,7 @@
 def handle_errors(f):
     """A decorator that allows to ignore certain types of errors."""
 
-    @six.wraps(f)
+    @functools.wraps(f)
     def wrapper(*args, **kwargs):
         param_name = 'ignore_errors'
         ignored_errors = kwargs.get(param_name, tuple())
@@ -149,7 +150,7 @@
         """
         uri = self._get_uri(resource, permanent=permanent)
         if kwargs:
-            uri += "?%s" % urllib.urlencode(kwargs)
+            uri += "?%s" % urllib_parse.urlencode(kwargs)
 
         resp, body = self.get(uri, headers=headers,
                               extra_headers=extra_headers)
diff --git a/ironic_tempest_plugin/services/baremetal/v1/json/baremetal_client.py b/ironic_tempest_plugin/services/baremetal/v1/json/baremetal_client.py
index 9f001b8..26c37e0 100644
--- a/ironic_tempest_plugin/services/baremetal/v1/json/baremetal_client.py
+++ b/ironic_tempest_plugin/services/baremetal/v1/json/baremetal_client.py
@@ -10,7 +10,7 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-from six.moves import http_client
+from http import client as http_client
 
 from ironic_tempest_plugin.services.baremetal import base
 
diff --git a/ironic_tempest_plugin/tests/api/admin/test_nodes.py b/ironic_tempest_plugin/tests/api/admin/test_nodes.py
index 85c31e0..d6b262d 100644
--- a/ironic_tempest_plugin/tests/api/admin/test_nodes.py
+++ b/ironic_tempest_plugin/tests/api/admin/test_nodes.py
@@ -11,7 +11,6 @@
 #    under the License.
 
 from oslo_utils import uuidutils
-import six
 from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
@@ -136,7 +135,7 @@
         body = self.client.get_node_boot_device(self.node['uuid'])
         self.assertIn('boot_device', body)
         self.assertIn('persistent', body)
-        self.assertIsInstance(body['boot_device'], six.string_types)
+        self.assertIsInstance(body['boot_device'], str)
         self.assertIsInstance(body['persistent'], bool)
 
     @decorators.idempotent_id('3622bc6f-3589-4bc2-89f3-50419c66b133')
diff --git a/ironic_tempest_plugin/tests/api/base.py b/ironic_tempest_plugin/tests/api/base.py
index d78f74a..c541dd3 100644
--- a/ironic_tempest_plugin/tests/api/base.py
+++ b/ironic_tempest_plugin/tests/api/base.py
@@ -10,7 +10,8 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import six
+import functools
+
 from tempest import config
 from tempest.lib.common import api_version_utils
 from tempest.lib.common.utils import data_utils
@@ -41,7 +42,7 @@
     """Decorator that adds resources to the appropriate cleanup list."""
 
     def decorator(f):
-        @six.wraps(f)
+        @functools.wraps(f)
         def wrapper(cls, *args, **kwargs):
             resp, body = f(cls, *args, **kwargs)
 
diff --git a/ironic_tempest_plugin/tests/scenario/introspection_manager.py b/ironic_tempest_plugin/tests/scenario/introspection_manager.py
index 199bab1..af971d1 100644
--- a/ironic_tempest_plugin/tests/scenario/introspection_manager.py
+++ b/ironic_tempest_plugin/tests/scenario/introspection_manager.py
@@ -14,7 +14,6 @@
 import time
 
 from oslo_serialization import jsonutils as json
-import six
 import tempest
 from tempest import config
 from tempest.lib.common.api_version_utils import LATEST_MICROVERSION
@@ -173,7 +172,7 @@
         """Waits for introspection of baremetal nodes to finish.
 
         """
-        if isinstance(node_ids, six.text_type):
+        if isinstance(node_ids, str):
             node_ids = [node_ids]
         start = int(time.time())
         not_introspected = {node_id for node_id in node_ids}
diff --git a/requirements.txt b/requirements.txt
index 54751e4..e012abf 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -8,5 +8,4 @@
 oslo.serialization!=2.19.1,>=2.18.0 # Apache-2.0
 oslo.utils>=3.33.0 # Apache-2.0
 fixtures>=3.0.0 # Apache-2.0/BSD
-six>=1.10.0 # MIT
 tempest>=17.1.0 # Apache-2.0
