- Removed struct conf reference - Made scheme routines internal only - add configured routines in agent
Signed-off-by: Adam Stokes astokes@fedoraproject.org --- src/include/matahari/sysconfig.h | 12 ----- src/lib/sysconfig_linux.c | 100 +++++++++++++++++-------------------- src/sysconfig/sysconfig-qmf.cpp | 34 ++++++++++--- src/tests/mh_api_sysconfig.h | 8 +-- 4 files changed, 75 insertions(+), 79 deletions(-)
diff --git a/src/include/matahari/sysconfig.h b/src/include/matahari/sysconfig.h index cdd1e8d..8b28ca8 100644 --- a/src/include/matahari/sysconfig.h +++ b/src/include/matahari/sysconfig.h @@ -25,14 +25,6 @@ #ifndef __MH_SYSCONFIG_H__ #define __MH_SYSCONFIG_H__
-typedef struct conf_s { - int flags; - const char *uri; - const char *data; - const char *query; - const char *key; - const char *scheme; -} conf_t;
// Supported FLAGS @@ -43,9 +35,5 @@ extern int mh_sysconfig_run_string(const char *string, int flags, const char *sc extern int mh_sysconfig_query(const char *query, const char *data, int flags, const char *scheme);
-// scheme specific -extern int mh_sysconfig_run_puppet(conf_t *cf); -extern int mh_sysconfig_run_augeas(conf_t *cf); -extern int mh_sysconfig_query_augeas(conf_t *cf);
#endif // __MH_SYSCONFIG_H__ diff --git a/src/lib/sysconfig_linux.c b/src/lib/sysconfig_linux.c index a1f438a..cb6cb5d 100644 --- a/src/lib/sysconfig_linux.c +++ b/src/lib/sysconfig_linux.c @@ -33,7 +33,6 @@
MH_TRACE_INIT_DATA(mh_sysconfig);
-static conf_t cf = {}; static int download(const char *uri, FILE *fp) { @@ -55,52 +54,9 @@ download(const char *uri, FILE *fp) return 0; }
-int -mh_sysconfig_run_uri(const char *uri, int flags, const char *scheme) { - int rc = 0; - - if (g_strcmp0(scheme, "puppet") == 0) { - cf.uri = uri; - cf.scheme = scheme; - rc = mh_sysconfig_run_puppet(&cf); - } else { - rc = -1; - } - return rc; -} - -int -mh_sysconfig_run_string(const char *data, int flags, const char *scheme) { - int rc = 0; - - if (g_strcmp0(scheme, "puppet") == 0) { - cf.data = data; - cf.scheme = scheme; - rc = mh_sysconfig_run_puppet(&cf); - } else { - rc = -1; - } - return rc; -} - -int -mh_sysconfig_query(const char *query, const char *data, int flags, const char *scheme) { - int rc = 0; - - if (g_strcmp0(scheme, "augeas") == 0) { - cf.query = query; - cf.data = data; - cf.scheme = scheme; - rc = mh_sysconfig_run_augeas(&cf); - } else { - rc = -1; - } - return rc; -}
- -int -mh_sysconfig_run_puppet(conf_t *cf) +static int +mh_sysconfig_run_puppet(const char *uri, const char *data) { gboolean ret; GError *error; @@ -108,18 +64,18 @@ mh_sysconfig_run_puppet(conf_t *cf) gchar cmd[PATH_MAX]; int fd; FILE *fp; - if (cf->uri != NULL) { + if (uri != NULL) { filename = strdup("puppet_conf_XXXXXX"); fd = mkstemp(filename); fp = fdopen(fd, "w+b"); - if ((download(cf->uri, fp)) != 0) { + if ((download(uri, fp)) != 0) { fclose(fp); return -1; } fclose(fp); - } else if (cf->data != NULL) { + } else if (data != NULL) { filename = strdup("puppet_conf_blob"); - g_file_set_contents(filename, cf->data, strlen(cf->data), NULL); + g_file_set_contents(filename, data, strlen(data), NULL); } else { return -1; } @@ -137,16 +93,52 @@ mh_sysconfig_run_puppet(conf_t *cf) return 0; }
-int -mh_sysconfig_run_augeas(conf_t *cf) +static int +mh_sysconfig_run_augeas(const char *query, const char *data) { fprintf(stderr, "not implemented\n"); return 0; }
-int -mh_sysconfig_query_augeas(conf_t *cf) +static int +mh_sysconfig_query_augeas(const char *query, const char *data) { fprintf(stderr, "not implemented\n"); return 0; } + +int +mh_sysconfig_run_uri(const char *uri, int flags, const char *scheme) { + int rc = 0; + + if (g_strcmp0(scheme, "puppet") == 0) { + rc = mh_sysconfig_run_puppet(uri, NULL); + } else { + rc = -1; + } + return rc; +} + +int +mh_sysconfig_run_string(const char *data, int flags, const char *scheme) { + int rc = 0; + + if (g_strcmp0(scheme, "puppet") == 0) { + rc = mh_sysconfig_run_puppet(NULL, data); + } else { + rc = -1; + } + return rc; +} + +int +mh_sysconfig_query(const char *query, const char *data, int flags, const char *scheme) { + int rc = 0; + + if (g_strcmp0(scheme, "augeas") == 0) { + rc = mh_sysconfig_run_augeas(query, data); + } else { + rc = -1; + } + return rc; +} diff --git a/src/sysconfig/sysconfig-qmf.cpp b/src/sysconfig/sysconfig-qmf.cpp index 16fdf19..440b966 100644 --- a/src/sysconfig/sysconfig-qmf.cpp +++ b/src/sysconfig/sysconfig-qmf.cpp @@ -34,7 +34,9 @@ extern "C" { #include <stdlib.h> #include <string.h> +#include <fcntl.h> #include <glib.h> +#include <glib/gstdio.h> #include <glib/gprintf.h> #include "matahari/sysconfig.h" #include "matahari/logging.h" @@ -44,6 +46,7 @@ extern "C" { #include <sigar_format.h> };
+static const char *configured_fn = "/var/lib/matahari/.is_configured"; class ConfigAgent : public MatahariAgent { private: @@ -79,15 +82,24 @@ ConfigAgent::setup(qmf::AgentSession session) return 0; }
+static void +set_configured() { + if(!g_file_test(configured_fn, G_FILE_TEST_EXISTS)) { + g_creat(configured_fn, S_IRWXU); + } +} + static int -is_configured(const char *key, int flags) { - int rc = 0; +is_configured(int flags) {
if(flags & SYSCONFIG_FLAG_FORCE) { - return rc; + return 0; }
- return rc; + if(g_file_test(configured_fn, G_FILE_TEST_EXISTS)) { + return 1; + } + return 0; }
gboolean @@ -105,23 +117,29 @@ ConfigAgent::invoke(qmf::AgentSession session, qmf::AgentEvent event, gpointer u
if (methodName == "run_uri") { flags = event.getArguments()["flags"].asInt32(); - if((is_configured(_instance.getProperty("uuid").asString().c_str(), flags)) == 0) { + if((is_configured(flags)) == 0) { rc = mh_sysconfig_run_uri(event.getArguments()["uri"].asString().c_str(), flags, event.getArguments()["scheme"].asString().c_str()); + if (rc == 0) { + set_configured(); + } } event.addReturnArgument("configured", rc); } else if (methodName == "run_string") { flags = event.getArguments()["flags"].asInt32(); - if((is_configured(_instance.getProperty("uuid").asString().c_str(), flags)) == 0) { + if((is_configured(flags)) == 0) { rc = mh_sysconfig_run_string(event.getArguments()["data"].asString().c_str(), flags, event.getArguments()["scheme"].asString().c_str()); + if (rc == 0) { + set_configured(); + } } event.addReturnArgument("configured", rc); } else if (methodName == "query") { flags = event.getArguments()["flags"].asInt32(); - if((is_configured(_instance.getProperty("uuid").asString().c_str(), flags)) == 0) { + if((is_configured(flags)) == 0) { rc = mh_sysconfig_query(event.getArguments()["query"].asString().c_str(), event.getArguments()["data"].asString().c_str(), flags, @@ -129,7 +147,7 @@ ConfigAgent::invoke(qmf::AgentSession session, qmf::AgentEvent event, gpointer u } event.addReturnArgument("configured", rc); } else if (methodName == "is_configured") { - rc = is_configured(event.getArguments()["key"].asString().c_str(), 0); + rc = is_configured(0); _instance.setProperty("is_postboot_configured", rc); event.addReturnArgument("configured", rc); } else { diff --git a/src/tests/mh_api_sysconfig.h b/src/tests/mh_api_sysconfig.h index 7e1b2b4..7ae11af 100644 --- a/src/tests/mh_api_sysconfig.h +++ b/src/tests/mh_api_sysconfig.h @@ -25,11 +25,9 @@ class MhApiSysconfigSuite : public CxxTest::TestSuite
void testIsConfigured(void) { - conf_t cf = {}; - cf.uri = "http://matahariproject.org/atom.xml"; - cf.flags = 0; - cf.scheme = "puppet"; - TS_ASSERT((mh_sysconfig_run_uri(cf.uri, cf.flags, cf.scheme)) != -1); + const char *uri = "http://matahariproject.org/atom.xml"; + int flags = 0; + TS_ASSERT((mh_sysconfig_run_uri(uri, flags, "puppet")) != -1); } };