Changeset 194 for cleverbox/trunk
- Timestamp:
- 08/16/07 19:06:43 (5 years ago)
- Location:
- cleverbox/trunk
- Files:
-
- 8 modified
-
cleverbox/client.py (modified) (2 diffs)
-
cleverbox/environment.py (modified) (3 diffs)
-
cleverbox/project.py (modified) (4 diffs)
-
cleverbox/scripts/admin.py (modified) (3 diffs)
-
cleverbox/tests/__init__.py (modified) (1 diff)
-
cleverbox/tests/client.py (modified) (2 diffs)
-
cleverbox/tests/environment.py (modified) (2 diffs)
-
docs/TODO (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
cleverbox/trunk/cleverbox/client.py
r193 r194 6 6 from cleverbox.utils import filesystem, styles 7 7 8 client_dir_layout = ('htdocs', 'logs', 'tmp', ' uploads', 'var/svn', 'var/trac')8 client_dir_layout = ('htdocs', 'logs', 'tmp', 'var/svn', 'var/trac') 9 9 10 10 def exists(environment, client_name): … … 73 73 # -- homedir 74 74 parent_dir = os.path.normpath(os.path.join(collected_infos['home_dir'], os.pardir)) 75 dir_is_ok = os.access(parent_dir, os.W_OK) and not os.access(collected_infos['home_dir'], os.R_OK) 75 dir_is_ok = os.access(parent_dir, os.W_OK) and os.access(collected_infos['home_dir'], os.R_OK) 76 print parent_dir 76 77 if not dir_is_ok: 77 78 raise os.error, "Directory %s is not writable or already exists, aborting." % collected_infos['home_dir'] -
cleverbox/trunk/cleverbox/environment.py
r193 r194 28 28 parameters['general']['assets_dir'] 29 29 parameters['general']['apache_group'] 30 parameters['general']['clients_root'] 30 31 except KeyError, e: 31 32 raise Exception, "Supplied parameters are not complete." … … 47 48 logging.info(" Creating directory layout") 48 49 print 50 49 51 env_dirs = [] 50 52 for dirname in layout: 51 53 env_dirs.append(self.get_path(dirname)) 52 54 map(os.makedirs, env_dirs) 55 56 # Create VERSION file 57 try: 58 print 59 logging.info(" Creating VERSION file") 60 print 53 61 54 # Create VERSION file55 try:56 #print "\n\tCreating VERSION file\n"57 62 fd = open(self.get_path('VERSION'), 'w') 58 63 fd.write(version) 59 64 finally: 60 65 fd.close() 66 67 # Create data directory 68 os.makedirs(self.config.get('general', 'clients_root')) 69 os.chmod(self.config.get('general', 'clients_root'), 0750) 70 os.chown(self.config.get('general', 'clients_root'), 71 filesystem.get_gid_from_name('root'), 72 filesystem.get_gid_from_name(parameters['general']['apache_group'])) 73 74 print 75 logging.info(' Created data directory in "%s"' % self.config.get('general', 'clients_root')) 76 print 61 77 62 78 # Create default configuration profile … … 92 108 logging.error(exception) 93 109 logging.error(" Environment couldn't be initialized in %(env_dir)s" % {'env_dir' : self.path}) 94 logging.info(" Rolling back changes")110 logging.info(" Rolling back changes") 95 111 96 112 for entry in os.listdir(self.path): -
cleverbox/trunk/cleverbox/project.py
r193 r194 3 3 """ 4 4 5 import os, re, ConfigParser, traceback5 import logging, os, re, ConfigParser, traceback 6 6 from cleverbox.utils import filesystem, styles 7 7 … … 51 51 Disables project in environment. 52 52 """ 53 53 54 54 if not exists(environment, client_name, project_name): 55 55 raise Exception, 'Client "%s" has no project "%s".' % (client_name, project_name) … … 57 57 try: 58 58 os.unlink(os.path.join(environment.get_path('projects-enabled'), '%s-%s' % (client_name, project_name))) 59 print styles.style.SUCCESS(" Project '%s' has been disabled. Apache needs to be reloaded." % project_name) 59 print styles.style.SUCCESSNORESET('') 60 logging.info(" Project '%s' has been disabled. Apache needs to be reloaded." % project_name) 61 print styles.style.RESET('') 60 62 except (IOError, os.error), exception: 61 63 raise Exception, 'Project "%s" is already disabled' % project_name … … 75 77 '%s-%s' % (client_name, project_name)) 76 78 os.symlink(target, linkname) 77 print "Project '%s' has been enabled. Apache needs to be reloaded." % project_name 79 80 print styles.style.SUCCESSNORESET('') 81 logging.info(" Project '%s' has been enabled. Apache needs to be reloaded." % project_name) 82 print styles.style.RESET('') 78 83 79 84 def add(environment, client_name, project_name): -
cleverbox/trunk/cleverbox/scripts/admin.py
r193 r194 1 1 # -*- coding: utf-8 -*- 2 2 3 import cmd, logging, os, shlex, sys 3 import cmd, logging, os, shlex, sys, traceback 4 4 from trac import util 5 5 from trac.scripts.admin import TracAdmin … … 75 75 print 76 76 logging.error(' Command failed: %s' % e) 77 logging.debug(traceback.print_exc()) 77 78 print 78 79 rv = 2 … … 303 304 # Disable project 304 305 (client_name, project_name) = args 305 project.disable( environment, client_name, project_name)306 project.disable(self.env, client_name, project_name) 306 307 307 308 -
cleverbox/trunk/cleverbox/tests/__init__.py
r177 r194 1 1 import unittest 2 2 from cleverbox.tests import client, project, environment, upgrade 3 4 def validate_layout(layout): 5 6 import grp, os, pwd, stat 7 8 for (entry, spec) in layout.items(): 9 st = os.stat(entry) 10 mode = st[stat.ST_MODE] 11 12 # Validate file type 13 func = getattr(stat, spec[0]) 14 assert func.__call__(mode), '"%s" type is correct (%s)' % (entry, spec[0]) 15 16 # Validate file mode 17 assert oct(stat.S_IMODE(mode)) == spec[1], '"%s" mode is correct (expected %s, got %s)' % (entry, spec[1], oct(stat.S_IMODE(mode))) 18 19 # Validate ownership 20 uid = st[stat.ST_UID] 21 gid = st[stat.ST_GID] 22 expected_uid = pwd.getpwnam(spec[2])[2] 23 expected_gid = grp.getgrnam(spec[3])[2] 24 assert uid == expected_uid, '"%s" owner is correct (expected %s, got %s)' % (entry, spec[2], pwd.getpwuid(uid)[0]) 25 assert gid == expected_gid, '"%s" group is correct (expected %s, got %s)' % (entry, spec[3], grp.getgrgid(uid)[0]) 26 27 def create_environment(version): 28 29 import os, tempfile 30 from cleverbox.environment import Environment 31 32 test_root = os.path.join(tempfile.gettempdir(), 'cleverbox-tempenv') 33 env_path = os.path.join(test_root, 'etc', 'cleverbox') 34 os.makedirs(env_path) 35 env = Environment(env_path) 36 parameters = {'general' : 37 {'clients_root' : os.path.join(test_root, 'var', 'cleverbox'), 38 'assets_dir' : os.path.join('/root/tmp/cleverbox-trunk/assets'), 39 'apache_group' : 'www-data'}} 40 env.create(version, parameters) 41 42 return env 43 3 44 4 45 def suite(): -
cleverbox/trunk/cleverbox/tests/client.py
r193 r194 4 4 from cleverbox.environment import Environment 5 5 from cleverbox.scripts.admin import CleverboxAdmin 6 from cleverbox import client 7 import cleverbox.tests 6 8 7 9 logging.basicConfig(stream=open('/dev/null', 'w+')) … … 14 16 # Fixtures 15 17 def setUp(self): 16 env_path = os.path.join(tempfile.gettempdir(), 'cleverbox-tempenv') 17 os.mkdir(env_path) 18 self.env = Environment(env_path) 19 parameters = {'general' : 20 {'clients_root' : os.path.join(env_path, 'var', 'cleverbox'), 21 'assets_dir' : os.path.join('/home/trivoallan/workspace/cleverbox-trunk/assets'), 22 'apache_group' : 'www-data'}} 23 self.env.create('0.5test', parameters) 24 18 self.env = cleverbox.tests.create_environment('0.5test') 19 25 20 def tearDown(self): 26 21 shutil.rmtree(self.env.path) 27 22 28 23 # client add 24 def test_client_add_generate_expected_layout(self): 25 client_name = 'testclient' 26 client.add(self.env, client_name) 27 client_root = self.env.config.get('general', 'clients_root') 28 expected = {os.path.join(self.env.path, 'clients-available') : ('S_ISREG', '0640', 'root', 'www-data'), 29 os.path.join(clients_root, client_name) : ('S_ISDIR', '0750', 'root', 'www-data'), 30 os.path.join(clients_root, client_name, 'htdocs') : ('S_ISDIR', '0770', 'root', 'www-data'), 31 os.path.join(clients_root, client_name, 'logs') : ('S_ISDIR', '0770', 'root', 'www-data'), 32 os.path.join(clients_root, client_name, 'tmp') : ('S_ISDIR', '0770', 'root', 'www-data'), 33 os.path.join(clients_root, client_name, 'var') : ('S_ISDIR', '0750', 'root', 'www-data'), 34 os.path.join(clients_root, client_name, 'var', 'svn') : ('S_ISDIR', '0750', 'root', 'www-data'), 35 os.path.join(clients_root, client_name, 'var', 'trac') : ('S_ISDIR', '0750', 'root', 'www-data')} 36 37 cleverbox.tests.validate_layout(expected) 38 29 39 def test_client_add_generates_expected_apache_configuration(self): 30 40 pass -
cleverbox/trunk/cleverbox/tests/environment.py
r193 r194 1 1 import grp, logging, os, pwd, shutil, stat, tempfile, unittest 2 2 from cleverbox.environment import Environment 3 import cleverbox.tests 3 4 4 5 # Don't bother with output from scripts … … 9 10 # Fixtures 10 11 def setUp(self): 11 env_path = os.path.join(tempfile.gettempdir(), 'cleverbox-tempenv') 12 os.mkdir(env_path) 13 self.env = Environment(env_path) 14 parameters = {'general' : 15 {'clients_root' : os.path.join(env_path, 'var', 'cleverbox'), 16 'assets_dir' : os.path.join('/home/trivoallan/workspace/cleverbox-trunk/assets'), 17 'apache_group' : 'www-data'}} 18 self.env.create('0.5test', parameters) 19 12 self.env = cleverbox.tests.create_environment('0.5test') 13 20 14 def tearDown(self): 21 15 shutil.rmtree(self.env.path) 16 shutil.rmtree(self.env.config.get('general', 'clients_root')) 22 17 23 18 def test_create(self): 24 19 """Environment.create() generates a correct directory layout.""" 25 20 26 expected = {'VERSION' : ('S_ISREG', '0640', 'root', 'www-data'), 27 'cleverbox.ini' : ('S_ISREG', '0640', 'root', 'www-data'), 28 'clients-available' : ('S_ISDIR', '0750', 'root', 'www-data'), 29 'clients-enabled' : ('S_ISDIR', '0750', 'root', 'www-data'), 30 'projects-available' : ('S_ISDIR', '0750', 'root', 'www-data'), 31 'projects-enabled' : ('S_ISDIR', '0750', 'root', 'www-data'), 32 'profiles' : ('S_ISDIR', '0750', 'root', 'www-data'), 33 'profiles/default' : ('S_ISDIR', '0750', 'root', 'www-data'), 34 'profiles/default/trac-defaults.ini' : ('S_ISREG', '0640', 'root', 'www-data'), 35 'profiles/default/project.apache.conf' : ('S_ISREG', '0640', 'root', 'www-data'), 36 'profiles/default/permissions.ini' : ('S_ISREG', '0640', 'root', 'www-data')} 21 expected = {self.env.get_path('VERSION') : ('S_ISREG', '0640', 'root', 'www-data'), 22 self.env.get_path('cleverbox.ini') : ('S_ISREG', '0640', 'root', 'www-data'), 23 self.env.get_path('clients-available') : ('S_ISDIR', '0750', 'root', 'www-data'), 24 self.env.get_path('clients-enabled') : ('S_ISDIR', '0750', 'root', 'www-data'), 25 self.env.get_path('projects-available') : ('S_ISDIR', '0750', 'root', 'www-data'), 26 self.env.get_path('projects-enabled') : ('S_ISDIR', '0750', 'root', 'www-data'), 27 self.env.get_path('profiles') : ('S_ISDIR', '0750', 'root', 'www-data'), 28 self.env.get_path('profiles/default') : ('S_ISDIR', '0750', 'root', 'www-data'), 29 self.env.get_path('profiles/default/trac-defaults.ini') : ('S_ISREG', '0640', 'root', 'www-data'), 30 self.env.get_path('profiles/default/project.apache.conf') : ('S_ISREG', '0640', 'root', 'www-data'), 31 self.env.get_path('profiles/default/permissions.ini') : ('S_ISREG', '0640', 'root', 'www-data'), 32 self.env.config.get('general', 'clients_root') : ('S_ISDIR', '0750', 'root', 'www-data')} 37 33 38 for (entry, spec) in expected.items(): 39 st = os.stat(self.env.get_path(entry)) 40 mode = st[stat.ST_MODE] 41 42 # Validate file type 43 func = getattr(stat, spec[0]) 44 assert func.__call__(mode), '"%s" type is correct (%s)' % (entry, spec[0]) 45 46 # Validate file mode 47 assert oct(stat.S_IMODE(mode)) == spec[1], '"%s" mode is correct (expected %s, got %s)' % (entry, spec[1], oct(stat.S_IMODE(mode))) 48 49 # Validate ownership 50 uid = st[stat.ST_UID] 51 gid = st[stat.ST_GID] 52 expected_uid = pwd.getpwnam(spec[2])[2] 53 expected_gid = grp.getgrnam(spec[3])[2] 54 assert uid == expected_uid, '"%s" owner is correct (expected %s, got %s)' % (entry, spec[2], pwd.getpwuid(uid)[0]) 55 assert gid == expected_gid, '"%s" group is correct (expected %s, got %s)' % (entry, spec[3], grp.getgrgid(uid)[0]) 56 34 cleverbox.tests.validate_layout(expected) 57 35 58 36 def test_create_creates_enough_elements(self): -
cleverbox/trunk/docs/TODO
r193 r194 13 13 Misc : 14 14 * apachectl integration (for configtest + reload) 15 * _version should go in cleverbox/__init__.py 16 * by default, files should be owned bu current user, not root
