diff --git a/slapos/recipe/cloud9/__init__.py b/slapos/recipe/cloud9/__init__.py index bff48351d7c8828b63679be7fc0d246e7584e762..f5dd16089ab081b8c81dd542464c7c0622f7956c 100644 --- a/slapos/recipe/cloud9/__init__.py +++ b/slapos/recipe/cloud9/__init__.py @@ -31,14 +31,15 @@ class Recipe(GenericBaseRecipe): """Deploy a fully operational cloud9 service.""" def _options(self, options): - self.ip = options['ipv6'].strip() + self.ip = options['ip'].strip() self.port = options['port'].strip() self.git = options['git-binary'].strip() self.node_executable = options['node-binary'].strip() self.cloud9 = options['cloud9'].strip() self.workdir = options['working-directory'].strip() + self.wrapper = options['wrapper'].strip() # Set cloud9 access URL - options['access_url'] = 'http://[%s]:%s' % (self.ip, self.port) + options['access-url'] = 'http://[%s]:%s' % (self.ip, self.port) def install(self): path_list = [] @@ -50,8 +51,10 @@ class Recipe(GenericBaseRecipe): cloud9_args = [self.node_executable, self.cloud9, '-l', self.ip, '-p', self.port, '-w', self.workdir] - wrapper = self.createPythonScript(self.options['wrapper-name'], - 'slapos.recipe.librecipe.execute.executee', cloud9_args, environment) + wrapper = self.createPythonScript(self.wrapper, + 'slapos.recipe.librecipe.execute.executee', + (cloud9_args, environment) + ) path_list.append(wrapper) - + return path_list diff --git a/slapos/recipe/slaprunner/__init__.py b/slapos/recipe/slaprunner/__init__.py index d1b758809456f3076219afe5e7460636337930ba..4cdb935c8a43d9c30cede89fa81528733b2ee4f6 100644 --- a/slapos/recipe/slaprunner/__init__.py +++ b/slapos/recipe/slaprunner/__init__.py @@ -24,74 +24,70 @@ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # ############################################################################## -from slapos.recipe.librecipe import BaseSlapRecipe +from slapos.recipe.librecipe import GenericBaseRecipe import os -import pkg_resources -import sys -import zc.buildout -import zc.recipe.egg +class Recipe(GenericBaseRecipe): + + def _options(self, options): + self.ipv4 = options['ipv4'].strip() + self.ipv6 = options['ipv6'].strip() + self.proxy_port = options['proxy_port'].strip() + self.runner_port = options['runner_port'].strip() + self.workdir = options['working-directory'].strip() + self.software_directory = options['software-directory'].strip() + self.instance_directory = options['instance-directory'].strip() + self.partition_amount = options['partition-amount'].strip() + self.cloud9_url = options['cloud9-url'].strip() + # Set slaprunner access URL + options['access-url'] = 'http://[%s]:%s' % (self.ipv6, self.runner_port) + + def install(self): + path_list = [] -class Recipe(BaseSlapRecipe): - def _install(self): - self.path_list = [] - self.requirements, self.ws = self.egg.working_set() - ipv4 = self.getLocalIPv4Address() - ipv6 = self.getGlobalIPv6Address() - proxy_port = '50000' - runner_port = '50000' - cloud9_port = '30000' - workdir = self.createDataDirectory('runner') - software_root = os.path.join(workdir, 'software') - instance_root = os.path.join(workdir, 'instance') configuration = dict( - software_root=software_root, - instance_root=instance_root, - master_url='http://%s:%s/' % (ipv4, proxy_port), + software_root=self.software_directory, + instance_root=self.instance_directory, + master_url='http://%s:%s/' % (self.ipv4, self.proxy_port), computer_id='slaprunner', - partition_amount=7, + partition_amount=self.partition_amount, slapgrid_sr=self.options['slapgrid_sr'], slapgrid_cp=self.options['slapgrid_cp'], slapproxy=self.options['slapproxy'], supervisor=self.options['supervisor'], - supervisord_config=os.path.join(instance_root, 'etc', + supervisord_config=os.path.join(self.instance_directory, 'etc', 'supervisord.conf'), - runner_workdir=workdir, - runner_host=ipv6, - runner_port=runner_port, - ipv4_address=ipv4, - ipv6_address=ipv6, - proxy_host=ipv4, - proxy_port=proxy_port, - proxy_database=os.path.join(workdir, 'proxy.db'), - git=self.options['git'], - cloud9_url='http://[%s]:%s' % (ipv6, cloud9_port), - ssh_client=self.options['ssh_client'], - public_key=self.options['public_key'], - private_key=self.options['private_key'], - + runner_workdir=self.workdir, + runner_host=self.ipv6, + runner_port=self.runner_port, + ipv4_address=self.ipv4, + ipv6_address=self.ipv6, + proxy_host=self.ipv4, + proxy_port=self.proxy_port, + proxy_database=os.path.join(self.workdir, 'proxy.db'), + git=self.options['git-binary'], + ssh_client=self.options['ssh_client'], + public_key=self.options['public_key'], + private_key=self.options['private_key'], + cloud9_url=self.cloud9_url ) - config_file = self.createConfigurationFile('slapos.cfg', - self.substituteTemplate(pkg_resources.resource_filename(__name__, - 'template/slapos.cfg.in'), configuration)) - self.path_list.append(config_file) + + config_file = self.createFile(self.options['slapos.cfg'], + self.substituteTemplate(self.getTemplateFilename('slapos.cfg.in'), + configuration)) + path_list.append(config_file) environment = dict( - PATH=os.path.dirname(self.options['git']) + ':' + os.environ['PATH'], + PATH=os.path.dirname(self.options['git-binary']) + ':' + os.environ['PATH'], GIT_SSH=self.options['ssh_client'] ) - project_workdir = os.path.join(workdir, 'project') - if not os.path.exists(project_workdir): - os.mkdir(project_workdir) + launch_args = [self.options['slaprunner'].strip(), config_file, '--debug'] - cloud9_args = [self.options['node-bin'].strip(), self.options['cloud9'].strip(), - '-l', ipv6, '-p', cloud9_port, '-w', workdir] - self.path_list.extend(zc.buildout.easy_install.scripts([('slaprunner', - 'slapos.recipe.librecipe.execute', 'executee')], self.ws, sys.executable, - self.wrapper_directory, arguments=[launch_args, environment])) - self.path_list.extend(zc.buildout.easy_install.scripts([('cloud9IDE', - 'slapos.recipe.librecipe.execute', 'executee')], self.ws, sys.executable, - self.wrapper_directory, arguments=[cloud9_args, environment])) - self.setConnectionDict(dict(slaprunner_url='http://[%s]:%s' % (ipv6, runner_port), - cloud9_url='http://[%s]:%s' % (ipv6, cloud9_port))) - return self.path_list + + wrapper = self.createPythonScript(self.options['wrapper'], + 'slapos.recipe.librecipe.execute.executee', + (launch_args, environment) + ) + path_list.append(wrapper) + + return path_list diff --git a/software/slaprunner/instance-runner.cfg b/software/slaprunner/instance-runner.cfg index b8980f85524f62d0b54963c553c1bc757ae031c1..3e53640be25a0ca13ecc80854abff96596377d4f 100644 --- a/software/slaprunner/instance-runner.cfg +++ b/software/slaprunner/instance-runner.cfg @@ -1,33 +1,81 @@ [buildout] parts = - instance + cloud9 + slaprunner sshkeys-dropbear dropbear-server-add-authorized-key + publish-connection-informations eggs-directory = ${buildout:eggs-directory} develop-eggs-directory = ${buildout:develop-eggs-directory} offline = true -[instance] -recipe = ${instance-recipe:egg}:${instance-recipe:module} + +# Create all needed directories +[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/ + +[basedirectory] +recipe = slapos.cookbook:mkdirectory +log = $${rootdirectory:var}/log/ +services = $${rootdirectory:etc}/run/ +run = $${rootdirectory:var}/run/ +backup = $${rootdirectory:srv}/backup/ +promises = $${rootdirectory:etc}/promise/ + +[runnerdirectory] +recipe = slapos.cookbook:mkdirectory +home = $${rootdirectory:srv}/runner/ +project = $${:home}/project +software-root = $${:home}/software +instance-root = $${:home}/instance + +# Deploy cloud9 and slaprunner +[cloud9] +recipe = slapos.cookbook:cloud9 +ip = $${slap-network-information:global-ipv6} +port = 30000 +wrapper = $${basedirectory:services}/cloud9 +working-directory = $${runnerdirectory:home} +git-binary = ${git:location}/bin/git +node-binary = ${nodejs:location}/bin/node +cloud9 = ${cloud9:location}/server.js + +[slaprunner] +recipe = slapos.cookbook:slaprunner slaprunner = ${buildout:directory}/bin/slaprunner 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 -node-bin = ${nodejs:location}/bin/node -cloud9 = ${cloud9:location}/bin/cloud9.js +git-binary = ${git:location}/bin/git +slapos.cfg = $${rootdirectory:etc}/slapos.cfg +working-directory = $${runnerdirectory:home} +project-directory = $${runnerdirectory:project} +software-directory = $${runnerdirectory:software-root} +instance-directory = $${runnerdirectory:instance-root} ssh_client = $${sshkeys-dropbear:wrapper} public_key = $${sshkeys-dropbear:public-key} private_key = $${sshkeys-dropbear:private-key} +ipv4 = $${slap-network-information:local-ipv4} +ipv6 = $${slap-network-information:global-ipv6} +proxy_port = 50000 +runner_port = 50000 +partition-amount = 7 +cloud9-url = $${cloud9:access-url} +wrapper = $${basedirectory:services}/slaprunner -[sshkeys-directory] -recipe = slapos.cookbook:mkdirectory -requests = $${directory:sshkeys}/requests/ -keys = $${directory:sshkeys}/keys/ - -# Deploy dropbear (minimalist SSH server) +# Deploy dropbear (minimalist ssh server) [sshkeys-directory] recipe = slapos.cookbook:mkdirectory requests = $${directory:sshkeys}/requests/ @@ -65,26 +113,14 @@ wrapper = $${basedirectory:services}/sshd recipe = slapos.cookbook:dropbear.add_authorized_key key = $${slap-parameter:authorized-key} -[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/ +# Send informations to SlapOS Master +[publish-connection-informations] +recipe = slapos.cookbook:publish +url = $${slaprunner:access-url} +cloud9_url = $${cloud9:access-url} +ssh_command = ssh $${dropbear-server:host} -p $${dropbear-server:port} -[basedirectory] -recipe = slapos.cookbook:mkdirectory -log = $${rootdirectory:var}/log/ -services = $${rootdirectory:etc}/run/ -run = $${rootdirectory:var}/run/ -backup = $${rootdirectory:srv}/backup/ -promises = $${rootdirectory:etc}/promise/ [slap-parameter] # Default value if no ssh key is specified diff --git a/software/slaprunner/software.cfg b/software/slaprunner/software.cfg index 84353bdcc07f20785b6c360c9975ff3d248bef44..2d15e220339b1a4e9a0bfac6b210b51290a9c5db 100644 --- a/software/slaprunner/software.cfg +++ b/software/slaprunner/software.cfg @@ -34,7 +34,7 @@ md5sum = 5307e4200f044ae57b504ad68444491c recipe = slapos.recipe.template url = ${:_profile_base_location_}/instance-runner.cfg output = ${buildout:directory}/template-runner.cfg -md5sum = c24f4a76c9e8be5f5b83af28daf0fca1 +md5sum = 779df8a10f18511058a49b14b8ffba18 mode = 0644 [eggs]