Smalyshev has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/216403

Change subject: Add definitions for WDQS
......................................................................

Add definitions for WDQS

Change-Id: I21e17e5e7d56d536f4cc34894ddb4fd0a7ea9846
---
A manifests/role/wdqs.pp
A modules/wdqs/manifests/gui.pp
A modules/wdqs/manifests/init.pp
A modules/wdqs/manifests/packages.pp
A modules/wdqs/manifests/service.pp
A modules/wdqs/templates/nginx.erb
6 files changed, 210 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/operations/puppet 
refs/changes/03/216403/1

diff --git a/manifests/role/wdqs.pp b/manifests/role/wdqs.pp
new file mode 100644
index 0000000..070b9df
--- /dev/null
+++ b/manifests/role/wdqs.pp
@@ -0,0 +1,27 @@
+# = Class: role::wdqs
+#
+# This class sets up Wikidata Query Service
+#
+class role::wdqs{
+
+    include standard
+#      include role::labs::lvm::srv
+
+    system::role { 'role::wdqs':
+        ensure      => 'present',
+        description => 'WDQS server',
+    }
+
+    # Install service
+    class { '::wdqs':
+        package_dir       => '/srv',
+               username          => 'blazegraph',
+    }
+       
+       # Service GUI
+       class { '::wdqs::gui':
+               package_dir       => '/srv/blazegraph',
+               log_aggregator => '10.68.16.147:10514',
+               require => Class['::wdqs']
+       }
+}
diff --git a/modules/wdqs/manifests/gui.pp b/modules/wdqs/manifests/gui.pp
new file mode 100644
index 0000000..6120d42
--- /dev/null
+++ b/modules/wdqs/manifests/gui.pp
@@ -0,0 +1,31 @@
+# == Class: wdqs::packages
+#
+# Provisions WDQS GUI
+#
+# == Parameters:
+# - $package_dir:  Directory where the service is installed. 
+# GUI files are expected to be under its gui/ directory.
+# - $log_aggregator: Where to send the logs for the service.
+class wdqs::gui(
+       $package_dir,
+       $log_aggregator
+) {
+
+    if ! defined ( Package['nginx'] ) {
+        package { 'nginx': ensure => present }
+       } 
+       file { '/etc/nginx/sites-enabled/default':
+               ensure  => file,
+        owner   => 'root',
+        group   => 'root',
+        content => template('wdqs/nginx.erb'),
+        mode    => '0444',
+        require => Package['nginx'],
+               notify => Service['nginx'],
+       }
+       service { 'nginx':
+               enable => true,
+               require => File['/etc/nginx/sites-enabled/default']
+       }
+       
+}
\ No newline at end of file
diff --git a/modules/wdqs/manifests/init.pp b/modules/wdqs/manifests/init.pp
new file mode 100644
index 0000000..9dcc29d
--- /dev/null
+++ b/modules/wdqs/manifests/init.pp
@@ -0,0 +1,49 @@
+# = Class: wdqs
+# Note: this does not run the service, just installs it
+# In order to run it, dump data must be loaded, which is 
+# for now a manual process. 
+#
+# == Parameters:
+# - $package_dir:  Directory where the service should be installed.
+# Should have enough space to hold the database (>50G)
+# - $username: Username owning the service
+class wdqs($package_dir = "/srv", 
+       $username = "blazegraph"
+) {
+       $version = "0.0.2" # here for now, find better place
+
+    include ::wdqs::packages
+    class { '::wdqs::service':
+               package_dir => $package_dir,
+               version => $version,
+               username => $username,
+       }
+       
+       file { $package_dir:
+               path => $package_dir,
+               ensure => directory,
+               purge => false,
+               owner => $username,
+               group => 'wikidev',
+               mode => 0775,
+               require => User['blazegraph'],
+       }
+       
+       user { 'blazegraph':
+               name => $username,
+               ensure => present,
+               comment => 'Blazegraph user',
+               forcelocal => true,
+               home => $package_dir,
+               managehome => no,
+       }
+       
+       file { "$package_dir/blazegraph":
+               ensure => link,
+               replace => false, # do not replace existing links, version 
upgrade is manual for now
+               target => "$package_dir/service-$version",
+               require => File["$package_dir/service-$version"]
+       }
+       
+}
+
diff --git a/modules/wdqs/manifests/packages.pp 
b/modules/wdqs/manifests/packages.pp
new file mode 100644
index 0000000..613f994
--- /dev/null
+++ b/modules/wdqs/manifests/packages.pp
@@ -0,0 +1,22 @@
+# == Class: wdqs::packages
+#
+# Provisions WDQS package and dependencies.
+#
+class wdqs::packages {
+    include ::java::tools
+
+    if ! defined ( Package['openjdk-7-jdk'] ) {
+        package { 'openjdk-7-jdk':
+            ensure => 'present',
+        }
+    }
+
+    if ! defined ( Package['curl'] ) {
+        package { 'curl': ensure => present }
+    }
+
+    if ! defined ( Package['maven'] ) {
+        package { 'maven': ensure => present }
+    }
+       
+}
\ No newline at end of file
diff --git a/modules/wdqs/manifests/service.pp 
b/modules/wdqs/manifests/service.pp
new file mode 100644
index 0000000..d576992
--- /dev/null
+++ b/modules/wdqs/manifests/service.pp
@@ -0,0 +1,35 @@
+# == Class: wdqs::service
+#
+# Provisions WDQS service package
+#
+# == Parameters:
+# - $package_dir:  Directory where the service should be installed.
+# Should have enough space to hold the database (>50G)
+# - $version: Version of the service to install
+# - $username: Username owning the service
+class wdqs::service(
+       $package_dir,
+       $version,
+       $username
+) {
+       # Horrible hack, find better way?
+       exec { 'download_package':
+               command => "/usr/bin/mvn 
org.apache.maven.plugins:maven-dependency-plugin:2.10:unpack 
-Dartifact=org.wikidata.query.rdf:service:${version}:zip:dist 
-DoutputDirectory=${package_dir} -Dtransitive=false -Dproject.basedir=/tmp",
+               cwd => '/tmp',
+               creates => "${package_dir}/service-${version}",
+               require => Package['maven'],
+               before => File['/tmp/target'],
+       }
+       
+       file { '/tmp/target':
+               ensure => absent,
+               force => true,
+       }
+       
+       file { "${package_dir}/service-${version}":
+               owner => $username,
+               group => 'wikidev',
+               mode => 0775,
+               require => Exec['download_package']
+       }
+}
\ No newline at end of file
diff --git a/modules/wdqs/templates/nginx.erb b/modules/wdqs/templates/nginx.erb
new file mode 100644
index 0000000..6617303
--- /dev/null
+++ b/modules/wdqs/templates/nginx.erb
@@ -0,0 +1,46 @@
+server {
+    listen 80 default_server;
+    listen [::]:80 default_server;
+
+    log_format logstash 
+        '[$time_local] '
+        '"$request" $status $body_bytes_sent '
+        '"$http_referer" "$http_user_agent" '
+        '$request_time '
+        '$upstream_response_time';
+
+    location / {
+        root <%= @package_dir %>/gui;
+    }
+
+    location /bigdata {
+        proxy_pass http://localhost:9999;
+
+        proxy_set_header Host $http_host;
+        proxy_set_header X-Real-IP $remote_addr;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        proxy_set_header X-Forwarded-Proto $scheme;
+        proxy_set_header X-BIGDATA-MAX-QUERY-MILLIS 30000;
+
+        add_header Access-Control-Allow-Origin *;
+
+        client_max_body_size 10M;
+        client_body_buffer_size 1m;
+        proxy_intercept_errors on;
+        proxy_buffering on;
+        proxy_buffer_size 128k;
+        proxy_buffers 256 16k;
+        proxy_busy_buffers_size 256k;
+        proxy_temp_file_write_size 256k;
+        proxy_max_temp_file_size 0;
+        proxy_read_timeout 300;
+
+        limit_except GET OPTIONS {
+            deny all;
+        }
+               
+               <% if @log_aggregator -%>
+        # access_log syslog:server=<%= @log_aggregator 
%>,facility=local7,tag=wdqs,severity=info logstash;
+               <% end -%>
+    }
+}

-- 
To view, visit https://gerrit.wikimedia.org/r/216403
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I21e17e5e7d56d536f4cc34894ddb4fd0a7ea9846
Gerrit-PatchSet: 1
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Smalyshev <smalys...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to