From e712c04f235f9e3ebf87f57cfc1f67e5ff997fa1 Mon Sep 17 00:00:00 2001 From: Marco Mariani <marco.mariani@nexedi.com> Date: Wed, 14 Nov 2012 14:47:16 +0100 Subject: [PATCH] made lapp stack independent from maarch; comments --- slapos/recipe/maarch/configuration.py | 6 +- software/maarch/software.cfg | 41 ++++++++++-- stack/lapp/apache/instance-apache-php.cfg.in | 69 +++++++++++++------- stack/lapp/buildout.cfg | 47 +++++++++---- stack/lapp/postgres/instance-postgres.cfg.in | 68 ++++++++++++------- 5 files changed, 168 insertions(+), 63 deletions(-) diff --git a/slapos/recipe/maarch/configuration.py b/slapos/recipe/maarch/configuration.py index d1cda7da6..b0c9e87f8 100644 --- a/slapos/recipe/maarch/configuration.py +++ b/slapos/recipe/maarch/configuration.py @@ -34,14 +34,16 @@ import os import lxml -# TODO: remove the hack below, used to reach psycopg2 # XXX: When run inside webrunner, Postgres refuses connection. # TODO: make the recipe work inside webrunner +# XXX What follows is a crud hack to import psycopg2. +# It basically relies on the fact that lxml (required by slapos.core) is installed +# alongside with psycopg2. +# This should be rewritten (how?) and DOES NOT WORK WHEN DEVELOPING slapos.core. def temporary_hack(): - # XXX TODO provide psycopg to sys.path by other means import sys develop_eggs = '/'.join(lxml.__file__.split('/')[:lxml.__file__.split('/').index('develop-eggs')+1]) for egg_folder in os.listdir(develop_eggs): diff --git a/software/maarch/software.cfg b/software/maarch/software.cfg index 2a7149527..84b0fd54d 100644 --- a/software/maarch/software.cfg +++ b/software/maarch/software.cfg @@ -12,27 +12,57 @@ parts = template-apache-php +#---------------- +#-- +#-- Main application part +#-- XXX provide a better URL + [application] url = http://downloads.sourceforge.net/project/maarch/Maarch%20Entreprise/MaarchEntreprise-1.3.zip?r=http%3A%2F%2Fwww.maarch.org%2Ftelecharger&ts=1347961624&use_mirror=ignum md5sum = 5c2c859dee9d0dde3ba959474fd5fc86 +#---------------- +#-- +#-- We don't need this static configuration file. +#-- An empty file is provided because it is required by the lapp stack. +#-- + [application-template] -# XXX we don't need this recipe = slapos.recipe.download url = ${:_profile_base_location_}/config.php.in -#md5sum = +md5sum = d41d8cd98f00b204e9800998ecf8427e download-only = True filename = template.in mode = 0644 location = ${buildout:parts-directory}/${:_buildout_section_name_} - [application-configuration] -# XXX we don't need this location = config.php +#---------------- +#-- +#-- Define parts that will be executed later, in the instance. +#-- + +[custom-application-deployment] +path = ${custom-application-deployment-template:output} +part-list = maarch-configuration + +[custom-application-deployment-template] +recipe = slapos.recipe.template +url = ${:_profile_base_location_}/instance-custom.cfg.in +output = ${buildout:directory}/instance-custom.cfg +md5sum = f132fcb57297ad9b10c07f97023b5ff4 +mode = 0644 + + +#---------------- +#-- +#-- Install PHP channels and modules (only if they are not already installed). +#-- + [pear-modules] recipe = cp.recipe.cmd pear = ${apache-php-postgres:location}/bin/pear @@ -41,3 +71,6 @@ install_cmd = ${:pear} info maarch/CLITools-0.3.1 >/dev/null || ${:pear} install maarch/CLITools-0.3.1 ${:pear} info MIME_Type >/dev/null || ${:pear} install MIME_Type +#---------------- + + diff --git a/stack/lapp/apache/instance-apache-php.cfg.in b/stack/lapp/apache/instance-apache-php.cfg.in index 106a8645e..92b214aa2 100644 --- a/stack/lapp/apache/instance-apache-php.cfg.in +++ b/stack/lapp/apache/instance-apache-php.cfg.in @@ -1,4 +1,5 @@ [buildout] +extends = ${custom-application-deployment:path} parts = certificate-authority @@ -14,14 +15,17 @@ parts = frontend-promise content-promise publish-connection-informations - maarch-instance + ${custom-application-deployment:part-list} eggs-directory = ${buildout:eggs-directory} develop-eggs-directory = ${buildout:develop-eggs-directory} offline = true -# Creation of all needed directories +#---------------- +#-- +#-- Creation of all needed directories. + [rootdirectory] recipe = slapos.cookbook:mkdirectory etc = $${buildout:directory}/etc/ @@ -60,7 +64,10 @@ newcerts = $${directory:ca-dir}/newcerts/ crl = $${directory:ca-dir}/crl/ -# Deploy stunnel +#---------------- +#-- +#-- Deploy stunnel. + [stunnel] recipe = slapos.cookbook:stunnel client = true @@ -78,7 +85,10 @@ wrapper = $${rootdirectory:bin}/raw_stunnel post-rotate-script = $${rootdirectory:bin}/stunnel_post_rotate -# Certificate stuffs +#---------------- +#-- +#-- Certificate stuff. + [certificate-authority] recipe = slapos.cookbook:certificate_authority openssl-binary = ${openssl:location}/bin/openssl @@ -99,7 +109,10 @@ key-file = $${stunnel:key-file} cert-file = $${stunnel:cert-file} -# Request Postgres instance and parse its URL +#---------------- +#-- +#-- Request Postgres instance and parse its URL. + [request-postgres] <= slap-connection recipe = slapos.cookbook:request @@ -115,7 +128,11 @@ recipe = slapos.cookbook:urlparse url = $${request-postgres:connection-url} -# Deploy Apache + PHP application +#---------------- +#-- +#-- Deploy Apache + PHP application. +#-- Despite the names of mysql-* parameters, they are not really specific to mysql. + [apache-php] recipe = slapos.cookbook:apachephp source = ${application:location} @@ -144,7 +161,10 @@ mysql-host = $${stunnel:local-host} mysql-port = $${stunnel:local-port} -# Deploy logrotate, cron, configure it +#---------------- +#-- +#-- Deploy logrotate, cron, configure it. + [logrotate] recipe = slapos.cookbook:logrotate # Binaries @@ -202,7 +222,10 @@ frequency = 0 0 * * * command = $${logrotate:wrapper} -# Request frontend +#---------------- +#-- +#-- Request frontend. + [request-frontend] <= slap-connection recipe = slapos.cookbook:requestoptional @@ -216,7 +239,10 @@ return = site_url config-custom_domain = $${slap-parameter:domain} -# Deploy slapmonitor +#---------------- +#-- +#-- Deploy slapmonitor. + [slapmonitor] recipe = slapos.cookbook:slapmonitor pid-file = $${basedirectory:run}/apache.pid @@ -239,14 +265,20 @@ slapreport-path = ${buildout:bin-directory}/slapreport path = $${basedirectory:services}/slapreport -# Publish all instance parameters (url of instance) +#---------------- +#-- +#-- Publish all instance parameters (url of instance). + [publish-connection-informations] recipe = slapos.cookbook:publish backend_url = $${apache-php:url} url = $${request-frontend:connection-site_url} -# Deploy promises scripts +#---------------- +#-- +#-- Deploy promises scripts. + [promise] recipe = slapos.cookbook:check_port_listening path = $${basedirectory:promises}/apache @@ -267,6 +299,9 @@ url = $${request-frontend:connection-site_url} dash_path = ${dash:location}/bin/dash curl_path = ${curl:location}/bin/curl + + + [slap-parameter] # Default value if no domain is specified domain = @@ -276,15 +311,3 @@ logbox-port = logbox-user = logbox-passwd = -[maarch-instance] -recipe = slapos.cookbook:maarch.configuration -htdocs = $${apache-php:htdocs} -db_host = $${postgres-urlparse:host} -db_port = $${postgres-urlparse:port} -db_dbname = $${postgres-urlparse:path} -db_username = $${postgres-urlparse:username} -db_password = $${postgres-urlparse:password} -language = en -php_ini_dir = $${directory:php-ini-dir} -root_docservers = $${buildout:directory}/srv/docservers - diff --git a/stack/lapp/buildout.cfg b/stack/lapp/buildout.cfg index c42cf87a8..05dd23eaa 100644 --- a/stack/lapp/buildout.cfg +++ b/stack/lapp/buildout.cfg @@ -7,7 +7,6 @@ parts = template-apache-php template-postgres - extends = ../../component/apache/buildout.cfg ../../component/apache-php/buildout.cfg @@ -21,12 +20,6 @@ extends = ../slapos.cfg -[application] -recipe = hexagonit.recipe.download -strip-top-level-dir = true - - - [eggs] recipe = zc.recipe.egg eggs = @@ -36,31 +29,42 @@ eggs = cns.recipe.symlink +#---------------- +#-- Application-specific part (maarch, etc.) + +[application] +recipe = hexagonit.recipe.download +strip-top-level-dir = true + + +#---------------- +#-- Instance-level buildout profiles. [template] recipe = slapos.recipe.template url = ${:_profile_base_location_}/instance.cfg output = ${buildout:directory}/template.cfg -#md5sum = +md5sum = fad4fe349039b9bac5f95322af1b8f5a mode = 0644 - [template-apache-php] recipe = slapos.recipe.template url = ${:_profile_base_location_}/apache/instance-apache-php.cfg.in output = ${buildout:directory}/template-apache-php.cfg -#md5sum = +md5sum = 6519eb4bb8a7e7b554fe482cc4c01c5b mode = 0644 [template-postgres] recipe = slapos.recipe.template url = ${:_profile_base_location_}/postgres/instance-postgres.cfg.in output = ${buildout:directory}/template-postgres.cfg -#md5sum = +md5sum = ef659916da2ed5e5d886e07fac3c8ef4 mode = 0644 -# Dummy parts in case no application configuration file is needed +#---------------- +#-- Dummy parts in case no application configuration file is needed + [application-template] filename = location = @@ -68,6 +72,10 @@ location = [application-configuration] location = + +#---------------- +#-- Postgres driver for Python recipes. + [psycopg2-env] PATH = ${postgresql:location}/bin:%(PATH)s @@ -85,3 +93,18 @@ rpath = ${postgresql:location}/lib +#---------------- +#-- +#-- Optional part allowing applications using this stack to run a custom +#-- instance.cfg at the end of Apache/PHP instance deployment. +#-- To use it in your application, just override those two parameters, like: + +[custom-application-deployment] +# path = /path/to/instance-custom.cfg +# part-list = part1 part2 +# See software/maarch/software.cfg for an example. +path = +part-list = + +#---------------- + diff --git a/stack/lapp/postgres/instance-postgres.cfg.in b/stack/lapp/postgres/instance-postgres.cfg.in index febe2c3e4..3b0536736 100644 --- a/stack/lapp/postgres/instance-postgres.cfg.in +++ b/stack/lapp/postgres/instance-postgres.cfg.in @@ -13,8 +13,11 @@ develop-eggs-directory = ${buildout:develop-eggs-directory} offline = true +#---------------- +#-- +#-- Fetches parameters defined in SlapOS Master for this instance + [instance-parameters] -# Fetches parameters defined in SlapOS Master for this instance recipe = slapos.cookbook:slapconfiguration computer = $${slap-connection:computer-id} partition = $${slap-connection:partition-id} @@ -23,21 +26,9 @@ key = $${slap-connection:key-file} cert = $${slap-connection:cert-file} -[cron] -recipe = slapos.cookbook:cron -dcrond-binary = ${dcron:location}/sbin/crond -cron-entries = $${directory:cron-entries} -crontabs = $${directory:crontabs} -cronstamps = $${directory:cronstamps} -catcher = $${cron-simplelogger:wrapper} -binary = $${basedirectory:services}/crond - - -[cron-simplelogger] -recipe = slapos.cookbook:simplelogger -wrapper = $${rootdirectory:bin}/cron_simplelogger -log = $${basedirectory:log}/crond.log - +#---------------- +#-- +#-- Creation of all needed directories. [rootdirectory] recipe = slapos.cookbook:mkdirectory @@ -60,14 +51,30 @@ crontabs = $${rootdirectory:etc}/crontabs/ cronstamps = $${rootdirectory:etc}/cronstamps/ -[symlinks] -recipe = cns.recipe.symlink -symlink_target = $${rootdirectory:bin} -symlink_base = ${postgresql:location}/bin +#---------------- +#-- +#-- Cron + +[cron] +recipe = slapos.cookbook:cron +dcrond-binary = ${dcron:location}/sbin/crond +cron-entries = $${directory:cron-entries} +crontabs = $${directory:crontabs} +cronstamps = $${directory:cronstamps} +catcher = $${cron-simplelogger:wrapper} +binary = $${basedirectory:services}/crond + +[cron-simplelogger] +recipe = slapos.cookbook:simplelogger +wrapper = $${rootdirectory:bin}/cron_simplelogger +log = $${basedirectory:log}/crond.log + +#---------------- +#-- +#-- Creates a Postgres cluster, configuration files, and a database. [postgres-instance] -# create cluster, configuration files and a database recipe = slapos.cookbook:postgres # Options @@ -83,7 +90,20 @@ bin = $${rootdirectory:bin} dependency-symlinks = $${symlinks:recipe} -# Deploy promises scripts +#---------------- +#-- +#-- Creates symlinks from the instance to the software release. + +[symlinks] +recipe = cns.recipe.symlink +symlink_target = $${rootdirectory:bin} +symlink_base = ${postgresql:location}/bin + + +#---------------- +#-- +#-- Deploy promise scripts. + [postgres-promise] recipe = slapos.cookbook:check_port_listening path = $${basedirectory:promises}/postgres @@ -91,6 +111,10 @@ hostname = $${slap-network-information:global-ipv6} port = $${postgres-instance:port} +#---------------- +#-- +#-- Publish instance URL. + [urls] recipe = slapos.cookbook:publishurl url = $${postgres-instance:url} -- 2.30.9