diff --git a/lib/facter/mysql_version.rb b/lib/facter/mysql_version.rb index 25aae8cbf..3d1d33afd 100644 --- a/lib/facter/mysql_version.rb +++ b/lib/facter/mysql_version.rb @@ -7,3 +7,11 @@ mysql_ver.match(%r{\d+\.\d+\.\d+})[0] if mysql_ver end end + +Facter.add('mysql_version') do + confine { Facter::Core::Execution.which('mariadb') } + setcode do + mysql_ver = Facter::Core::Execution.execute('mariadb --version') + mysql_ver.match(%r{\d+\.\d+\.\d+})[0] if mysql_ver + end +end diff --git a/lib/facter/mysqld_version.rb b/lib/facter/mysqld_version.rb index 249b71fd9..e57e33b42 100644 --- a/lib/facter/mysqld_version.rb +++ b/lib/facter/mysqld_version.rb @@ -7,3 +7,10 @@ Facter::Core::Execution.execute('env PATH=$PATH:/usr/libexec mysqld --no-defaults -V 2>/dev/null') end end + +Facter.add('mysqld_version') do + confine { Facter::Core::Execution.which('mariadbd') } + setcode do + Facter::Core::Execution.execute('mariadbd --no-defaults -V 2>/dev/null') + end +end diff --git a/lib/puppet/provider/mysql.rb b/lib/puppet/provider/mysql.rb index 192bb92e8..35aa560c4 100644 --- a/lib/puppet/provider/mysql.rb +++ b/lib/puppet/provider/mysql.rb @@ -47,17 +47,23 @@ class Puppet::Provider::Mysql < Puppet::Provider # rubocop:enable Style/HashSyntax def self.mysql_raw(*args) - mysqld_version_string.scan(%r{mariadb}i) { return mariadb_client(*args) } + if self.newer_than('mariadb' => '11.0.0') and mysqld_version_string.scan(%r{mariadb}i) + return mariadb_client(*args) + end mysql_client(*args) end def self.mysqld(*args) - mysqld_version_string.scan(%r{mariadb}i) { return mariadbd_service(*args) } + if self.newer_than('mariadb' => '11.0.0') and mysqld_version_string.scan(%r{mariadb}i) + return mariadb_client(*args) + end mysqld_service(*args) end def self.mysqladmin(*args) - mysqld_version_string.scan(%r{mariadb}i) { return mariadb_admin(*args) } + if self.newer_than('mariadb' => '11.0.0') and mysqld_version_string.scan(%r{mariadb}i) + return mariadb_client(*args) + end mysql_admin(*args) end @@ -81,7 +87,7 @@ def self.mysqld_version_string # As the possibility of the mysqld being remote we need to allow the version string to be overridden, # this can be done by facter.value as seen below. In the case that it has not been set and the facter # value is nil we use the mysql -v command to ensure we report the correct version of mysql for later use cases. - @mysqld_version_string ||= Facter.value(:mysqld_version) || mysqld('-V') + @mysqld_version_string ||= Facter.value(:mysqld_version) || "" end def mysqld_version_string diff --git a/spec/unit/facter/mysqld_version_spec.rb b/spec/unit/facter/mysqld_version_spec.rb index 6b3330f08..6a029d1c2 100644 --- a/spec/unit/facter/mysqld_version_spec.rb +++ b/spec/unit/facter/mysqld_version_spec.rb @@ -8,9 +8,10 @@ end describe 'mysqld_version' do - context 'with value' do + context 'with mysqld' do before :each do allow(Facter::Core::Execution).to receive(:which).with('mysqld').and_return('/usr/sbin/mysqld') + allow(Facter::Core::Execution).to receive(:which).with('mariadbd').and_return(false) allow(Facter::Core::Execution).to receive(:execute).with('env PATH=$PATH:/usr/libexec mysqld --no-defaults -V 2>/dev/null') .and_return('mysqld Ver 5.5.49-37.9 for Linux on x86_64 (Percona Server (GPL), Release 37.9, Revision efa0073)') end @@ -19,5 +20,19 @@ expect(Facter.fact(:mysqld_version).value).to eq('mysqld Ver 5.5.49-37.9 for Linux on x86_64 (Percona Server (GPL), Release 37.9, Revision efa0073)') } end + + context 'with mariadb' do + before :each do + allow(Facter::Core::Execution).to receive(:which).with('mysqld').and_return(false) + allow(Facter::Core::Execution).to receive(:which).with('/usr/libexec/mysqld').and_return(false) + allow(Facter::Core::Execution).to receive(:which).with('mariadbd').and_return('/usr/sbin/mariadbd') + allow(Facter::Core::Execution).to receive(:execute).with('mariadbd --no-defaults -V 2>/dev/null') + .and_return('mariadbd Ver 11.4.2-MariaDB-ubu2404 for debian-linux-gnu on x86_64 (mariadb.org binary distribution)') + end + + it { + expect(Facter.fact(:mysqld_version).value).to eq('mariadbd Ver 11.4.2-MariaDB-ubu2404 for debian-linux-gnu on x86_64 (mariadb.org binary distribution)') + } + end end end