[libvirt] [PATCH sandbox v5 19/20] Image: Add custom environment support
Cedric Bosdonnat
cbosdonnat at suse.com
Wed Sep 9 12:15:26 UTC 2015
On Tue, 2015-09-08 at 17:29 +0100, Daniel P. Berrange wrote:
> From: Eren Yagdiran <erenyagdiran at gmail.com>
>
> Any custom key=value pair can be used as a custom environment variable
> in virt-sandbox-image.
> e.g virt-sandbox-image run ubuntu /var/lib/libvirt/templates -c lxc:/// -i /bin/bash -e key1=val1
>
> Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
> ---
> libvirt-sandbox/image/cli.py | 16 ++++++++++++++++
> libvirt-sandbox/image/sources/DockerSource.py | 11 +++++++++++
> libvirt-sandbox/image/sources/Source.py | 10 ++++++++++
> 3 files changed, 37 insertions(+)
>
> diff --git a/libvirt-sandbox/image/cli.py b/libvirt-sandbox/image/cli.py
> index 30e2558..c17b577 100755
> --- a/libvirt-sandbox/image/cli.py
> +++ b/libvirt-sandbox/image/cli.py
> @@ -129,6 +129,19 @@ def run(args):
> params.append('-N')
> params.append(networkArgs)
>
> + allEnvs = source.get_env(args.template, args.template_dir)
> + envArgs = args.env
> + if envArgs is not None:
> + allEnvs = allEnvs + envArgs
> + for env in allEnvs:
> + envsplit = env.split("=")
> + envlen = len(envsplit)
> + if envlen == 2:
> + params.append("--env")
> + params.append(env)
> + else:
> + pass
> +
> cmd = cmd + params + ['--'] + commandToRun
> subprocess.call(cmd)
> os.unlink(diskfile)
> @@ -222,6 +235,9 @@ def gen_run_args(subparser):
> help=_("command arguments to run"))
> parser.add_argument("-N","--network",
> help=_("Network params for running template"))
> + parser.add_argument("-e","--env",action="append",
> + help=_("Environment params for running template"))
> +
> parser.set_defaults(func=run)
>
> def main():
> diff --git a/libvirt-sandbox/image/sources/DockerSource.py b/libvirt-sandbox/image/sources/DockerSource.py
> index 31c1d80..4455198 100644
> --- a/libvirt-sandbox/image/sources/DockerSource.py
> +++ b/libvirt-sandbox/image/sources/DockerSource.py
> @@ -38,6 +38,12 @@ class DockerConfParser():
> return self.json_data['config']['Cmd']
> def getEntrypoint(self):
> return self.json_data['config']['Entrypoint']
> + def getEnvs(self):
> + lst = self.json_data['config']['Env']
> + if lst is not None and isinstance(lst,list):
> + return lst
> + else:
> + return []
>
> class DockerSource(Source):
>
> @@ -388,5 +394,10 @@ class DockerSource(Source):
> else:
> return entrypoint + cmd
>
> + def get_env(self, templatename, templatedir):
> + configfile, diskfile = self._get_template_data(templatename, templatedir)
> + configParser = DockerConfParser(configfile)
> + return configParser.getEnvs()
> +
> def debug(msg):
> sys.stderr.write(msg)
> diff --git a/libvirt-sandbox/image/sources/Source.py b/libvirt-sandbox/image/sources/Source.py
> index a5d3844..8a21f90 100644
> --- a/libvirt-sandbox/image/sources/Source.py
> +++ b/libvirt-sandbox/image/sources/Source.py
> @@ -95,3 +95,13 @@ class Source():
> of a template.
> """
> pass
> +
> + @abstractmethod
> + def get_env(self,templatename, templatedir):
> + """
> + :param templatename: name of the template image to download
> + :param templatedir: local directory path in which to find template
> +
> + Get the dict of environment variables to set
> + """
> + pass
ACK
--
Cedric
More information about the libvir-list
mailing list