From ccfe3eb496f9375421ff0d74606374edba77c6e1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=C3=A9dric=20de=20Saint=20Martin?= <cedric.dsm@tiolive.com>
Date: Tue, 30 Jul 2013 15:11:15 +0000
Subject: [PATCH] Resilient stack: Experimental: dynamically forward instance
 parmaeters to requested export instance.

---
 software/kvm/common.cfg                       | 15 ++++-------
 .../kvm/instance-kvm-resilient.cfg.jinja2     | 17 +++---------
 software/kvm/instance.cfg.in                  | 27 +++++++++++++++++--
 stack/resilient/buildout.cfg                  |  2 +-
 stack/resilient/template-replicated.cfg.in    | 10 ++++++-
 5 files changed, 43 insertions(+), 28 deletions(-)

diff --git a/software/kvm/common.cfg b/software/kvm/common.cfg
index 833063849..4df947032 100644
--- a/software/kvm/common.cfg
+++ b/software/kvm/common.cfg
@@ -77,7 +77,7 @@ command =
 [template]
 recipe = slapos.recipe.template
 url = ${:_profile_base_location_}/instance.cfg.in
-md5sum = aa565068d290ff3fe0a137b4dad58140
+md5sum = 0e84223169661462f439c164d62c2a6a
 output = ${buildout:directory}/template.cfg
 mode = 0644
 
@@ -89,16 +89,11 @@ output = ${buildout:directory}/template-kvm.cfg
 mode = 0644
 
 [template-kvm-resilient]
-recipe = slapos.recipe.template:jinja2
-template = ${:_profile_base_location_}/instance-kvm-resilient.cfg.jinja2
+recipe = hexagonit.recipe.download
+url = ${:_profile_base_location_}/instance-kvm-resilient.cfg.jinja
+mode = 644
 md5sum = 3ee64c654aae503b93b39e9ccd6d3643
-rendered = ${buildout:directory}/template-kvm-resilient.cfg
-context = key buildout buildout:bin-directory
-          key develop_eggs_directory buildout:develop-eggs-directory
-          key eggs_directory buildout:eggs-directory
-import-list = file parts template-parts:destination
-              file replicated template-replicated:destination
-mode = 0644
+output = ${buildout:directory}/template-kvm-resilient.cfg.jinja
 
 [template-kvm-import]
 recipe = slapos.recipe.template
diff --git a/software/kvm/instance-kvm-resilient.cfg.jinja2 b/software/kvm/instance-kvm-resilient.cfg.jinja2
index ac7a07868..44f56df66 100644
--- a/software/kvm/instance-kvm-resilient.cfg.jinja2
+++ b/software/kvm/instance-kvm-resilient.cfg.jinja2
@@ -1,7 +1,7 @@
 # vim: set ft=cfg:
 
 {% import 'parts' as parts %}
-{% import 'replicated' as replicated %}
+{% import 'replicated' as replicated with context %}
 
 [buildout]
 eggs-directory = {{ eggs_directory }}
@@ -15,28 +15,17 @@ parts +=
 
 {{ replicated.replicate("kvm", "2", "kvm-export", "kvm-import") }}
 
-# Bubble up/down the parameters
+# Bubble down the parameters of the requested instance to the user
 [request-kvm]
+# Note: += doesn't work.
 return =
 # Resilient related parameters
   url ssh-public-key ssh-url notification-id ip
 # KVM related parameters
   backend-url url
-# XXX-Cedric: add all KVM parameters
-config = number authorized-key notify ip-list namebase
-
-# XXX-Cedric: add all KVM parameters
-# config-disk-size = 
 
 [publish-connection-informations]
 recipe = slapos.cookbook:publish
 backend-url = ${request-kvm:connection-backend-url}
 url = ${request-kvm:connection-url}
 
-[slap-parameter]
-# Default parameters for distributed deployment
-# I.e state "backup1 of maria should go there, ..."
-# XXX-Cedric: Hardcoded parameters. Should be dynamically generated.
-# XXX-Cedric: add all KVM parameters
-# config-disk-size = 
-
diff --git a/software/kvm/instance.cfg.in b/software/kvm/instance.cfg.in
index 9a03942e9..e9a1eafab 100644
--- a/software/kvm/instance.cfg.in
+++ b/software/kvm/instance.cfg.in
@@ -4,7 +4,6 @@ parts =
 
 eggs-directory = ${buildout:eggs-directory}
 develop-eggs-directory = ${buildout:develop-eggs-directory}
