diff --git a/wally/discover/discover.py b/wally/discover/discover.py
index 8c78387..3cd5cff 100644
--- a/wally/discover/discover.py
+++ b/wally/discover/discover.py
@@ -1,3 +1,4 @@
+import os.path
 import logging
 
 from . import ceph
@@ -9,6 +10,23 @@
 logger = logging.getLogger("wally.discover")
 
 
+openrc_templ = """#!/bin/sh
+export LC_ALL=C
+export OS_NO_CACHE='true'
+export OS_TENANT_NAME='{tenant}'
+export OS_USERNAME='{name}'
+export OS_PASSWORD='{passwd}'
+export OS_AUTH_URL='{auth_url}'
+export OS_AUTH_STRATEGY='keystone'
+export OS_REGION_NAME='RegionOne'
+export CINDER_ENDPOINT_TYPE='publicURL'
+export GLANCE_ENDPOINT_TYPE='publicURL'
+export KEYSTONE_ENDPOINT_TYPE='publicURL'
+export NOVA_ENDPOINT_TYPE='publicURL'
+export NEUTRON_ENDPOINT_TYPE='publicURL'
+"""
+
+
 def discover(ctx, discover, clusters_info, var_dir):
     nodes_to_run = []
     clean_data = None
@@ -38,7 +56,6 @@
             nodes_to_run.extend(os_nodes)
 
         elif cluster == "fuel":
-
             res = fuel.discover_fuel_nodes(clusters_info['fuel'], var_dir)
             nodes, clean_data, openrc_dict = res
 
@@ -47,6 +64,17 @@
                                         'tenant': openrc_dict['tenant_name'],
                                         'auth_url': openrc_dict['os_auth_url']}
 
+            env_name = clusters_info['fuel']['openstack_env']
+            env_f_name = env_name
+            for char in "-+ {}()[]":
+                env_f_name = env_f_name.replace(char, '_')
+
+            fuel_openrc_fname = os.path.join(var_dir,
+                                             env_f_name + "_openrc")
+            with open(fuel_openrc_fname, "w") as fd:
+                fd.write(openrc_templ.format(**ctx.fuel_openstack_creds))
+            msg = "Openrc for cluster {0} saves into {1}"
+            logger.debug(msg.format(env_name, fuel_openrc_fname))
             nodes_to_run.extend(nodes)
 
         elif cluster == "ceph":
diff --git a/wally/discover/fuel.py b/wally/discover/fuel.py
index 6e76188..149ec31 100644
--- a/wally/discover/fuel.py
+++ b/wally/discover/fuel.py
@@ -15,7 +15,7 @@
 
 
 logger = logging.getLogger("wally.discover")
-BASE_PF_PORT = 33467
+BASE_PF_PORT = 44006
 
 
 def discover_fuel_nodes(fuel_data, var_dir):
@@ -32,7 +32,7 @@
 
     fuel_nodes = list(cluster.get_nodes())
 
-    logger.debug("Found FUEL {0}".format("".join(map(str, version))))
+    logger.debug("Found FUEL {0}".format(".".join(map(str, version))))
 
     network = 'fuelweb_admin' if version >= [6, 0] else 'admin'
 
@@ -60,15 +60,17 @@
         conn_url = "ssh://root@{0}:{1}:{2}".format(fuel_host,
                                                    port,
                                                    fuel_key_file)
-        nodes.append(Node(conn_url, fuel_node['roles']))
+        node = Node(conn_url, fuel_node['roles'])
+        node.monitor_url = None
+        nodes.append(node)
         ips_ports.append((ip, port))
 
     logger.debug("Found %s fuel nodes for env %r" %
                  (len(nodes), fuel_data['openstack_env']))
 
-    return ([],
-            (ssh_conn, fuel_ext_iface, ips_ports),
-            cluster.get_openrc())
+    # return ([],
+    #         (ssh_conn, fuel_ext_iface, ips_ports),
+    #         cluster.get_openrc())
 
     return (nodes,
             (ssh_conn, fuel_ext_iface, ips_ports),
diff --git a/wally/discover/node.py b/wally/discover/node.py
index fad4f29..dc1c9b0 100644
--- a/wally/discover/node.py
+++ b/wally/discover/node.py
@@ -7,10 +7,20 @@
         self.roles = roles
         self.conn_url = conn_url
         self.connection = None
+        self.monitor_url = None
 
     def get_ip(self):
         return urlparse.urlparse(self.conn_url).hostname
 
+    def get_conn_id(self):
+        host = urlparse.urlparse(self.conn_url).hostname
+        port = urlparse.urlparse(self.conn_url).port
+
+        if port is None:
+            port = 22
+
+        return host + ":" + str(port)
+
     def __str__(self):
         templ = "<Node: url={conn_url!r} roles={roles}" + \
                 " connected={is_connected}>"
