Ori.livneh has submitted this change and it was merged. Change subject: Module and role for Recommendation API ......................................................................
Module and role for Recommendation API The Wikimedia Recommendation API is a JSON API that provides personalized recommendations of wiki content (to discover, edit, translate, etc.). It is a Flask webapp running under uWSGI. See <https://meta.wikimedia.org/wiki/Recommendation_API> for more info. Bug: T116102 Change-Id: If5db926def3c5d1933ea0d284d540a9e99e18613 --- A manifests/role/recommendation_api.pp A modules/recommendation_api/manifests/init.pp A modules/role/templates/apache/sites/recommendation_api.erb 3 files changed, 98 insertions(+), 0 deletions(-) Approvals: Ori.livneh: Looks good to me, approved jenkins-bot: Verified diff --git a/manifests/role/recommendation_api.pp b/manifests/role/recommendation_api.pp new file mode 100644 index 0000000..70d7a9c --- /dev/null +++ b/manifests/role/recommendation_api.pp @@ -0,0 +1,18 @@ +# == Class: role::recommendation_api +# +# Provisions a JSON API for personalized recommendations. +# +class role::recommendation_api { + include ::recommendation_api + + include ::apache::mod::uwsgi + + apache::site { 'recommendation_api': + content => template('role/apache/sites/recommendation_api.erb'), + } + + ferm::service { 'recommendation_api_http': + proto => 'tcp', + port => '80', + } +} diff --git a/modules/recommendation_api/manifests/init.pp b/modules/recommendation_api/manifests/init.pp new file mode 100644 index 0000000..7c0439b --- /dev/null +++ b/modules/recommendation_api/manifests/init.pp @@ -0,0 +1,75 @@ +# == Class: recommendation_api +# +# The Wikimedia Recommendation API is a JSON API that provides personalized +# recommendations of wiki content (to discover, edit, translate, etc.). +# It is a Flask webapp running under uWSGI. +# +# See <https://meta.wikimedia.org/wiki/Recommendation_API> for more info. +# +class recommendation_api { + requires_os('debian >= jessie') + + require_package( + 'python3-bs4', + 'python3-dateutil', + 'python3-flask', + 'python3-numpy', + 'python3-pip', + 'python3-requests', + 'python3-simplejson', + 'python3-wheel', + 'python3-yaml', + ) + + $base_dir = '/srv/recommendation-api' # top-level dir for app + $core_dir = "${base_dir}/core" # source code + $wheels_dir = "${base_dir}/wheels" # *.whl files + $lib_dir = "${base_dir}/lib" # dependencies (installed from *.whl) + + file { [ $base_dir, $lib_dir ]: + ensure => directory, + owner => 'root', + group => 'root', + mode => '0755', + } + + git::clone { 'research/recommendation-api/wheels': + ensure => 'latest', + directory => $wheels_dir, + branch => 'master', + } + + git::clone { 'research/recommendation-api': + ensure => 'latest', + directory => $core_dir, + branch => 'master', + } + + exec { 'pip_install_wheels': + command => "/usr/bin/pip3 install --target=${lib_dir} --no-deps ${wheels_dir}/wheels/*.whl", + require => File[$lib_dir], + user => 'root', + group => 'root', + subscribe => Git::Clone['research/recommendation-api/wheels'], + refreshonly => true, + } + + uwsgi::app { 'recommendation_api': + settings => { + uwsgi => { + 'plugin' => 'python3', + 'wsgi-file' => "${core_dir}/recommendation/data/recommendation.wsgi", + 'master' => true, + 'chdir' => $core_dir, + 'http-socket' => '0.0.0.0:8080', + 'socket' => '/run/uwsgi/recommendation_api.sock', + 'pythonpath' => $lib_dir, + 'processes' => inline_template('<%= @processorcount.to_i %>'), + } + }, + require => [ + Exec['pip_install_wheels'], + Git::Clone['research/recommendation-api'], + ], + } +} diff --git a/modules/role/templates/apache/sites/recommendation_api.erb b/modules/role/templates/apache/sites/recommendation_api.erb new file mode 100644 index 0000000..4793140 --- /dev/null +++ b/modules/role/templates/apache/sites/recommendation_api.erb @@ -0,0 +1,5 @@ +<VirtualHost 127.0.0.1:80> + ServerName recommendation-api + uWSGIsocket /run/uwsgi/recommendation_api.sock + SetHandler uwsgi-handler +</VirtualHost> -- To view, visit https://gerrit.wikimedia.org/r/312045 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: If5db926def3c5d1933ea0d284d540a9e99e18613 Gerrit-PatchSet: 7 Gerrit-Project: operations/puppet Gerrit-Branch: production Gerrit-Owner: Ori.livneh <o...@wikimedia.org> Gerrit-Reviewer: Nschaaf <nsch...@wikimedia.org> Gerrit-Reviewer: Ori.livneh <o...@wikimedia.org> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits