Added (Linux) file monitor configuration to Fabric script.
Also improved `create_user` to allow overwriting some settings.
This commit is contained in:
		
							parent
							
								
									a732804911
								
							
						
					
					
						commit
						331f775512
					
				
					 4 changed files with 247 additions and 2 deletions
				
			
		
							
								
								
									
										4
									
								
								data/etc/default/rattail
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								data/etc/default/rattail
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| # The following settings affect all Rattail daemons. | ||||
| 
 | ||||
| USER=rattail | ||||
| GROUP=rattail | ||||
							
								
								
									
										19
									
								
								data/etc/init.d/rattail-filemon_tmpl
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										19
									
								
								data/etc/init.d/rattail-filemon_tmpl
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,19 @@ | |||
| #! /bin/sh | ||||
| ### BEGIN INIT INFO | ||||
| # Provides:          %(name)s | ||||
| # Required-Start:    $remote_fs $syslog | ||||
| # Required-Stop:     $remote_fs $syslog | ||||
| # Default-Start:     2 3 4 5 | ||||
| # Default-Stop:      0 1 6 | ||||
| # Short-Description: %(desc)s | ||||
| # Description:       Manages the %(desc)s daemon. | ||||
| ### END INIT INFO | ||||
| 
 | ||||
| DESC="%(desc)s" | ||||
| NAME=%(name)s | ||||
| 
 | ||||
| PYTHON=%(envdir)s/bin/python | ||||
| RATTAIL=%(envdir)s/bin/rattail | ||||
| RATTAIL_ARGS="--config=%(envdir)s/app/filemon.ini" | ||||
| 
 | ||||
| . /var/lib/rattail/init.d/filemon | ||||
							
								
								
									
										132
									
								
								data/var/lib/rattail/init.d/filemon
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										132
									
								
								data/var/lib/rattail/init.d/filemon
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,132 @@ | |||
| #!/bin/sh | ||||
| # -*- coding: utf-8  -*- | ||||
| ################################################################################ | ||||
| # | ||||
| #  Rattail -- Retail Software Framework | ||||
| #  Copyright © 2010-2012 Lance Edgar | ||||
| # | ||||
| #  This file is part of Rattail. | ||||
| # | ||||
| #  Rattail is free software: you can redistribute it and/or modify it under the | ||||
| #  terms of the GNU Affero General Public License as published by the Free | ||||
| #  Software Foundation, either version 3 of the License, or (at your option) | ||||
| #  any later version. | ||||
| # | ||||
| #  Rattail is distributed in the hope that it will be useful, but WITHOUT ANY | ||||
| #  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | ||||
| #  FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public License for | ||||
| #  more details. | ||||
| # | ||||
| #  You should have received a copy of the GNU Affero General Public License | ||||
| #  along with Rattail.  If not, see <http://www.gnu.org/licenses/>. | ||||
| # | ||||
| ################################################################################ | ||||
| 
 | ||||
| 
 | ||||
| # This script is mostly based on the ``/etc/init.d/skeleton`` file from a | ||||
| # Debian 6 system. | ||||
| 
 | ||||
| 
 | ||||
| DESC=${DESC:-"Rattail File Monitor"} | ||||
| NAME=${NAME:-"rattail-filemon"} | ||||
| SCRIPTNAME=${SCRIPTNAME:-"/etc/init.d/$NAME"} | ||||
| PIDFILE=${PIDFILE:-"/var/run/rattail/$NAME.pid"} | ||||
| 
 | ||||
| PYTHON=${PYTHON:-"/usr/bin/python"} | ||||
| RATTAIL=${RATTAIL:-"/usr/local/bin/rattail"} | ||||
| RATTAIL_ARGS=${RATTAIL_ARGS:-""} | ||||
| FILEMON_ARGS=${FILEMON_ARGS:-"--pidfile=$PIDFILE"} | ||||
| 
 | ||||
| USER=${USER:-"rattail"} | ||||
| GROUP=${GROUP:-"rattail"} | ||||
| 
 | ||||
| 
 | ||||
| # Read configuration variable files if present. | ||||
| [ -r /etc/default/rattail ] && . /etc/default/rattail | ||||
| [ -r /etc/default/$NAME ] && . /etc/default/$NAME | ||||
| 
 | ||||