-offline = true
 
 [switch-softwaretype]
 recipe = slapos.cookbook:softwaretype
@@ -13,9 +12,33 @@ kvm = ${template-kvm:output}
 nbd = ${template-nbd:output}
 frontend = ${template-frontend:output}
 
-kvm-resilient = ${template-kvm-resilient:rendered}
+kvm-resilient = $${dynamic-template-kvm-resilient:rendered}
 kvm-import = ${template-kvm-import:output}
 kvm-export = ${template-kvm-export:output}
 
 frozen = ${instance-frozen:output}
 pull-backup = ${template-pull-backup:output}
+
+[slap-configuration]
+recipe = slapos.cookbook:slapconfiguration.serialised
+computer = $${slap-connection:computer-id}
+partition = $${slap-connection:partition-id}
+url = $${slap-connection:server-url}
+key = $${slap-connection:key-file}
+cert = $${slap-connection:cert-file}
+
+[dynamic-template-kvm-resilient]
+recipe = slapos.recipe.template:jinja2
+template = ${:_profile_base_location_}/instance-kvm-resilient.cfg.jinja2
+md5sum = 1b7a2fcc884649b4d08f238e828899c1
+rendered = $${buildout:directory}/template-kvm-resilient.cfg
+context = key buildout buildout:bin-directory
+          key develop_eggs_directory buildout:develop-eggs-directory
+          key eggs_directory buildout:eggs-directory
+          key slapparameter_dict slap-configuration:configuration
+template-parts-destination = ${template-parts:destination}
+template-replicated-destination = ${template-replicated:destination}
+import-list = file parts :template-parts-destination
+              file replicated :template-replicated-destination
+mode = 0644
+
diff --git a/stack/resilient/buildout.cfg b/stack/resilient/buildout.cfg
index dda0d2eba..885dfadd1 100644
--- a/stack/resilient/buildout.cfg
+++ b/stack/resilient/buildout.cfg
@@ -57,7 +57,7 @@ mode = 0644
 [template-replicated]
 recipe = slapos.recipe.download
 url = ${:_profile_base_location_}/template-replicated.cfg.in
-md5sum = 9e20f283bf709c63c9c6692d5e1f8972
+#md5sum = 9e20f283bf709c63c9c6692d5e1f8972
 mode = 0644
 destination = ${buildout:directory}/template-replicated.cfg.in
 
diff --git a/stack/resilient/template-replicated.cfg.in b/stack/resilient/template-replicated.cfg.in
index 9fe0fc628..ee5de6e72 100644
--- a/stack/resilient/template-replicated.cfg.in
+++ b/stack/resilient/template-replicated.cfg.in
@@ -18,11 +18,18 @@ software-type = {{typeexport}}
 name = {{namebase}}0
 return = ssh-public-key ssh-url notification-id ip
 
-config = number authorized-key notify ip-list namebase
+config =
+# Resilient related parameters
+  number authorized-key notify ip-list namebase
+# Software Instance related parameters
+  {% for parameter_name in slapparameter_dict.keys() %}{{parameter_name}} {% endfor %}
 config-number = 0
 config-authorized-key = {% for id in range(1,nbbackup|int) %} ${request-pbs-{{namebase}}-{{id}}:connection-ssh-key}{% endfor %}
 config-notify = {% for id in range(1,nbbackup|int) %} ${request-pbs-{{namebase}}-{{id}}:connection-notification-url}{% endfor %}
 config-ip-list =
+# Bubble up all the instance parameters to the requested export instance.
+{% for parameter_name, parameter_value in slapparameter_dict.items() %}config-{{parameter_name}} = {{parameter_value}}
+{% endfor %}
 
 
 {% for id in range(1,nbbackup|int) %}
@@ -135,3 +142,4 @@ pbs-{{namebase}}{{id}}-computer-guid =
 {% endfor %}
 
 {% endmacro %}
+
-- 
2.30.9