diff --git a/slapos/recipe/erp5testnode/__init__.py b/slapos/recipe/erp5testnode/__init__.py index af7177dc2b0ef95e2c56373f4c37a9aa10182f97..5761aa3ef18e2f8b98d727f5cb15a93f3131bc86 100644 --- a/slapos/recipe/erp5testnode/__init__.py +++ b/slapos/recipe/erp5testnode/__init__.py @@ -24,86 +24,80 @@ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # ############################################################################## -from slapos.recipe.librecipe import BaseSlapRecipe +import ConfigParser +import json import os -import pkg_resources -import zc.buildout -import zc.recipe.egg -import sys +import StringIO -class Recipe(BaseSlapRecipe): - def __init__(self, buildout, name, options): - self.egg = zc.recipe.egg.Egg(buildout, options['recipe'], options) - BaseSlapRecipe.__init__(self, buildout, name, options) +from slapos.recipe.librecipe import GenericBaseRecipe - def _install(self): - self.requirements, self.ws = self.egg.working_set() +class Recipe(GenericBaseRecipe): + def install(self): path_list = [] - CONFIG = dict() - CONFIG['slapos_directory'] = self.createDataDirectory('slapos') - CONFIG['working_directory'] = self.createDataDirectory('testnode') - CONFIG['test_suite_directory'] = self.createDataDirectory('test_suite') - CONFIG['proxy_host'] = self.getLocalIPv4Address() - CONFIG['proxy_port'] = '5000' - CONFIG['log_directory'] = self.createDataDirectory('testnodelog') - CONFIG['run_directory'] = self.createDataDirectory('testnoderun') - CONFIG['test_suite_title'] = self.parameter_dict.get('test_suite_title') - CONFIG['test_node_title'] = self.parameter_dict.get('test_node_title') - CONFIG['test_suite'] = self.parameter_dict.get('test_suite') - CONFIG['node_quantity'] = self.parameter_dict.get('node_quantity', '1') - CONFIG['project_title'] = self.parameter_dict.get('project_title') - CONFIG['ipv4_address'] = self.getLocalIPv4Address() - CONFIG['ipv6_address'] = self.getGlobalIPv6Address() - CONFIG['test_suite_master_url'] = self.parameter_dict.get( - 'test_suite_master_url', None) - CONFIG['git_binary'] = self.options['git_binary'] - CONFIG['slapgrid_partition_binary'] = self.options[ - 'slapgrid_partition_binary'] - CONFIG['slapgrid_software_binary'] = self.options[ - 'slapgrid_software_binary'] - CONFIG['slapproxy_binary'] = self.options['slapproxy_binary'] - CONFIG['zip_binary'] = self.options['zip_binary'] + options = self.options.copy() + del options['recipe'] + CONFIG = {k.replace('-', '_'): v for k, v in options.iteritems()} CONFIG['PATH'] = os.environ['PATH'] - additional_bt5_repository_id = \ - self.parameter_dict.get('additional_bt5_repository_id') - CONFIG['bt5_path'] = None - if additional_bt5_repository_id is not None: - CONFIG['bt5_path'] = "" - additional_bt5_repository_id_list = additional_bt5_repository_id.split(",") - for id in additional_bt5_repository_id_list: - id_path = os.path.join(CONFIG['slapos_directory'], id) + if CONFIG['bt5_path']: + additional_bt5_repository_id_list = CONFIG['bt5_path'].split(",") + CONFIG['bt5_path'] = '' + for bt5_repository_id in additional_bt5_repository_id_list: + id_path = os.path.join(CONFIG['slapos_directory'], bt5_repository_id) bt_path = os.path.join(id_path, "bt5") CONFIG['bt5_path'] += "%s,%s," % (id_path, bt_path) - CONFIG['instance_dict'] = '' - if 'instance_dict' in self.parameter_dict: - CONFIG['instance_dict'] = '[instance_dict]\n' - for k,v in eval(self.parameter_dict['instance_dict']).iteritems(): - CONFIG['instance_dict'] += '%s = %s\n' % (k,v) - CONFIG['repository_list'] = '' + if self.options['instance-dict']: + config_instance_dict = ConfigParser.ConfigParser() + config_instance_dict.add_section('instance_dict') + instance_dict = json.loads(self.options['instance-dict']) + + for k ,v in instance_dict.iteritems(): + config_instance_dict.set('instance_dict', k, v) + value = StringIO.StringIO() + config_instance_dict.write(value) + CONFIG['instance_dict'] = value.getvalue() + + vcs_repository_list = json.loads(self.options['repository-list']) + config_repository_list = ConfigParser.ConfigParser() i = 0 - for repository in eval(self.parameter_dict['vcs_repository_list']): - CONFIG['repository_list'] += '[vcs_repository_%s]\n' % i - CONFIG['repository_list'] += 'url = %s\n' % repository['url'] + for repository in vcs_repository_list: + section_name = 'vcs_repository_%d' % i + config_repository_list.add_section(section_name) + config_repository_list.set(section_name, 'url', repository['url']) if 'branch' in repository: - CONFIG['repository_list'] += 'branch = %s\n' % repository['branch'] + config_repository_list.set(section_name, 'branch', repository['branch']) if 'profile_path' in repository: - CONFIG['repository_list'] += 'profile_path = %s\n' % repository[ - 'profile_path'] + config_repository_list.set(section_name, 'profile_path', + repository['profile_path']) if 'buildout_section_id' in repository: - CONFIG['repository_list'] += 'buildout_section_id = %s\n' % repository[ - 'buildout_section_id'] - CONFIG['repository_list'] += '\n' + config_repository_list.set(section_name, 'buildout_section_id', + repository['buildout_section_id']) i += 1 - testnode_config = self.createConfigurationFile('erp5testnode.cfg', - self.substituteTemplate(pkg_resources.resource_filename(__name__, - 'template/erp5testnode.cfg.in'), CONFIG)) - testnode_log = os.path.join(self.log_directory, 'erp5testnode.log') - wrapper = zc.buildout.easy_install.scripts([('erp5testnode', - 'slapos.recipe.librecipe.execute', 'executee')], self.ws, sys.executable, - self.wrapper_directory, arguments=[[self.options['testnode'], '-l', - testnode_log, testnode_config], {'GIT_SSL_NO_VERIFY': '1'}])[0] - path_list.append(testnode_config) - path_list.append(wrapper) + value = StringIO.StringIO() + config_repository_list.write(value) + CONFIG['repository_list'] = value.getvalue() + + configuration_file = self.createFile( + self.options['configuration-file'], + self.substituteTemplate( + self.getTemplateFilename('erp5testnode.cfg.in'), + CONFIG + ), + ) + path_list.append(configuration_file) + path_list.append( + self.createPythonScript( + self.options['wrapper'], + 'slapos.recipe.librecipe.execute.executee', + [ # Executable + [ self.options['testnode'], '-l', self.options['log-file'], + configuration_file], + # Environment + { + 'GIT_SSL_NO_VERIFY': '1', + } + ], + ) + ) return path_list