| # Load the VERBOSE setting and other rcS variables. | ||||
| . /lib/init/vars.sh | ||||
| 
 | ||||
| # Define LSB log_* functions. | ||||
| # Depend on lsb-base (>= 3.2-14) to ensure that this file is present | ||||
| # and status_of_proc is working. | ||||
| . /lib/lsb/init-functions | ||||
| 
 | ||||
| 
 | ||||
| # | ||||
| # Function that starts the daemon/service | ||||
| # | ||||
| do_start() | ||||
| { | ||||
| 	# Return | ||||
| 	#   0 if daemon has been started | ||||
| 	#   1 if daemon was already running | ||||
| 	#   2 if daemon could not be started | ||||
|     start-stop-daemon --start --pidfile $PIDFILE --exec $PYTHON --user $USER --test --quiet > /dev/null \ | ||||
|         || return 1 | ||||
|     start-stop-daemon --start --pidfile $PIDFILE --exec $PYTHON --startas $RATTAIL --chuid $USER --group $GROUP --quiet -- \ | ||||
|         $RATTAIL_ARGS filemon $FILEMON_ARGS start \ | ||||
|         || return 2 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| # | ||||
| # Function that stops the daemon/service | ||||
| # | ||||
| do_stop() | ||||
| { | ||||
| 	# Return | ||||
| 	#   0 if daemon has been stopped | ||||
| 	#   1 if daemon was already stopped | ||||
| 	#   2 if daemon could not be stopped | ||||
| 	#   other if a failure occurred | ||||
|     $RATTAIL $RATTAIL_ARGS filemon $FILEMON_ARGS stop > /dev/null 2>&1 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| case "$1" in | ||||
|   start) | ||||
| 	[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" | ||||
| 	do_start | ||||
| 	case "$?" in | ||||
| 		0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; | ||||
| 		2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; | ||||
| 	esac | ||||
| 	;; | ||||
|   stop) | ||||
| 	[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" | ||||
| 	do_stop | ||||
| 	case "$?" in | ||||
| 		0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; | ||||
| 		2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; | ||||
| 	esac | ||||
| 	;; | ||||
|   status) | ||||
|        status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? | ||||
|        ;; | ||||
|   restart|force-reload) | ||||
| 	log_daemon_msg "Restarting $DESC" "$NAME" | ||||
| 	do_stop | ||||
| 	case "$?" in | ||||
| 	  0|1) | ||||
| 		do_start | ||||
| 		case "$?" in | ||||
| 			0) log_end_msg 0 ;; | ||||
| 			1) log_end_msg 1 ;; # Old process is still running | ||||
| 			*) log_end_msg 1 ;; # Failed to start | ||||
| 		esac | ||||
| 		;; | ||||
| 	  *) | ||||
| 	  	# Failed to stop | ||||
| 		log_end_msg 1 | ||||
| 		;; | ||||
| 	esac | ||||
| 	;; | ||||
|   *) | ||||
| 	echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 | ||||
| 	exit 3 | ||||
| 	;; | ||||
| esac | ||||
| 
 | ||||
| : | ||||
							
								
								
									
										92
									
								
								fabfile.py
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										92
									
								
								fabfile.py
									
										
									
									
										vendored
									
									
								
							|  | @ -26,11 +26,41 @@ import os.path | |||
| import shutil | ||||
| 
 | ||||
| from fabric.api import * | ||||
| from fabric.contrib.files import exists, upload_template | ||||
| 
 | ||||
| 
 | ||||
| execfile(os.path.join(os.path.dirname(__file__), 'rattail', '_version.py')) | ||||
| 
 | ||||
| 
 | ||||
| def get_overwrite(overwrite=None): | ||||
|     """ | ||||
|     Obtain a canonical "overwrite" directive. | ||||
|     """ | ||||
| 
 | ||||
|     if overwrite in (True, False): | ||||
|         return overwrite | ||||
| 
 | ||||
|     if overwrite is None: | ||||
|         overwrite = raw_input("Overwrite as needed? [y/N]: ") | ||||
|         overwrite = overwrite.strip().lower() | ||||
|     else: | ||||
|         overwrite = overwrite.lower() | ||||
|     return overwrite.startswith('y') | ||||
| 
 | ||||
