| # -*- 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) |