# -*- coding: utf-8 -*- | |
''' | |
Module for defining new filter for sorting | |
host names/alias by FQDN first and alphabetically | |
''' | |
from jinja2 import Undefined | |
def __virtual__(): | |
return 'linux_hosts' | |
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(set(iterable), cmp=fqdn_sort_fn) |