Skip to content

Commit 2f9a5fb

Browse files
authored
Merge pull request #1645 from DRI-Syloe/mariadb_11
Add support for Mariadb 11.x
2 parents cbda780 + 44106d1 commit 2f9a5fb

File tree

5 files changed

+70
-13
lines changed

5 files changed

+70
-13
lines changed

lib/facter/mysql_version.rb

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
# frozen_string_literal: true
22

33
Facter.add('mysql_version') do
4-
confine { Facter::Core::Execution.which('mysql') }
54
setcode do
6-
mysql_ver = Facter::Core::Execution.execute('mysql --version')
5+
mysql_ver = if Facter::Core::Execution.which('mysql')
6+
Facter::Core::Execution.execute('mysql --version')
7+
elsif Facter::Core::Execution.which('mariadb')
8+
Facter::Core::Execution.execute('mariadb --version')
9+
end
710
mysql_ver.match(%r{\d+\.\d+\.\d+})[0] if mysql_ver
811
end
912
end

lib/facter/mysqld_version.rb

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
# frozen_string_literal: true
22

33
Facter.add('mysqld_version') do
4-
confine { Facter::Core::Execution.which('mysqld') || Facter::Core::Execution.which('/usr/libexec/mysqld') }
54
setcode do
6-
# Add /usr/libexec to PATH to find mysqld command
7-
Facter::Core::Execution.execute('env PATH=$PATH:/usr/libexec mysqld --no-defaults -V 2>/dev/null')
5+
if Facter::Core::Execution.which('mysqld') || Facter::Core::Execution.which('/usr/libexec/mysqld')
6+
Facter::Core::Execution.execute('env PATH=$PATH:/usr/libexec mysqld --no-defaults -V 2>/dev/null')
7+
elsif Facter::Core::Execution.which('mariadbd')
8+
Facter::Core::Execution.execute('mariadbd --no-defaults -V 2>/dev/null')
9+
end
810
end
911
end

lib/puppet/provider/mysql.rb

+29-5
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,35 @@ class Puppet::Provider::Mysql < Puppet::Provider
3838
].join(':')
3939

4040
# rubocop:disable Style/HashSyntax
41-
commands :mysql_raw => 'mysql'
42-
commands :mysqld => 'mysqld'
43-
commands :mysqladmin => 'mysqladmin'
41+
commands :mysql_client => 'mysql'
42+
commands :mariadb_client => 'mariadb'
43+
commands :mysqld_service => 'mysqld'
44+
commands :mariadbd_service => 'mariadbd'
45+
commands :mysql_admin => 'mysqladmin'
46+
commands :mariadb_admin => 'mariadb-admin'
4447
# rubocop:enable Style/HashSyntax
4548

49+
def self.mysql_raw(*args)
50+
if newer_than('mariadb' => '11.0.0') && mysqld_version_string.scan(%r{mariadb}i)
51+
return mariadb_client(*args)
52+
end
53+
mysql_client(*args)
54+
end
55+
56+
def self.mysqld(*args)
57+
if newer_than('mariadb' => '11.0.0') && mysqld_version_string.scan(%r{mariadb}i)
58+
return mariadb_client(*args)
59+
end
60+
mysqld_service(*args)
61+
end
62+
63+
def self.mysqladmin(*args)
64+
if newer_than('mariadb' => '11.0.0') && mysqld_version_string.scan(%r{mariadb}i)
65+
return mariadb_client(*args)
66+
end
67+
mysql_admin(*args)
68+
end
69+
4670
# Optional defaults file
4771
def self.defaults_file
4872
"--defaults-extra-file=#{Facter.value(:root_home)}/.my.cnf" if File.file?("#{Facter.value(:root_home)}/.my.cnf")
@@ -62,8 +86,8 @@ def mysqld_type
6286
def self.mysqld_version_string
6387
# As the possibility of the mysqld being remote we need to allow the version string to be overridden,
6488
# this can be done by facter.value as seen below. In the case that it has not been set and the facter
65-
# value is nil we use the mysql -v command to ensure we report the correct version of mysql for later use cases.
66-
@mysqld_version_string ||= Facter.value(:mysqld_version) || mysqld('-V')
89+
# value is nil we use an empty string so that default client/service are used.
90+
@mysqld_version_string ||= Facter.value(:mysqld_version) || ''
6791
end
6892

6993
def mysqld_version_string

spec/unit/facter/mysql_version_spec.rb

+15-2
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,28 @@
88
end
99

1010
describe 'mysql_version' do
11-
context 'with value' do
11+
context 'with mysql' do
1212
before :each do
13-
allow(Facter::Core::Execution).to receive(:which).and_return('fake_mysql_path')
13+
allow(Facter::Core::Execution).to receive(:which).with('mysql').and_return('fake_mysql_path')
14+
allow(Facter::Core::Execution).to receive(:which).with('mariadb').and_return(false)
1415
allow(Facter::Core::Execution).to receive(:execute).with('mysql --version').and_return('mysql Ver 14.12 Distrib 5.0.95, for redhat-linux-gnu (x86_64) using readline 5.1')
1516
end
1617

1718
it {
1819
expect(Facter.fact(:mysql_version).value).to eq('5.0.95')
1920
}
2021
end
22+
23+
context 'with mariadb' do
24+
before :each do
25+
allow(Facter::Core::Execution).to receive(:which).with('mysql').and_return(false)
26+
allow(Facter::Core::Execution).to receive(:which).with('mariadb').and_return('/usr/bin/mariadb')
27+
allow(Facter::Core::Execution).to receive(:execute).with('mariadb --version').and_return('mariadb from 11.4.2-MariaDB, client 15.2 for debian-linux-gnu (x86_64) using EditLine wrapper')
28+
end
29+
30+
it {
31+
expect(Facter.fact(:mysql_version).value).to eq('11.4.2')
32+
}
33+
end
2134
end
2235
end

spec/unit/facter/mysqld_version_spec.rb

+16-1
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,10 @@
88
end
99

1010
describe 'mysqld_version' do
11-
context 'with value' do
11+
context 'with mysqld' do
1212
before :each do
1313
allow(Facter::Core::Execution).to receive(:which).with('mysqld').and_return('/usr/sbin/mysqld')
14+
allow(Facter::Core::Execution).to receive(:which).with('mariadbd').and_return(false)
1415
allow(Facter::Core::Execution).to receive(:execute).with('env PATH=$PATH:/usr/libexec mysqld --no-defaults -V 2>/dev/null')
1516
.and_return('mysqld Ver 5.5.49-37.9 for Linux on x86_64 (Percona Server (GPL), Release 37.9, Revision efa0073)')
1617
end
@@ -19,5 +20,19 @@
1920
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)')
2021
}
2122
end
23+
24+
context 'with mariadb' do
25+
before :each do
26+
allow(Facter::Core::Execution).to receive(:which).with('mysqld').and_return(false)
27+
allow(Facter::Core::Execution).to receive(:which).with('/usr/libexec/mysqld').and_return(false)
28+
allow(Facter::Core::Execution).to receive(:which).with('mariadbd').and_return('/usr/sbin/mariadbd')
29+
allow(Facter::Core::Execution).to receive(:execute).with('mariadbd --no-defaults -V 2>/dev/null')
30+
.and_return('mariadbd Ver 11.4.2-MariaDB-ubu2404 for debian-linux-gnu on x86_64 (mariadb.org binary distribution)')
31+
end
32+
33+
it {
34+
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)')
35+
}
36+
end
2237
end
2338
end

0 commit comments

Comments
 (0)