require 'pathname' Facter.add(:letsencrypt_bycertname) do confine kernel: ['FreeBSD', 'Linux', 'OpenBSD'] setcode do certs = {} # locate the certificate repository livedir = ['/etc/letsencrypt/live', '/etc/certbot/live'] .map { |path| Pathname.new path } .find(&:directory?) unless livedir.nil? Pathname.new(livedir).children.select(&:directory?).each do |path| m = path.basename.to_s.match(%r{(.*?)(-\d+)?$}) certs[m[1]] = path.to_s end end certs end end