From 0e50af153293454f1f8b2a6c1df4d96d0970c2d7 Mon Sep 17 00:00:00 2001 From: Michael Krotscheck Date: Wed, 22 Apr 2015 15:22:18 -0700 Subject: [PATCH] Added WebClient installer. --- manifests/apache/http.pp | 36 ++++++++++-- manifests/apache/https.pp | 31 ++++++++++- manifests/api.pp | 31 ++++------- manifests/app.pp | 88 ++++++++++++++++++++++++++++++ manifests/init.pp | 2 +- manifests/params.pp | 2 +- templates/refstack_http.vhost.erb | 9 ++- templates/refstack_https.vhost.erb | 9 ++- 8 files changed, 174 insertions(+), 34 deletions(-) create mode 100644 manifests/app.pp diff --git a/manifests/apache/http.pp b/manifests/apache/http.pp index 8943a6f..b862081 100644 --- a/manifests/apache/http.pp +++ b/manifests/apache/http.pp @@ -20,22 +20,49 @@ class refstack::apache::http () { require ::refstack::params require ::refstack::api - # require ::refstack::app + require ::refstack::app - # Pull various variables into this module, for slightly saner templates. +# Pull various variables into this module, for slightly saner templates. $install_api_root = $::refstack::params::install_api_root $install_www_root = $::refstack::params::install_www_root + $src_www_root = $::refstack::params::src_www_root $hostname = $::refstack::params::hostname $user = $::refstack::params::user $group = $::refstack::params::group $server_admin = $::refstack::params::server_admin $python_version = $::refstack::params::python_version - # Install apache +# Install apache include apache + include apache::params include apache::mod::wsgi - # Set up refstack as HTTP + # Create a copy of the wsgi file with apache user permissions. + file { '/etc/refstack/app.wsgi': + ensure => present, + owner => $::apache::params::user, + group => $::apache::params::group, + mode => '0644', + source => "${src_www_root}/refstack/api/app.wsgi", + require => [ + Class['refstack::api'] + ], + notify => Service['httpd'], + } + +# Synchronize the app directory and the apache directory. + file { $install_www_root: + ensure => directory, + owner => $::apache::params::user, + group => $::apache::params::group, + source => "${src_www_root}/refstack-ui/app", + recurse => true, + purge => true, + force => true, + notify => Service['httpd'], + } + +# Set up refstack as HTTP apache::vhost { $hostname: port => 80, docroot => $install_www_root, @@ -43,5 +70,6 @@ class refstack::apache::http () { template => 'refstack/refstack_http.vhost.erb', ssl => false, notify => Service['httpd'], + require => File['/etc/refstack/app.wsgi'], } } diff --git a/manifests/apache/https.pp b/manifests/apache/https.pp index b423529..4c817e2 100644 --- a/manifests/apache/https.pp +++ b/manifests/apache/https.pp @@ -18,14 +18,14 @@ # protocol. # class refstack::apache::https () { - require ::refstack::params require ::refstack::api -# require ::refstack::app + require ::refstack::app # Pull various variables into this module, for slightly saner templates. $install_api_root = $::refstack::params::install_api_root $install_www_root = $::refstack::params::install_www_root + $src_www_root = $::refstack::params::src_www_root $hostname = $::refstack::params::hostname $user = $::refstack::params::user $group = $::refstack::params::group @@ -41,8 +41,22 @@ class refstack::apache::https () { # Install apache include apache + include apache::params include apache::mod::wsgi + # Create a copy of the wsgi file with apache user permissions. + file { '/etc/refstack/app.wsgi': + ensure => present, + owner => $::apache::params::user, + group => $::apache::params::group, + mode => '0644', + source => "${src_www_root}/refstack/api/app.wsgi", + require => [ + Class['refstack::api'] + ], + notify => Service['httpd'], + } + if $ssl_cert_content != undef { file { $ssl_cert: owner => 'root', @@ -73,6 +87,18 @@ class refstack::apache::https () { } } + # Synchronize the app directory and the apache directory. + file { $install_www_root: + ensure => directory, + owner => $::apache::params::user, + group => $::apache::params::group, + source => "${src_www_root}/refstack-ui/app", + recurse => true, + purge => true, + force => true, + notify => Service['httpd'], + } + # Set up ::refstack as HTTPS apache::vhost { $hostname: port => 443, @@ -81,5 +107,6 @@ class refstack::apache::https () { template => 'refstack/refstack_https.vhost.erb', ssl => true, notify => Service['httpd'], + require => File['/etc/refstack/app.wsgi'], } } diff --git a/manifests/api.pp b/manifests/api.pp index 3f30099..5347e50 100644 --- a/manifests/api.pp +++ b/manifests/api.pp @@ -49,19 +49,12 @@ class refstack::api () { } } - # Ensure PyMysqldb is present - if !defined(Package['python-mysqldb']) { - package { 'python-mysqldb': - ensure => present - } - } - # Create the refstack configuration directory. file { '/etc/refstack': ensure => directory, owner => $user, group => $group, - mode => '0700', + mode => '0755', } # Configure the refstack API @@ -69,7 +62,7 @@ class refstack::api () { ensure => present, owner => $user, group => $group, - mode => '0400', + mode => '0644', content => template('refstack/refstack.conf.erb'), require => [ File['/etc/refstack'] @@ -104,14 +97,13 @@ class refstack::api () { } # Run pip from the venv, install refstack. - python::pip { 'refstack': - pkgname => 'refstack', - ensure => present, - virtualenv => $install_api_root, - url => "file://${src_api_root}", - owner => $user, - require => Vcsrepo[$src_api_root], - subscribe => Vcsrepo[$src_api_root], + exec { 'pip install': + command => "${install_api_root}/bin/pip install ${src_api_root}", + user => $user, + group => $group, + refreshonly => true, + require => Vcsrepo[$src_api_root], + subscribe => Vcsrepo[$src_api_root], } # Migrate the database @@ -120,12 +112,11 @@ class refstack::api () { path => "${install_api_root}/bin/:/usr/local/bin:/usr/bin:/bin/", refreshonly => true, subscribe => [ - Python::Pip['refstack'], + Exec['pip install'], File['/etc/refstack/refstack.conf'], ], require => [ - Package['python-mysqldb'], - Python::Pip['refstack'], + Exec['pip install'], File['/etc/refstack/refstack.conf'], ], } diff --git a/manifests/app.pp b/manifests/app.pp new file mode 100644 index 0000000..eda93c4 --- /dev/null +++ b/manifests/app.pp @@ -0,0 +1,88 @@ +# Copyright (c) 2015 Hewlett-Packard Development Company, L.P. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +# == Class: refstack::app +# +# This class installs the refstack JavaScript Webclient (or app). +# +# Much of this module is duplicated in ::refstack::api, however it's separated +# here so that any future project splits (api vs. client) can be treated +# similarly in the puppet module. +# +class refstack::app () { + require ::refstack::params + require ::refstack::user + + # Import parameters into local scope. + $src_www_root = $::refstack::params::src_www_root + $install_www_root = $::refstack::params::install_www_root + $user = $::refstack::params::user + $group = $::refstack::params::group + + # Ensure Git is present + if !defined(Package['git']) { + package { 'git': + ensure => present + } + } + + # Ensure NPM is present + if !defined(Package['npm']) { + package { 'npm': + ensure => present + } + } + if !defined(Package['nodejs']) { + package { 'nodejs': + ensure => present + } + } + if !defined(Package['nodejs-legacy']) { + package { 'nodejs-legacy': + ensure => present + } + } + + # Download the latest Refstack Source + vcsrepo { $src_www_root: + ensure => latest, + owner => $user, + group => $group, + provider => git, + revision => 'master', + source => 'https://git.openstack.org/stackforge/refstack/', + require => Package['git'] + } + + # Run NPM Install + exec { 'npm install': + command => 'npm install', + path => "/usr/local/bin:/usr/bin:/bin/", + cwd => "${src_www_root}/refstack-ui", + user => $user, + group => $group, + refreshonly => true, + subscribe => [ + Vcsrepo[$src_www_root], + ], + require => [ + Package['npm'], + Vcsrepo[$src_www_root], + ], + environment => [ + # This is not automatically set by exec. + 'HOME=/home/refstack' + ] + } +} diff --git a/manifests/init.pp b/manifests/init.pp index aaca0eb..10d9010 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -34,7 +34,7 @@ class refstack ( } include ::refstack::mysql + include ::refstack::app include ::refstack::api - include ::refstack::apache::http } diff --git a/manifests/params.pp b/manifests/params.pp index b79cdac..0f0a34e 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -55,7 +55,7 @@ class refstack::params ( $install_api_root = "/var/lib/refstack-py${python_version}" # Build the connection string from individual parameters - $mysql_connection_string = "mysql://${mysql_user}:${mysql_user_password}@${mysql_host}:${mysql_port}/${mysql_database}" + $mysql_connection_string = "mysql+pymysql://${mysql_user}:${mysql_user_password}@${mysql_host}:${mysql_port}/${mysql_database}" # CA file needs special treatment, since we want the path variable # to be undef in some cases. diff --git a/templates/refstack_http.vhost.erb b/templates/refstack_http.vhost.erb index be573b8..d668b66 100644 --- a/templates/refstack_http.vhost.erb +++ b/templates/refstack_http.vhost.erb @@ -8,9 +8,9 @@ WSGIPythonHome <%= @install_api_root %> DocumentRoot <%= @install_www_root %> -# WSGIDaemonProcess refstack user=<%= @user %> group=<%= @group %> threads=5 -# WSGIScriptAlias /api <%= @install_api_root %>/lib/python<%= @python_version %>/site-packages/refstack/api/app.wsgi -# WSGIPassAuthorization On + WSGIDaemonProcess refstack user=<%= @user %> group=<%= @group %> threads=5 + WSGIScriptAlias /api /etc/refstack/app.wsgi + WSGIPassAuthorization On LogLevel warn ErrorLog ${APACHE_LOG_DIR}/refstack-error.log CustomLog ${APACHE_LOG_DIR}/refstack-access.log combined @@ -18,4 +18,7 @@ WSGIPythonHome <%= @install_api_root %> "> Require all granted + + Require all granted + diff --git a/templates/refstack_https.vhost.erb b/templates/refstack_https.vhost.erb index 596ba06..0679f82 100644 --- a/templates/refstack_https.vhost.erb +++ b/templates/refstack_https.vhost.erb @@ -49,12 +49,15 @@ WSGIPythonHome <%= @install_api_root %> DocumentRoot <%= @install_www_root %> -# WSGIDaemonProcess storyboard user=<%= @user %> group=<%= @group %> threads=5 -# WSGIScriptAlias /api <%= @install_api_root %>/lib/python<%= @python_version %>/site-packages/storyboard/api/app.wsgi -# WSGIPassAuthorization On + WSGIDaemonProcess refstack user=<%= @user %> group=<%= @group %> threads=5 + WSGIScriptAlias /api /etc/refstack/app.wsgi + WSGIPassAuthorization On "> Require all granted + + Require all granted +