diff --git a/wally/node_utils.py b/wally/node_utils.py
new file mode 100644
index 0000000..e66ba44
--- /dev/null
+++ b/wally/node_utils.py
@@ -0,0 +1,56 @@
+import logging
+import collections
+from typing import Dict, Sequence, NamedTuple
+
+from .node_interfaces import IRPCNode
+
+logger = logging.getLogger("wally")
+
+
+def log_nodes_statistic(nodes: Sequence[IRPCNode]) -> None:
+    logger.info("Found {0} nodes total".format(len(nodes)))
+
+    per_role = collections.defaultdict(int)  # type: Dict[str, int]
+    for node in nodes:
+        for role in node.info.roles:
+            per_role[role] += 1
+
+    for role, count in sorted(per_role.items()):
+        logger.debug("Found {0} nodes with role {1}".format(count, role))
+
+
+
+OSRelease = NamedTuple("OSRelease",
+                       [("distro", str),
+                        ("release", str),
+                        ("arch", str)])
+
+
+def get_os(node: IRPCNode) -> OSRelease:
+    """return os type, release and architecture for node.
+    """
+    arch = node.run("arch", nolog=True).strip()
+
+    try:
+        node.run("ls -l /etc/redhat-release", nolog=True)
+        return OSRelease('redhat', None, arch)
+    except:
+        pass
+
+    try:
+        node.run("ls -l /etc/debian_version", nolog=True)
+
+        release = None
+        for line in node.run("lsb_release -a", nolog=True).split("\n"):
+            if ':' not in line:
+                continue
+            opt, val = line.split(":", 1)
+
+            if opt == 'Codename':
+                release = val.strip()
+
+        return OSRelease('ubuntu', release, arch)
+    except:
+        pass
+
+    raise RuntimeError("Unknown os")
