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