[libvirt] [sandbox PATCH v2 15/19] Add configuration object for environment variables

Eren Yagdiran erenyagdiran at gmail.com
Tue Aug 4 20:11:21 UTC 2015


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;
+};
+
+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;
-- 
2.1.0




More information about the libvir-list mailing list