From 1ca153495538d2c710c57a782cdd9070025c82cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Tarti=C3=A8re?= Date: Wed, 4 Dec 2024 19:15:51 -1000 Subject: [PATCH] Add support for ZFS facts on GNU/Linux OpenZFS can be installed on Linux nodes, and is packaged in some Linux distros such as Debian, so it makes sense to make these facts available when the system has support for ZFS. --- lib/facter/facts/linux/zfs_featurenumbers.rb | 14 ++++++++++++++ lib/facter/facts/linux/zfs_version.rb | 14 ++++++++++++++ lib/facter/facts/linux/zpool_featureflags.rb | 14 ++++++++++++++ .../facts/linux/zpool_featurenumbers.rb | 14 ++++++++++++++ lib/facter/facts/linux/zpool_version.rb | 14 ++++++++++++++ lib/facter/framework/core/file_loader.rb | 5 +++++ .../facts/linux/zfs_featurenumbers_spec.rb | 18 ++++++++++++++++++ spec/facter/facts/linux/zfs_version_spec.rb | 18 ++++++++++++++++++ .../facts/linux/zpool_featureflags_spec.rb | 19 +++++++++++++++++++ .../facts/linux/zpool_featurenumbers_spec.rb | 19 +++++++++++++++++++ spec/facter/facts/linux/zpool_version_spec.rb | 18 ++++++++++++++++++ 11 files changed, 167 insertions(+) create mode 100644 lib/facter/facts/linux/zfs_featurenumbers.rb create mode 100644 lib/facter/facts/linux/zfs_version.rb create mode 100644 lib/facter/facts/linux/zpool_featureflags.rb create mode 100644 lib/facter/facts/linux/zpool_featurenumbers.rb create mode 100644 lib/facter/facts/linux/zpool_version.rb create mode 100644 spec/facter/facts/linux/zfs_featurenumbers_spec.rb create mode 100644 spec/facter/facts/linux/zfs_version_spec.rb create mode 100644 spec/facter/facts/linux/zpool_featureflags_spec.rb create mode 100644 spec/facter/facts/linux/zpool_featurenumbers_spec.rb create mode 100644 spec/facter/facts/linux/zpool_version_spec.rb diff --git a/lib/facter/facts/linux/zfs_featurenumbers.rb b/lib/facter/facts/linux/zfs_featurenumbers.rb new file mode 100644 index 000000000..457b34d3a --- /dev/null +++ b/lib/facter/facts/linux/zfs_featurenumbers.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +module Facts + module Linux + class ZfsFeaturenumbers + FACT_NAME = 'zfs_featurenumbers' + + def call_the_resolver + fact_value = Facter::Resolvers::ZFS.resolve(:zfs_featurenumbers) + Facter::ResolvedFact.new(FACT_NAME, fact_value) + end + end + end +end diff --git a/lib/facter/facts/linux/zfs_version.rb b/lib/facter/facts/linux/zfs_version.rb new file mode 100644 index 000000000..d16ad0819 --- /dev/null +++ b/lib/facter/facts/linux/zfs_version.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +module Facts + module Linux + class ZfsVersion + FACT_NAME = 'zfs_version' + + def call_the_resolver + fact_value = Facter::Resolvers::ZFS.resolve(:zfs_version) + Facter::ResolvedFact.new(FACT_NAME, fact_value) + end + end + end +end diff --git a/lib/facter/facts/linux/zpool_featureflags.rb b/lib/facter/facts/linux/zpool_featureflags.rb new file mode 100644 index 000000000..fc0e52dbd --- /dev/null +++ b/lib/facter/facts/linux/zpool_featureflags.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +module Facts + module Linux + class ZpoolFeatureflags + FACT_NAME = 'zpool_featureflags' + + def call_the_resolver + fact_value = Facter::Resolvers::Zpool.resolve(:zpool_featureflags) + Facter::ResolvedFact.new(FACT_NAME, fact_value) + end + end + end +end diff --git a/lib/facter/facts/linux/zpool_featurenumbers.rb b/lib/facter/facts/linux/zpool_featurenumbers.rb new file mode 100644 index 000000000..a57b9c882 --- /dev/null +++ b/lib/facter/facts/linux/zpool_featurenumbers.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +module Facts + module Linux + class ZpoolFeaturenumbers + FACT_NAME = 'zpool_featurenumbers' + + def call_the_resolver + fact_value = Facter::Resolvers::Zpool.resolve(:zpool_featurenumbers) + Facter::ResolvedFact.new(FACT_NAME, fact_value) + end + end + end +end diff --git a/lib/facter/facts/linux/zpool_version.rb b/lib/facter/facts/linux/zpool_version.rb new file mode 100644 index 000000000..3390bf02b --- /dev/null +++ b/lib/facter/facts/linux/zpool_version.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +module Facts + module Linux + class ZpoolVersion + FACT_NAME = 'zpool_version' + + def call_the_resolver + fact_value = Facter::Resolvers::Zpool.resolve(:zpool_version) + Facter::ResolvedFact.new(FACT_NAME, fact_value) + end + end + end +end diff --git a/lib/facter/framework/core/file_loader.rb b/lib/facter/framework/core/file_loader.rb index c89aadd95..ed480af48 100644 --- a/lib/facter/framework/core/file_loader.rb +++ b/lib/facter/framework/core/file_loader.rb @@ -509,6 +509,11 @@ require_relative '../../facts/linux/timezone' require_relative '../../facts/linux/virtual' require_relative '../../facts/linux/xen' + require_relative '../../facts/linux/zfs_featurenumbers' + require_relative '../../facts/linux/zfs_version' + require_relative '../../facts/linux/zpool_featureflags' + require_relative '../../facts/linux/zpool_featurenumbers' + require_relative '../../facts/linux/zpool_version' require_relative '../../resolvers/linux/docker_uptime' require_relative '../../resolvers/linux/hostname' diff --git a/spec/facter/facts/linux/zfs_featurenumbers_spec.rb b/spec/facter/facts/linux/zfs_featurenumbers_spec.rb new file mode 100644 index 000000000..8c1e96579 --- /dev/null +++ b/spec/facter/facts/linux/zfs_featurenumbers_spec.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +describe Facts::Linux::ZfsFeaturenumbers do + describe '#call_the_resolver' do + subject(:fact) { Facts::Linux::ZfsFeaturenumbers.new } + + let(:feature_numbers) { '1,2,3,4,5' } + + before do + allow(Facter::Resolvers::ZFS).to receive(:resolve).with(:zfs_featurenumbers).and_return(feature_numbers) + end + + it 'returns zfs_featurenumbers fact' do + expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \ + have_attributes(name: 'zfs_featurenumbers', value: feature_numbers) + end + end +end diff --git a/spec/facter/facts/linux/zfs_version_spec.rb b/spec/facter/facts/linux/zfs_version_spec.rb new file mode 100644 index 000000000..10fa64c30 --- /dev/null +++ b/spec/facter/facts/linux/zfs_version_spec.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +describe Facts::Linux::ZfsVersion do + describe '#call_the_resolver' do + subject(:fact) { Facts::Linux::ZfsVersion.new } + + let(:version) { '6' } + + before do + allow(Facter::Resolvers::ZFS).to receive(:resolve).with(:zfs_version).and_return(version) + end + + it 'returns zfs_version fact' do + expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \ + have_attributes(name: 'zfs_version', value: version) + end + end +end diff --git a/spec/facter/facts/linux/zpool_featureflags_spec.rb b/spec/facter/facts/linux/zpool_featureflags_spec.rb new file mode 100644 index 000000000..1e5c5a77a --- /dev/null +++ b/spec/facter/facts/linux/zpool_featureflags_spec.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +describe Facts::Linux::ZpoolFeatureflags do + describe '#call_the_resolver' do + subject(:fact) { Facts::Linux::ZpoolFeatureflags.new } + + let(:zpool_feature_flags) { 'async_destroy,empty_bpobj,lz4_compress,multi_vdev_crash_dump,spacemap_histogram' } + + before do + allow(Facter::Resolvers::Zpool).to \ + receive(:resolve).with(:zpool_featureflags).and_return(zpool_feature_flags) + end + + it 'returns the zpool_featureflags fact' do + expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \ + have_attributes(name: 'zpool_featureflags', value: zpool_feature_flags) + end + end +end diff --git a/spec/facter/facts/linux/zpool_featurenumbers_spec.rb b/spec/facter/facts/linux/zpool_featurenumbers_spec.rb new file mode 100644 index 000000000..55ea42700 --- /dev/null +++ b/spec/facter/facts/linux/zpool_featurenumbers_spec.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +describe Facts::Linux::ZpoolFeaturenumbers do + describe '#call_the_resolver' do + subject(:fact) { Facts::Linux::ZpoolFeaturenumbers.new } + + let(:zpool_featurenumbers) { '1,2,3,4,5,6,7' } + + before do + allow(Facter::Resolvers::Zpool).to \ + receive(:resolve).with(:zpool_featurenumbers).and_return(zpool_featurenumbers) + end + + it 'returns the zpool_featurenumbers fact' do + expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \ + have_attributes(name: 'zpool_featurenumbers', value: zpool_featurenumbers) + end + end +end diff --git a/spec/facter/facts/linux/zpool_version_spec.rb b/spec/facter/facts/linux/zpool_version_spec.rb new file mode 100644 index 000000000..4be04b6d9 --- /dev/null +++ b/spec/facter/facts/linux/zpool_version_spec.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +describe Facts::Linux::ZpoolVersion do + describe '#call_the_resolver' do + subject(:fact) { Facts::Linux::ZpoolVersion.new } + + let(:version) { '5' } + + before do + allow(Facter::Resolvers::Zpool).to receive(:resolve).with(:zpool_version).and_return(version) + end + + it 'returns the ZPool version fact' do + expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \ + have_attributes(name: 'zpool_version', value: version) + end + end +end