--- /dev/null
+# Get an array of all postgresql clusters on this system
+# using pg_lsclusters.
+#
+# Copyright 2019, Peter Palfrader
+#
+Facter.add(:postgresql_clusters) do
+ setcode do
+ clusters = []
+ begin
+ IO.popen(['pg_lsclusters', '-h']) do |f|
+ f.each_line do |line|
+ (version, cluster, port, status, owner, datadir, logfile, _) = line.split()
+ clusters << {
+ 'version' => version,
+ 'cluster' => cluster,
+ 'port' => port,
+ 'status' => status.split(',').product([true]).to_h(),
+ 'owner' => owner,
+ 'datadir' => datadir,
+ 'logfile' => logfile,
+ }
+ end
+ end
+ rescue Errno::ENOENT
+ end
+ clusters
+ end
+end