Commit ed0b7b17 authored by Jose A. Lopes's avatar Jose A. Lopes
Browse files

Extend export OS to override environment



Extend export OS RPC and backend to allow the environment file that
goes in the OS archive to be overridden.  This will be necessary to
introduce new OS environment variables, as well as, override the disk
labels.
Signed-off-by: default avatarJose A. Lopes <jabolopes@google.com>
Reviewed-by: default avatarHrvoje Ribicic <riba@google.com>
parent 808cb0ee
...@@ -3876,7 +3876,7 @@ def ValidateOS(required, osname, checks, osparams, force_variant): ...@@ -3876,7 +3876,7 @@ def ValidateOS(required, osname, checks, osparams, force_variant):
return True return True
def ExportOS(instance): def ExportOS(instance, override_env):
"""Creates a GZIPed tarball with an OS definition and environment. """Creates a GZIPed tarball with an OS definition and environment.
The archive contains a file with the environment variables needed by The archive contains a file with the environment variables needed by
...@@ -3885,6 +3885,10 @@ def ExportOS(instance): ...@@ -3885,6 +3885,10 @@ def ExportOS(instance):
@type instance: L{objects.Instance} @type instance: L{objects.Instance}
@param instance: instance for which the OS definition is exported @param instance: instance for which the OS definition is exported
@type override_env: dict of string to string
@param override_env: if supplied, it overrides the environment on a
key-by-key basis that is part of the archive
@rtype: string @rtype: string
@return: filepath of the archive @return: filepath of the archive
...@@ -3902,6 +3906,8 @@ def ExportOS(instance): ...@@ -3902,6 +3906,8 @@ def ExportOS(instance):
inst_os, temp_dir, result.fail_reason, result.output) inst_os, temp_dir, result.fail_reason, result.output)
env = OSEnvironment(instance, inst_os) env = OSEnvironment(instance, inst_os)
env.update(override_env)
with open(utils.PathJoin(temp_dir, "environment"), "w") as f: with open(utils.PathJoin(temp_dir, "environment"), "w") as f:
for var in env: for var in env:
f.write(var + "=" + env[var] + "\n") f.write(var + "=" + env[var] + "\n")
......
...@@ -468,6 +468,7 @@ _OS_CALLS = [ ...@@ -468,6 +468,7 @@ _OS_CALLS = [
], None, None, "Run a validation routine for a given OS"), ], None, None, "Run a validation routine for a given OS"),
("os_export", SINGLE, None, constants.RPC_TMO_FAST, [ ("os_export", SINGLE, None, constants.RPC_TMO_FAST, [
("instance", ED_INST_DICT, None), ("instance", ED_INST_DICT, None),
("override_env", None, None),
], None, None, "Export an OS for a given instance"), ], None, None, "Export an OS for a given instance"),
] ]
......
...@@ -1000,7 +1000,8 @@ class NodeRequestHandler(http.server.HttpServerHandler): ...@@ -1000,7 +1000,8 @@ class NodeRequestHandler(http.server.HttpServerHandler):
""" """
instance = objects.Instance.FromDict(params[0]) instance = objects.Instance.FromDict(params[0])
return backend.ExportOS(instance) override_env = params[1]
return backend.ExportOS(instance, override_env)
# extstorage ----------------------- # extstorage -----------------------
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment