[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