ceph: allow external cluster

Sem-Ver: feature
Change-Id: Ic449f58c3e2a4e51a06bdaa53baa1a8759d33a05
diff --git a/releasenotes/notes/allow-external-ceph-9fa982e6734902e9.yaml b/releasenotes/notes/allow-external-ceph-9fa982e6734902e9.yaml
new file mode 100644
index 0000000..eaa9f75
--- /dev/null
+++ b/releasenotes/notes/allow-external-ceph-9fa982e6734902e9.yaml
@@ -0,0 +1,3 @@
+---
+features:
+  - Add ability to use an externally deployed Ceph cluster.
diff --git a/roles/ceph_csi_rbd/tasks/main.yml b/roles/ceph_csi_rbd/tasks/main.yml
index c4d1b80..b8839ee 100644
--- a/roles/ceph_csi_rbd/tasks/main.yml
+++ b/roles/ceph_csi_rbd/tasks/main.yml
@@ -25,12 +25,15 @@
     ceph_monitors: "{{ _ceph_mon_dump.stdout | from_json | community.general.json_query('mons[*].addr') | map('regex_replace', '(.*):(.*)', '\\1') }}"
 
 - name: Create Ceph pool
+  delegate_to: "{{ groups[ceph_csi_rbd_mons_group][0] }}"
   vexxhost.atmosphere.ceph_pool:
     name: "{{ ceph_csi_rbd_pool }}"
+    rule_name: "{{ ceph_csi_rbd_rule_name | default(omit) }}"
     application: rbd
     pg_autoscale_mode: "on"
 
 - name: Create {{ ceph_csi_rbd_user }} user
+  delegate_to: "{{ groups[ceph_csi_rbd_mons_group][0] }}"
   vexxhost.atmosphere.ceph_key:
     name: "{{ ceph_csi_rbd_user }}"
     caps:
@@ -39,6 +42,7 @@
       osd: profile rbd pool={{ ceph_csi_rbd_pool }}
 
 - name: Retrieve {{ ceph_csi_rbd_user }} keyring
+  delegate_to: "{{ groups[ceph_csi_rbd_mons_group][0] }}"
   vexxhost.atmosphere.ceph_key:
     name: "{{ ceph_csi_rbd_user }}"
     state: info
@@ -58,7 +62,7 @@
     kubeconfig: /etc/kubernetes/admin.conf
     values:
       csiConfig:
-        - clusterID: "{{ ceph_mon_fsid }}"
+        - clusterID: "{{ ceph_csi_rbd_ceph_fsid }}"
           monitors: "{{ ceph_monitors }}"
       nodeplugin:
         httpMetrics:
diff --git a/roles/openstack_helm_infra_ceph_provisioners/defaults/main.yml b/roles/openstack_helm_infra_ceph_provisioners/defaults/main.yml
index b4f8d8a..636d0e9 100644
--- a/roles/openstack_helm_infra_ceph_provisioners/defaults/main.yml
+++ b/roles/openstack_helm_infra_ceph_provisioners/defaults/main.yml
@@ -29,6 +29,12 @@
 openstack_helm_infra_ceph_provisioners_chart_name: ceph-provisioners
 
                                                                    # ]]]
+# .. envvar:: openstack_helm_infra_ceph_provisioners_ceph_mon_group [[[
+#
+# Ansible inventory group containing Ceph monitors.
+openstack_helm_infra_ceph_provisioners_ceph_mon_group: controllers
+
+                                                                   # ]]]
 # .. envvar:: openstack_helm_infra_ceph_provisioners_ceph_monitors [[[
 #
 # IP address list of Ceph monitors
diff --git a/roles/openstack_helm_infra_ceph_provisioners/tasks/main.yml b/roles/openstack_helm_infra_ceph_provisioners/tasks/main.yml
index b76d60e..17e08e3 100644
--- a/roles/openstack_helm_infra_ceph_provisioners/tasks/main.yml
+++ b/roles/openstack_helm_infra_ceph_provisioners/tasks/main.yml
@@ -76,6 +76,7 @@
               protocol: TCP
 
 - name: Retrieve client.admin keyring
+  delegate_to: "{{ groups[openstack_helm_infra_ceph_provisioners_ceph_mon_group][0] }}"
   vexxhost.atmosphere.ceph_key:
     name: client.admin
     state: info