Fix for sorting hostnames and aliases properly

Change-Id: I7e9267036d473b68c5344ed50304030e6985f27c
diff --git a/_modules/linux_hosts.py b/_modules/linux_hosts.py
new file mode 100644
index 0000000..08741ec
--- /dev/null
+++ b/_modules/linux_hosts.py
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+'''
+Module for defining new filter for sorting
+host names/alias by FQDN first and alphabetically
+'''
+
+from jinja2 import Undefined
+
+def fqdn_sort_fn(n1, n2):
+    l1 = n1.split('.')
+    l2 = n2.split('.')
+    if len(l1) > len(l2):
+        return -1
+    if len(l1) < len(l2):
+        return 1
+    for i1, i2 in zip(l1, l2):
+        if i1 < i2:
+            return -1
+        if i1  > i2:
+            return 1
+    return 0
+
+def fqdn_sort_filter(iterable):
+    if iterable is None or isinstance(iterable, Undefined):
+        return iterable
+    # Do effective custom sorting of iterable here
+    return sorted(iterable, cmp=fqdn_sort_fn)
diff --git a/linux/files/hosts b/linux/files/hosts
index e92bd36..4971f6c 100644
--- a/linux/files/hosts
+++ b/linux/files/hosts
@@ -40,5 +40,10 @@
 {%- do hosts.update({host.address: host.names}) -%}
 {%- endfor %}
 {% for address, entries in hosts|dictsort %}
-{{ address }}   {{ entries|join(' ') }}
+{%- if 'linux_hosts.fqdn_sort_filter' in salt.keys() %}
+{%- set sorted_entries = salt['linux_hosts.fqdn_sort_filter'](entries) -%}
+{%- else %}
+{%- set sorted_entries = entries -%}
+{%- endif %}
+{{ address }}   {{ sorted_entries|join(' ') }}
 {%- endfor %}