Visualize Ansible playbooks

Visualization is always helpful when we need to understand how things are working. There are multiple tools and scripts that can help us to visualize Ansible playbooks. One of them is the ansible-playbook-grapher.

Ansible uses a hierarchy that determines the sequence of our tasks. On the top level there are Workflows in Ansible Tower or AWX. Workflows can run multiple playbooks in sequence. Playbooks can run multiple roles in sequence and roles run tasks in sequence. That hierarchy can be visualized with the ansible-playbook-grapher. The cool part is that it has options for --extra-vars --tags and --skip-tags.

It is available as pip package.

pip3 install ansible-playbook-grapher

Here is a visualization of some random rules from ceph-ansible (https://github.com/ceph/ceph-ansible/). Note that ansible-playbook-grapher always needs a playbook as starting point. It can not visualize roles directly.

ansible-playbook-grapher --include-role-tasks ceph.yml
ceph.yml ceph.yml ceph.yml Play #1: Ceph Installation (0) Play #1: Ceph Installation (0) ceph.yml->Play #1: Ceph Installation (0) 1 Play #2: Ceph Client (0) Play #2: Ceph Client (0) ceph.yml->Play #2: Ceph Client (0) 2 Play #3: Ceph Grafana (0) Play #3: Ceph Grafana (0) ceph.yml->Play #3: Ceph Grafana (0) 3 [role] ceph-common [role] ceph-common task_9dffd231-485c-4f9f-bb18-b584f4fd8349 [task] ceph-common : install yum plugin priorities [role] ceph-common->task_9dffd231-485c-4f9f-bb18-b584f4fd8349 1  [when: ansible_facts['distribution_major_version'] | int == 7] task_6ebbfaa9-366d-4934-903f-31ef40edafa9 [task] ceph-common : configure red hat ceph community repository stable key [role] ceph-common->task_6ebbfaa9-366d-4934-903f-31ef40edafa9 2 task_469e918a-0966-4d24-94ad-483fc062d988 [task] ceph-common : configure red hat ceph stable community repository [role] ceph-common->task_469e918a-0966-4d24-94ad-483fc062d988 3 task_28620b50-f17c-40af-aef4-5982d833f447 [task] ceph-common : configure red hat ceph stable noarch community repository [role] ceph-common->task_28620b50-f17c-40af-aef4-5982d833f447 4 task_ce6eeb91-5693-46cc-925e-219189b36647 [task] ceph-common : create red hat storage package directories for redhat systems [role] ceph-common->task_ce6eeb91-5693-46cc-925e-219189b36647 5 task_eb9b0808-006d-498e-b57d-2918aa282e3c [task] ceph-common : ensure destination iso directory exists for redhat systems [role] ceph-common->task_eb9b0808-006d-498e-b57d-2918aa282e3c 6  [when: ceph_rhcs_iso_path | dirname != '/'] task_42203a14-ee98-4223-9009-71afd6c5a13f [task] ceph-common : fetch the red hat storage iso from the ansible server for redhat systems [role] ceph-common->task_42203a14-ee98-4223-9009-71afd6c5a13f 7 task_3a87172b-8d38-4f53-8d10-d4a83730aa03 [task] ceph-common : mount red hat storage iso file for redhat systems [role] ceph-common->task_3a87172b-8d38-4f53-8d10-d4a83730aa03 8 task_13df6784-dd88-4332-93ed-629cea8c6b86 [task] ceph-common : copy red hat storage iso content for redhat systems [role] ceph-common->task_13df6784-dd88-4332-93ed-629cea8c6b86 9 task_c032e3da-3c4c-472c-8c8f-5b655a6fc25d [task] ceph-common : unmount red hat storage iso file for redhat systems [role] ceph-common->task_c032e3da-3c4c-472c-8c8f-5b655a6fc25d 10 task_8f6ae49d-4375-44ec-9934-324ac5c2ef24 [task] ceph-common : install red hat storage repository key for redhat systems [role] ceph-common->task_8f6ae49d-4375-44ec-9934-324ac5c2ef24 11 task_c6458724-777b-4504-bfb2-214091787297 [task] ceph-common : add red hat storage repository for redhat systems [role] ceph-common->task_c6458724-777b-4504-bfb2-214091787297 12 task_7e3619b9-e4db-4398-a5c3-9d6a027f735d [task] ceph-common : enable red hat storage monitor repository [role] ceph-common->task_7e3619b9-e4db-4398-a5c3-9d6a027f735d 13  [when: (mon_group_name in group_names or mgr_group_name in group_names)] task_507fbfd4-d7a8-477a-bdc1-4332b319a2df [task] ceph-common : enable red hat storage osd repository [role] ceph-common->task_507fbfd4-d7a8-477a-bdc1-4332b319a2df 14  [when: osd_group_name in group_names] task_129ca791-7b71-4004-a952-97b75c2c7e58 [task] ceph-common : enable red hat storage tools repository [role] ceph-common->task_129ca791-7b71-4004-a952-97b75c2c7e58 15  [when: (mgr_group_name in group_names or rgw_group_name in group_names or mds_group_name in group_names or nfs_group_name in group_names or iscsi_gw_group_name in group_names or client_group_name in group_names or monitoring_group_name in group_names)] task_a18b0541-a3e5-41e3-9686-b06621ac4f64 [task] ceph-common : fetch ceph red hat development repository [role] ceph-common->task_a18b0541-a3e5-41e3-9686-b06621ac4f64 16 task_c3955181-940e-4a5f-9393-8461ca47533b [task] ceph-common : configure ceph red hat development repository [role] ceph-common->task_c3955181-940e-4a5f-9393-8461ca47533b 17 task_1933f319-02fb-4717-8d11-9894cee97ed9 [task] ceph-common : remove ceph_stable repositories [role] ceph-common->task_1933f319-02fb-4717-8d11-9894cee97ed9 18 task_aaf25a07-f285-4780-ae07-3cca08abaedf [task] ceph-common : configure red hat custom rpm key [role] ceph-common->task_aaf25a07-f285-4780-ae07-3cca08abaedf 19  [when: ceph_custom_key is defined] task_f0d772ad-615c-48ce-ae16-405aa23d1cfa [task] ceph-common : configure red hat custom repository [role] ceph-common->task_f0d772ad-615c-48ce-ae16-405aa23d1cfa 20 task_807d14b4-218a-4415-a366-6edc446fb028 [task] ceph-common : purge yum cache [role] ceph-common->task_807d14b4-218a-4415-a366-6edc446fb028 21  [when: ansible_facts['pkg_mgr'] == 'yum'] task_a21092d6-48a2-46e1-bc53-6ba059dfee27 [task] ceph-common : make sure /tmp exists [role] ceph-common->task_a21092d6-48a2-46e1-bc53-6ba059dfee27 22  [when: use_installer | bool] task_7f13cbff-9c73-45d9-a00e-c5aaee21b690 [task] ceph-common : use mktemp to create name for rundep [role] ceph-common->task_7f13cbff-9c73-45d9-a00e-c5aaee21b690 23  [when: use_installer | bool] task_f86f3d30-bb53-4c1a-a621-428400152e3d [task] ceph-common : copy rundep [role] ceph-common->task_f86f3d30-bb53-4c1a-a621-428400152e3d 24  [when: use_installer | bool] task_07bbc666-b6c2-4589-a17e-8dcf4882f0e6 [task] ceph-common : install ceph dependencies [role] ceph-common->task_07bbc666-b6c2-4589-a17e-8dcf4882f0e6 25  [when: use_installer | bool] task_c66d71d4-0b2c-4c26-869f-54e1dedbd127 [task] ceph-common : ensure rsync is installed [role] ceph-common->task_c66d71d4-0b2c-4c26-869f-54e1dedbd127 26 task_5dbab6c8-4827-4176-98e1-01d58be24bb6 [task] ceph-common : synchronize ceph install [role] ceph-common->task_5dbab6c8-4827-4176-98e1-01d58be24bb6 27 task_248d8157-85c8-45ed-8f35-8ac995fad138 [task] ceph-common : create user group ceph [role] ceph-common->task_248d8157-85c8-45ed-8f35-8ac995fad138 28 task_25c9fbef-f9c1-4c59-b743-4964e306f624 [task] ceph-common : create user ceph [role] ceph-common->task_25c9fbef-f9c1-4c59-b743-4964e306f624 29 task_98dfcb87-8af2-4f75-ad24-07d3e09c0c7d [task] ceph-common : install redhat dependencies [role] ceph-common->task_98dfcb87-8af2-4f75-ad24-07d3e09c0c7d 30  [when: ansible_facts['distribution'] == 'RedHat'] task_8cec9b1e-8d80-4edb-8132-ea49ce51bf74 [task] ceph-common : install centos dependencies [role] ceph-common->task_8cec9b1e-8d80-4edb-8132-ea49ce51bf74 31  [when: ansible_facts['distribution'] == 'CentOS'] task_79f2baaa-8112-4d69-aa29-7067834a808a [task] ceph-common : install redhat ceph packages [role] ceph-common->task_79f2baaa-8112-4d69-aa29-7067834a808a 32 task_bc4ee1ed-a2a8-41db-a257-10dbd09491d5 [task] ceph-common : configure openSUSE ceph OBS repository [role] ceph-common->task_bc4ee1ed-a2a8-41db-a257-10dbd09491d5 33 task_41c4cfe1-f5cb-4c49-a81c-068d493d3429 [task] ceph-common : install SUSE/openSUSE dependencies [role] ceph-common->task_41c4cfe1-f5cb-4c49-a81c-068d493d3429 34 task_de4bd537-10cc-4400-ac59-f58f21e5a211 [task] ceph-common : install SUSE/openSUSE ceph packages [role] ceph-common->task_de4bd537-10cc-4400-ac59-f58f21e5a211 35 task_e45676e0-7c1f-4c55-9ddd-13b5c3aafa88 [task] ceph-common : install dependencies for apt modules [role] ceph-common->task_e45676e0-7c1f-4c55-9ddd-13b5c3aafa88 36 task_bb56e5b5-e1ab-454a-8691-8ffd981ab902 [task] ceph-common : configure debian ceph community repository stable key [role] ceph-common->task_bb56e5b5-e1ab-454a-8691-8ffd981ab902 37 task_8edf387a-feae-4f4e-b8fb-3ddb0cf978d1 [task] ceph-common : configure debian ceph stable community repository [role] ceph-common->task_8edf387a-feae-4f4e-b8fb-3ddb0cf978d1 38 task_5f3faa4c-5464-45a5-8682-00ffd0a06703 [task] ceph-common : fetch ceph debian development repository [role] ceph-common->task_5f3faa4c-5464-45a5-8682-00ffd0a06703 39 task_90d96b20-132e-44c0-87b2-da6355803481 [task] ceph-common : configure ceph debian development repository [role] ceph-common->task_90d96b20-132e-44c0-87b2-da6355803481 40 task_f87aa063-c302-419e-812b-c0b3addb7dec [task] ceph-common : configure debian custom apt key [role] ceph-common->task_f87aa063-c302-419e-812b-c0b3addb7dec 41  [when: ceph_custom_key is defined] task_957abe24-6fa8-4da7-aded-b7f535feee34 [task] ceph-common : configure debian custom repository [role] ceph-common->task_957abe24-6fa8-4da7-aded-b7f535feee34 42 task_31dd3276-6309-4a47-b392-d1365b318672 [task] ceph-common : add ubuntu cloud archive key package [role] ceph-common->task_31dd3276-6309-4a47-b392-d1365b318672 43 task_b2fb5d87-95bc-4627-8919-b97b9cb690e9 [task] ceph-common : add ubuntu cloud archive repository [role] ceph-common->task_b2fb5d87-95bc-4627-8919-b97b9cb690e9 44 task_a7673aef-524d-4d3d-bbfd-1ecbf518941a [task] ceph-common : update apt cache if cache_valid_time has expired [role] ceph-common->task_a7673aef-524d-4d3d-bbfd-1ecbf518941a 45 task_64f02afd-c743-45ac-a736-40c80fa2ea9e [task] ceph-common : install dependencies [role] ceph-common->task_64f02afd-c743-45ac-a736-40c80fa2ea9e 46 task_12ecd8dd-ab47-4b31-ad91-8e9166273570 [task] ceph-common : install ceph for debian [role] ceph-common->task_12ecd8dd-ab47-4b31-ad91-8e9166273570 47 task_a03b67ce-9aca-4664-b410-d73ff917356a [task] ceph-common : install red hat storage ceph packages for debian [role] ceph-common->task_a03b67ce-9aca-4664-b410-d73ff917356a 48 task_26ba2b88-2cec-42e3-930b-b601bfb35481 [task] ceph-common : install ceph bundle [role] ceph-common->task_26ba2b88-2cec-42e3-930b-b601bfb35481 49 task_ff824d4a-a722-4e75-9cde-cc34351f89ce [task] ceph-common : get ceph version [role] ceph-common->task_ff824d4a-a722-4e75-9cde-cc34351f89ce 50 task_7c8a1143-e2bb-4922-bfa7-ce81791eed89 [task] ceph-common : set_fact ceph_version [role] ceph-common->task_7c8a1143-e2bb-4922-bfa7-ce81791eed89 51 task_0c09a9ec-d074-4b30-8b2c-82625703073d [task] ceph-common : set_fact ceph_release jewel [role] ceph-common->task_0c09a9ec-d074-4b30-8b2c-82625703073d 52  [when: ceph_version.split('.')[0] is version('10', '==')] task_2146a791-1b23-4849-beb4-1789596f7965 [task] ceph-common : set_fact ceph_release kraken [role] ceph-common->task_2146a791-1b23-4849-beb4-1789596f7965 53  [when: ceph_version.split('.')[0] is version('11', '==')] task_8c48dc81-a7b3-490e-872d-3abb3f2c72c2 [task] ceph-common : set_fact ceph_release luminous [role] ceph-common->task_8c48dc81-a7b3-490e-872d-3abb3f2c72c2 54  [when: ceph_version.split('.')[0] is version('12', '==')] task_a89b8ce2-7621-4ad3-aca3-637c27076db1 [task] ceph-common : set_fact ceph_release mimic [role] ceph-common->task_a89b8ce2-7621-4ad3-aca3-637c27076db1 55  [when: ceph_version.split('.')[0] is version('13', '==')] task_39e06c81-c12b-4b5d-a842-c80f0987962f [task] ceph-common : set_fact ceph_release nautilus [role] ceph-common->task_39e06c81-c12b-4b5d-a842-c80f0987962f 56  [when: ceph_version.split('.')[0] is version('14', '==')] task_2e4c2847-d891-4cb2-987c-dd0100856067 [task] ceph-common : set_fact ceph_release octopus [role] ceph-common->task_2e4c2847-d891-4cb2-987c-dd0100856067 57  [when: ceph_version.split('.')[0] is version('15', '==')] task_b5d2102d-efa9-4c24-9e3e-db4593695a8e [task] ceph-common : set_fact ceph_release pacific [role] ceph-common->task_b5d2102d-efa9-4c24-9e3e-db4593695a8e 58  [when: ceph_version.split('.')[0] is version('16', '==')] task_87033529-0d58-421c-9393-a8586354c1c1 [task] ceph-common : set_fact ceph_release quincy [role] ceph-common->task_87033529-0d58-421c-9393-a8586354c1c1 59  [when: ceph_version.split('.')[0] is version('17', '==')] task_b9cff3f8-d2a9-4e79-8401-1dfa832a0c05 [task] ceph-common : set_fact ceph_release - override ceph_release with ceph_stable_release [role] ceph-common->task_b9cff3f8-d2a9-4e79-8401-1dfa832a0c05 60  [when: ceph_origin == 'repository'ceph_repository not in ['dev', 'rhcs', 'custom']] task_15fd0512-157a-4a01-8cfe-a4398b37b5cd [task] ceph-common : create rbd client directory [role] ceph-common->task_15fd0512-157a-4a01-8cfe-a4398b37b5cd 61  [when: rbd_client_directories | bool] task_424c7d65-86c3-4f62-ad32-5fadc5308d29 [task] ceph-common : configure cluster name [role] ceph-common->task_424c7d65-86c3-4f62-ad32-5fadc5308d29 62  [when: ansible_facts['os_family'] in ["RedHat", "Suse"]] task_9b381df5-b754-4803-8b9d-4b3f95f53275 [task] ceph-common : check /etc/default/ceph exist [role] ceph-common->task_9b381df5-b754-4803-8b9d-4b3f95f53275 63  [when: ansible_facts['os_family'] == "Debian"] task_256d6567-1edf-455a-9606-7247f5ec8775 [task] ceph-common : when /etc/default/ceph is not dir [role] ceph-common->task_256d6567-1edf-455a-9606-7247f5ec8775 64  [when: ansible_facts['os_family'] == "Debian"etc_default_ceph.stat.existsnot etc_default_ceph.stat.isdir] task_085527ee-0de5-40f8-8af8-c69955c0ef7d [task] ceph-common : when /etc/default/ceph is dir [role] ceph-common->task_085527ee-0de5-40f8-8af8-c69955c0ef7d 65  [when: ansible_facts['os_family'] == "Debian"etc_default_ceph.stat.existsetc_default_ceph.stat.isdir] task_5f1e02e4-c4e6-472f-bf6a-d03031477a6a [task] ceph-common : configure TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES for debian [role] ceph-common->task_5f1e02e4-c4e6-472f-bf6a-d03031477a6a 66  [when: ansible_facts['os_family'] == 'Debian'etc_default_ceph.stat.exists] task_c6f8b02c-70b5-4c7a-be69-2ad270c7f9d7 [task] ceph-common : configure TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES for redhat [role] ceph-common->task_c6f8b02c-70b5-4c7a-be69-2ad270c7f9d7 67  [when: ansible_facts['os_family'] == 'RedHat'] task_48ac47fd-8126-4c4a-989c-a1616ec7126e [task] ceph-common : install policycoreutils-python [role] ceph-common->task_48ac47fd-8126-4c4a-989c-a1616ec7126e 68  [when: ansible_facts['selinux']['status'] == 'enabled'ansible_facts['distribution_major_version'] == '7'] task_19f420f2-d1f1-40db-a3c7-db2132b70717 [task] ceph-common : install python3-policycoreutils on RHEL 8 [role] ceph-common->task_19f420f2-d1f1-40db-a3c7-db2132b70717 69  [when: ansible_facts['selinux']['status'] == 'enabled'inventory_hostname in groups.get(nfs_group_name, []) or inventory_hostname in groups.get(rgwloadbalancer_group_name, [])ansible_facts['distribution_major_version'] == '8'] task_29718a72-af24-4793-a7ae-cb958fc205b1 [task] ceph-common : meta [role] ceph-common->task_29718a72-af24-4793-a7ae-cb958fc205b1 71  [when: True] Play #1: Ceph Installation (0)->[role] ceph-common 1 [role] ceph-client [role] ceph-client task_a634e00f-c743-462d-a29b-c24c93b96755 [task] ceph-client : get keys from monitors [role] ceph-client->task_a634e00f-c743-462d-a29b-c24c93b96755 1  [when: cephx | boolcopy_admin_key | bool] task_0000d661-71b8-4ac2-a44a-7ad509360af3 [task] ceph-client : copy ceph key(s) if needed [role] ceph-client->task_0000d661-71b8-4ac2-a44a-7ad509360af3 2  [when: cephx | boolcopy_admin_key | bool] task_76c6497b-d15b-486f-a57e-02a560cd7bfd [task] ceph-client : set_fact delegated_node [role] ceph-client->task_76c6497b-d15b-486f-a57e-02a560cd7bfd 3 task_a5d65b80-66bb-4294-a4e0-0521aa665ac4 [task] ceph-client : set_fact admin_key_presence [role] ceph-client->task_a5d65b80-66bb-4294-a4e0-0521aa665ac4 4 task_c1eb2374-447d-4530-b79b-8474f3178de8 [task] ceph-client : create cephx key(s) [role] ceph-client->task_c1eb2374-447d-4530-b79b-8474f3178de8 5  [when: cephx | boolkeys | length > 0inventory_hostname == groups.get('_filtered_clients') | first] task_d0d872d9-c34e-4dd1-9456-332adedb516e [task] ceph-client : slurp client cephx key(s) [role] ceph-client->task_d0d872d9-c34e-4dd1-9456-332adedb516e 6  [when: cephx | boolkeys | length > 0inventory_hostname == groups.get('_filtered_clients') | first] task_700e1d60-2861-4351-bf41-e4f71568334f [task] ceph-facts : get current default crush rule details [role] ceph-client->task_700e1d60-2861-4351-bf41-e4f71568334f 7  [when: admin_key_presence | boolinventory_hostname == groups.get('_filtered_clients', []) | first] task_58cd21bb-218d-4135-b6b7-84b7f505d71c [task] ceph-facts : get current default crush rule name [role] ceph-client->task_58cd21bb-218d-4135-b6b7-84b7f505d71c 8  [when: admin_key_presence | boolinventory_hostname == groups.get('_filtered_clients', []) | firstitem.rule_id | int == osd_pool_default_crush_rule | int] task_e36834c6-6eb3-47b6-aa93-8fb1d9c303aa [task] ceph-facts : meta [role] ceph-client->task_e36834c6-6eb3-47b6-aa93-8fb1d9c303aa 9  [when: admin_key_presence | boolinventory_hostname == groups.get('_filtered_clients', []) | firstTrue] task_59251ba0-36d1-4526-8d09-3803ecacfe06 [task] ceph-client : create ceph pool(s) [role] ceph-client->task_59251ba0-36d1-4526-8d09-3803ecacfe06 10  [when: admin_key_presence | boolinventory_hostname == groups.get('_filtered_clients', []) | first] task_30cb62ff-09ea-413e-85f0-350aa1c6bd12 [task] ceph-client : get client cephx keys [role] ceph-client->task_30cb62ff-09ea-413e-85f0-350aa1c6bd12 11  [when: not item.get('skipped', False)] task_27fd52eb-eec4-48e5-aaf1-0a8ec5b8ec74 [task] ceph-client : meta [role] ceph-client->task_27fd52eb-eec4-48e5-aaf1-0a8ec5b8ec74 13  [when: True] Play #2: Ceph Client (0)->[role] ceph-client 1 [role] ceph-grafana [role] ceph-grafana task_f5807f7f-a263-400b-a922-ac43da09b1a0 [task] ceph-grafana : create /etc/grafana and /var/lib/grafana [role] ceph-grafana->task_f5807f7f-a263-400b-a922-ac43da09b1a0 1 task_441d90c8-f2cc-4830-be5b-c8e8e243bf42 [task] ceph-grafana : ship systemd service [role] ceph-grafana->task_441d90c8-f2cc-4830-be5b-c8e8e243bf42 2 task_2a6b2c4e-91dd-4d43-8b0e-c3823aa8f8db [task] ceph-grafana : start the grafana-server service [role] ceph-grafana->task_2a6b2c4e-91dd-4d43-8b0e-c3823aa8f8db 3 task_2463e684-f8b6-4ba3-a270-5e890e62df1b [task] ceph-grafana : install ceph-grafana-dashboards package on RedHat or SUSE [role] ceph-grafana->task_2463e684-f8b6-4ba3-a270-5e890e62df1b 4  [when: not containerized_deployment | boolansible_facts['os_family'] in ['RedHat', 'Suse']] task_b633c6cc-3ce5-4169-929a-78e1707b1730 [task] ceph-grafana : make sure grafana is down [role] ceph-grafana->task_b633c6cc-3ce5-4169-929a-78e1707b1730 5 task_0ad801a3-493d-4e80-84a9-5ae6293c1b42 [task] ceph-grafana : wait for grafana to be stopped [role] ceph-grafana->task_0ad801a3-493d-4e80-84a9-5ae6293c1b42 6 task_3d7988c0-fed5-440f-aa95-1322626596a6 [task] ceph-grafana : make sure grafana configuration directories exist [role] ceph-grafana->task_3d7988c0-fed5-440f-aa95-1322626596a6 7 task_5d3cfbe6-5a13-403a-9eca-abc74c95c640 [task] ceph-grafana : download ceph grafana dashboards [role] ceph-grafana->task_5d3cfbe6-5a13-403a-9eca-abc74c95c640 8  [when: not containerized_deployment | boolnot ansible_facts['os_family'] in ['RedHat', 'Suse']] task_8cf5fe02-cc17-4acf-813c-2ca597c0fa3b [task] ceph-grafana : write grafana.ini [role] ceph-grafana->task_8cf5fe02-cc17-4acf-813c-2ca597c0fa3b 9 task_1fcb7952-f488-49f4-ac2b-f62f38e2e96e [task] ceph-grafana : write datasources provisioning config file [role] ceph-grafana->task_1fcb7952-f488-49f4-ac2b-f62f38e2e96e 10 task_b8e5375f-a59a-40d7-b0e5-5ad7e013af1c [task] ceph-grafana : Write dashboards provisioning config file [role] ceph-grafana->task_b8e5375f-a59a-40d7-b0e5-5ad7e013af1c 11  [when: not containerized_deployment | bool] task_1ff9b93e-6836-4584-9c1e-36591a453185 [task] ceph-grafana : copy grafana SSL certificate file [role] ceph-grafana->task_1ff9b93e-6836-4584-9c1e-36591a453185 12  [when: grafana_crt | length > 0dashboard_protocol == "https"] task_b28dc88c-03f3-4297-8a9d-b7bfc7f44e59 [task] ceph-grafana : copy grafana SSL certificate key [role] ceph-grafana->task_b28dc88c-03f3-4297-8a9d-b7bfc7f44e59 13  [when: grafana_key | length > 0dashboard_protocol == "https"] task_453f051c-855a-4e98-9cd1-9375f410f3a6 [task] ceph-grafana : generate a Self Signed OpenSSL certificate for dashboard [role] ceph-grafana->task_453f051c-855a-4e98-9cd1-9375f410f3a6 14  [when: dashboard_protocol == "https"grafana_key | length == 0 or grafana_crt | length == 0] task_3b16d9a7-3fcd-4f89-a9f8-5bd1695c51a8 [task] ceph-grafana : enable and start grafana [role] ceph-grafana->task_3b16d9a7-3fcd-4f89-a9f8-5bd1695c51a8 15 task_c97bbf1d-8234-4af3-8cfb-eae9c3495d81 [task] ceph-grafana : wait for grafana to start [role] ceph-grafana->task_c97bbf1d-8234-4af3-8cfb-eae9c3495d81 16 task_c9e1328f-836a-4e5e-9167-c3445c86a43a [task] ceph-grafana : meta [role] ceph-grafana->task_c9e1328f-836a-4e5e-9167-c3445c86a43a 18  [when: True] Play #3: Ceph Grafana (0)->[role] ceph-grafana 1

There is a similar tool called ansible-inventory-grapher that builds graphs for Ansible inventories (https://github.com/willthames/ansible-inventory-grapher)

Contact