[libvirt] [sandbox PATCH v3 18/22] Add configuration object for environment variables

Cedric Bosdonnat cbosdonnat at suse.com
Tue Aug 18 09:57:31 UTC 2015


On Tue, 2015-08-18 at 06:53 +0000, Eren Yagdiran wrote:
> Add the config gobject to store custom environment variables.
> This will allow creating custom environment variables on a sandbox
> with a parameter formatted like --env key1=val1
> ---
>  libvirt-sandbox/Makefile.am                  |   2 +
>  libvirt-sandbox/libvirt-sandbox-config-all.h |   1 +
>  libvirt-sandbox/libvirt-sandbox-config-env.c | 199 +++++++++++++++++++++++++++
>  libvirt-sandbox/libvirt-sandbox-config-env.h |  78 +++++++++++
>  libvirt-sandbox/libvirt-sandbox-config.c     | 187 ++++++++++++++++++++++++-
>  libvirt-sandbox/libvirt-sandbox-config.h     |  12 ++
>  libvirt-sandbox/libvirt-sandbox.h            |   1 +
>  libvirt-sandbox/libvirt-sandbox.sym          |   6 +
>  8 files changed, 485 insertions(+), 1 deletion(-)
>  create mode 100644 libvirt-sandbox/libvirt-sandbox-config-env.c
>  create mode 100644 libvirt-sandbox/libvirt-sandbox-config-env.h
> 
> diff --git a/libvirt-sandbox/Makefile.am b/libvirt-sandbox/Makefile.am
> index 597803e..5383b0d 100644
> --- a/libvirt-sandbox/Makefile.am
> +++ b/libvirt-sandbox/Makefile.am
> @@ -53,6 +53,7 @@ SANDBOX_RPC_FILES = \
>  SANDBOX_CONFIG_HEADER_FILES = \
>  			libvirt-sandbox-config.h \
>  			libvirt-sandbox-config-disk.h \
> +			libvirt-sandbox-config-env.h \
>  			libvirt-sandbox-config-network.h \
>  			libvirt-sandbox-config-network-address.h \
>  			libvirt-sandbox-config-network-filterref-parameter.h \
> @@ -92,6 +93,7 @@ SANDBOX_CONFIG_SOURCE_FILES = \
>  			libvirt-sandbox-util.c \
>  			libvirt-sandbox-config.c \
>  			libvirt-sandbox-config-disk.c \
> +			libvirt-sandbox-config-env.c \
>  			libvirt-sandbox-config-network.c \
>  			libvirt-sandbox-config-network-address.c \
>  			libvirt-sandbox-config-network-filterref.c \
> diff --git a/libvirt-sandbox/libvirt-sandbox-config-all.h b/libvirt-sandbox/libvirt-sandbox-config-all.h
> index 8cb25c4..756bb3e 100644
> --- a/libvirt-sandbox/libvirt-sandbox-config-all.h
> +++ b/libvirt-sandbox/libvirt-sandbox-config-all.h
> @@ -32,6 +32,7 @@
>  /* Local includes */
>  #include <libvirt-sandbox/libvirt-sandbox-util.h>
>  #include <libvirt-sandbox/libvirt-sandbox-config-disk.h>
> +#include <libvirt-sandbox/libvirt-sandbox-config-env.h>
>  #include <libvirt-sandbox/libvirt-sandbox-config-mount.h>
>  #include <libvirt-sandbox/libvirt-sandbox-config-mount-file.h>
>  #include <libvirt-sandbox/libvirt-sandbox-config-mount-host-bind.h>
> diff --git a/libvirt-sandbox/libvirt-sandbox-config-env.c b/libvirt-sandbox/libvirt-sandbox-config-env.c
> new file mode 100644
> index 0000000..eaf0fb2
> --- /dev/null
> +++ b/libvirt-sandbox/libvirt-sandbox-config-env.c
> @@ -0,0 +1,199 @@
> +/*
> + * libvirt-sandbox-config-env.c: libvirt sandbox configuration
> + *
> + * Copyright (C) 2015 Universitat Politècnica de Catalunya.
> + *
> + * This library is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or (at your option) any later version.
> + *
> + * This library is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this library; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
> + *
> + * Author: Eren Yagdiran <erenyagdiran at gmail.com>
> + */
> +
> +#include <config.h>
> +#include <string.h>
> +
> +#include "libvirt-sandbox/libvirt-sandbox-config-all.h"
> +
> +/**
> + * SECTION: libvirt-sandbox-config-env
> + * @short_description: Disk attachment configuration details
> + * @include: libvirt-sandbox/libvirt-sandbox.h
> + * @see_aloso: #GVirSandboxConfig
> + *
> + * Provides an object to store information about a environment variable in the sandbox
> + *
> + */
> +
> +#define GVIR_SANDBOX_CONFIG_ENV_GET_PRIVATE(obj)                      \
> +    (G_TYPE_INSTANCE_GET_PRIVATE((obj), GVIR_SANDBOX_TYPE_CONFIG_ENV, GVirSandboxConfigEnvPrivate))
> +
> +
> +struct _GVirSandboxConfigEnvPrivate
> +{
> +    gchar *key;
> +    gchar *value;
> +};

