Skip to content

Commit

Permalink
Fix ansible.builtin.include_vars - depth (#80995)
Browse files Browse the repository at this point in the history
* Changes as suggested by sivel

* Add changelog fragment and tests

Co-authored-by: Matt Martz <matt@sivel.net>
Co-authored-by: s-hertel <19572925+s-hertel@users.noreply.github.com>
  • Loading branch information
3 people committed Jan 18, 2024
1 parent 3f74bc0 commit 48bed1e
Show file tree
Hide file tree
Showing 11 changed files with 29 additions and 7 deletions.
2 changes: 2 additions & 0 deletions changelogs/fragments/80995-include-all-var-files.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
bugfixes:
- include_vars - fix calculating ``depth`` relative to the root and ensure all files are included (https://github.com/ansible/ansible/issues/80987).
14 changes: 7 additions & 7 deletions lib/ansible/plugins/action/include_vars.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

from os import path, walk
import re
import pathlib

import ansible.constants as C
from ansible.errors import AnsibleError
Expand Down Expand Up @@ -181,16 +182,15 @@ def _traverse_dir_depth(self):
alphabetical order. Do not iterate pass the set depth.
The default depth is unlimited.
"""
current_depth = 0
sorted_walk = list(walk(self.source_dir, onerror=self._log_walk, followlinks=True))
sorted_walk.sort(key=lambda x: x[0])
for current_root, current_dir, current_files in sorted_walk:
current_depth += 1
if current_depth <= self.depth or self.depth == 0:
current_files.sort()
yield (current_root, current_files)
else:
break
# Depth 1 is the root, relative_to omits the root
current_depth = len(pathlib.Path(current_root).relative_to(self.source_dir).parts) + 1
if self.depth != 0 and current_depth > self.depth:
continue
current_files.sort()
yield (current_root, current_files)

def _ignore_file(self, filename):
""" Return True if a file matches the list of ignore_files.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
sub11: defined
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
config11: defined
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
config112: defined
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
sub12: defined
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
sub21: defined
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
config211: defined
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
config212: defined
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
config3: defined
12 changes: 12 additions & 0 deletions test/integration/targets/include_vars/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -255,3 +255,15 @@
vars:
hash1: "{{ role_path }}/test_symlink/symlink/hashes/hash1.yml"
hash2: "{{ role_path }}/test_symlink/symlink/hashes/hash2.yml"

- name: Test include_vars includes everything to the correct depth
ansible.builtin.include_vars:
dir: "{{ role_path }}/files/test_depth"
depth: 3
name: test_depth_var
register: test_depth

- assert:
that:
- "test_depth.ansible_included_var_files|length == 8"
- "test_depth_var.keys()|length == 8"

0 comments on commit 48bed1e

Please sign in to comment.