From 06402ffafa9ceec0191a81fe6ced2b3cee75facc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=C3=A9dric=20de=20Saint=20Martin?= <cedric.dsm@tiolive.com>
Date: Thu, 8 Dec 2011 08:18:56 -0500
Subject: [PATCH] Working kvm frontend for vifib proxying

---
 slapos/recipe/kvm_frontend/__init__.py        | 20 ++++++++++---------
 .../recipe/kvm_frontend/template/kvm-proxy.js | 18 +++++++----------
 .../template/proxytable-vifib-snippet.json.in |  7 ++++---
 software/kvm-frontend/instance.cfg            |  4 +++-
 software/kvm-frontend/software.cfg            |  6 +++++-
 5 files changed, 30 insertions(+), 25 deletions(-)

diff --git a/slapos/recipe/kvm_frontend/__init__.py b/slapos/recipe/kvm_frontend/__init__.py
index caa5bf275..613d67492 100644
--- a/slapos/recipe/kvm_frontend/__init__.py
+++ b/slapos/recipe/kvm_frontend/__init__.py
@@ -247,13 +247,14 @@ class Recipe(BaseSlapRecipe):
       rewrite_part = self.substituteTemplate(
          self.getTemplateFilename('proxytable-host.json.in'), rewrite_rule)
       proxy_table_content = """%s%s,""" % (proxy_table_content, rewrite_part)
-    proxy_table_content = """%s%s""" % (proxy_table_content,
-         self.getTemplateFilename('proxytable-vifib-snippet.json.in'))
-    proxy_table_content = '%s}' % proxy_table_content
+    proxy_table_content = '%s%s' % (proxy_table_content,
+         open(self.getTemplateFilename('proxytable-vifib-snippet.json.in')).read())
+    proxy_table_content = '%s}\n' % proxy_table_content
     return proxy_table_content
 
   def installFrontendNode(self, ip, port, key, certificate, plain_http,
                             name, rewrite_rule_list):
+    # XXX-Cedric : is name necessary?
     # Create Map
     map_name = "proxy_table.json"
     map_content = self._getProxyTableContent(rewrite_rule_list)
@@ -261,20 +262,21 @@ class Recipe(BaseSlapRecipe):
     self.path_list.append(map_file)
     
     # Install script
-    kvm_proxy_script_in = pkg_resources.resource_filename(
-        __name__, os.path.join('template', 'kvm-proxy.js'))
+    kvm_proxy_script_in = open(self.getTemplateFilename(
+          'kvm-proxy.js'), 'r').read()
     kvm_proxy_script = self.createRunningWrapper("kvm-proxy.js",
         kvm_proxy_script_in)
     self.path_list.append(kvm_proxy_script)
     
     # Create wrapper
     wrapper = zc.buildout.easy_install.scripts([(
-        name, 'slapos.recipe.librecipe.execute', 'executee_wait')], self.ws,
+        "kvm_frontend", 'slapos.recipe.librecipe.execute', 'executee_wait')], self.ws,
         sys.executable, self.wrapper_directory, arguments=[
-        self.options['node_binary'].strip(), kvm_proxy_script,
-        ip, port, key, certificate, plain_http,
+        [self.options['node_binary'].strip(), kvm_proxy_script,
+        ip, str(port), key, certificate, map_file, str(plain_http)],
+        [key, certificate],
         {'NODE_PATH': self.options['node_path']}]
       )[0]
-    self.path_list.extend(wrapper)
+    self.path_list.append(wrapper)
 
     return dict(site_url="https://%s:%s/" % (name, port))
diff --git a/slapos/recipe/kvm_frontend/template/kvm-proxy.js b/slapos/recipe/kvm_frontend/template/kvm-proxy.js
index 39ad65c7c..c41c45d5b 100644
--- a/slapos/recipe/kvm_frontend/template/kvm-proxy.js
+++ b/slapos/recipe/kvm_frontend/template/kvm-proxy.js
@@ -3,16 +3,14 @@ var fs = require('fs'),
     colors = require('colors'),
     http = require('http'),
     httpProxy = require('http-proxy'),
-    process = require('process')
     proxyByUrl = require('proxy-by-url');
 
