[virt-tools-list] [PATCH 2/2] install script: add config_param entity
Fabiano Fidêncio
fabiano at fidencio.org
Mon Aug 13 07:37:37 UTC 2012
Now we need to set what are the configs that will be used in each
script. To set it, just add, in the .xml's script file:
<config>
<param name="..." policy="mandatory"|"optional"/>
</config>
For manage these configs, a new entity was created, called:
OsinfoInstallConfigParam. And the OsinfoInstallScript entity is, now,
keeping an internal list of the OsinfoInstallConfigParam entity.
With these changes, applications that uses/will use libosinfo can check
if an install script has some config to be set using, consulting by:
- ConfigParam entity:
osinfo_install_script_has_config_param(OsinfoInstallScript *script,
const OsinfoInstallConfigParameter config_param);
- Parameter name:
osinfo_install_script_has_config_param_name(OsinfoInstallScript *script,
const gchar* name);
---
data/install-scripts/fedora.xml | 6 +
data/install-scripts/windows-sif.xml | 5 +
data/install-scripts/windows-unattend.xml | 9 ++
data/schemas/libosinfo.rng | 12 ++
docs/reference/Libosinfo.types | 1 +
osinfo/Makefile.am | 1 +
osinfo/libosinfo.syms | 8 +
osinfo/osinfo.h | 1 +
osinfo/osinfo_install_config_param.c | 234 ++++++++++++++++++++++++++++++
osinfo/osinfo_install_config_param.h | 83 +++++++++++
osinfo/osinfo_install_script.c | 49 ++++++-
osinfo/osinfo_install_script.h | 12 +-
osinfo/osinfo_loader.c | 36 +++++
13 files changed, 455 insertions(+), 2 deletions(-)
create mode 100644 osinfo/osinfo_install_config_param.c
create mode 100644 osinfo/osinfo_install_config_param.h
diff --git a/data/install-scripts/fedora.xml b/data/install-scripts/fedora.xml
index 338a570..a608cdb 100644
--- a/data/install-scripts/fedora.xml
+++ b/data/install-scripts/fedora.xml
@@ -1,6 +1,12 @@
<libosinfo version="0.0.1">
<install-script id='http://fedoraproject.org/scripts/fedora/jeos'>
<profile>jeos</profile>
+ <config>
+ <param name="admin-password" policy="optional"/>
+ <param name="l10n-keyboard" policy="optional"/>
+ <param name="l10n-language" policy="optional"/>
+ <param name="l10n-timezone" policy="optional"/>
+ </config>
<template filename="fedora.ks">
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
diff --git a/data/install-scripts/windows-sif.xml b/data/install-scripts/windows-sif.xml
index 46b24ae..77fc2c5 100644
--- a/data/install-scripts/windows-sif.xml
+++ b/data/install-scripts/windows-sif.xml
@@ -1,6 +1,11 @@
<libosinfo version="0.0.1">
<install-script id='http://microsoft.com/windows/sif'>
<profile>jeos</profile>
+ <config>
+ <param name="admin-password" policy="optional"/>
+ <param name="reg-product-key" policy="required"/>
+ <param name="user-realname" policy="required"/>
+ </config>
<template filename="windows.sif">
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
diff --git a/data/install-scripts/windows-unattend.xml b/data/install-scripts/windows-unattend.xml
index 20e3e23..5698bc8 100644
--- a/data/install-scripts/windows-unattend.xml
+++ b/data/install-scripts/windows-unattend.xml
@@ -1,6 +1,15 @@
<libosinfo version="0.0.1">
<install-script id='http://microsoft.com/windows/unattend'>
<profile>jeos</profile>
+ <config>
+ <param name="admin-password" policy="optional"/>
+ <param name="hardware-arch" policy="optional"/>
+ <param name="l10n-language" policy="optional"/>
+ <param name="user-login" policy="optional"/>
+ <param name="user-password" policy="optional"/>
+ <param name="user-realname" policy="optional"/>
+ <param name="reg-product-key" policy="required"/>
+ </config>
<template filename="windows.xml">
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
diff --git a/data/schemas/libosinfo.rng b/data/schemas/libosinfo.rng
index 7c8d7f7..1392f74 100644
--- a/data/schemas/libosinfo.rng
+++ b/data/schemas/libosinfo.rng
@@ -410,6 +410,12 @@
<element name='profile'>
<text/>
</element>
+ <element name='config'>
+ <attribute name="name"/>
+ <attribute name="policy">
+ <ref name='policies'/>
+ </attribute>
+ </element>
<element name='product-key-format'>
<text/>
</element>
@@ -479,4 +485,10 @@
<param name="pattern">\w+://.*</param>
</data>
</define>
+
+ <define name='policies'>
+ <data type="string">
+ <param name="pattern">required|optional</param>
+ </data>
+ </define>
</grammar>
diff --git a/docs/reference/Libosinfo.types b/docs/reference/Libosinfo.types
index faf8643..8744ee6 100644
--- a/docs/reference/Libosinfo.types
+++ b/docs/reference/Libosinfo.types
@@ -9,6 +9,7 @@ osinfo_devicelist_get_type
osinfo_entity_get_type
osinfo_filter_get_type
osinfo_install_config_get_type
+osinfo_install_config_param_get_type
osinfo_install_script_get_type
osinfo_install_scriptlist_get_type
osinfo_list_get_type
diff --git a/osinfo/Makefile.am b/osinfo/Makefile.am
index f4aea47..68c4172 100644
--- a/osinfo/Makefile.am
+++ b/osinfo/Makefile.am
@@ -89,6 +89,7 @@ libosinfo_1_0_la_SOURCES = \
osinfo_devicelinklist.c \
osinfo_devicelinkfilter.c \
osinfo_install_config.c \
+ osinfo_install_config_param.c \
osinfo_install_script.c \
osinfo_install_scriptlist.c \
osinfo_product.c \
diff --git a/osinfo/libosinfo.syms b/osinfo/libosinfo.syms
index ddf736e..1e55d0e 100644
--- a/osinfo/libosinfo.syms
+++ b/osinfo/libosinfo.syms
@@ -264,6 +264,8 @@ LIBOSINFO_0.2.0 {
osinfo_install_config_set_user_administrator;
osinfo_install_config_set_user_autologin;
osinfo_install_config_set_hostname;
+ osinfo_install_config_param_get_type;
+ osinfo_install_config_param_new;
osinfo_install_script_set_output_prefix;
osinfo_install_script_get_type;
osinfo_install_script_new;
@@ -276,12 +278,18 @@ LIBOSINFO_0.2.0 {
osinfo_install_script_generate_output_async;
osinfo_install_script_get_profile;
osinfo_install_script_get_uri;
+ osinfo_install_script_has_config_param;
+ osinfo_install_script_has_config_param_name;
+ osinfo_install_script_get_config_param_list;
osinfo_install_scriptlist_new;
osinfo_install_scriptlist_new_filtered;
osinfo_install_scriptlist_new_union;
osinfo_install_scriptlist_new_intersection;
osinfo_install_scriptlist_new_copy;
osinfo_install_scriptlist_get_type;
+ osinfo_install_config_param_new;
+ osinfo_install_config_param_get_name;
+ osinfo_install_config_param_get_policy;
osinfo_db_get_install_script;
osinfo_db_add_install_script;
osinfo_db_get_install_script_list;
diff --git a/osinfo/osinfo.h b/osinfo/osinfo.h
index aa06095..204569b 100644
--- a/osinfo/osinfo.h
+++ b/osinfo/osinfo.h
@@ -34,6 +34,7 @@
#include <osinfo/osinfo_devicelinklist.h>
#include <osinfo/osinfo_devicelinkfilter.h>
#include <osinfo/osinfo_install_config.h>
+#include <osinfo/osinfo_install_config_param.h>
#include <osinfo/osinfo_install_script.h>
#include <osinfo/osinfo_install_scriptlist.h>
#include <osinfo/osinfo_productlist.h>
diff --git a/osinfo/osinfo_install_config_param.c b/osinfo/osinfo_install_config_param.c
new file mode 100644
index 0000000..8a0ab56
--- /dev/null
+++ b/osinfo/osinfo_install_config_param.c
@@ -0,0 +1,234 @@
+/*
+ * libosinfo:
+ *
+ * Copyright (C) 2009-2012 Red Hat, Inc.
+ *
+ * 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
+ *
+ * Authors:
+ * Fabiano Fidêncio <fabiano at fidencio.org>
+ */
+
+#include <config.h>
+
+#include <osinfo/osinfo.h>
+
+G_DEFINE_TYPE (OsinfoInstallConfigParam, osinfo_install_config_param, OSINFO_TYPE_ENTITY);
+
+#define OSINFO_INSTALL_CONFIG_PARAM_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), OSINFO_TYPE_INSTALL_CONFIG_PARAM, OsinfoInstallConfigParamPrivate))
+
+/**
+ * SECTION:osinfo_install_config_param
+ * @short_description: OS install configuration parameters (and its policies)
+ * @see_also: #OsinfoInstallScript, #OsinfoInstallSciptConfig
+ *
+ * #OsinfoInstallConfigParam is an entity for representing all parameters that
+ * can be set in an automated installation. It is used to help applications to
+ * generate an automated installation script
+ */
+
+struct _OsinfoInstallConfigParamPrivate
+{
+ gchar *name;
+ OsinfoInstallConfigParamPolicy policy;
+};
+
+enum {
+ PROP_0,
+
+ PROP_NAME,
+ PROP_POLICY,
+};
+
+static void
+osinfo_install_config_param_set_property(GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ OsinfoInstallConfigParam *config_param =
+ OSINFO_INSTALL_CONFIG_PARAM (object);
+
+ switch (property_id)
+ {
+ case PROP_NAME:
+ config_param->priv->name = g_value_dup_string(value);
+ break;
+ case PROP_POLICY:
+ {
+ const gchar *policy = g_value_get_string(value);
+ if (g_strcmp0(policy, "required") == 0)
+ config_param->priv->policy =
+ OSINFO_INSTALL_CONFIG_PARAM_POLICY_REQUIRED;
+ else if (g_strcmp0(policy, "optional") == 0)
+ config_param->priv->policy =
+ OSINFO_INSTALL_CONFIG_PARAM_POLICY_OPTIONAL;
+ break;
+ }
+ default:
+ /* We don't have any other property... */
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+osinfo_install_config_param_get_property(GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ OsinfoInstallConfigParam *config_param =
+ OSINFO_INSTALL_CONFIG_PARAM (object);
+
+ switch (property_id)
+ {
+ case PROP_NAME:
+ g_value_set_string(value, config_param->priv->name);
+ break;
+ case PROP_POLICY:
+ g_value_set_enum(value, config_param->priv->policy);
+ break;
+ default:
+ /* We don't have any other property... */
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+
+static void
+osinfo_install_config_param_finalize(GObject *object)
+{
+ OsinfoInstallConfigParam *config_param =
+ OSINFO_INSTALL_CONFIG_PARAM(object);
+ g_free(config_param->priv->name);
+
+ /* Chain up to the parent class */
+ G_OBJECT_CLASS (osinfo_install_config_param_parent_class)->finalize (object);
+}
+
+/* Init functions */
+static void
+osinfo_install_config_param_class_init (OsinfoInstallConfigParamClass *klass)
+{
+ GObjectClass *g_klass = G_OBJECT_CLASS (klass);
+ GParamSpec *pspec;
+
+ g_klass->set_property = osinfo_install_config_param_set_property;
+ g_klass->get_property = osinfo_install_config_param_get_property;
+
+ /**
+ * OsinfoInstallConfigParam:name:
+ *
+ * The name of the configuration parameter.
+ **/
+ pspec = g_param_spec_string("name",
+ "Name",
+ "Parameter name",
+ NULL,
+ G_PARAM_WRITABLE |
+ G_PARAM_READABLE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_NAME |
+ G_PARAM_STATIC_NICK |
+ G_PARAM_STATIC_BLURB);
+ g_object_class_install_property(g_klass,
+ PROP_NAME,
+ pspec);
+ /**
+ * OsinfoInstallConfigParam:policy:
+ *
+ * The policy of the configuration parameter.
+ **/
+ pspec = g_param_spec_string("policy",
+ "Policy",
+ "Parameter policy",
+ NULL,
+ G_PARAM_WRITABLE |
+ G_PARAM_READABLE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_NAME |
+ G_PARAM_STATIC_NICK |
+ G_PARAM_STATIC_BLURB);
+ g_object_class_install_property(g_klass,
+ PROP_POLICY,
+ pspec);
+
+
+ g_klass->finalize = osinfo_install_config_param_finalize;
+
+ g_type_class_add_private (klass, sizeof (OsinfoInstallConfigParamPrivate));
+}
+
+static void
+osinfo_install_config_param_init (OsinfoInstallConfigParam *config_param)
+{
+ OsinfoInstallConfigParamPrivate *priv;
+ config_param->priv = priv =
+ OSINFO_INSTALL_CONFIG_PARAM_GET_PRIVATE(config_param);
+
+ config_param->priv->name = NULL;
+ config_param->priv->policy = OSINFO_INSTALL_CONFIG_PARAM_POLICY_NONE;
+}
+
+
+/**
+ * osinfo_install_config_param_new:
+ * @name: the configuration parameter name
+ * @policy: the configuration parameter policy
+ *
+ * Construct a new configuration parameter to a #OsinfoInstallScript.
+ *
+ * Returns: (transfer full): the new configuration parameter
+ */
+OsinfoInstallConfigParam *osinfo_install_config_param_new(const gchar *name,
+ const gchar *policy)
+{
+ return g_object_new(OSINFO_TYPE_INSTALL_CONFIG_PARAM,
+ "name", name,
+ "policy", policy,
+ NULL);
+}
+
+/**
+ * osinfo_install_config_param_get_name:
+ * @config_param: the configuration parameter
+ *
+ * Returns: (transfer none): the name of the configuration parameter
+ */
+const gchar *osinfo_install_config_param_get_name(const OsinfoInstallConfigParam *config_param)
+{
+ return config_param->priv->name;
+}
+
+/**
+ * osinfo_install_config_param_get_policy:
+ * @config_param: the configuration parameter
+ *
+ * Returns: (transfer none): the policy of the configuration parameter
+ */
+OsinfoInstallConfigParamPolicy osinfo_install_config_param_get_policy(const OsinfoInstallConfigParam *config_param)
+{
+ return config_param->priv->policy;
+}
+
+/*
+ * Local variables:
+ * indent-tabs-mode: nil
+ * c-indent-level: 4
+ * c-basic-offset: 4
+ * End:
+ */
diff --git a/osinfo/osinfo_install_config_param.h b/osinfo/osinfo_install_config_param.h
new file mode 100644
index 0000000..dce47bc
--- /dev/null
+++ b/osinfo/osinfo_install_config_param.h
@@ -0,0 +1,83 @@
+/*
+ * libosinfo: OS installation configuration
+ *
+ * Copyright (C) 2009-2012 Red Hat, Inc.
+ *
+ * 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
+ *
+ * Authors:
+ * Fabiano Fidêncio <fabiano at fidencio.org>
+ */
+
+#include <glib-object.h>
+
+#ifndef __OSINFO_INSTALL_CONFIG_PARAM_H__
+#define __OSINFO_INSTALL_CONFIG_PARAM_H__
+
+/*
+ * Type macros.
+ */
+#define OSINFO_TYPE_INSTALL_CONFIG_PARAM (osinfo_install_config_param_get_type ())
+#define OSINFO_INSTALL_CONFIG_PARAM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), OSINFO_TYPE_INSTALL_CONFIG_PARAM, OsinfoInstallConfigParam))
+#define OSINFO_IS_INSTALL_CONFIG_PARAM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), OSINFO_TYPE_INSTALL_CONFIG_PARAM))
+#define OSINFO_INSTALL_CONFIG_PARAM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), OSINFO_TYPE_INSTALL_CONFIG_PARAM, OsinfoInstallConfigParamClass))
+#define OSINFO_IS_INSTALL_CONFIG_PARAM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), OSINFO_TYPE_INSTALL_CONFIG_PARAM))
+#define OSINFO_INSTALL_CONFIG_PARAM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), OSINFO_TYPE_INSTALL_CONFIG_PARAM, OsinfoInstallConfigParamClass))
+
+typedef struct _OsinfoInstallConfigParam OsinfoInstallConfigParam;
+typedef struct _OsinfoInstallConfigParamClass OsinfoInstallConfigParamClass;
+typedef struct _OsinfoInstallConfigParamPrivate OsinfoInstallConfigParamPrivate;
+
+typedef enum {
+ OSINFO_INSTALL_CONFIG_PARAM_POLICY_NONE,
+ OSINFO_INSTALL_CONFIG_PARAM_POLICY_REQUIRED,
+ OSINFO_INSTALL_CONFIG_PARAM_POLICY_OPTIONAL,
+} OsinfoInstallConfigParamPolicy;
+
+/* object */
+struct _OsinfoInstallConfigParam
+{
+ OsinfoEntity parent_instance;
+ /* public */
+
+ /* private */
+ OsinfoInstallConfigParamPrivate *priv;
+};
+
+/* class */
+struct _OsinfoInstallConfigParamClass
+{
+ OsinfoEntityClass parent_class;
+
+ /* class members */
+};
+
+GType osinfo_install_config_param_get_type(void);
+
+OsinfoInstallConfigParam *osinfo_install_config_param_new(const gchar *name, const gchar *policy);
+
+const gchar *osinfo_install_config_param_get_name(const OsinfoInstallConfigParam *config_param);
+
+OsinfoInstallConfigParamPolicy osinfo_install_config_param_get_policy(const OsinfoInstallConfigParam *config_param);
+
+
+#endif /* __OSINFO_INSTALL_CONFIG_PARAM_H__ */
+/*
+ * Local variables:
+ * indent-tabs-mode: nil
+ * c-indent-level: 4
+ * c-basic-offset: 4
+ * End:
+ */
diff --git a/osinfo/osinfo_install_script.c b/osinfo/osinfo_install_script.c
index 2d0b440..2a1dfbb 100644
--- a/osinfo/osinfo_install_script.c
+++ b/osinfo/osinfo_install_script.c
@@ -47,6 +47,7 @@ G_DEFINE_TYPE (OsinfoInstallScript, osinfo_install_script, OSINFO_TYPE_ENTITY);
struct _OsinfoInstallScriptPrivate
{
gchar *output_prefix;
+ GList *config_param_list;
};
enum {
@@ -137,12 +138,12 @@ osinfo_os_get_property(GObject *object,
}
-
static void
osinfo_install_script_finalize (GObject *object)
{
OsinfoInstallScript *script = OSINFO_INSTALL_SCRIPT (object);
g_free(script->priv->output_prefix);
+ g_list_free_full(script->priv->config_param_list, g_object_unref);
/* Chain up to the parent class */
G_OBJECT_CLASS (osinfo_install_script_parent_class)->finalize (object);
@@ -216,6 +217,51 @@ osinfo_install_script_class_init (OsinfoInstallScriptClass *klass)
g_type_class_add_private (klass, sizeof (OsinfoInstallScriptPrivate));
}
+void osinfo_install_script_add_config_param(OsinfoInstallScript *script, OsinfoInstallConfigParam *param)
+{
+ g_return_if_fail(OSINFO_IS_INSTALL_SCRIPT(script));
+ g_return_if_fail(OSINFO_IS_INSTALL_CONFIG_PARAM(param));
+
+ script->priv->config_param_list =
+ g_list_prepend(script->priv->config_param_list, param);
+}
+
+gboolean osinfo_install_script_has_config_param(const OsinfoInstallScript *script, const OsinfoInstallConfigParam *config_param)
+{
+ guint i, list_size = g_list_length(script->priv->config_param_list);
+
+ for (i = 0; i < list_size; i++)
+ {
+ OsinfoInstallConfigParam *tmp;
+ tmp = g_list_nth_data(script->priv->config_param_list, i);
+
+ if (g_strcmp0(osinfo_install_config_param_get_name(tmp),
+ osinfo_install_config_param_get_name(config_param)) == 0)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+gboolean osinfo_install_script_has_config_param_name(const OsinfoInstallScript *script, const gchar *name)
+{
+ guint i, list_size = g_list_length(script->priv->config_param_list);
+
+ for (i = 0; i < list_size; i++)
+ {
+ OsinfoInstallConfigParam *tmp;
+ tmp = g_list_nth_data(script->priv->config_param_list, i);
+
+ if (g_strcmp0(osinfo_install_config_param_get_name(tmp), name) == 0)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+GList *osinfo_install_script_get_config_param_list(const OsinfoInstallScript *script)
+{
+ return g_list_copy(script->priv->config_param_list);
+}
+
static void
osinfo_install_script_init (OsinfoInstallScript *list)
{
@@ -223,6 +269,7 @@ osinfo_install_script_init (OsinfoInstallScript *list)
list->priv = priv = OSINFO_INSTALL_SCRIPT_GET_PRIVATE(list);
list->priv->output_prefix = NULL;
+ list->priv->config_param_list = NULL;
}
diff --git a/osinfo/osinfo_install_script.h b/osinfo/osinfo_install_script.h
index 440fd7e..21a50b3 100644
--- a/osinfo/osinfo_install_script.h
+++ b/osinfo/osinfo_install_script.h
@@ -23,6 +23,7 @@
#include <glib-object.h>
#include <gio/gio.h>
+#include <osinfo/osinfo_install_config_param.h>
#ifndef __OSINFO_INSTALL_SCRIPT_H__
#define __OSINFO_INSTALL_SCRIPT_H__
@@ -50,7 +51,8 @@ typedef struct _OsinfoInstallScriptPrivate OsinfoInstallScriptPrivate;
#define OSINFO_INSTALL_SCRIPT_PROP_PROFILE "profile"
#define OSINFO_INSTALL_SCRIPT_PROP_PRODUCT_KEY_FORMAT "product-key-format"
#define OSINFO_INSTALL_SCRIPT_PROP_OUTPUT_FILENAME "output-filename"
-
+#define OSINFO_INSTALL_SCRIPT_PROP_CONFIG_REQUIRED "required"
+#define OSINFO_INSTALL_SCRIPT_PROP_CONFIG_OPTIONAL "optional"
/* object */
struct _OsinfoInstallScript
@@ -127,6 +129,14 @@ GFile *osinfo_install_script_generate_output(OsinfoInstallScript *script,
GCancellable *cancellable,
GError **error);
+gboolean osinfo_install_script_has_config_param(const OsinfoInstallScript *script, const OsinfoInstallConfigParam *config_param);
+
+gboolean osinfo_install_script_has_config_param_name(const OsinfoInstallScript *script, const gchar *name);
+
+void osinfo_install_script_add_config_param(OsinfoInstallScript *script, OsinfoInstallConfigParam *param);
+
+GList *osinfo_install_script_get_config_param_list(const OsinfoInstallScript *script);
+
#endif /* __OSINFO_INSTALL_SCRIPT_H__ */
/*
* Local variables:
diff --git a/osinfo/osinfo_loader.c b/osinfo/osinfo_loader.c
index 31e442e..76ac793 100644
--- a/osinfo/osinfo_loader.c
+++ b/osinfo/osinfo_loader.c
@@ -540,6 +540,35 @@ static void osinfo_loader_deployment(OsinfoLoader *loader,
osinfo_db_add_deployment(loader->priv->db, deployment);
}
+static void osinfo_loader_install_config_param(OsinfoLoader *loader,
+ OsinfoEntity *entity,
+ const gchar *xpath,
+ xmlXPathContextPtr ctxt,
+ xmlNodePtr root,
+ GError **err)
+{
+ xmlNodePtr *nodes = NULL;
+ int nnodes = osinfo_loader_nodeset(xpath, ctxt, &nodes, err);
+ int i;
+ if (error_is_set(err))
+ return;
+
+ for (i = 0 ; i < nnodes ; i++) {
+ gchar *name = (gchar *)xmlGetProp(nodes[i], BAD_CAST "name");
+ gchar *policy = (gchar *)xmlGetProp(nodes[i], BAD_CAST "policy");
+ OsinfoInstallConfigParam *param =
+ osinfo_install_config_param_new(name, policy);
+ osinfo_install_script_add_config_param(OSINFO_INSTALL_SCRIPT(entity),
+ param);
+
+ g_free(name);
+ g_free(policy);
+ };
+
+ g_free(nodes);
+}
+
+
static void osinfo_loader_install_script(OsinfoLoader *loader,
xmlXPathContextPtr ctxt,
@@ -594,6 +623,13 @@ static void osinfo_loader_install_script(OsinfoLoader *loader,
value);
g_free(value);
+ osinfo_loader_install_config_param(loader,
+ OSINFO_ENTITY(installScript),
+ "./config/*",
+ ctxt,
+ root,
+ err);
+
osinfo_db_add_install_script(loader->priv->db, installScript);
return;
--
1.7.11.2
More information about the virt-tools-list
mailing list