Any reason for not having removed that class and used a GHashMap
instead?

--
Cedric

> +G_DEFINE_TYPE(GVirSandboxConfigEnv, gvir_sandbox_config_env, G_TYPE_OBJECT);
> +
> +
> +enum {
> +    PROP_0,
> +    PROP_KEY,
> +    PROP_VALUE
> +};
> +
> +enum {
> +    LAST_SIGNAL
> +};
> +
> +
> +
> +static void gvir_sandbox_config_env_get_property(GObject *object,
> +                                                  guint prop_id,
> +                                                  GValue *value,
> +                                                  GParamSpec *pspec)
> +{
> +    GVirSandboxConfigEnv *config = GVIR_SANDBOX_CONFIG_ENV(object);
> +    GVirSandboxConfigEnvPrivate *priv = config->priv;
> +
> +    switch (prop_id) {
> +    case PROP_KEY:
> +        g_value_set_string(value, priv->key);
> +        break;
> +    case PROP_VALUE:
> +        g_value_set_string(value, priv->value);
> +        break;
> +   default:
> +        G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
> +    }
> +}
> +
> +
> +static void gvir_sandbox_config_env_set_property(GObject *object,
> +                                                  guint prop_id,
> +                                                  const GValue *value,
> +                                                  GParamSpec *pspec)
> +{
> +    GVirSandboxConfigEnv *config = GVIR_SANDBOX_CONFIG_ENV(object);
> +    GVirSandboxConfigEnvPrivate *priv = config->priv;
> +
> +    switch (prop_id) {
> +    case PROP_KEY:
> +        g_free(priv->key);
> +        priv->key = g_value_dup_string(value);
> +        break;
> +    case PROP_VALUE:
> +        g_free(priv->value);
> +        priv->value = g_value_dup_string(value);
> +        break;
> +   default:
> +        G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
> +    }
> +}
> +
> +
> +static void gvir_sandbox_config_env_finalize(GObject *object)
> +{
> +    GVirSandboxConfigEnv *config = GVIR_SANDBOX_CONFIG_ENV(object);
> +    GVirSandboxConfigEnvPrivate *priv = config->priv;
> +
> +    g_free(priv->key);
> +    g_free(priv->value);
> +
> +    G_OBJECT_CLASS(gvir_sandbox_config_env_parent_class)->finalize(object);
> +}
> +
> +
> +static void gvir_sandbox_config_env_class_init(GVirSandboxConfigEnvClass *klass)
> +{
> +    GObjectClass *object_class = G_OBJECT_CLASS(klass);
> +
> +    object_class->finalize = gvir_sandbox_config_env_finalize;
> +    object_class->get_property = gvir_sandbox_config_env_get_property;
> +    object_class->set_property = gvir_sandbox_config_env_set_property;
> +
> +    g_object_class_install_property(object_class,
> +                                    PROP_KEY,
> +                                    g_param_spec_string("key",
> +                                                        "Key",
> +                                                        "The sandbox key property",
> +                                                        NULL,
> +                                                        G_PARAM_READABLE |
> +                                                        G_PARAM_WRITABLE |
> +                                                        G_PARAM_CONSTRUCT_ONLY |
> +                                                        G_PARAM_STATIC_NAME |
> +                                                        G_PARAM_STATIC_NICK |
> +                                                        G_PARAM_STATIC_BLURB));
> +
> +    g_object_class_install_property(object_class,
> +                                    PROP_VALUE,
> +                                    g_param_spec_string("value",
> +                                                        "Value",
> +                                                        "The sandbox value property",
> +                                                        NULL,
> +                                                        G_PARAM_READABLE |
> +                                                        G_PARAM_WRITABLE |
> +                                                        G_PARAM_CONSTRUCT_ONLY |
> +                                                        G_PARAM_STATIC_NAME |
> +                                                        G_PARAM_STATIC_NICK |
> +                                                        G_PARAM_STATIC_BLURB));
> +
> +    g_type_class_add_private(klass, sizeof(GVirSandboxConfigEnvPrivate));
> +}
> +
> +
> +static void gvir_sandbox_config_env_init(GVirSandboxConfigEnv *config)
> +{
> +    config->priv = GVIR_SANDBOX_CONFIG_ENV_GET_PRIVATE(config);
> +}
> +
> +
> +/**
> + * gvir_sandbox_config_env_get_key:
> + * @config: (transfer none): the sandbox env config
> + *
> + * Retrieves the key property for the environment variable
> + *
> + * Returns: (transfer none): the key property
> + */
> +const gchar *gvir_sandbox_config_env_get_key(GVirSandboxConfigEnv *config)
> +{
> +    GVirSandboxConfigEnvPrivate *priv = config->priv;
> +    return priv->key;
> +}
> +
> +
> +/**
> + * gvir_sandbox_config_disk_get_value:
> + * @config: (transfer none): the sandbox env config
> + *
> + * Retrieves the value property for the environment variable
> + *
> + * Returns: (transfer none): the value property
> + */
> +const gchar *gvir_sandbox_config_env_get_value(GVirSandboxConfigEnv *config)
> +{
> +    GVirSandboxConfigEnvPrivate *priv = config->priv;
> +    return priv->value;
> +}
> +
> +/*
> + * Local variables:
> + *  c-indent-level: 4
> + *  c-basic-offset: 4
> + *  indent-tabs-mode: nil
> + *  tab-width: 8
> + * End:
> + */
> diff --git a/libvirt-sandbox/libvirt-sandbox-config-env.h b/libvirt-sandbox/libvirt-sandbox-config-env.h
> new file mode 100644
> index 0000000..1386f10
> --- /dev/null
> +++ b/libvirt-sandbox/libvirt-sandbox-config-env.h
> @@ -0,0 +1,78 @@
> +/*
> + * libvirt-sandbox-config-env.h: libvirt sandbox configuration
> + *
> + * Copyright (C) 2015 Universitat Politècnica de Catalunya.
> + *
> + * This library is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or (at your option) any later version.
> + *
> + * This library is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this library; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
> + *
> + * Author: Eren Yagdiran <erenyagdiran at gmail.com>
> + */
> +
> +#if !defined(__LIBVIRT_SANDBOX_H__) && !defined(LIBVIRT_SANDBOX_BUILD)
> +#error "Only <libvirt-sandbox/libvirt-sandbox.h> can be included directly."
> +#endif
> +
> +#ifndef __LIBVIRT_SANDBOX_CONFIG_ENV_H__
> +#define __LIBVIRT_SANDBOX_CONFIG_ENV_H__
> +
> +G_BEGIN_DECLS
> +
> +#define GVIR_SANDBOX_TYPE_CONFIG_ENV             (gvir_sandbox_config_env_get_type ())
> +#define GVIR_SANDBOX_CONFIG_ENV(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), GVIR_SANDBOX_TYPE_CONFIG_ENV, GVirSandboxConfigEnv))
> +#define GVIR_SANDBOX_CONFIG_ENV_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), GVIR_SANDBOX_TYPE_CONFIG_ENV, GVirSandboxConfigEnvClass))
> +#define GVIR_SANDBOX_IS_CONFIG_ENV(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GVIR_SANDBOX_TYPE_CONFIG_ENV))
> +#define GVIR_SANDBOX_IS_CONFIG_ENV_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), GVIR_SANDBOX_TYPE_CONFIG_ENV))
> +#define GVIR_SANDBOX_CONFIG_ENV_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), GVIR_SANDBOX_TYPE_CONFIG_ENV, GVirSandboxConfigEnvClass))
> +
> +#define GVIR_SANDBOX_TYPE_CONFIG_ENV_HANDLE      (gvir_sandbox_config_env_handle_get_type ())
> +
> +typedef struct _GVirSandboxConfigEnv GVirSandboxConfigEnv;
> +typedef struct _GVirSandboxConfigEnvPrivate GVirSandboxConfigEnvPrivate;
> +typedef struct _GVirSandboxConfigEnvClass GVirSandboxConfigEnvClass;
> +
> +struct _GVirSandboxConfigEnv
> +{
> +    GObject parent;
> +
> +    GVirSandboxConfigEnvPrivate *priv;
> +
> +    /* Do not add fields to this struct */
> +};
> +
> +struct _GVirSandboxConfigEnvClass
> +{
> +    GObjectClass parent_class;
> +
> +    gpointer padding[LIBVIRT_SANDBOX_CLASS_PADDING];
> +};
> +
> +GType gvir_sandbox_config_env_get_type(void);
> +
> +const gchar *gvir_sandbox_config_env_get_key(GVirSandboxConfigEnv *config);
> +
> +const gchar *gvir_sandbox_config_env_get_value(GVirSandboxConfigEnv *config);
> +
> +G_END_DECLS
> +
> +#endif /* __LIBVIRT_SANDBOX_CONFIG_DISK_H__ */
> +
> +/*
> + * Local variables:
> + *  c-indent-level: 4
> + *  c-basic-offset: 4
> + *  indent-tabs-mode: nil
> + *  tab-width: 8
> + * End:
> + */
> diff --git a/libvirt-sandbox/libvirt-sandbox-config.c b/libvirt-sandbox/libvirt-sandbox-config.c
> index 2506072..980a50b 100644
> --- a/libvirt-sandbox/libvirt-sandbox-config.c
> +++ b/libvirt-sandbox/libvirt-sandbox-config.c
> @@ -64,6 +64,7 @@ struct _GVirSandboxConfigPrivate
>      GList *networks;
>      GList *mounts;
>      GList *disks;
> +    GList *envs;
>  
>      gchar *secLabel;
>      gboolean secDynamic;
> @@ -276,6 +277,9 @@ static void gvir_sandbox_config_finalize(GObject *object)
>      g_list_foreach(priv->networks, (GFunc)g_object_unref, NULL);
>      g_list_free(priv->networks);
>  
> +    g_list_foreach(priv->envs, (GFunc)g_object_unref, NULL);
> +    g_list_free(priv->envs);
> +
>      g_list_foreach(priv->disks, (GFunc)g_object_unref, NULL);
>      g_list_free(priv->disks);
>  
> @@ -1144,6 +1148,114 @@ gboolean gvir_sandbox_config_has_networks(GVirSandboxConfig *config)
>      return priv->networks ? TRUE : FALSE;
>  }
>  
> +/**
> + * gvir_sandbox_config_add_env:
> + * @config: (transfer none): the sandbox config
> + * @dsk: (transfer none): the env configuration
> + *
> + * Adds a new environment variable to the sandbox
> + *
> + */
> +void gvir_sandbox_config_add_env(GVirSandboxConfig *config,
> +                                 GVirSandboxConfigEnv *env)
> +{
> +    GVirSandboxConfigPrivate *priv = config->priv;
> +
> +    g_object_ref(env);
> +
> +    priv->envs = g_list_append(priv->envs, env);
> +}
> +
> +/**
> + * gvir_sandbox_config_get_envs:
> + * @config: (transfer none): the sandbox config
> + *
> + * Retrieves the list of custom environment list in the sandbox
> + *
> + * Returns: (transfer full) (element-type GVirSandboxConfigMount): the list of environment variables
> + */
> +GList *gvir_sandbox_config_get_envs(GVirSandboxConfig *config)
> +{
> +    GVirSandboxConfigPrivate *priv = config->priv;
> +    g_list_foreach(priv->envs, (GFunc)g_object_ref, NULL);
> +    return g_list_copy(priv->envs);
> +}
> +
> +/**
> + * gvir_sandbox_config_add_env_strv:
> + * @config: (transfer none): the sandbox config
> + * @envs: (transfer none)(array zero-terminated=1): the list of environment variables
> + *
> + * Parses @envs whose elements are in the format KEY=VALUE
> + *
> + * --env KEY=VALUE
> + */
> +gboolean gvir_sandbox_config_add_env_strv(GVirSandboxConfig *config,
> +                                          gchar **envs,
> +                                          GError **error)
> +{
> +    gsize i = 0;
> +    while (envs && envs[i]) {
> +        if (!gvir_sandbox_config_add_env_opts(config,
> +                                               envs[i],
> +                                               error))
> +            return FALSE;
> +        i++;
> +    }
> +    return TRUE;
> +}
> +
> +/**
> + * gvir_sandbox_config_add_env_opts:
> + * @config: (transfer none): the sandbox config
> + * @disk: (transfer none): the env config
> + *
> + * Parses @env in the format KEY=VALUE
> + * creating #GVirSandboxConfigEnv instances for each element. For
> + * example
> + *
> + * --env KEY=VALUE
> + */
> +
> +gboolean gvir_sandbox_config_add_env_opts(GVirSandboxConfig *config,
> +                                           const char *opt,
> +                                           GError **error)
> +{
> +    gchar *tmp = NULL;
> +    gchar *key = NULL;
> +    gchar *value = NULL;
> +    GVirSandboxConfigEnv *envConfig;
> +
> +    if (!(tmp = g_strdup(opt)))
> +        return FALSE;
> +
> +    key  = strchr(tmp, '=');
> +
> +    if (!key) {
> +        g_set_error(error, GVIR_SANDBOX_CONFIG_ERROR, 0,
> +                    _("Wrong environment format on %s"), opt);
> +        return FALSE;
> +    }
> +
> +    *key = '\0';
> +    value = key + 1;
> +    envConfig = GVIR_SANDBOX_CONFIG_ENV(g_object_new(GVIR_SANDBOX_TYPE_CONFIG_ENV,
> +                                                "key", tmp,
> +                                                "value", value,
> +                                                NULL));
> +
> +    gvir_sandbox_config_add_env(config, envConfig);
> +
> +    g_object_unref(envConfig);
> +    g_free(tmp);
> +    return TRUE;
> +}
> +
> +gboolean gvir_sandbox_config_has_envs(GVirSandboxConfig *config)
> +{
> +    GVirSandboxConfigPrivate *priv = config->priv;
> +    return priv->envs != NULL;
> +}
>  
>  /**
>   * gvir_sandbox_config_add_disk:
> @@ -1163,7 +1275,6 @@ void gvir_sandbox_config_add_disk(GVirSandboxConfig *config,
>      priv->disks = g_list_append(priv->disks, dsk);
>  }
>  
> -
>  /**
>   * gvir_sandbox_config_get_disks:
>   * @config: (transfer none): the sandbox config
> @@ -1949,6 +2060,44 @@ static GVirSandboxConfigMount *gvir_sandbox_config_load_config_mount(GKeyFile *f
>      goto cleanup;
>  }
>  
> +static GVirSandboxConfigEnv *gvir_sandbox_config_load_config_env(GKeyFile *file,
> +                                                                   guint i,
> +                                                                   GError **error)
> +{
> +    GVirSandboxConfigEnv *config = NULL;
> +    gchar *index = NULL;
> +    gchar *key = NULL;
> +    gchar *value = NULL;
> +    GError *e = NULL;
> +
> +    index = g_strdup_printf("env.%u", i);
> +    if ((key = g_key_file_get_string(file, index, "key", &e)) == NULL) {
> +        if (e->code == G_KEY_FILE_ERROR_GROUP_NOT_FOUND) {
> +            g_error_free(e);
> +            return NULL;
> +        }
> +        g_error_free(e);
> +        g_set_error(error, GVIR_SANDBOX_CONFIG_ERROR, 0,
> +                    "%s", _("Missing environment key in config file"));
> +        goto cleanup;
> +    }
> +    if ((value = g_key_file_get_string(file, index, "value", NULL)) == NULL) {
> +        g_set_error(error, GVIR_SANDBOX_CONFIG_ERROR, 0,
> +                    "%s", _("Missing environment value in config file"));
> +        goto cleanup;
> +    }
> +
> +    config = GVIR_SANDBOX_CONFIG_ENV(g_object_new(GVIR_SANDBOX_TYPE_CONFIG_ENV,
> +                                                   "key", key,
> +                                                   "value", value,
> +                                                   NULL));
> +
> + cleanup:
> +    g_free(key);
> +    g_free(value);
> +    g_free(index);
> +    return config;
> +}
>  
>  static GVirSandboxConfigDisk *gvir_sandbox_config_load_config_disk(GKeyFile *file,
>                                                                     guint i,
> @@ -2244,6 +2393,14 @@ static gboolean gvir_sandbox_config_load_config(GVirSandboxConfig *config,
>              priv->mounts = g_list_append(priv->mounts, mount);
>      }
>  
> +    for (i = 0 ; i < 1024 ; i++) {
> +        GVirSandboxConfigEnv *env;
> +        if (!(env = gvir_sandbox_config_load_config_env(file, i, error)) &&
> +            *error)
> +            goto cleanup;
> +        if (env)
> +            priv->envs = g_list_append(priv->envs, env);
> +    }
>  
>      for (i = 0 ; i < 1024 ; i++) {
>          GVirSandboxConfigDisk *disk;
> @@ -2274,6 +2431,24 @@ static gboolean gvir_sandbox_config_load_config(GVirSandboxConfig *config,
>      return ret;
>  }
>  
> +static void gvir_sandbox_config_save_config_env(GVirSandboxConfigEnv *config,
> +                                                 GKeyFile *file,
> +                                                 guint i)
> +{
> +    gchar *index = NULL;
> +    gchar *key = NULL;
> +    gchar *value = NULL;
> +
> +    index = g_strdup_printf("env.%u", i);
> +    key = g_strdup(gvir_sandbox_config_env_get_key(config));
> +    value = g_strdup(gvir_sandbox_config_env_get_value(config));
> +    g_key_file_set_string(file, index, "key",key);
> +    g_key_file_set_string(file, index, "value",value);
> +
> +    g_free(index);
> +    g_free(key);
> +    g_free(value);
> +}
>  
>  static void gvir_sandbox_config_save_config_disk(GVirSandboxConfigDisk *config,
>                                                   GKeyFile *file,
> @@ -2485,6 +2660,16 @@ static void gvir_sandbox_config_save_config(GVirSandboxConfig *config,
>      }
>  
>      i = 0;
> +    tmp = priv->envs;
> +    while (tmp) {
> +        gvir_sandbox_config_save_config_env(tmp->data,
> +                                             file,
> +                                             i);
> +        tmp = tmp->next;
> +        i++;
> +    }
> +
> +    i = 0;
>      tmp = priv->disks;
>      while (tmp) {
>          gvir_sandbox_config_save_config_disk(tmp->data,
> diff --git a/libvirt-sandbox/libvirt-sandbox-config.h b/libvirt-sandbox/libvirt-sandbox-config.h
> index 2c5f0a6..d39bb2b 100644
> --- a/libvirt-sandbox/libvirt-sandbox-config.h
> +++ b/libvirt-sandbox/libvirt-sandbox-config.h
> @@ -122,6 +122,18 @@ gboolean gvir_sandbox_config_add_network_strv(GVirSandboxConfig *config,
>                                                GError **error);
>  gboolean gvir_sandbox_config_has_networks(GVirSandboxConfig *config);
>  
> +void gvir_sandbox_config_add_env(GVirSandboxConfig *config,
> +                                  GVirSandboxConfigEnv *env);
> +GList *gvir_sandbox_config_get_envs(GVirSandboxConfig *config);
> +gboolean gvir_sandbox_config_add_env_strv(GVirSandboxConfig *config,
> +                                           gchar **envs,
> +                                           GError **error);
> +gboolean gvir_sandbox_config_add_env_opts(GVirSandboxConfig *config,
> +                                           const char *env,
> +                                           GError **error);
> +gboolean gvir_sandbox_config_has_envs(GVirSandboxConfig *config);
> +
> +
>  void gvir_sandbox_config_add_disk(GVirSandboxConfig *config,
>                                    GVirSandboxConfigDisk *dsk);
>  GList *gvir_sandbox_config_get_disks(GVirSandboxConfig *config);
> diff --git a/libvirt-sandbox/libvirt-sandbox.h b/libvirt-sandbox/libvirt-sandbox.h
> index 20dc871..05d7485 100644
> --- a/libvirt-sandbox/libvirt-sandbox.h
> +++ b/libvirt-sandbox/libvirt-sandbox.h
> @@ -32,6 +32,7 @@
>  #include <libvirt-sandbox/libvirt-sandbox-util.h>
>  #include <libvirt-sandbox/libvirt-sandbox-enum-types.h>
>  #include <libvirt-sandbox/libvirt-sandbox-config-disk.h>
> +#include <libvirt-sandbox/libvirt-sandbox-config-env.h>
>  #include <libvirt-sandbox/libvirt-sandbox-config-mount.h>
>  #include <libvirt-sandbox/libvirt-sandbox-config-mount-file.h>
>  #include <libvirt-sandbox/libvirt-sandbox-config-mount-host-bind.h>
> diff --git a/libvirt-sandbox/libvirt-sandbox.sym b/libvirt-sandbox/libvirt-sandbox.sym
> index 6f8097a..a09a6c2 100644
> --- a/libvirt-sandbox/libvirt-sandbox.sym
> +++ b/libvirt-sandbox/libvirt-sandbox.sym
> @@ -26,6 +26,12 @@ LIBVIRT_SANDBOX_0.6.0 {
>  	gvir_sandbox_config_disk_get_type;
>  	gvir_sandbox_config_has_disks;
>  
> +	gvir_sandbox_config_add_env;
> +	gvir_sandbox_config_add_env_strv;
> +	gvir_sandbox_config_add_env_opts;
> +	gvir_sandbox_config_env_get_type;
> +	gvir_sandbox_config_has_envs;
> +
>  	gvir_sandbox_config_mount_add_include;
>  	gvir_sandbox_config_mount_get_includes;
>  	gvir_sandbox_config_mount_get_target;
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list





More information about the libvir-list mailing list