diff --git a/ansible/install/roles/collectd-openstack/files/collectd_ceph_storage.py b/ansible/install/roles/collectd-openstack/files/collectd_ceph_storage.py
index 5cba7ec2a..95a023e01 100644
--- a/ansible/install/roles/collectd-openstack/files/collectd_ceph_storage.py
+++ b/ansible/install/roles/collectd-openstack/files/collectd_ceph_storage.py
@@ -313,8 +313,11 @@ class CollectdCephStorage(object):
if check_output:
output = subprocess.check_output(command)
else:
- stdin, stdout, stderr = os.popen3(' '.join(command))
- output = stdout.read()
+ process = subprocess.Popen(' '.join(command), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ stdout, stderr = process.communicate()
+ if process.returncode != 0:
+ raise RuntimeError("Error occurred: {}".format(stderr.decode('utf-8')))
+ output = stdout.decode('utf-8')
except Exception as exc:
collectd.error(
'collectd-ceph-storage: {} exception: {}'.format(command, exc))
diff --git a/ansible/install/roles/collectd-openstack/tasks/main.yml b/ansible/install/roles/collectd-openstack/tasks/main.yml
index 88eff29cc..e58b6b354 100644
--- a/ansible/install/roles/collectd-openstack/tasks/main.yml
+++ b/ansible/install/roles/collectd-openstack/tasks/main.yml
@@ -342,6 +342,17 @@
when: "('CephStorage' in group_names and ceph_storage_collectd_plugin)"
# End CephStorage OSD monitoring
+- name: Get Ceph cluster fsid
+ shell: ls /var/run/ceph/
+ register: ceph_cluster_fsid
+ become: true
+ when: "rhosp_version is version('17.0', '>=')"
+ delegate_to: controller-0
+
+- name: set fact for ceph cluster id
+ set_fact:
+ ceph_cluster_fsid: "{{ ceph_cluster_fsid.stdout }}"
+
- name: Configure collectd.conf
template:
src: "{{config_type}}.collectd.conf.j2"
diff --git a/ansible/install/roles/collectd-openstack/templates/cephstorage.collectd.conf.j2 b/ansible/install/roles/collectd-openstack/templates/cephstorage.collectd.conf.j2
index 0096c4e0c..c54b46d05 100644
--- a/ansible/install/roles/collectd-openstack/templates/cephstorage.collectd.conf.j2
+++ b/ansible/install/roles/collectd-openstack/templates/cephstorage.collectd.conf.j2
@@ -110,7 +110,11 @@ PreCacheChain "PreCache"
LongRunAvgLatency false
ConvertSpecialMetricTypes true
+{% if rhosp_version | float >= 17.0 %}
+ SocketPath "/var/run/ceph/{{ceph_cluster_fsid}}/ceph-osd.{{cephstorage_osd_socket.stdout}}.asok"
+{% else %}
SocketPath "/var/run/ceph/ceph-osd.{{cephstorage_osd_socket.stdout}}.asok"
+{% endif %}
diff --git a/ansible/install/roles/collectd-openstack/templates/controller.collectd.conf.j2 b/ansible/install/roles/collectd-openstack/templates/controller.collectd.conf.j2
index 8200d652d..300ae54e3 100644
--- a/ansible/install/roles/collectd-openstack/templates/controller.collectd.conf.j2
+++ b/ansible/install/roles/collectd-openstack/templates/controller.collectd.conf.j2
@@ -204,7 +204,11 @@ PreCacheChain "PreCache"
LongRunAvgLatency false
ConvertSpecialMetricTypes true
+{% if rhosp_version | float >= 17.0 %}
+ SocketPath "/var/run/ceph/{{ceph_cluster_fsid}}/ceph-mon.{{inventory_hostname}}.asok"
+{% else %}
SocketPath "/var/run/ceph/ceph-mon.{{inventory_hostname}}.asok"
+{% endif %}
diff --git a/ansible/install/roles/collectd/tasks/main.yml b/ansible/install/roles/collectd/tasks/main.yml
index ebc1b6aed..6efae3f6f 100644
--- a/ansible/install/roles/collectd/tasks/main.yml
+++ b/ansible/install/roles/collectd/tasks/main.yml
@@ -165,6 +165,17 @@
when: "('CephStorage' in group_names and ceph_storage_collectd_plugin) and (rhosp_version is version('17.0', '<'))"
# End CephStorage OSD monitoring
+- name: Get Ceph cluster fsid
+ shell: ls /var/run/ceph/
+ register: ceph_cluster_fsid
+ become: true
+ when: "rhosp_version is version('17.0', '>=')"
+ delegate_to: controller-0
+
+- name: set fact for ceph cluster id
+ set_fact:
+ ceph_cluster_fsid: "{{ ceph_cluster_fsid.stdout }}"
+
- name: Get 1st OSD socket
shell: cephadm shell -- ls /var/run/ceph/ | head -n 1 | egrep -o '[0-9]+'
register: cephstorage_osd_socket
diff --git a/ansible/install/roles/collectd/templates/cephstorage.collectd.conf.j2 b/ansible/install/roles/collectd/templates/cephstorage.collectd.conf.j2
index 8b9d9236b..a338a29a4 100644
--- a/ansible/install/roles/collectd/templates/cephstorage.collectd.conf.j2
+++ b/ansible/install/roles/collectd/templates/cephstorage.collectd.conf.j2
@@ -109,7 +109,11 @@ PreCacheChain "PreCache"
LongRunAvgLatency false
ConvertSpecialMetricTypes true
+{% if rhosp_version | float >= 17.0 %}
+ SocketPath "/var/run/ceph/{{ceph_cluster_fsid}}/ceph-osd.{{cephstorage_osd_socket.stdout}}.asok"
+{% else %}
SocketPath "/var/run/ceph/ceph-osd.{{cephstorage_osd_socket.stdout}}.asok"
+{% endif %}
diff --git a/ansible/install/roles/collectd/templates/controller.collectd.conf.j2 b/ansible/install/roles/collectd/templates/controller.collectd.conf.j2
index 9de8a4be6..a24d57261 100644
--- a/ansible/install/roles/collectd/templates/controller.collectd.conf.j2
+++ b/ansible/install/roles/collectd/templates/controller.collectd.conf.j2
@@ -121,7 +121,11 @@ PreCacheChain "PreCache"
LongRunAvgLatency false
ConvertSpecialMetricTypes true
+{% if rhosp_version | float >= 17.0 %}
+ SocketPath "/var/run/ceph/{{ceph_cluster_fsid}}/ceph-mon.{{inventory_hostname}}.asok"
+{% else %}
SocketPath "/var/run/ceph/ceph-mon.{{inventory_hostname}}.asok"
+{% endif %}
diff --git a/browbeat-containers/collectd-openstack/files/collectd_ceph_storage.py b/browbeat-containers/collectd-openstack/files/collectd_ceph_storage.py
index 4390b94a2..f91848164 100644
--- a/browbeat-containers/collectd-openstack/files/collectd_ceph_storage.py
+++ b/browbeat-containers/collectd-openstack/files/collectd_ceph_storage.py
@@ -313,8 +313,11 @@ class CollectdCephStorage(object):
if check_output:
output = subprocess.check_output(command)
else:
- stdin, stdout, stderr = os.popen3(' '.join(command))
- output = stdout.read()
+ process = subprocess.Popen(' '.join(command), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ stdout, stderr = process.communicate()
+ if process.returncode != 0:
+ raise RuntimeError("Error occurred: {}".format(stderr.decode('utf-8')))
+ output = stdout.decode('utf-8')
except Exception as exc:
collectd.error(
'collectd-ceph-storage: {} exception: {}'.format(command, exc))