Change-Id: I7e9267036d473b68c5344ed50304030e6985f27cpull/122/head
# -*- 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) |
{%- do hosts.update({host.address: host.names}) -%} | {%- do hosts.update({host.address: host.names}) -%} | ||||
{%- endfor %} | {%- endfor %} | ||||
{% for address, entries in hosts|dictsort %} | {% 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 %} | {%- endfor %} |