| 
 | ||||
| def prettify(text): | ||||
|     """ | ||||
|     Return a "prettified" version of text. | ||||
| 
 | ||||
|     This is basically copied from ``edbob.util``. | ||||
|     """ | ||||
| 
 | ||||
|     text = text.replace('_', ' ') | ||||
|     text = text.replace('-', ' ') | ||||
|     words = text.split() | ||||
|     return ' '.join([x.capitalize() for x in words]) | ||||
| 
 | ||||
| 
 | ||||
| @task | ||||
| def release(): | ||||
|     """ | ||||
|  | @ -49,9 +79,69 @@ def release(): | |||
| 
 | ||||
| 
 | ||||
| @task | ||||
| def create_user(): | ||||
| def create_user(overwrite=None): | ||||
|     """ | ||||
|     Create the 'rattail' user account. | ||||
|     """ | ||||
| 
 | ||||
|     overwrite = get_overwrite(overwrite) | ||||
| 
 | ||||
|     with settings(warn_only=True): | ||||
|         result = run('id rattail') | ||||
| 
 | ||||
|     if result.return_code: # user doesn't exist | ||||
|         sudo('adduser --system --home /var/lib/rattail --group rattail') | ||||
| 
 | ||||
|     elif overwrite: | ||||
|         sudo('usermod --home /var/lib/rattail --move-home --shell /bin/false rattail') | ||||
| 
 | ||||
| 
 | ||||
| @task | ||||
| def configure_filemon(name=None, desc=None, envdir=None, overwrite=None): | ||||
|     """ | ||||
|     Configure a Rattail File Monitor daemon. | ||||
|     """ | ||||
| 
 | ||||
|     if name is None: | ||||
|         default_name = 'rattail-filemon' | ||||
|         name = raw_input("Enter a name for the service [{0}]: ".format(default_name)) | ||||
|         name = name.strip() or default_name | ||||
| 
 | ||||
|     if desc is None: | ||||
|         default_desc = prettify(name.replace('filemon', 'file-monitor')) | ||||
|         desc = raw_input("Enter a description [{0}]: ".format(default_desc)) | ||||
|         desc = desc.strip() or default_desc | ||||
| 
 | ||||
|     if envdir is None: | ||||
|         default_envdir = name.replace('-filemon', '') | ||||
|         default_envdir = default_envdir.replace('-', '.') | ||||
|         default_envdir = '/srv/envs/{0}'.format(default_envdir) | ||||
|         envdir = raw_input("Enter a virtual environment path [{0}]: ".format(default_envdir)) | ||||
|         envdir = envdir.strip() or default_envdir | ||||
| 
 | ||||
|     overwrite = get_overwrite(overwrite) | ||||
| 
 | ||||
|     if not exists('/etc/default/rattail') or overwrite: | ||||
|         put('data/etc/default/rattail', '/etc/default', use_sudo=True) | ||||
|         sudo('chown root: /etc/default/rattail') | ||||
| 
 | ||||
|     if not exists('/var/lib/rattail'): | ||||
|         create_user(overwrite=True) | ||||
| 
 | ||||
|     if not exists('/var/lib/rattail/init.d'): | ||||
|         sudo('mkdir /var/lib/rattail/init.d', user='rattail') | ||||
| 
 | ||||
|     if not exists('/var/lib/rattail/init.d/filemon') or overwrite: | ||||
|         put('data/var/lib/rattail/init.d/filemon', '/var/lib/rattail/init.d', use_sudo=True) | ||||
|         sudo('chown rattail: /var/lib/rattail/init.d/filemon') | ||||
| 
 | ||||
|     script = '/etc/init.d/{0}'.format(name) | ||||
|     if not exists(script) or overwrite: | ||||
|         upload_template('data/etc/init.d/rattail-filemon_tmpl', script, | ||||
|                         context=locals(), use_sudo=True, mode=0755) | ||||
|         sudo('chown root: {0}'.format(script)) | ||||
|         sudo('insserv {0}'.format(script)) | ||||
| 
 | ||||
|     if not exists('/var/run/rattail'): | ||||
|         sudo('mkdir /var/run/rattail') | ||||
|         sudo('chown rattail: /var/run/rattail') | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Lance Edgar
						Lance Edgar