From 5ea8fef5c2797a43538f3221ebc388b2761ccb11 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 0000000000..457b34d3a0 --- /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 0000000000..d16ad0819c --- /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 0000000000..fc0e52dbdc --- /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 0000000000..a57b9c8821 --- /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 0000000000..3390bf02be --- /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 c89aadd955..ed480af486 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 0000000000..8c1e96579d --- /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 0000000000..10fa64c30a --- /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 0000000000..1e5c5a77ae --- /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 0000000000..55ea427003 --- /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 0000000000..4be04b6d9e --- /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