diff --git a/slapos/recipe/slaprunner/__init__.py b/slapos/recipe/slaprunner/__init__.py index ecaa4c6a74978b465a8a18965845c8d0552d5bff..3c74cb5b21bde688d1163612fcff06280a629428 100644 --- a/slapos/recipe/slaprunner/__init__.py +++ b/slapos/recipe/slaprunner/__init__.py @@ -62,17 +62,24 @@ class Recipe(BaseSlapRecipe): ipv6_address=ipv6, proxy_host=ipv4, proxy_port=proxy_port, - proxy_database=os.path.join(workdir, 'proxy.db') + proxy_database=os.path.join(workdir, 'proxy.db'), + git=self.options['git'], + ssh_client=self.options['ssh_client'], + public_key=self.options['public_key'], + private_key=self.options['private_key'] ) config_file = self.createConfigurationFile('slapos.cfg', self.substituteTemplate(pkg_resources.resource_filename(__name__, 'template/slapos.cfg.in'), configuration)) self.path_list.append(config_file) - execute_arguments = dict(path = os.environ['PATH'], - launch_args = [self.options['slaprunner'].strip(), config_file]) + environment = dict( + PATH=os.path.dirname(self.options['git']) + ':' + os.environ['PATH'], + GIT_SSH=self.options['ssh_client'] + ) + launch_args = [self.options['slaprunner'].strip(), config_file, '--debug'] self.path_list.extend(zc.buildout.easy_install.scripts([('slaprunner', - 'slapos.recipe.slaprunner.execute', 'execute')], self.ws, sys.executable, - self.wrapper_directory, arguments=execute_arguments)) + 'slapos.recipe.librecipe.execute', 'executee')], self.ws, sys.executable, + self.wrapper_directory, arguments=[launch_args, environment])) self.setConnectionDict(dict(url='http://[%s]:%s' % (ipv6, runner_port))) return self.path_list diff --git a/slapos/recipe/slaprunner/template/slapos.cfg.in b/slapos/recipe/slaprunner/template/slapos.cfg.in index af7bc2425ed5bd8c91fc9f9075dd0f1c49b928d2..5dc00060eccae8c5842ae6500da3459e4bb9e200 100644 --- a/slapos/recipe/slaprunner/template/slapos.cfg.in +++ b/slapos/recipe/slaprunner/template/slapos.cfg.in @@ -23,3 +23,11 @@ ipv6_address = %(ipv6_address)s host = %(proxy_host)s port = %(proxy_port)s database_uri = %(proxy_database)s + +[sshkeys_authority] +ssh_client = %(ssh_client)s +public_key = %(public_key)s +private_key = %(private_key)s + +[gitclient] +git = %(git)s diff --git a/software/slaprunner/instance.cfg b/software/slaprunner/instance.cfg index bed9cc3b73be9f67d4c74e62444c29edd4562de2..f9427ba5b784e6b1a80dd1c813a584f300376d98 100644 --- a/software/slaprunner/instance.cfg +++ b/software/slaprunner/instance.cfg @@ -1,6 +1,9 @@ [buildout] parts = instance + sshkeys-authority + sshkeys-dropbear + dropbear-client eggs-directory = ${buildout:eggs-directory} develop-eggs-directory = ${buildout:develop-eggs-directory} @@ -12,4 +15,51 @@ slapgrid_sr = ${buildout:directory}/bin/slapgrid-sr slapgrid_cp = ${buildout:directory}/bin/slapgrid-cp slapproxy = ${buildout:directory}/bin/slapproxy supervisor = ${buildout:directory}/bin/slapgrid-supervisorctl +git = ${git:location}/bin/git +ssh_client = $${sshkeys-dropbear:wrapper} +public_key = $${sshkeys-dropbear:public-key} +private_key = $${sshkeys-dropbear:private-key} + +[sshkeys-directory] +recipe = slapos.cookbook:mkdirectory +requests = $${directory:sshkeys}/requests/ +keys = $${directory:sshkeys}/keys/ + +[sshkeys-authority] +recipe = slapos.cookbook:sshkeys_authority +request-directory = $${sshkeys-directory:requests} +keys-directory = $${sshkeys-directory:keys} +wrapper = $${directory:services}/sshkeys_authority +keygen-binary = ${dropbear:location}/bin/dropbearkey + +[sshkeys-dropbear] +<= sshkeys-authority +recipe = slapos.cookbook:sshkeys_authority.request +name = dropbear +type = rsa +executable = $${dropbear-client:wrapper} +public-key = $${dropbear-client:identity-file}.pub +private-key = $${dropbear-client:identity-file} +wrapper = $${rootdirectory:bin}/dbclient + +[dropbear-client] +recipe = slapos.cookbook:dropbear.client +dbclient-binary = ${dropbear:location}/bin/dbclient +identity-file = $${directory:ssh}/id_rsa +wrapper = $${rootdirectory:bin}/dbclient_raw +home = $${rootdirectory:etc}/ssh/ +force-host-key = True + +[rootdirectory] +recipe = slapos.cookbook:mkdirectory +etc = $${buildout:directory}/etc/ +var = $${buildout:directory}/var/ +srv = $${buildout:directory}/srv/ +bin = $${buildout:directory}/bin/ + +[directory] +recipe = slapos.cookbook:mkdirectory +sshkeys = $${rootdirectory:srv}/sshkeys +services = $${rootdirectory:etc}/run/ +ssh = $${rootdirectory:etc}/ssh/ diff --git a/software/slaprunner/software.cfg b/software/slaprunner/software.cfg index 192bc722adc21e2faef81f2ee18ef782e8430535..f2590b8bdf73247de7dad589a73b6aed91b76549 100644 --- a/software/slaprunner/software.cfg +++ b/software/slaprunner/software.cfg @@ -1,12 +1,23 @@ [buildout] +extensions = + buildout-versions + extends = ../../stack/flask.cfg ../../stack/shacache-client.cfg + ../../component/dropbear/buildout.cfg + ../../component/git/buildout.cfg + +develop = + ${:parts-directory}/slapos.cookbook parts = template + slapos.cookbook + check-local-eggs eggs instance-recipe-egg + dropbear find-links += http://www.nexedi.org/static/packages/source/slapos.buildout/ @@ -27,7 +38,25 @@ recipe = slapos.recipe.template url = ${:_profile_base_location_}/instance.cfg output = ${buildout:directory}/template.cfg mode = 0644 -md5sum = e2cbd8fe7b8e4c7e92a19cd775de0aa6 +md5sum = cd69efd5c3a7e9adca7387b9a401590a + +[slapos.cookbook] +# use official egg from pypi when it is released +recipe = plone.recipe.command +stop-on-error = true +commit = ce891b5070073d4dac9e21b089b8e662c7a9e0bd +repository = http://git.erp5.org/repos/slapos.git +location = ${buildout:parts-directory}/${:_buildout_section_name_} +git-binary = ${git:location}/bin/git +command = export GIT_SSL_NO_VERIFY=true; (${:git-binary} clone --quiet ${:repository} ${:location} && cd ${:location} && ${:git-binary} reset --hard ${:commit}) || (rm -fr ${:location}; exit 1) +update-command = + +[check-local-eggs] +recipe = plone.recipe.command +stop-on-error = true +update-command = ${:command} +command = grep parts ${buildout:develop-eggs-directory}/slapos.cookbook.egg-link +depends = ${instance-recipe:egg} [eggs] eggs += @@ -37,79 +66,102 @@ eggs += [versions] # Use SlapOS patched zc.buildout -zc.buildout = 1.5.3-dev-SlapOS-010 +zc.buildout = 1.6.0-dev-SlapOS-003 # Pinned to old version (2.4 does not compile well everywhere) pycrypto = 2.3 Jinja2 = 2.6 -Werkzeug = 0.8.1 -apache-libcloud = 0.5.2 +Werkzeug = 0.8.2 +apache-libcloud = 0.7.1 +async = 0.6.1 buildout-versions = 1.7 +gitdb = 0.5.4 hexagonit.recipe.cmmi = 1.5.0 -meld3 = 0.6.7 -slapos.cookbook = 0.31 +meld3 = 0.6.8 +plone.recipe.command = 1.1 slapos.libnetworkcache = 0.11 slapos.recipe.template = 2.2 -slapos.toolbox = 0.8 +slapos.toolbox = 0.16 +smmap = 0.8.2 # Required by: -# slapos.core==0.18 +# slapos.core==0.21 Flask = 0.8 # Required by: -# slapos.cookbook==0.31 +# slapos.toolbox==0.16 +GitPython = 0.3.2.RC1 + +# Required by: +# slapos.cookbook==0.39-dev PyXML = 0.8.4 +# Required by: +# slapos.toolbox==0.16 +atomize = 0.1.1 + +# Required by: +# slapos.toolbox==0.16 +feedparser = 5.1 + # Required by: # hexagonit.recipe.cmmi==1.5.0 hexagonit.recipe.download = 1.5.0 # Required by: -# slapos.cookbook==0.31 -# slapos.core==0.18 +# slapos.cookbook==0.39-dev +inotifyx = 0.2.0 + +# Required by: +# slapos.cookbook==0.39-dev +# slapos.core==0.21 # xml-marshaller==0.9.7 -lxml = 2.3.1 +lxml = 2.3.3 # Required by: -# slapos.cookbook==0.31 +# slapos.cookbook==0.39-dev netaddr = 0.7.6 # Required by: -# slapos.core==0.18 +# slapos.core==0.21 netifaces = 0.6 # Required by: -# slapos.toolbox==0.8 +# slapos.toolbox==0.16 paramiko = 1.7.7.1 # Required by: -# slapos.toolbox==0.8 -psutil = 0.3.0 +# slapos.toolbox==0.16 +psutil = 0.4.1 # Required by: -# slapos.cookbook==0.31 -# slapos.core==0.18 -# zc.buildout==1.5.3-dev-SlapOS-010 +# slapos.cookbook==0.39-dev +# slapos.core==0.21 +# slapos.libnetworkcache==0.11 +# slapos.toolbox==0.16 +# supervisor==3.0a12 +# zc.buildout==1.6.0-dev-SlapOS-003 # zc.recipe.egg==1.3.2 +# zope.interface==3.8.0 setuptools = 0.6c12dev-r88846 # Required by: -# slapos.cookbook==0.31 -slapos.core = 0.18 +# slapos.cookbook==0.39-dev +slapos.core = 0.21 # Required by: -# slapos.core==0.18 -supervisor = 3.0a10 +# slapos.core==0.21 +supervisor = 3.0a12 # Required by: -# slapos.cookbook==0.31 +# slapos.cookbook==0.39-dev xml-marshaller = 0.9.7 # Required by: -# slapos.cookbook==0.31 +# slapos.cookbook==0.39-dev zc.recipe.egg = 1.3.2 # Required by: -# slapos.core==0.18 -zope.interface = 3.8.0 \ No newline at end of file +# slapos.core==0.21 +zope.interface = 3.8.0