2021-08-07 15:02:21 +02:00
|
|
|
# -*- coding: utf-8 -*-
|
2021-02-27 17:42:45 +01:00
|
|
|
# Copyright (C) 2021 Eric Lavarde <elavarde@redhat.com>
|
2022-08-05 12:28:29 +02:00
|
|
|
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
2021-02-27 17:42:45 +01:00
|
|
|
|
|
|
|
from __future__ import (absolute_import, division, print_function)
|
|
|
|
__metaclass__ = type
|
|
|
|
|
2022-05-02 07:25:45 +02:00
|
|
|
DOCUMENTATION = '''
|
|
|
|
name: version_sort
|
|
|
|
short_description: Sort a list according to version order instead of pure alphabetical one
|
|
|
|
version_added: 2.2.0
|
|
|
|
author: Eric L. (@ericzolf)
|
|
|
|
description:
|
|
|
|
- Sort a list according to version order instead of pure alphabetical one.
|
|
|
|
options:
|
|
|
|
_input:
|
|
|
|
description: A list of strings to sort.
|
|
|
|
type: list
|
|
|
|
elements: string
|
|
|
|
required: true
|
|
|
|
'''
|
|
|
|
|
|
|
|
EXAMPLES = '''
|
|
|
|
- name: Convert list of tuples into dictionary
|
|
|
|
ansible.builtin.set_fact:
|
|
|
|
dictionary: "{{ ['2.1', '2.10', '2.9'] | community.general.version_sort }}"
|
|
|
|
# Result is ['2.1', '2.9', '2.10']
|
|
|
|
'''
|
|
|
|
|
|
|
|
RETURN = '''
|
|
|
|
_value:
|
|
|
|
description: The list of strings sorted by version.
|
|
|
|
type: list
|
|
|
|
elements: string
|
|
|
|
'''
|
|
|
|
|
2021-12-24 18:34:48 +01:00
|
|
|
from ansible_collections.community.general.plugins.module_utils.version import LooseVersion
|
2021-02-27 17:42:45 +01:00
|
|
|
|
|
|
|
|
|
|
|
def version_sort(value, reverse=False):
|
|
|
|
'''Sort a list according to loose versions so that e.g. 2.9 is smaller than 2.10'''
|
|
|
|
return sorted(value, key=LooseVersion, reverse=reverse)
|
|
|
|
|
|
|
|
|
|
|
|
class FilterModule(object):
|
|
|
|
''' Version sort filter '''
|
|
|
|
|
|
|
|
def filters(self):
|
|
|
|
return {
|
|
|
|
'version_sort': version_sort
|
|
|
|
}
|