diff --git a/tcp_tests/helpers/ext.py b/tcp_tests/helpers/ext.py
index ca50c2e..5369535 100644
--- a/tcp_tests/helpers/ext.py
+++ b/tcp_tests/helpers/ext.py
@@ -23,7 +23,7 @@
         return collections.namedtuple('Enum', names)(*values)
     return collections.namedtuple('Enum', values)(*values)
 
-UNDERLAY_NODE_ROLE = enum(
+UNDERLAY_NODE_ROLES = enum(
     'salt_master',
     'salt_minion',
 )
diff --git a/tcp_tests/managers/envmanager_devops.py b/tcp_tests/managers/envmanager_devops.py
index e4cbf0d..9461c71 100644
--- a/tcp_tests/managers/envmanager_devops.py
+++ b/tcp_tests/managers/envmanager_devops.py
@@ -102,8 +102,7 @@
         :rtype: dict
         """
         result = {}
-#        for node in self.k8s_nodes:
-        for node in self.master_nodes + self.slave_nodes:
+        for node in self._env.get_nodes(role__in=ext.UNDERLAY_NODE_ROLES):
             lvm = filter(lambda x: x.volume.name == 'lvm', node.disk_devices)
             if len(lvm) == 0:
                 continue
@@ -248,7 +247,7 @@
             raise exceptions.EnvironmentAlreadyExists(env_name)
         self._env.define()
         LOG.info(
-            'Environment "{0}" created and started'.format(env_name)
+            'Environment "{0}" created'.format(env_name)
         )
 
     def start(self):
@@ -258,9 +257,9 @@
         if self._env is None:
             raise exceptions.EnvironmentIsNotSet()
         self._env.start()
-#        for node in self.k8s_nodes:
-        for node in self.master_nodes + self.slave_nodes:
-            LOG.debug("Waiting for SSH on node '{}...'".format(node.name))
+        LOG.info('Environment "{0}" started'.format(self._env.name))
+        for node in self._env.get_nodes(role__in=ext.UNDERLAY_NODE_ROLES):
+            LOG.info("Waiting for SSH on node '{}...'".format(node.name))
             timeout = 360
             helpers.wait(
                 lambda: helpers.tcp_ping(self.node_ip(node), 22),
@@ -269,6 +268,7 @@
                     node.name, timeout
                 )
             )
+        LOG.info('Environment "{0}" ready'.format(self._env.name))
 
     def resume(self):
         """Resume environment"""
@@ -318,7 +318,7 @@
         :rtype: list
         """
         nodes = self.__get_nodes_by_role(
-            node_role=ext.UNDERLAY_NODE_ROLE.salt_master)
+            node_role=ext.UNDERLAY_NODE_ROLES.salt_master)
         return nodes
 
     @property
@@ -328,38 +328,20 @@
         :rtype: list
         """
         nodes = self.__get_nodes_by_role(
-            node_role=ext.UNDERLAY_NODE_ROLE.salt_minion)
+            node_role=ext.UNDERLAY_NODE_ROLES.salt_minion)
         return nodes
 
-#    @staticmethod
-#    def node_ip(node):
-#        """Determine node's IP
-#
-#        :param node: devops.models.Node
-#        :return: string
-#        """
-#        LOG.debug('Trying to determine {0} ip.'.format(node.name))
-#        return node.get_ip_address_by_network_name(
-#            ext.NETWORK_TYPE.public
-#        )
+    @staticmethod
+    def node_ip(node):
+        """Determine node's IP
 
-#    @property
-#    def admin_ips(self):
-#        """Property to get ip of admin role VMs
-#
-#        :return: list
-#        """
-#        nodes = self.master_nodes
-#        return [self.node_ip(node) for node in nodes]
-
-#    @property
-#    def slave_ips(self):
-#        """Property to get ip(s) of slave role VMs
-#
-#        :return: list
-#        """
-#        nodes = self.slave_nodes
-#        return [self.node_ip(node) for node in nodes]
+        :param node: devops.models.Node
+        :return: string
+        """
+        LOG.debug('Trying to determine {0} ip.'.format(node.name))
+        return node.get_ip_address_by_network_name(
+            ext.NETWORK_TYPE.public
+        )
 
     @property
     def nameserver(self):
diff --git a/tcp_tests/settings_oslo.py b/tcp_tests/settings_oslo.py
index 5ba6602..7e8490d 100644
--- a/tcp_tests/settings_oslo.py
+++ b/tcp_tests/settings_oslo.py
@@ -51,8 +51,8 @@
                   }, ...]""", default=[]),
     ct.Cfg('roles', ct.JSONList(),
            help="Node roles managed by underlay in the environment",
-           default=[ext.UNDERLAY_NODE_ROLE.salt_master,
-                    ext.UNDERLAY_NODE_ROLE.salt_minion, ]),
+           default=[ext.UNDERLAY_NODE_ROLES.salt_master,
+                    ext.UNDERLAY_NODE_ROLES.salt_minion, ]),
     ct.Cfg('nameservers', ct.JSONList(),
            help="IP addresses of DNS servers",
            default=[]),
