Tim Landscheidt has uploaded a new change for review.
https://gerrit.wikimedia.org/r/250171
Change subject: Add support for SQLite backend
......................................................................
Add support for SQLite backend
This change adds a Vagrant configuration setting "db_type" that is
used to determine the database backend to use. Valid values are
"mysql" (default) and "sqlite".
With "mysql", this does not introduce any changes except to pass
(redundant) "--dbtype mysql" and "--dbpath" options to the command
line installer. With "sqlite", this will not install a MySQL server
and instead specify "--dbtype sqlite" to create an SQLite database at
/srv/devwikidata/wiki.sqlite.
Changing the configuration setting is only possible before a box is
initially provisioned, i. e. the database backend cannot be switched
from MySQL to SQLite afterwards. To develop for both backends it is
necessary to set up two boxes.
Some Vagrant roles, for example "centralauth", only work with the
MySQL backend as they manipulate the database directly.
Bug: T67843
Change-Id: Iaa61ce9d2057baf0afbddf1661add4f4c72d33ef
---
M Vagrantfile
M features/config.feature
M lib/mediawiki-vagrant/settings/definitions.rb
M puppet/hieradata/common.yaml
M puppet/modules/mediawiki/manifests/init.pp
M puppet/modules/mediawiki/manifests/multiwiki.pp
M puppet/modules/mediawiki/manifests/wiki.pp
R puppet/modules/mediawiki/templates/wiki/check_installed_mysql.erb
A puppet/modules/mediawiki/templates/wiki/check_installed_sqlite.erb
M puppet/modules/mediawiki/templates/wiki/run_installer.erb
M puppet/modules/misc/files/mediawiki_vagrant_motd
M puppet/modules/role/manifests/mediawiki.pp
M spec/mediawiki_vagrant/settings/definitions_spec.rb
13 files changed, 84 insertions(+), 24 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/vagrant
refs/changes/71/250171/1
diff --git a/Vagrantfile b/Vagrantfile
index 2be8c1d..e36d2a2 100644
--- a/Vagrantfile
+++ b/Vagrantfile
@@ -221,6 +221,7 @@
'forwarded_port' => settings[:http_port],
'shared_apt_cache' => '/vagrant/cache/apt/',
'environment' => ENV['MWV_ENVIRONMENT'] || 'vagrant',
+ 'db_type' => settings[:db_type],
}
if settings[:http_port] != 80
diff --git a/features/config.feature b/features/config.feature
index 14b4a57..5d004e9 100644
--- a/features/config.feature
+++ b/features/config.feature
@@ -30,6 +30,7 @@
| nfs_shares |
| forward_agent |
| forward_x11 |
+ | db_type |
Scenario: Running `vagrant config --list` displays each setting's current
value
Given the "http_port" setting is "8081"
@@ -78,6 +79,7 @@
| nfs_cache | yes |
| forward_agent | yes |
| forward_x11 | no |
+ | db_type | sqlite |
Then the command should have completed successfully
And the current settings should be:
| git_user | foo |
@@ -90,6 +92,7 @@
| nfs_cache | yes |
| forward_agent | yes |
| forward_x11 | no |
+ | db_type | sqlite |
Scenario: Running `vagrant config --required` prompts for only required
settings
Given the "git_user" setting is not configured
diff --git a/lib/mediawiki-vagrant/settings/definitions.rb
b/lib/mediawiki-vagrant/settings/definitions.rb
index ea95497..56f166d 100644
--- a/lib/mediawiki-vagrant/settings/definitions.rb
+++ b/lib/mediawiki-vagrant/settings/definitions.rb
@@ -64,5 +64,11 @@
help: "Enter 'yes' or 'no'. X11 forwarding enables GUI applications to
be run on the guest.",
default: true,
coercion: ->(_setting, new) { !!(new.to_s =~ /^(true|t|yes|y|1)$/i) }
+
+ setting :db_type,
+ description: 'Database type to use',
+ help: "Enter 'mysql' or 'sqlite'. You cannot change this for an already
provisioned VM.",
+ default: 'mysql'
+ # TODO: Coerce invalid inputs to default.
end
end
diff --git a/puppet/hieradata/common.yaml b/puppet/hieradata/common.yaml
index 3650033..b58724b 100644
--- a/puppet/hieradata/common.yaml
+++ b/puppet/hieradata/common.yaml
@@ -201,6 +201,7 @@
mediawiki::upload_dir: "%{hiera('mwv::files_dir')}/images"
mediawiki::page_dir: "%{hiera('mwv::files_dir')}/pages"
mediawiki::composer_fragment_dir:
"%{hiera('mediawiki::settings_dir')}/composer"
+mediawiki::db_type: "%{::db_type}"
mediawiki::db_name: "%{hiera('mysql::default_db_name')}"
mediawiki::db_user: root
mediawiki::db_pass: "%{hiera('mysql::root_password')}"
@@ -256,6 +257,7 @@
payments::dir: /vagrant/mediawiki-fr
role::mediawiki::hostname: 127.0.0.1
+role::mediawiki::db_type: "%{::db_type}"
role::raita::dir: "%{hiera('mwv::services_dir')}/raita"
role::raita::vhost_name: 'raita.local.wmftest.net'
diff --git a/puppet/modules/mediawiki/manifests/init.pp
b/puppet/modules/mediawiki/manifests/init.pp
index 7353b2a..8a57e7e 100644
--- a/puppet/modules/mediawiki/manifests/init.pp
+++ b/puppet/modules/mediawiki/manifests/init.pp
@@ -14,14 +14,17 @@
# [*admin_pass*]
# Initial password for admin account (example: 'secret123').
#
+# [*db_type*]
+# Type of database backend ('mysql' or 'sqlite').
+#
# [*db_name*]
-# Logical MySQL database name (example: 'devwiki').
+# Logical database name (example: 'devwiki').
#
# [*db_user*]
-# MySQL user to use to connect to the database (example: 'wikidb').
+# Database user to use to connect to the database (example: 'wikidb').
#
# [*db_pass*]
-# Password for MySQL account (example: 'secret123').
+# Password for database user (example: 'secret123').
#
# [*dir*]
# The system path to which MediaWiki files have been installed
@@ -54,6 +57,7 @@
$wiki_name,
$admin_user,
$admin_pass,
+ $db_type,
$db_name,
$db_pass,
$db_user,
@@ -131,12 +135,15 @@
server_url => $server_url,
primary_wiki => true,
require => [
- Exec['set_mysql_password'],
Git::Clone['mediawiki/core'],
Php::Composer::Install[$dir],
],
}
+ if $db_type == 'mysql' {
+ Exec['set_mysql_password'] -> Mediawiki::Wiki[$wiki_name]
+ }
+
env::var { 'MW_INSTALL_PATH':
value => $dir,
}
diff --git a/puppet/modules/mediawiki/manifests/multiwiki.pp
b/puppet/modules/mediawiki/manifests/multiwiki.pp
index 1afcacd..61db121 100644
--- a/puppet/modules/mediawiki/manifests/multiwiki.pp
+++ b/puppet/modules/mediawiki/manifests/multiwiki.pp
@@ -183,13 +183,31 @@
content => template('mediawiki/multiwiki/foreachwiki.erb'),
}
- file { '/usr/local/bin/sql':
- ensure => link,
- target => '/usr/bin/mysql',
- # /usr/bin/mysql is provided by the package
- # mysql-client-core-5.5, but that is only installed as an
- # implicit dependency of mysql-server required by
- # mysql::packages.
- require => Package['mysql-server'],
+ case $db_type {
+ 'mysql': {
+ file { '/usr/local/bin/sql':
+ ensure => link,
+ target => '/usr/bin/mysql',
+ # /usr/bin/mysql is provided by the package
+ # mysql-client-core-5.5, but that is only installed as
+ # an implicit dependency of mysql-server required by
+ # mysql::packages.
+ require => Package['mysql-server'],
+ }
+ }
+
+ 'sqlite': {
+ require_package('sqlite3')
+
+ $quoted_sqlite_filename =
shellquote("${::mwv::files_dir}/${mediawiki::wiki_name}data/wiki.sqlite")
+
+ file { '/usr/local/bin/sql':
+ ensure => file,
+ owner => 'root',
+ group => 'root',
+ mode => '0755',
+ content => "#!/bin/sh\nsqlite3 ${quoted_sqlite_filename}\n",
+ }
+ }
}
}
diff --git a/puppet/modules/mediawiki/manifests/wiki.pp
b/puppet/modules/mediawiki/manifests/wiki.pp
index fbe17fb..2d83bed 100644
--- a/puppet/modules/mediawiki/manifests/wiki.pp
+++ b/puppet/modules/mediawiki/manifests/wiki.pp
@@ -25,14 +25,17 @@
# [*wiki_name*]
# The name of your site (example: 'devwiki').
#
+# [*db_type*]
+# Type of database backend ('mysql' or 'sqlite').
+#
# [*db_name*]
-# Logical MySQL database name (example: 'devwiki').
+# Logical database name (example: 'devwiki').
#
# [*db_user*]
-# MySQL user to use to connect to the database (example: 'wikidb').
+# Database user to use to connect to the database (example: 'wikidb').
#
# [*db_pass*]
-# Password for MySQL account (example: 'secret123').
+# Password for database user (example: 'secret123').
#
# [*admin_user*]
# User name for the initial admin account (example: 'admin').
@@ -60,6 +63,7 @@
#
define mediawiki::wiki(
$wiki_name = $title,
+ $db_type = $::mediawiki::db_type,
$db_name = "${title}wiki",
$db_user = $::mediawiki::db_user,
$db_pass = $::mediawiki::db_pass,
@@ -71,6 +75,7 @@
$upload_path = "/${title}images",
$server_url =
"http://${title}${::mediawiki::multiwiki::base_domain}${::port_fragment}",
$primary_wiki = false,
+ $data_dir = "${::mwv::files_dir}/${title}data",
) {
include ::mwv
include ::mediawiki
@@ -80,16 +85,18 @@
$settings_dir = "${settings_root}/settings.d"
$installer_args = {
wiki => $db_name,
+ dbtype => $db_type,
dbname => $db_name,
dbpass => $db_pass,
dbuser => $db_user,
+ dbpath => $data_dir,
pass => $admin_pass,
scriptpath => '/w',
server => $server_url,
confpath => $settings_root,
}
- file { [$upload_dir, $cache_dir]:
+ file { [$upload_dir, $cache_dir, $data_dir]:
ensure => directory,
owner => 'vagrant',
group => 'www-data',
@@ -100,17 +107,19 @@
require => [
File[$cache_dir],
File[$upload_dir],
+ File[$data_dir],
],
}
exec { "${db_name}_setup":
command => template('mediawiki/wiki/run_installer.erb'),
- unless => template('mediawiki/wiki/check_installed.erb'),
+ unless => template("mediawiki/wiki/check_installed_${db_type}.erb"),
user => 'vagrant',
- require => [
- Class['mysql'],
- File[$settings_root],
- ],
+ require => File[$settings_root],
+ }
+
+ if $db_type == 'mysql' {
+ Class['mysql'] -> Exec["${db_name}_setup"]
}
exec { "${db_name}_include_extra_settings":
diff --git a/puppet/modules/mediawiki/templates/wiki/check_installed.erb
b/puppet/modules/mediawiki/templates/wiki/check_installed_mysql.erb
similarity index 100%
rename from puppet/modules/mediawiki/templates/wiki/check_installed.erb
rename to puppet/modules/mediawiki/templates/wiki/check_installed_mysql.erb
diff --git a/puppet/modules/mediawiki/templates/wiki/check_installed_sqlite.erb
b/puppet/modules/mediawiki/templates/wiki/check_installed_sqlite.erb
new file mode 100644
index 0000000..87b0926
--- /dev/null
+++ b/puppet/modules/mediawiki/templates/wiki/check_installed_sqlite.erb
@@ -0,0 +1 @@
+test -f '<%= @settings_root %>/LocalSettings.php' && test -f '<%= @data_dir
%>/wiki.sqlite'
diff --git a/puppet/modules/mediawiki/templates/wiki/run_installer.erb
b/puppet/modules/mediawiki/templates/wiki/run_installer.erb
index e0f2767..843e28e 100644
--- a/puppet/modules/mediawiki/templates/wiki/run_installer.erb
+++ b/puppet/modules/mediawiki/templates/wiki/run_installer.erb
@@ -1 +1,4 @@
/usr/local/bin/multiversion-install <%= @src_dir %> <%= @installer_args.map {
|k,v| v ? "--#{k} #{v} " : '' }.join() %> <%= @db_name %> <%= @admin_user %>
+<% if @db_type == 'sqlite' -%>
+sudo find <%= @data_dir %> -type f -exec chown www-data.www-data \{\} +
+<% end -%>
diff --git a/puppet/modules/misc/files/mediawiki_vagrant_motd
b/puppet/modules/misc/files/mediawiki_vagrant_motd
index 8d74229..0762669 100755
--- a/puppet/modules/misc/files/mediawiki_vagrant_motd
+++ b/puppet/modules/misc/files/mediawiki_vagrant_motd
@@ -29,6 +29,6 @@
echo
printf " * MediaWiki is located at \033[33;1m/vagrant/mediawiki\033[0m.\n"
printf " * To interactively evaluate PHP and MediaWiki code, run
'\033[33mhhvmsh\033[0m'.\n"
-printf " * For a database shell, run '\033[33mmysql\033[0m'.\n"
+printf " * For a database shell, run '\033[33msql\033[0m'.\n"
printf " * To execute MediaWiki maintenance scripts, run '\033[33mmwscript
...\033[0m'.\n"
printf " * For help, visit \033[34;4mhttps://www.mediawiki.org\033[0m or
\033[33m#mediawiki\033[0m on chat.freenode.net.\n\n"
diff --git a/puppet/modules/role/manifests/mediawiki.pp
b/puppet/modules/role/manifests/mediawiki.pp
index 27be333..b70a826 100644
--- a/puppet/modules/role/manifests/mediawiki.pp
+++ b/puppet/modules/role/manifests/mediawiki.pp
@@ -1,21 +1,29 @@
# == Class: role::mediawiki
-# Provisions a MediaWiki instance powered by HHVM, MySQL, and redis.
+# Provisions a MediaWiki instance powered by HHVM, a database, and
+# Redis.
#
# === Parameters
# [+hostname+]
# Hostname for the main wiki.
#
+# [*db_type*]
+# Type of database backend ('mysql' or 'sqlite').
+#
class role::mediawiki(
$hostname,
+ $db_type,
){
include ::arcanist
include ::mediawiki
include ::postfix
require ::misc
require ::mwv
- require ::mysql
require ::redis
+ if $db_type == 'mysql' {
+ require ::mysql
+ }
+
require_package('php5-tidy')
require_package('tidy')
diff --git a/spec/mediawiki_vagrant/settings/definitions_spec.rb
b/spec/mediawiki_vagrant/settings/definitions_spec.rb
index c4232be..71cb662 100644
--- a/spec/mediawiki_vagrant/settings/definitions_spec.rb
+++ b/spec/mediawiki_vagrant/settings/definitions_spec.rb
@@ -192,6 +192,8 @@
end
end
end
+
+ # TODO: Add tests for db_type.
end
end
end
--
To view, visit https://gerrit.wikimedia.org/r/250171
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Iaa61ce9d2057baf0afbddf1661add4f4c72d33ef
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/vagrant
Gerrit-Branch: master
Gerrit-Owner: Tim Landscheidt <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits