Skip to content

Commit 6a53a5d

Browse files
authored
Use FQCN for roles where available (#1021)
* Use FQCN for roles where available * Consistently apply resolved_role similar to resolved_action * Change fallback value to normal task_action * Fix issue where resolved_ vars were there on stats event
1 parent 6549db7 commit 6a53a5d

File tree

9 files changed

+60
-4
lines changed

9 files changed

+60
-4
lines changed

ansible_runner/display_callback/callback/awx_display.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,7 @@ def set_task(self, task, local=False):
409409
task=(task.name or task.action),
410410
task_uuid=str(task._uuid),
411411
task_action=task.action,
412+
resolved_action=getattr(task, 'resolved_action', task.action),
412413
task_args='',
413414
)
414415
try:
@@ -423,6 +424,10 @@ def set_task(self, task, local=False):
423424
task_ctx['task_args'] = task_args
424425
if getattr(task, '_role', None):
425426
task_role = task._role._role_name
427+
if hasattr(task._role, 'get_name'):
428+
resolved_role = task._role.get_name()
429+
if resolved_role != task_role:
430+
task_ctx['resolved_role'] = resolved_role
426431
else:
427432
task_role = getattr(task, 'role_name', '')
428433
if task_role:
@@ -433,7 +438,10 @@ def set_task(self, task, local=False):
433438
event_context.add_global(**task_ctx)
434439

435440
def clear_task(self, local=False):
436-
task_ctx = dict(task=None, task_path=None, task_uuid=None, task_action=None, task_args=None, role=None)
441+
task_ctx = dict(
442+
task=None, task_path=None, task_uuid=None, task_action=None, task_args=None, resolved_action=None,
443+
role=None, resolved_role=None
444+
)
437445
if local:
438446
event_context.remove_local(**task_ctx)
439447
else:
@@ -554,7 +562,6 @@ def v2_playbook_on_task_start(self, task, is_conditional):
554562
name=task.get_name(),
555563
is_conditional=is_conditional,
556564
uuid=task_uuid,
557-
resolved_action=getattr(task, 'resolved_action', '')
558565
)
559566
with self.capture_event_data('playbook_on_task_start', **event_data):
560567
super(CallbackModule, self).v2_playbook_on_task_start(task, is_conditional)

test/fixtures/projects/collection_role/collections/ansible_collections/groovy/peanuts/README.md

Whitespace-only changes.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
---
2+
authors:
3+
- The pytest tmp_path
4+
dependencies: {}
5+
description: A collection for ansible-runner test test_include_role_from_collection_events.
6+
license:
7+
- GPL-3.0-only
8+
name: peanuts
9+
namespace: groovy
10+
readme: README.md
11+
repository: https://peanuts.invalid
12+
tags:
13+
- legume
14+
version: 1.0.0
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
---
2+
- debug: msg="Hello peanuts!"
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ANSIBLE_DEVEL_WARNING: no
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
all:
2+
hosts:
3+
testhost:
4+
ansible_connection: local
5+
ansible_python_interpreter: "{{ ansible_playbook_python }}"
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
- hosts: all
2+
gather_facts: no
3+
roles:
4+
- name: groovy.peanuts.hello

test/integration/test_events.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,5 +137,28 @@ def test_include_role_events(project_fixtures):
137137
for event in role_events:
138138
event_data = event['event_data']
139139
assert not event_data.get('warning', False) # role use should not contain warnings
140+
assert 'resolved_role' not in event_data # should not specify FQCN name if not from collection
140141
if event['event'] == 'runner_on_ok':
141142
assert event_data['res']['msg'] == 'Hello world!'
143+
if event['event'] == 'playbook_on_task_start':
144+
assert event_data['resolved_action'] == 'ansible.builtin.debug'
145+
146+
147+
def test_include_role_from_collection_events(project_fixtures):
148+
r = run(
149+
private_data_dir=str(project_fixtures / 'collection_role'),
150+
playbook='use_role.yml'
151+
)
152+
for event in r.events:
153+
event_data = event['event_data']
154+
assert not event_data.get('warning', False) # role use should not contain warnings
155+
if event['event'] in ('runner_on_ok', 'playbook_on_task_start', 'runner_on_start'):
156+
assert event_data['role'] == 'hello'
157+
assert event_data['resolved_role'] == 'groovy.peanuts.hello'
158+
if event['event'] == 'runner_on_ok':
159+
assert event_data['res']['msg'] == 'Hello peanuts!'
160+
if event['event'] == 'playbook_on_task_start':
161+
assert event_data['resolved_action'] == 'ansible.builtin.debug'
162+
if event['event'] == 'playbook_on_stats':
163+
assert 'resolved_role' not in event_data
164+
assert 'resolved_action' not in event_data

test/integration/test_interface.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,11 @@ def test_run_async(tmp_path):
4242
def get_env_data(res):
4343
for event in res.events:
4444
found = bool(
45-
event['event'] == 'runner_on_ok' and event.get(
45+
event['event'] in ('runner_on_ok', 'runner_on_start', 'playbook_on_task_start') and event.get(
4646
'event_data', {}
4747
).get('task_action', None) == 'look_at_environment'
4848
)
49-
if found:
49+
if found and 'res' in event['event_data']:
5050
return event['event_data']['res']
5151
else:
5252
print('output:')

0 commit comments

Comments
 (0)