From eb4ac92de2a75d5134c2f93db1a63515225ba745 Mon Sep 17 00:00:00 2001 From: Rafael Monnerat <rafael@nexedi.com> Date: Tue, 15 Mar 2011 15:01:38 +0000 Subject: [PATCH] Improve ERP5 Site creation: * Configure memcached * Configure Conversion server * Configure Repository List * Accept initial bt5 setup. git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@44303 20353a03-c40f-0410-a6d1-a30d3c3de9de --- .../erp5/src/slapos/recipe/erp5/__init__.py | 29 ++++--- .../erp5/src/slapos/recipe/erp5/erp5.py | 76 ++++++++++++++----- 2 files changed, 76 insertions(+), 29 deletions(-) diff --git a/slapos/recipe/erp5/src/slapos/recipe/erp5/__init__.py b/slapos/recipe/erp5/src/slapos/recipe/erp5/__init__.py index 5484d05f6d..45b1b0863d 100644 --- a/slapos/recipe/erp5/src/slapos/recipe/erp5/__init__.py +++ b/slapos/recipe/erp5/src/slapos/recipe/erp5/__init__.py @@ -33,6 +33,8 @@ import sys import zc.buildout import zc.recipe.egg +CREATE_ERP5_SITE = 0 + # Taken from Zope2 egg def write_inituser(fn, user, password): fp = open(fn, "w") @@ -70,11 +72,9 @@ class Recipe(BaseSlapRecipe): apache_login=self.installLoginApache(ip=self.getGlobalIPv6Address(), port=13000, backend=zope_access, key=ca_conf['login_key'], certificate=ca_conf['login_certificate'])) - if self.options.get('erp5_site_id') not in [None, ""]: + if CREATE_ERP5_SITE: self.installERP5Site(user, password, zope_access, - mysql_conf['mysql_database'], mysql_conf['ip'], - mysql_conf['tcp_port'], mysql_conf['mysql_user'], - mysql_conf['mysql_password'], self.options.get('erp5_site_id')) + mysql_conf, conversion_server_conf, memcached_conf, self.site_id) self.installTestRunner(ca_conf, mysql_conf, conversion_server_conf) self.linkBinary() self.setConnectionDict(dict( @@ -336,24 +336,29 @@ class Recipe(BaseSlapRecipe): self._createDirectory(os.path.join(self.erp5_directory, directory)) return user, password - def installERP5Site(self, user, password, zope_access, database_name, - database_ip, database_port, database_user, database_password, - erp5_site_id='erp5'): + def installERP5Site(self, user, password, zope_access, mysql_conf, + conversion_server_conf, memcached_conf, erp5_site_id): """ Create a script controlled by supervisor, which creates a erp5 site on current available zope and mysql environment""" - # XXX Conversion server and memcache server coordinates are not relevant # for pure site creation. https_connection_url = "http://%s:%s@%s/" % (user, password, zope_access) - mysql_connection_string = "%s@%s:%s %s %s" % (database_name, - database_ip, database_port, database_user, database_password) + mysql_connection_string = "%(mysql_database)s@%(ip)s:%(tcp_port)s %(mysql_user)s %(mysql_password)s" % mysql_conf + # XXX URL list vs. repository + list of bt5 names? bt5_url_list = self.options.get("bt5_url_list", '') + bt5_repository_list = self.options.get("bt5_repository_list", '') self.path_list.extend(zc.buildout.easy_install.scripts([('erp5_update', __name__ + '.erp5', 'updateERP5')], self.ws, sys.executable, self.wrapper_directory, - arguments=[erp5_site_id, mysql_connection_string, - https_connection_url, bt5_url_list])) + arguments=[erp5_site_id, + mysql_connection_string, + https_connection_url, + memcached_conf['memcached_url'], + conversion_server_conf['conversion_server_ip'], + conversion_server_conf['conversion_server_port'], + bt5_url_list, + bt5_repository_list])) return [] def installZeo(self, ip, port, name, path): diff --git a/slapos/recipe/erp5/src/slapos/recipe/erp5/erp5.py b/slapos/recipe/erp5/src/slapos/recipe/erp5/erp5.py index 44502c20b8..665a8fe932 100644 --- a/slapos/recipe/erp5/src/slapos/recipe/erp5/erp5.py +++ b/slapos/recipe/erp5/src/slapos/recipe/erp5/erp5.py @@ -26,38 +26,80 @@ ############################################################################## import time import urllib +import xmlrpclib +import socket def updateERP5(args): - base_url = args[2] - mysql_string = args[1] site_id = args[0] - sleep = 30 + mysql_string = args[1] + base_url = args[2] + memcached_provider = args[3] + conversion_server_address = args[4] + conversion_server_port = args[5] + bt5_list = args[6] + bt5_repository_list = [] + if len(args) > 7: + bt5_repository_list = args[7] + erp5_catalog_storage = "erp5_mysql_innodb_catalog" + sleep = 60 while True: try: - test_url = '%s/%s/getId' % (base_url, site_id) - result = urllib.urlopen(test_url).read() - # XXX This result should be more assertive - if result != site_id: + proxy = xmlrpclib.ServerProxy(base_url) + if proxy.isERP5SitePresent() == False: url = '%s/manage_addProduct/ERP5/manage_addERP5Site' % base_url result = urllib.urlopen(url, urllib.urlencode({ "id": site_id, # This parameter should be an argument in future. - "erp5_catalog_storage": "erp5_mysql_innodb_catalog", + "erp5_catalog_storage": erp5_catalog_storage, "erp5_sql_connection_string": mysql_string, "cmf_activity_sql_connection_string": mysql_string, })) print result.read() - result = urllib.urlopen(test_url).read() + print "ERP5 Site creation output: %s" % result.read() + + if proxy.isERP5SitePresent() == True: + print "Site was created successfuly!" + + # Update URL to ERP5 Site + erp5 = xmlrpclib.ServerProxy("%s/%s" % (base_url, site_id), + allow_none=1) + + # Update Cache Coordinates + erp5.portal_memcached.default_memcached_plugin.\ + setUrlString(memcached_provider) + + # Update and enable System preferrence with ERP5 Site Coordinates. + # XXX NO SYSTEM PREFERENCE AS DEFAULT so it is used Default + # Preference instead as object creation is not possible by + # xmlrpc or post. + preference = erp5.portal_preferences.default_site_preference + preference.setPreferredOoodocServerAddress(conversion_server_address) + preference.setPreferredOoodocServerPortNumber(conversion_server_port) + preference.enable() + + if len(bt5_repository_list) > 0: + erp5.portal_templates.\ + updateRepositoryBusinessTemplateList(bt5_repository_list, None) + + if len(bt5_list) > 0: + # XXX If no repository is provided, use just trunk. + if len(erp5.portal_templates.getRepositoryList()) == 0: + bt5_repository_list = ["http://www.erp5.org/dists/snapshot/bt5"] + erp5.portal_templates.\ + updateRepositoryBusinessTemplateList(bt5_repository_list, None) - if result == site_id: - print "Ready for install one business." - # XXX Suggestion for future - # POST '%s/erp5/portal_templates/updateRepositoryBusinessTemplateList < - # repository_list + erp5.portal_templates.\ + installBusinessTemplatesFromRepositories(bt5_list) - # POST '%s/erp5/portal_templates/installBusinessTemplatesFromRepositories < - # template_list + # The persistent cache is only configurable after install \ + # erp5_dms. + #erp5.portal_memcached.persistent_memcached_plugin.\ + # setUrlString(kumo_address) + else: + print "ERP5 site is already present, ignore." except IOError: - print "Unable to connect!" + print "Unable to create the ERP5 Site!" + except socket.error, e: + print "Unable to connect to ZOPE!" time.sleep(sleep) -- 2.30.9