diff --git a/modules/zfs/lib/facter/zfs_datasets.rb b/modules/zfs/lib/facter/zfs_datasets.rb new file mode 100644 index 0000000..ebc01cd --- /dev/null +++ b/modules/zfs/lib/facter/zfs_datasets.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +Facter.add(:zfs_datasets) do + confine kernel: 'Linux' + setcode do + datasets = [] + + if Facter::Core::Execution.which('zfs') + begin + output = Facter::Core::Execution.execute('zfs list -H -o name 2>/dev/null', on_fail: nil) + datasets = output.strip.split("\n") if output && !output.empty? + rescue StandardError => e + Facter.debug("Error getting zfs dataset information: #{e.message}") + end + end + + datasets.empty? ? nil : datasets + end +end diff --git a/modules/zfs/lib/facter/zfs_zpools.rb b/modules/zfs/lib/facter/zfs_zpools.rb new file mode 100644 index 0000000..000a653 --- /dev/null +++ b/modules/zfs/lib/facter/zfs_zpools.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +Facter.add(:zfs_zpools) do + confine kernel: 'Linux' + setcode do + zpools = [] + + if Facter::Core::Execution.which('zpool') + begin + output = Facter::Core::Execution.execute('zpool list -H -o name 2>/dev/null', on_fail: nil) + zpools = output.strip.split("\n") if output && !output.empty? + rescue StandardError => e + Facter.debug("Error getting zpool information: #{e.message}") + end + end + + zpools.empty? ? nil : zpools + end +end diff --git a/modules/zfs/manifests/init.pp b/modules/zfs/manifests/init.pp index 6feeeed..79f95e3 100644 --- a/modules/zfs/manifests/init.pp +++ b/modules/zfs/manifests/init.pp @@ -38,8 +38,11 @@ class zfs ( # create zpools $zpools.each | $zpool, $data | { - zpool { $zpool: - * => $data + # Only create zpool if it doesn't already exist + if $facts['zfs_zpools'] == undef or !($zpool in $facts['zfs_zpools']) { + zpool { $zpool: + * => $data + } } }