Fix ceph csi monmap

Add the ability for ceph csi to gather
the correct monmap when deployers sets
a different ceph public network.

Sem-Ver: feature
Change-Id: I2bc02ecd8182d2fff88e9fc3855f27f57dcba96e
diff --git a/releasenotes/notes/fix-ceph-csi-monmap-89505192fb838958.yaml b/releasenotes/notes/fix-ceph-csi-monmap-89505192fb838958.yaml
new file mode 100644
index 0000000..e3f87ea
--- /dev/null
+++ b/releasenotes/notes/fix-ceph-csi-monmap-89505192fb838958.yaml
@@ -0,0 +1,9 @@
+---
+feature:
+  - |
+    When we have ceph public network running on a
+    separate network, we should dump the correct 
+    monitor ip addresses in order to ceph csi to be 
+    able to talk to ceph cluster and provision pvcs.
+
+
diff --git a/roles/ceph_csi_rbd/tasks/main.yml b/roles/ceph_csi_rbd/tasks/main.yml
index e8b782f..c4d1b80 100644
--- a/roles/ceph_csi_rbd/tasks/main.yml
+++ b/roles/ceph_csi_rbd/tasks/main.yml
@@ -12,13 +12,17 @@
 # License for the specific language governing permissions and limitations
 # under the License.
 
-- name: Collect facts for all monitors
+- name: Collect "ceph mon dump" output from a monitor
+  delegate_to: "{{ groups[ceph_csi_rbd_mons_group][0] }}"
   run_once: true
-  delegate_to: "{{ item }}"
-  delegate_facts: true
-  ansible.builtin.setup:
-    gather_subset: network
-  loop: "{{ groups[ceph_csi_rbd_mons_group] }}"
+  ansible.builtin.command: ceph mon dump -f json
+  changed_when: false
+  register: _ceph_mon_dump
+
+- name: Generate fact with list of Ceph monitors
+  run_once: true
+  ansible.builtin.set_fact:
+    ceph_monitors: "{{ _ceph_mon_dump.stdout | from_json | community.general.json_query('mons[*].addr') | map('regex_replace', '(.*):(.*)', '\\1') }}"
 
 - name: Create Ceph pool
   vexxhost.atmosphere.ceph_pool:
@@ -55,7 +59,7 @@
     values:
       csiConfig:
         - clusterID: "{{ ceph_mon_fsid }}"
-          monitors: "{{ groups[ceph_csi_rbd_mons_group] | map('extract', hostvars, ['ansible_default_ipv4', 'address']) }}"
+          monitors: "{{ ceph_monitors }}"
       nodeplugin:
         httpMetrics:
           containerPort: 8081