-var proxyTable = 'proxy-table.json',
-    //listenInterface = '2a01:e34:ec03:8610:60c:ceff:fed1:b9fc',
-    listenInterface = process.argv[1],
-    port = process.argv[2],
-    sslKeyFile = process.argv[3],
-    sslCertFile = process.argv[4],
-    redirect = process.argv[5] || false,
+var listenInterface = process.argv[2],
+    port = process.argv[3],
+    sslKeyFile = process.argv[4],
+    sslCertFile = process.argv[5],
+    proxyTable = process.argv[6],
+    redirect = process.argv[7] || false,
     isRawIPv6;
 
 isRawIPv6 = function checkipv6(str) {
@@ -39,10 +37,8 @@ var middlewareVifib = function(req, res, next) {
   // Completely hardcoded rewrite
   var vifibPrefix = '/hosting';
   if (req.url.indexOf(vifibPrefix) == 0) {
-    var hostname = 'localhost',
-        port = '8000';
     // Rewrite URL to match virtual host
-    req.url = vifibPrefix + '/VirtualHostBase/https/' + hostname + ':' + port +
+    req.url = vifibPrefix + '/VirtualHostBase/https/' + req.headers.host +
               '/erp5/web_site_module/VirtualHostRoot' + req.url;
     console.log('Vifib rewrite. New URL is : ' + req.url);
   }
diff --git a/slapos/recipe/kvm_frontend/template/proxytable-vifib-snippet.json.in b/slapos/recipe/kvm_frontend/template/proxytable-vifib-snippet.json.in
index 7cef57284..f64ff0047 100644
--- a/slapos/recipe/kvm_frontend/template/proxytable-vifib-snippet.json.in
+++ b/slapos/recipe/kvm_frontend/template/proxytable-vifib-snippet.json.in
@@ -1,6 +1,7 @@
 
-  "/domain": {
-    "port": 4443,
-    "host":"vifib",
+  "/hosting": {
+    "port": 15000,
+    "host": "2a01:e35:2e27:460:e2cb:4eff:fed9:ddd6",
     "https": true
   }
+
diff --git a/software/kvm-frontend/instance.cfg b/software/kvm-frontend/instance.cfg
index 649ba7ec3..7e0782d6b 100644
--- a/software/kvm-frontend/instance.cfg
+++ b/software/kvm-frontend/instance.cfg
@@ -9,7 +9,9 @@ develop-eggs-directory = ${buildout:develop-eggs-directory}
 node_path = ${buildout:parts-directory}:${npm-modules:location}/node_modules
 recipe = ${instance-recipe:egg}:${instance-recipe:module}
 node_binary = ${nodejs:location}/bin/node
-npm_binary = ${npm:location}/bin/npm
+#npm_binary = ${npm:location}/bin/npm
 openssl_binary = ${openssl:location}/bin/openssl
 dcrond_binary = ${dcron:location}/sbin/crond
+logrotate_binary = ${logrotate:location}/usr/sbin/logrotate
+rdiff_backup_binary = ${buildout:bin-directory}/rdiff-backup
 
diff --git a/software/kvm-frontend/software.cfg b/software/kvm-frontend/software.cfg
index 9032433a9..0853a18a9 100644
--- a/software/kvm-frontend/software.cfg
+++ b/software/kvm-frontend/software.cfg
@@ -2,15 +2,19 @@
 extends =
   ../../component/dcron/buildout.cfg
   ../../component/logrotate/buildout.cfg
+  ../../component/rdiff-backup/buildout.cfg
   ../../stack/nodejs.cfg
 
 parts =
   template
   nodejs
   npm
+  http-proxy
+  proxy-by-url
 
   dcron
   logrotate
+  rdiff-backup
 
 # Buildoutish
   eggs
@@ -47,7 +51,7 @@ recipe = slapos.recipe.build:download-unpacked
 url = https://nodeload.github.com/desaintmartin/node-http-proxy/zipball/master
 md5sum = 464afcf7a9742f88966b1c5d9164362a
 
-[node-proxy-url]
+[proxy-by-url]
 # https://github.com/dominictarr/proxy-by-url
 recipe = slapos.recipe.build:download-unpacked
 #XXX-Cedric : use upstream when merged
-- 
2.30.9