Tim Landscheidt has uploaded a new change for review.
https://gerrit.wikimedia.org/r/250361
Change subject: Add support for PostgreSQL backend
......................................................................
Add support for PostgreSQL backend
This change adds support to set up a PostgreSQL backend by setting the
Vagrant configuration "db_type" to "postgres". As HHVM does not
support PostgreSQL out of the box, the Zend Engine role is selected if
this backend is chosen.
Bug: T116604
Change-Id: I1a1f001d25e61c9816ba316144449f8a08ec8cd0
---
M lib/mediawiki-vagrant/settings/definitions.rb
M puppet/modules/mediawiki/manifests/init.pp
M puppet/modules/mediawiki/manifests/multiwiki.pp
M puppet/modules/mediawiki/manifests/wiki.pp
A puppet/modules/mediawiki/templates/wiki/check_installed_postgres.erb
M puppet/modules/php/manifests/init.pp
A puppet/modules/postgresql/manifests/init.pp
A puppet/modules/postgresql/manifests/packages.pp
M puppet/modules/role/manifests/mediawiki.pp
M spec/mediawiki_vagrant/settings/definitions_spec.rb
10 files changed, 118 insertions(+), 14 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/vagrant
refs/changes/61/250361/1
diff --git a/lib/mediawiki-vagrant/settings/definitions.rb
b/lib/mediawiki-vagrant/settings/definitions.rb
index 9ed2f31..f2c3bbd 100644
--- a/lib/mediawiki-vagrant/settings/definitions.rb
+++ b/lib/mediawiki-vagrant/settings/definitions.rb
@@ -67,8 +67,8 @@
setting :db_type,
description: 'Database type to use',
- help: "Enter 'mysql' or 'sqlite'. You cannot change this for an already
provisioned VM.",
+ help: "Enter 'mysql', 'postgres' or 'sqlite'. You cannot change this for
an already provisioned VM.",
default: 'mysql',
- coercion: ->(_setting, new) { %w(mysql sqlite).include?(new) ? new :
_setting.default }
+ coercion: ->(_setting, new) { %w(mysql postgres sqlite).include?(new) ?
new : _setting.default }
end
end
diff --git a/puppet/modules/mediawiki/manifests/init.pp
b/puppet/modules/mediawiki/manifests/init.pp
index 8a57e7e..4aa5875 100644
--- a/puppet/modules/mediawiki/manifests/init.pp
+++ b/puppet/modules/mediawiki/manifests/init.pp
@@ -15,7 +15,7 @@
# Initial password for admin account (example: 'secret123').
#
# [*db_type*]
-# Type of database backend ('mysql' or 'sqlite').
+# Type of database backend ('mysql', 'postgres' or 'sqlite').
#
# [*db_name*]
# Logical database name (example: 'devwiki').
@@ -140,9 +140,17 @@
],
}
- if $db_type == 'mysql' {
- Exec['set_mysql_password'] -> Mediawiki::Wiki[$wiki_name]
+ # lint:ignore:case_without_default
+ case $db_type {
+ 'mysql': {
+ Exec['set_mysql_password'] -> Mediawiki::Wiki[$wiki_name]
+ }
+
+ 'postgres': {
+ Exec['create_postgresql_user'] -> Mediawiki::Wiki[$wiki_name]
+ }
}
+ # lint:endignore
env::var { 'MW_INSTALL_PATH':
value => $dir,
diff --git a/puppet/modules/mediawiki/manifests/multiwiki.pp
b/puppet/modules/mediawiki/manifests/multiwiki.pp
index 7ec886f..e454229 100644
--- a/puppet/modules/mediawiki/manifests/multiwiki.pp
+++ b/puppet/modules/mediawiki/manifests/multiwiki.pp
@@ -197,6 +197,18 @@
}
}
+ 'postgres': {
+ require_package('postgresql-client-common')
+
+ file { '/usr/local/bin/sql':
+ ensure => file,
+ owner => 'root',
+ group => 'root',
+ mode => '0755',
+ content => "#!/bin/sh\npsql -U root -h localhost
${mediawiki::db_name}\n",
+ }
+ }
+
'sqlite': {
require_package('sqlite3')
diff --git a/puppet/modules/mediawiki/manifests/wiki.pp
b/puppet/modules/mediawiki/manifests/wiki.pp
index 850c817..0726dd2 100644
--- a/puppet/modules/mediawiki/manifests/wiki.pp
+++ b/puppet/modules/mediawiki/manifests/wiki.pp
@@ -26,7 +26,7 @@
# The name of your site (example: 'devwiki').
#
# [*db_type*]
-# Type of database backend ('mysql' or 'sqlite').
+# Type of database backend ('mysql', 'postgres' or 'sqlite').
#
# [*db_name*]
# Logical database name (example: 'devwiki').
@@ -122,9 +122,17 @@
require => File[$settings_root],
}
- if $db_type == 'mysql' {
- Class['mysql'] -> Exec["${db_name}_setup"]
+ # lint:ignore:case_without_default
+ case $db_type {
+ 'mysql': {
+ Class['mysql'] -> Exec["${db_name}_setup"]
+ }
+
+ 'postgres': {
+ Class['postgresql'] -> Exec["${db_name}_setup"]
+ }
}
+ # lint:endignore
exec { "${db_name}_include_extra_settings":
command => '/bin/echo "include_once \'/vagrant/LocalSettings.php\';"
>> LocalSettings.php',
diff --git
a/puppet/modules/mediawiki/templates/wiki/check_installed_postgres.erb
b/puppet/modules/mediawiki/templates/wiki/check_installed_postgres.erb
new file mode 100644
index 0000000..646e0d0
--- /dev/null
+++ b/puppet/modules/mediawiki/templates/wiki/check_installed_postgres.erb
@@ -0,0 +1 @@
+test -f '<%= @settings_root %>/LocalSettings.php' && sudo -u postgres psql
-Atc "SELECT 'x' FROM pg_database WHERE datname = '<%= @db_name %>';" template1
| fgrep -x x
diff --git a/puppet/modules/php/manifests/init.pp
b/puppet/modules/php/manifests/init.pp
index 9fd9544..010ce25 100644
--- a/puppet/modules/php/manifests/init.pp
+++ b/puppet/modules/php/manifests/init.pp
@@ -28,6 +28,7 @@
'php5-json',
'php5-mcrypt',
'php5-mysql',
+ 'php5-pgsql',
'php5-readline',
'php5-sqlite',
]:
diff --git a/puppet/modules/postgresql/manifests/init.pp
b/puppet/modules/postgresql/manifests/init.pp
new file mode 100644
index 0000000..4866418
--- /dev/null
+++ b/puppet/modules/postgresql/manifests/init.pp
@@ -0,0 +1,51 @@
+# == Class: postgresql
+#
+# Configures a local PostgreSQL database server and ~/.pgpass and
+# ~/.psqlrc files for the Vagrant user.
+#
+# === Parameters
+#
+# [*root_password*]
+# Password for the root account (default: 'vagrant').
+#
+# === Examples
+#
+# class { 'postgresql':
+# root_password => 'r00tp455w0rd',
+# }
+#
+class postgresql(
+ $root_password = 'vagrant',
+) {
+ include ::postgresql::packages
+
+ exec { 'create_postgresql_user':
+ command => "/usr/bin/psql -c \"CREATE USER root WITH CREATEDB PASSWORD
'$root_password';\"",
+ unless => '/usr/bin/psql -Atc "SELECT \'x\' FROM pg_user WHERE
usename = \'root\';" | /bin/fgrep -x x',
+ user => 'postgres',
+ require => Service['postgresql'],
+ }
+
+ service { 'postgresql':
+ ensure => running,
+ enable => true,
+ hasrestart => true,
+ require => Package['postgresql'],
+ }
+
+ file { '/home/vagrant/.pgpass':
+ ensure => file,
+ owner => 'vagrant',
+ group => 'vagrant',
+ mode => '0600',
+ content => "localhost:5432:*:root:${root_password}\n",
+ }
+
+ file { '/home/vagrant/.psqlrc':
+ ensure => file,
+ owner => 'vagrant',
+ group => 'vagrant',
+ mode => '0444',
+ content => "SET search_path = mediawiki, public, pg_catalog;\n",
+ }
+}
diff --git a/puppet/modules/postgresql/manifests/packages.pp
b/puppet/modules/postgresql/manifests/packages.pp
new file mode 100644
index 0000000..3d92758
--- /dev/null
+++ b/puppet/modules/postgresql/manifests/packages.pp
@@ -0,0 +1,11 @@
+# == Class: postgresql::packages
+#
+# PostgreSQL package resources, abstracted out to a separate,
+# unparametrized class so they can be included from multiple
+# locations.
+#
+class postgresql::packages {
+ package { 'postgresql':
+ ensure => present,
+ }
+}
diff --git a/puppet/modules/role/manifests/mediawiki.pp
b/puppet/modules/role/manifests/mediawiki.pp
index b70a826..a1d8f7d 100644
--- a/puppet/modules/role/manifests/mediawiki.pp
+++ b/puppet/modules/role/manifests/mediawiki.pp
@@ -7,7 +7,7 @@
# Hostname for the main wiki.
#
# [*db_type*]
-# Type of database backend ('mysql' or 'sqlite').
+# Type of database backend ('mysql', 'postgres' or 'sqlite').
#
class role::mediawiki(
$hostname,
@@ -20,10 +20,22 @@
require ::mwv
require ::redis
- if $db_type == 'mysql' {
- require ::mysql
- }
+ # lint:ignore:case_without_default
+ case $db_type {
+ 'mysql': {
+ require ::mysql
+ }
+ 'postgres': {
+ require ::postgresql
+ # TODO: HHVM does not support PostgreSQL out of the box,
+ # so the VM needs to use the Zend Engine instead.
+ # When easy-to-install packages are available, this
+ # can be amended.
+ require ::role::zend
+ }
+ }
+ # lint:endignore
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 8b13dc7..7cb6231 100644
--- a/spec/mediawiki_vagrant/settings/definitions_spec.rb
+++ b/spec/mediawiki_vagrant/settings/definitions_spec.rb
@@ -199,8 +199,8 @@
it { is_expected.to have_attributes(default: 'mysql') }
context 'when a new value is set' do
- it 'takes values "mysql" and "sqlite" verbatim' do
- %w(mysql sqlite).each do |value|
+ it 'takes values "mysql", "postgres" and "sqlite" verbatim' do
+ %w(mysql postgres sqlite).each do |value|
subject.value = value
expect(subject.value).to eq(value), "expected #{value} to be
taken verbatim"
end
--
To view, visit https://gerrit.wikimedia.org/r/250361
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I1a1f001d25e61c9816ba316144449f8a08ec8cd0
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