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”
}