- Updates made based off previous ML post https://fedorahosted.org/pipermail/matahari/2011-July/001400.html
Signed-off-by: Adam Stokes astokes@fedoraproject.org --- src/include/matahari/mh_agent.h | 3 + src/include/matahari/sysconfig.h | 29 +++++------ src/lib/sysconfig_linux.c | 100 +++++++++++++++++------------------ src/sysconfig/schema.xml | 3 +- src/sysconfig/sysconfig-console.cpp | 42 ++++++++++----- src/sysconfig/sysconfig-qmf.cpp | 16 ++---- src/tests/mh_api_sysconfig.h | 11 ++-- 7 files changed, 106 insertions(+), 98 deletions(-)
diff --git a/src/include/matahari/mh_agent.h b/src/include/matahari/mh_agent.h index 5b6c8a3..275e090 100644 --- a/src/include/matahari/mh_agent.h +++ b/src/include/matahari/mh_agent.h @@ -47,6 +47,9 @@ int required_argument = 1;
#define MH_NOT_IMPLEMENTED "Not implemented"
+#ifndef NS_MAXDNAME +# define NS_MAXDNAME 1025 +#endif using namespace qpid::management; using namespace std;
diff --git a/src/include/matahari/sysconfig.h b/src/include/matahari/sysconfig.h index 17ce0b0..cdd1e8d 100644 --- a/src/include/matahari/sysconfig.h +++ b/src/include/matahari/sysconfig.h @@ -25,30 +25,27 @@ #ifndef __MH_SYSCONFIG_H__ #define __MH_SYSCONFIG_H__
-struct conf { - int scheme; +typedef struct conf_s { int flags; - char *uri; - char *data; - char *query; + const char *uri; + const char *data; + const char *query; const char *key; -}; + const char *scheme; +} conf_t;
-// Supported SCHEME types -#define PUPPET 1 -#define AUGEAS 2
// Supported FLAGS -#define FORCE 1 +#define SYSCONFIG_FLAG_FORCE (1 << 0)
-extern int mh_sysconfig_run(const char *uri, int flags, int scheme, struct conf *cf); -extern int mh_sysconfig_run_string(const char *string, int flags, int scheme, struct conf *cf); +extern int mh_sysconfig_run_uri(const char *uri, int flags, const char *scheme); +extern int mh_sysconfig_run_string(const char *string, int flags, const char *scheme); extern int mh_sysconfig_query(const char *query, const char *data, - int flags, int scheme, struct conf *cf); + int flags, const char *scheme);
// scheme specific -extern int mh_sysconfig_run_puppet(struct conf *cf); -extern int mh_sysconfig_run_augeas(struct conf *cf); -extern int mh_sysconfig_query_augeas(struct conf *cf); +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 4f239c7..a1f438a 100644 --- a/src/lib/sysconfig_linux.c +++ b/src/lib/sysconfig_linux.c @@ -1,4 +1,4 @@ -/* sysconfig.c - Copyright (C) 2011 Red Hat, Inc. +/* sysconfig_linux.c - Copyright (C) 2011 Red Hat, Inc. * Written by Adam Stokes astokes@fedoraproject.org * * This program is free software; you can redistribute it and/or @@ -33,6 +33,7 @@
MH_TRACE_INIT_DATA(mh_sysconfig);
+static conf_t cf = {}; static int download(const char *uri, FILE *fp) { @@ -41,12 +42,12 @@ download(const char *uri, FILE *fp)
curl_global_init(CURL_GLOBAL_DEFAULT); curl = curl_easy_init(); - if(curl) { + if (curl) { curl_easy_setopt(curl, CURLOPT_URL, uri); curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); res = curl_easy_perform(curl);
- if(CURLE_OK != res) { + if (CURLE_OK != res) { return -1; } } @@ -55,99 +56,96 @@ download(const char *uri, FILE *fp) }
int -mh_sysconfig_run(const char *uri, int flags, int scheme, struct conf *cf) { +mh_sysconfig_run_uri(const char *uri, int flags, const char *scheme) { int rc = 0;
- switch(scheme) { - case PUPPET: - cf->uri = strdup(uri); - cf->scheme = scheme; - rc = mh_sysconfig_run_puppet(cf); - free(cf->uri); - break; - default: - rc = -1; - break; + 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, int scheme, struct conf *cf) { +mh_sysconfig_run_string(const char *data, int flags, const char *scheme) { int rc = 0;
- switch(scheme) { - case PUPPET: - cf->data = strdup(data); - cf->scheme = scheme; - rc = mh_sysconfig_run_puppet(cf); - free(cf->data); - break; - default: - rc = -1; - break; + 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, int scheme, struct conf *cf) { +mh_sysconfig_query(const char *query, const char *data, int flags, const char *scheme) { int rc = 0;
- switch(scheme) { - case AUGEAS: - cf->query = strdup(query); - cf->data = strdup(data); - cf->scheme = scheme; - rc = mh_sysconfig_run_augeas(cf); - free(cf->query); - free(cf->data); - break; - default: + if (g_strcmp0(scheme, "augeas") == 0) { + cf.query = query; + cf.data = data; + cf.scheme = scheme; + rc = mh_sysconfig_run_augeas(&cf); + } else { rc = -1; - break; } return rc; }
int -mh_sysconfig_run_puppet(struct conf *cf) +mh_sysconfig_run_puppet(conf_t *cf) { - int rc = 0; - char *filename = NULL, *cmd = NULL; + gboolean ret; + GError *error; + char *filename = NULL; + gchar cmd[PATH_MAX]; int fd; FILE *fp; - - if(cf->uri != NULL) { + if (cf->uri != NULL) { filename = strdup("puppet_conf_XXXXXX"); fd = mkstemp(filename); fp = fdopen(fd, "w+b"); - rc = download(cf->uri, fp); + if ((download(cf->uri, fp)) != 0) { + fclose(fp); + return -1; + } fclose(fp); - } else if(cf->data != NULL) { + } else if (cf->data != NULL) { filename = strdup("puppet_conf_blob"); g_file_set_contents(filename, cf->data, strlen(cf->data), NULL); } else { return -1; } - - asprintf(cmd, "puppet %s", filename); - rc = system(cmd); + g_snprintf(cmd, sizeof(cmd), "puppet %s", filename); + fprintf(stderr, "%s", cmd); + ret = g_spawn_async(NULL, (gchar **)cmd, NULL, G_SPAWN_SEARCH_PATH, + NULL, NULL, NULL, &error); + fprintf(stderr, "bool: %d", ret); + if (ret == FALSE) { + g_error_free(error); + free(filename); + return -1; + } free(filename); - free(cmd); - return rc; + return 0; }
int -mh_sysconfig_run_augeas(struct conf *cf) +mh_sysconfig_run_augeas(conf_t *cf) { fprintf(stderr, "not implemented\n"); return 0; }
int -mh_sysconfig_query_augeas(struct conf *cf) +mh_sysconfig_query_augeas(conf_t *cf) { fprintf(stderr, "not implemented\n"); return 0; diff --git a/src/sysconfig/schema.xml b/src/sysconfig/schema.xml index d729000..065fb7a 100644 --- a/src/sysconfig/schema.xml +++ b/src/sysconfig/schema.xml @@ -7,8 +7,7 @@ <property name="is_postboot_configured" type="uint32" access="RO" desc="Check if agent is configured." />
<statistic name="qmf-gen-no-crash" type="absTime" desc="Dummy stat to stop qmf-gen from crashing." /> - - <method name="run" desc="Send configure uri method"> + <method name="run_uri" desc="Send configure uri method"> <arg name="uri" dir="I" type="sstr" /> <arg name="scheme" dir="I" type="sstr" /> <arg name="key" dir="I" type="sstr" /> diff --git a/src/sysconfig/sysconfig-console.cpp b/src/sysconfig/sysconfig-console.cpp index 920cbd7..d8ed5de 100644 --- a/src/sysconfig/sysconfig-console.cpp +++ b/src/sysconfig/sysconfig-console.cpp @@ -30,8 +30,14 @@ #include <qmf/Query.h> #include <qpid/types/Variant.h>
+#include <matahari/mh_agent.h> #include <string> #include <iostream> +#include <sstream> + +extern "C" { +#include "matahari/logging.h" +}
using namespace std; using namespace qmf; @@ -40,38 +46,46 @@ using qpid::messaging::Duration;
int main(int argc, char** argv) { - string brokerUrl("amqp:tcp:127.0.0.1:49000"); - qpid::types::Variant::Map connectionOptions; - qpid::types::Variant::Map dataProperties; + qpid::types::Variant::Map options; + qpid::types::Variant::Map callOptions; string sessionOptions; - - connectionOptions["reconnect"] = true; - - dataProperties["uri"] = argv[1] ? argv[1] : "http://localhost/config/uuid"; + ConsoleEvent event; + Agent agent; + + mh_log_init("sysconfig-console", LOG_TRACE, TRUE); + + mh_add_option('U', required_argument, "uri", "URI of configuration", &options, NULL); + + string url = mh_parse_options("sysconfig-console", argc, argv, options);
- qpid::messaging::Connection connection(brokerUrl, connectionOptions); + callOptions["uri"] = options["uri"]; + + mh_log_init("sysconfig-console", mh_log_level, mh_log_level > LOG_INFO); + + qpid::messaging::Connection connection(url, options); connection.open();
ConsoleSession session(connection, sessionOptions); // Only filter connecting agents under matahariproject.org vendor and Config product session.setAgentFilter("[and, [eq, _vendor, [quote, 'matahariproject.org']], [eq, _product, [quote, 'Sysconfig']]]"); session.open(); - - Agent agent; + while(session.getAgentCount() == 0) { + g_usleep(1000); + } while (true) { - ConsoleEvent event; if(session.nextEvent(event)) { switch(event.getType()) { case CONSOLE_AGENT_ADD: { agent = event.getAgent(); DataAddr agent_event_addr("config", agent.getName(), 0); - ConsoleEvent result(agent.callMethod("configure", - dataProperties, + ConsoleEvent result(agent.callMethod("configure", + callOptions, agent_event_addr)); } break; - default: {} + default: + break; } } } diff --git a/src/sysconfig/sysconfig-qmf.cpp b/src/sysconfig/sysconfig-qmf.cpp index 4cbdd0d..16fdf19 100644 --- a/src/sysconfig/sysconfig-qmf.cpp +++ b/src/sysconfig/sysconfig-qmf.cpp @@ -83,7 +83,7 @@ static int is_configured(const char *key, int flags) { int rc = 0;
- if(flags == FORCE) { + if(flags & SYSCONFIG_FLAG_FORCE) { return rc; }
@@ -95,7 +95,6 @@ ConfigAgent::invoke(qmf::AgentSession session, qmf::AgentEvent event, gpointer u { int rc = 0; int flags; - struct conf *cf = NULL;
if (event.getType() != qmf::AGENT_METHOD) { @@ -104,13 +103,12 @@ ConfigAgent::invoke(qmf::AgentSession session, qmf::AgentEvent event, gpointer u
const std::string& methodName(event.getMethodName());
- if (methodName == "run") { + if (methodName == "run_uri") { flags = event.getArguments()["flags"].asInt32(); if((is_configured(_instance.getProperty("uuid").asString().c_str(), flags)) == 0) { - rc = mh_sysconfig_run(event.getArguments()["uri"].asString().c_str(), + rc = mh_sysconfig_run_uri(event.getArguments()["uri"].asString().c_str(), flags, - event.getArguments()["scheme"].asInt32(), - cf); + event.getArguments()["scheme"].asString().c_str()); } event.addReturnArgument("configured", rc); } else if (methodName == "run_string") { @@ -118,8 +116,7 @@ ConfigAgent::invoke(qmf::AgentSession session, qmf::AgentEvent event, gpointer u if((is_configured(_instance.getProperty("uuid").asString().c_str(), flags)) == 0) { rc = mh_sysconfig_run_string(event.getArguments()["data"].asString().c_str(), flags, - event.getArguments()["scheme"].asInt32(), - cf); + event.getArguments()["scheme"].asString().c_str()); } event.addReturnArgument("configured", rc); } else if (methodName == "query") { @@ -127,9 +124,8 @@ ConfigAgent::invoke(qmf::AgentSession session, qmf::AgentEvent event, gpointer u if((is_configured(_instance.getProperty("uuid").asString().c_str(), flags)) == 0) { rc = mh_sysconfig_query(event.getArguments()["query"].asString().c_str(), event.getArguments()["data"].asString().c_str(), - event.getArguments()["scheme"].asInt32(), flags, - cf); + event.getArguments()["scheme"].asString().c_str()); } event.addReturnArgument("configured", rc); } else if (methodName == "is_configured") { diff --git a/src/tests/mh_api_sysconfig.h b/src/tests/mh_api_sysconfig.h index 48cadfa..7e1b2b4 100644 --- a/src/tests/mh_api_sysconfig.h +++ b/src/tests/mh_api_sysconfig.h @@ -19,16 +19,17 @@ extern "C" {
using namespace std;
-class MhApisysconfigSuite : public CxxTest::TestSuite +class MhApiSysconfigSuite : public CxxTest::TestSuite { public:
void testIsConfigured(void) { - const char *uri = "http://matahariproject.org/atom.xml"; - struct conf *cf = NULL; - - TS_ASSERT((mh_sysconfig_run(uri, PUPPET, 0, cf)) != -1); + 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); } };
Use a local cf structure in each function that needs to pass one, rather than a global. Then: ACK
- ZB
On 20/07/11 17:36, Adam Stokes wrote:
- Updates made based off previous ML post
https://fedorahosted.org/pipermail/matahari/2011-July/001400.html
Signed-off-by: Adam Stokesastokes@fedoraproject.org
src/include/matahari/mh_agent.h | 3 + src/include/matahari/sysconfig.h | 29 +++++------ src/lib/sysconfig_linux.c | 100 +++++++++++++++++------------------ src/sysconfig/schema.xml | 3 +- src/sysconfig/sysconfig-console.cpp | 42 ++++++++++----- src/sysconfig/sysconfig-qmf.cpp | 16 ++---- src/tests/mh_api_sysconfig.h | 11 ++-- 7 files changed, 106 insertions(+), 98 deletions(-)
diff --git a/src/include/matahari/mh_agent.h b/src/include/matahari/mh_agent.h index 5b6c8a3..275e090 100644 --- a/src/include/matahari/mh_agent.h +++ b/src/include/matahari/mh_agent.h @@ -47,6 +47,9 @@ int required_argument = 1;
#define MH_NOT_IMPLEMENTED "Not implemented"
+#ifndef NS_MAXDNAME +# define NS_MAXDNAME 1025 +#endif using namespace qpid::management; using namespace std;
diff --git a/src/include/matahari/sysconfig.h b/src/include/matahari/sysconfig.h index 17ce0b0..cdd1e8d 100644 --- a/src/include/matahari/sysconfig.h +++ b/src/include/matahari/sysconfig.h @@ -25,30 +25,27 @@ #ifndef __MH_SYSCONFIG_H__ #define __MH_SYSCONFIG_H__
-struct conf {
- int scheme;
+typedef struct conf_s { int flags;
- char *uri;
- char *data;
- char *query;
- const char *uri;
- const char *data;
- const char *query; const char *key;
-};
- const char *scheme;
+} conf_t;
-// Supported SCHEME types -#define PUPPET 1 -#define AUGEAS 2
// Supported FLAGS -#define FORCE 1 +#define SYSCONFIG_FLAG_FORCE (1<< 0)
-extern int mh_sysconfig_run(const char *uri, int flags, int scheme, struct conf *cf); -extern int mh_sysconfig_run_string(const char *string, int flags, int scheme, struct conf *cf); +extern int mh_sysconfig_run_uri(const char *uri, int flags, const char *scheme); +extern int mh_sysconfig_run_string(const char *string, int flags, const char *scheme); extern int mh_sysconfig_query(const char *query, const char *data,
int flags, int scheme, struct conf *cf);
int flags, const char *scheme);
// scheme specific
-extern int mh_sysconfig_run_puppet(struct conf *cf); -extern int mh_sysconfig_run_augeas(struct conf *cf); -extern int mh_sysconfig_query_augeas(struct conf *cf); +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 4f239c7..a1f438a 100644 --- a/src/lib/sysconfig_linux.c +++ b/src/lib/sysconfig_linux.c @@ -1,4 +1,4 @@ -/* sysconfig.c - Copyright (C) 2011 Red Hat, Inc. +/* sysconfig_linux.c - Copyright (C) 2011 Red Hat, Inc.
- Written by Adam Stokesastokes@fedoraproject.org
- This program is free software; you can redistribute it and/or
@@ -33,6 +33,7 @@
MH_TRACE_INIT_DATA(mh_sysconfig);
+static conf_t cf = {}; static int download(const char *uri, FILE *fp) { @@ -41,12 +42,12 @@ download(const char *uri, FILE *fp)
curl_global_init(CURL_GLOBAL_DEFAULT); curl = curl_easy_init();
- if(curl) {
- if (curl) { curl_easy_setopt(curl, CURLOPT_URL, uri); curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); res = curl_easy_perform(curl);
if(CURLE_OK != res) {
if (CURLE_OK != res) { return -1; } }
@@ -55,99 +56,96 @@ download(const char *uri, FILE *fp) }
int -mh_sysconfig_run(const char *uri, int flags, int scheme, struct conf *cf) { +mh_sysconfig_run_uri(const char *uri, int flags, const char *scheme) { int rc = 0;
- switch(scheme) {
case PUPPET:
cf->uri = strdup(uri);
cf->scheme = scheme;
rc = mh_sysconfig_run_puppet(cf);
free(cf->uri);
break;
default:
rc = -1;
break;
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, int scheme, struct conf *cf) { +mh_sysconfig_run_string(const char *data, int flags, const char *scheme) { int rc = 0;
- switch(scheme) {
case PUPPET:
cf->data = strdup(data);
cf->scheme = scheme;
rc = mh_sysconfig_run_puppet(cf);
free(cf->data);
break;
default:
rc = -1;
break;
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, int scheme, struct conf *cf) { +mh_sysconfig_query(const char *query, const char *data, int flags, const char *scheme) { int rc = 0;
- switch(scheme) {
- case AUGEAS:
cf->query = strdup(query);
cf->data = strdup(data);
cf->scheme = scheme;
rc = mh_sysconfig_run_augeas(cf);
free(cf->query);
free(cf->data);
break;
- default:
- if (g_strcmp0(scheme, "augeas") == 0) {
cf.query = query;
cf.data = data;
cf.scheme = scheme;
rc = mh_sysconfig_run_augeas(&cf);
- } else { rc = -1;
break;
} return rc; }
int
-mh_sysconfig_run_puppet(struct conf *cf) +mh_sysconfig_run_puppet(conf_t *cf) {
- int rc = 0;
- char *filename = NULL, *cmd = NULL;
- gboolean ret;
- GError *error;
- char *filename = NULL;
- gchar cmd[PATH_MAX]; int fd; FILE *fp;
- if(cf->uri != NULL) {
- if (cf->uri != NULL) { filename = strdup("puppet_conf_XXXXXX"); fd = mkstemp(filename); fp = fdopen(fd, "w+b");
rc = download(cf->uri, fp);
if ((download(cf->uri, fp)) != 0) {
fclose(fp);
return -1;
fclose(fp);}
- } else if(cf->data != NULL) {
- } else if (cf->data != NULL) { filename = strdup("puppet_conf_blob"); g_file_set_contents(filename, cf->data, strlen(cf->data), NULL); } else { return -1; }
- asprintf(cmd, "puppet %s", filename);
- rc = system(cmd);
- g_snprintf(cmd, sizeof(cmd), "puppet %s", filename);
- fprintf(stderr, "%s", cmd);
- ret = g_spawn_async(NULL, (gchar **)cmd, NULL, G_SPAWN_SEARCH_PATH,
NULL, NULL, NULL,&error);
- fprintf(stderr, "bool: %d", ret);
- if (ret == FALSE) {
g_error_free(error);
free(filename);
return -1;
- } free(filename);
- free(cmd);
- return rc;
return 0; }
int
-mh_sysconfig_run_augeas(struct conf *cf) +mh_sysconfig_run_augeas(conf_t *cf) { fprintf(stderr, "not implemented\n"); return 0; }
int -mh_sysconfig_query_augeas(struct conf *cf) +mh_sysconfig_query_augeas(conf_t *cf) { fprintf(stderr, "not implemented\n"); return 0; diff --git a/src/sysconfig/schema.xml b/src/sysconfig/schema.xml index d729000..065fb7a 100644 --- a/src/sysconfig/schema.xml +++ b/src/sysconfig/schema.xml @@ -7,8 +7,7 @@ <property name="is_postboot_configured" type="uint32" access="RO" desc="Check if agent is configured." />
<statistic name="qmf-gen-no-crash" type="absTime" desc="Dummy stat to stop qmf-gen from crashing." />
-<method name="run" desc="Send configure uri method">
<method name="run_uri" desc="Send configure uri method"> <arg name="uri" dir="I" type="sstr" /> <arg name="scheme" dir="I" type="sstr" /> <arg name="key" dir="I" type="sstr" />
diff --git a/src/sysconfig/sysconfig-console.cpp b/src/sysconfig/sysconfig-console.cpp index 920cbd7..d8ed5de 100644 --- a/src/sysconfig/sysconfig-console.cpp +++ b/src/sysconfig/sysconfig-console.cpp @@ -30,8 +30,14 @@ #include<qmf/Query.h> #include<qpid/types/Variant.h>
+#include<matahari/mh_agent.h> #include<string> #include<iostream> +#include<sstream>
+extern "C" { +#include "matahari/logging.h" +}
using namespace std; using namespace qmf; @@ -40,38 +46,46 @@ using qpid::messaging::Duration;
int main(int argc, char** argv) {
- string brokerUrl("amqp:tcp:127.0.0.1:49000");
- qpid::types::Variant::Map connectionOptions;
- qpid::types::Variant::Map dataProperties;
- qpid::types::Variant::Map options;
- qpid::types::Variant::Map callOptions; string sessionOptions;
- connectionOptions["reconnect"] = true;
- dataProperties["uri"] = argv[1] ? argv[1] : "http://localhost/config/uuid";
- ConsoleEvent event;
- Agent agent;
- mh_log_init("sysconfig-console", LOG_TRACE, TRUE);
- mh_add_option('U', required_argument, "uri", "URI of configuration",&options, NULL);
- string url = mh_parse_options("sysconfig-console", argc, argv, options);
- qpid::messaging::Connection connection(brokerUrl, connectionOptions);
callOptions["uri"] = options["uri"];
mh_log_init("sysconfig-console", mh_log_level, mh_log_level> LOG_INFO);
qpid::messaging::Connection connection(url, options); connection.open();
ConsoleSession session(connection, sessionOptions); // Only filter connecting agents under matahariproject.org vendor and Config product session.setAgentFilter("[and, [eq, _vendor, [quote, 'matahariproject.org']], [eq, _product, [quote, 'Sysconfig']]]"); session.open();
- Agent agent;
- while(session.getAgentCount() == 0) {
g_usleep(1000);
- } while (true) {
ConsoleEvent event; if(session.nextEvent(event)) { switch(event.getType()) { case CONSOLE_AGENT_ADD: { agent = event.getAgent(); DataAddr agent_event_addr("config", agent.getName(), 0);
ConsoleEvent result(agent.callMethod("configure",
dataProperties,
ConsoleEvent result(agent.callMethod("configure",
callOptions, agent_event_addr)); } break;
default: {}
default:
break; } } }
diff --git a/src/sysconfig/sysconfig-qmf.cpp b/src/sysconfig/sysconfig-qmf.cpp index 4cbdd0d..16fdf19 100644 --- a/src/sysconfig/sysconfig-qmf.cpp +++ b/src/sysconfig/sysconfig-qmf.cpp @@ -83,7 +83,7 @@ static int is_configured(const char *key, int flags) { int rc = 0;
- if(flags == FORCE) {
- if(flags& SYSCONFIG_FLAG_FORCE) { return rc; }
@@ -95,7 +95,6 @@ ConfigAgent::invoke(qmf::AgentSession session, qmf::AgentEvent event, gpointer u { int rc = 0; int flags;
struct conf *cf = NULL;
if (event.getType() != qmf::AGENT_METHOD) {
@@ -104,13 +103,12 @@ ConfigAgent::invoke(qmf::AgentSession session, qmf::AgentEvent event, gpointer u
const std::string& methodName(event.getMethodName());
- if (methodName == "run") {
- if (methodName == "run_uri") { flags = event.getArguments()["flags"].asInt32(); if((is_configured(_instance.getProperty("uuid").asString().c_str(), flags)) == 0) {
rc = mh_sysconfig_run(event.getArguments()["uri"].asString().c_str(),
rc = mh_sysconfig_run_uri(event.getArguments()["uri"].asString().c_str(), flags,
event.getArguments()["scheme"].asInt32(),
cf);
event.getArguments()["scheme"].asString().c_str()); } event.addReturnArgument("configured", rc); } else if (methodName == "run_string") {
@@ -118,8 +116,7 @@ ConfigAgent::invoke(qmf::AgentSession session, qmf::AgentEvent event, gpointer u if((is_configured(_instance.getProperty("uuid").asString().c_str(), flags)) == 0) { rc = mh_sysconfig_run_string(event.getArguments()["data"].asString().c_str(), flags,
event.getArguments()["scheme"].asInt32(),
cf);
event.getArguments()["scheme"].asString().c_str()); } event.addReturnArgument("configured", rc); } else if (methodName == "query") {
@@ -127,9 +124,8 @@ ConfigAgent::invoke(qmf::AgentSession session, qmf::AgentEvent event, gpointer u if((is_configured(_instance.getProperty("uuid").asString().c_str(), flags)) == 0) { rc = mh_sysconfig_query(event.getArguments()["query"].asString().c_str(), event.getArguments()["data"].asString().c_str(),
event.getArguments()["scheme"].asInt32(), flags,
cf);
event.getArguments()["scheme"].asString().c_str()); } event.addReturnArgument("configured", rc); } else if (methodName == "is_configured") {
diff --git a/src/tests/mh_api_sysconfig.h b/src/tests/mh_api_sysconfig.h index 48cadfa..7e1b2b4 100644 --- a/src/tests/mh_api_sysconfig.h +++ b/src/tests/mh_api_sysconfig.h @@ -19,16 +19,17 @@ extern "C" {
using namespace std;
-class MhApisysconfigSuite : public CxxTest::TestSuite +class MhApiSysconfigSuite : public CxxTest::TestSuite { public:
void testIsConfigured(void) {
const char *uri = "http://matahariproject.org/atom.xml";
struct conf *cf = NULL;
TS_ASSERT((mh_sysconfig_run(uri, PUPPET, 0, cf)) != -1);
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); }
On 20/07/11 18:44, Perry Myers wrote:
On 07/20/2011 12:28 PM, Zane Bitter wrote:
Use a local cf structure in each function that needs to pass one, rather than a global. Then: ACK
Hm, didn't beekhof just suggest that we drop the struct entirely since it doesn't really add any value?
I'm relaxed because it's an internal API so we can change it any time, but on closer inspection yes, that is what beekhof said.
On Thu, Jul 21, 2011 at 2:49 AM, Zane Bitter zbitter@redhat.com wrote:
On 20/07/11 18:44, Perry Myers wrote:
On 07/20/2011 12:28 PM, Zane Bitter wrote:
Use a local cf structure in each function that needs to pass one, rather than a global. Then: ACK
Hm, didn't beekhof just suggest that we drop the struct entirely since it doesn't really add any value?
I'm relaxed because it's an internal API so we can change it any time, but on closer inspection yes, that is what beekhof said.
I'm fine with committing this and removing the struct in a followup patch.
matahari@lists.fedorahosted.org