summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Coca <bcoca@users.noreply.github.com>2022-11-30 09:25:34 -0500
committerGitHub <noreply@github.com>2022-11-30 09:25:34 -0500
commit5b51b560d0328e35dad5d4c77688f7577081c0ed (patch)
treee491fc70291ab80c5cb7d89130bd7de1f45beeb8
parent1998521e2d5b89bc53d00639bad178330ebb98df (diff)
downloadansible-5b51b560d0328e35dad5d4c77688f7577081c0ed.tar.gz
Removed sorting to preserve original order (#74839)
updated tests to reflect new order
-rw-r--r--changelogs/fragments/unsorted.yml2
-rwxr-xr-xlib/ansible/cli/inventory.py17
-rw-r--r--test/integration/targets/inventory_script/inventory.json4
3 files changed, 12 insertions, 11 deletions
diff --git a/changelogs/fragments/unsorted.yml b/changelogs/fragments/unsorted.yml
new file mode 100644
index 0000000000..3910341d2b
--- /dev/null
+++ b/changelogs/fragments/unsorted.yml
@@ -0,0 +1,2 @@
+bugfixes:
+ - ansible-inventory will not explicitly sort groups/hosts anymore, giving a chance (depending on output format) to match the order in the input sources.
diff --git a/lib/ansible/cli/inventory.py b/lib/ansible/cli/inventory.py
index 0e86080121..e8ed75e463 100755
--- a/lib/ansible/cli/inventory.py
+++ b/lib/ansible/cli/inventory.py
@@ -13,7 +13,6 @@ from ansible.cli import CLI
import sys
import argparse
-from operator import attrgetter
from ansible import constants as C
from ansible import context
@@ -273,11 +272,11 @@ class InventoryCLI(CLI):
result = [self._graph_name('@%s:' % group.name, depth)]
depth = depth + 1
- for kid in sorted(group.child_groups, key=attrgetter('name')):
+ for kid in group.child_groups:
result.extend(self._graph_group(kid, depth))
if group.name != 'all':
- for host in sorted(group.hosts, key=attrgetter('name')):
+ for host in group.hosts:
result.append(self._graph_name(host.name, depth))
if context.CLIARGS['show_vars']:
result.extend(self._show_vars(self._get_host_variables(host), depth + 1))
@@ -303,9 +302,9 @@ class InventoryCLI(CLI):
results = {}
results[group.name] = {}
if group.name != 'all':
- results[group.name]['hosts'] = [h.name for h in sorted(group.hosts, key=attrgetter('name'))]
+ results[group.name]['hosts'] = [h.name for h in group.hosts]
results[group.name]['children'] = []
- for subgroup in sorted(group.child_groups, key=attrgetter('name')):
+ for subgroup in group.child_groups:
results[group.name]['children'].append(subgroup.name)
if subgroup.name not in seen:
results.update(format_group(subgroup))
@@ -343,14 +342,14 @@ class InventoryCLI(CLI):
# subgroups
results[group.name]['children'] = {}
- for subgroup in sorted(group.child_groups, key=attrgetter('name')):
+ for subgroup in group.child_groups:
if subgroup.name != 'all':
results[group.name]['children'].update(format_group(subgroup))
# hosts for group
results[group.name]['hosts'] = {}
if group.name != 'all':
- for h in sorted(group.hosts, key=attrgetter('name')):
+ for h in group.hosts:
myvars = {}
if h.name not in seen: # avoid defining host vars more than once
seen.append(h.name)
@@ -377,7 +376,7 @@ class InventoryCLI(CLI):
results[group.name] = {}
results[group.name]['children'] = []
- for subgroup in sorted(group.child_groups, key=attrgetter('name')):
+ for subgroup in group.child_groups:
if subgroup.name == 'ungrouped' and not has_ungrouped:
continue
if group.name != 'all':
@@ -385,7 +384,7 @@ class InventoryCLI(CLI):
results.update(format_group(subgroup))
if group.name != 'all':
- for host in sorted(group.hosts, key=attrgetter('name')):
+ for host in group.hosts:
if host.name not in seen:
seen.add(host.name)
host_vars = self._get_host_variables(host=host)
diff --git a/test/integration/targets/inventory_script/inventory.json b/test/integration/targets/inventory_script/inventory.json
index 5046a9a83c..69ba547686 100644
--- a/test/integration/targets/inventory_script/inventory.json
+++ b/test/integration/targets/inventory_script/inventory.json
@@ -1029,9 +1029,9 @@
},
"all": {
"children": [
+ "ungrouped",
"None",
- "guests",
- "ungrouped"
+ "guests"
]
},
"guests": {