# Add 2 CLI options --list-tasks-json and --list-tasks-with-path

**URL:** <https://forum.ansible.com/t/add-2-cli-options-list-tasks-json-and-list-tasks-with-path/24298>\
**Category:** Ansible Developer\
**Tags:** aws\
**Created:** [April 24, 2017, 7:26pm UTC](https://forum.ansible.com/t/add-2-cli-options-list-tasks-json-and-list-tasks-with-path/24298 "2017-04-24T19:26:06Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Corey\_Quon](https://avatars.discourse-cdn.com/v4/letter/c/ac91a4/32.png) [@Corey\_Quon](https://forum.ansible.com/u/Corey_Quon)\
**Post date:** [April 24, 2017, 7:26pm UTC](https://forum.ansible.com/t/add-2-cli-options-list-tasks-json-and-list-tasks-with-path/24298/1 "2017-04-24T19:26:06Z")

</div>

I would like to add a couple of CLI options to “ansible-playbook” to help with some integration:

Reasoning:  
For some integration, we would like to have a unique way to identify every task in an ansible playbook, however, the names/action are not guaranteed to be unique across playbooks / files, but by integrating the file name and line number there will be a unique identifier. In addition, with a JSON output it is easier to traverse than a raw string.

Currently there only exists a --list-tasks:

From help menu (ansible-playbook --help):  
–list-tasks list all tasks that would be executed

CLI Output:

ansible-playbook --list-tasks playbook.yml

playbook: playbook.yml

play #1 (localhost): This is play 1 TAGS:   
tasks:  
common : aaa TAGS:   
common : bbb TAGS:   
common : ccc TAGS:   
common : ddd TAGS:   
common : eee TAGS:   
Set fact upgrade\_flow as false TAGS:   
debug TAGS:   
Set fact upgrade\_zones TAGS:

play #2 (localhost): This is play 2 TAGS:

…

Desired added behavior:

Help Menu:

–list-tasks list all tasks that would be executed  
–list-tasks-json list all tasks that would be executed in JSON format  
–list-tasks-with-path  
list all tasks that would be executed along with its  
absolute path and line number

CLI Output:

ansible-playbook --list-tasks-with-path playbook.yml

playbook: playbook.yml

play #1 (localhost): This is play 1 TAGS: PATH: /tmp/ansible/playbooks/playbook.yml:4]  
tasks:  
common : aaa TAGS: PATH: [/tmp/ansible/playbooks/roles/common/tasks/main.yml:4]  
common : bbb TAGS: PATH: [/tmp/ansible/playbooks/roles/common/tasks/main.yml:8]  
common : ccc TAGS: PATH: [/tmp/ansible/playbooks/roles/common/tasks/main.yml:14]  
common : ddd TAGS: PATH: [/tmp/ansible/playbooks/roles/common/tasks/main.yml:20]  
common : eee TAGS: PATH: [/tmp/ansible/playbooks/roles/common/tasks/main.yml:26]  
Set fact upgrade\_flow as false TAGS: PATH: [/tmp/ansible/playbooks/aws-configure-infra-nodes.yml:15]  
debug TAGS: PATH: [/tmp/ansible/playbooks/aws-configure-infra-nodes.yml:20]  
Set fact upgrade\_zones TAGS: PATH: [/tmp/ansible/playbooks/aws-configure-infra-nodes.yml:22]

play #2 (localhost): This is play 2 TAGS: PATH: [/tmp/ansible/playbooks/playbook.yml:5]

…

ansible-playbook --list-tasks-json playbook.yml

{  
“playbook\_dir”: “tmp/ansible/playbooks”,  
“plays”: [  
{  
“tasks”: [  
{  
“action”: “fail”,  
“\_ds”: {  
“\_data\_source”: “/tmp/ansible/playbooks/roles/common/tasks/main.yml”,  
“\_line\_number”: 4  
},  
“name”: “aaa”,  
“tags”:   
},  
{  
“action”: “set\_fact”,  
“\_ds”: {  
“\_data\_source”: “/tmp/ansible/playbooks/roles/common/tasks/main.yml”,  
“\_line\_number”: 8  
},  
“name”: “bbb”,  
“tags”:   
},  
{  
“action”: “set\_fact”,  
“\_ds”: {  
“\_data\_source”: “/tmp/roles/common/tasks/main.yml”,  
“\_line\_number”: 14  
},  
“name”: “ccc”,  
“tags”:   
},  
{  
“action”: “set\_fact”,  
“\_ds”: {  
“\_data\_source”: “/tmp/roles/common/tasks/main.yml”,  
“\_line\_number”: 20  
},  
“name”: “ddd”,  
“tags”:   
},  
{  
“action”: “set\_fact”,  
“\_ds”: {  
“\_data\_source”: “/tmp/ansible/playbooks/roles/common/tasks/main.yml”,  
“\_line\_number”: 26  
},  
“name”: “eee”,  
“tags”:   
},  
{  
“action”: “set\_fact”,  
“\_ds”: {  
“\_data\_source”: “/tmp/ansible/playbooks/aws-configure-infra-nodes.yml”,  
“\_line\_number”: 15  
},  
“name”: “Set fact upgrade\_flow as false”,  
“tags”:   
},  
{  
“action”: “debug”,  
“\_ds”: {  
“\_data\_source”: “/tmp/ansible/playbooks/aws-configure-infra-nodes.yml”,  
“\_line\_number”: 20  
},  
“name”: “”,  
“tags”:   
},  
{  
“action”: “set\_fact”,

“\_ds”: {  
“\_data\_source”: “/tmp/ansible/playbooks/aws-configure-infra-nodes.yml”,  
“\_line\_number”: 22  
},  
“name”: “Set fact upgrade\_zones”,  
“tags”:   
}  
],  
“\_ds”: {  
“\_data\_source”: “/tmp/ansible/playbooks/aws-configure-infra-nodes.yml”,  
“\_line\_number”: 4  
},  
“name”: “This is a master playbook to invoke all the playbooks which configure the infra nodes in aws”,  
“tags”:   
},  
{  
“tasks”: [  
{

…  
}  
]  
“\_ds”: {  
“\_data\_source”: “/tmp/playbook.ymll”,  
“\_line\_number”: 5  
},  
“name”: “This is play 2”,  
“tags”:   
},  
…  
“playbook”: “playbook.yml”

}

---

<div class="post-metadata">

**Author:** ![Tobias\_Wolf](https://avatars.discourse-cdn.com/v4/letter/t/eada6e/32.png) [@Tobias\_Wolf](https://forum.ansible.com/u/Tobias_Wolf)\
**Post date:** [May 7, 2017, 6:29pm UTC](https://forum.ansible.com/t/add-2-cli-options-list-tasks-json-and-list-tasks-with-path/24298/2 "2017-05-07T18:29:17Z")

</div>

Good idea, and the same for --list-hosts and --list-tags.

We have some scripts that build a reverse mapping from IP back to playbooks and a catalog of tags per playbook.

Having that output as JSON would make parsing the output much easier.
