- Better name for our configuration agent.
- Add api level tests for postboot
---
matahari.spec | 40 ++++++------
src/CMakeLists.txt | 2 +-
src/config/CMakeLists.txt | 30 ---------
src/config/config-console.cpp | 79 ------------------------
src/config/config-qmf.cpp | 102 --------------------------------
src/config/schema.xml | 16 -----
src/include/matahari/mh_agent_config.h | 34 -----------
src/include/matahari/postboot.h | 34 +++++++++++
src/lib/CMakeLists.txt | 8 +-
src/lib/mh_agent_config.c | 50 ----------------
src/lib/postboot.c | 50 ++++++++++++++++
src/postboot/CMakeLists.txt | 30 +++++++++
src/postboot/postboot-console.cpp | 79 ++++++++++++++++++++++++
src/postboot/postboot-qmf.cpp | 102 ++++++++++++++++++++++++++++++++
src/postboot/schema.xml | 16 +++++
src/tests/CMakeLists.txt | 4 +-
src/tests/mh_api_postboot.h | 34 +++++++++++
17 files changed, 373 insertions(+), 337 deletions(-)
delete mode 100644 src/config/CMakeLists.txt
delete mode 100644 src/config/config-console.cpp
delete mode 100644 src/config/config-qmf.cpp
delete mode 100644 src/config/schema.xml
delete mode 100644 src/include/matahari/mh_agent_config.h
create mode 100644 src/include/matahari/postboot.h
delete mode 100644 src/lib/mh_agent_config.c
create mode 100644 src/lib/postboot.c
create mode 100644 src/postboot/CMakeLists.txt
create mode 100644 src/postboot/postboot-console.cpp
create mode 100644 src/postboot/postboot-qmf.cpp
create mode 100644 src/postboot/schema.xml
create mode 100644 src/tests/mh_api_postboot.h
diff --git a/matahari.spec b/matahari.spec
index a52b1d7..603b70d 100644
--- a/matahari.spec
+++ b/matahari.spec
@@ -128,14 +128,14 @@ Requires: %{name}-agent-lib = %{version}-%{release}
%description service
QMF agent for viewing and controlling system services
-%package config
+%package postboot
License: GPLv2+
Summary: QMF agent for post boot configuration services.
Group: Applications/System
Requires: %{name}-lib = %{version}-%{release}
Requires: %{name}-agent-lib = %{version}-%{release}
-%description config
+%description postboot
QMF agent/console for providing post boot capabilities.
%package devel
@@ -234,24 +234,24 @@ if [ "$1" -ge "1" ]; then
/sbin/service matahari-service condrestart >/dev/null 2>&1 || :
fi
-#== Config
+#== Postboot
-%post config
-/sbin/service matahari-config condrestart
-/sbin/service matahari-config-console condrestart
+%post postboot
+/sbin/service matahari-postboot condrestart
+/sbin/service matahari-postboot-console condrestart
-%preun config
+%preun postboot
if [ $1 = 0 ]; then
- /sbin/service matahari-config-console stop >/dev/null 2>&1 || :
- /sbin/service matahari-config stop >/dev/null 2>&1 || :
- chkconfig --del matahari-config-console
- chkconfig --del matahari-config
+ /sbin/service matahari-postboot-console stop >/dev/null 2>&1 || :
+ /sbin/service matahari-postboot stop >/dev/null 2>&1 || :
+ chkconfig --del matahari-postboot-console
+ chkconfig --del matahari-postboot
fi
-%postun config
+%postun postboot
if [ "$1" -ge "1" ]; then
- /sbin/service matahari-config-console condrestart >/dev/null 2>&1 || :
- /sbin/service matahari-config condrestart >/dev/null 2>&1 || :
+ /sbin/service matahari-postboot-console condrestart >/dev/null 2>&1 || :
+ /sbin/service matahari-postboot condrestart >/dev/null 2>&1 || :
fi
#== Broker
@@ -299,7 +299,7 @@ test "x%{buildroot}" != "x" && rm -rf
%{buildroot}
%{_libdir}/libmhost.so.*
%{_libdir}/libmnetwork.so.*
%{_libdir}/libmservice.so.*
-%{_libdir}/libmconfig.so.*
+%{_libdir}/libmpostboot.so.*
%doc AUTHORS COPYING
%files network
@@ -342,15 +342,15 @@ test "x%{buildroot}" != "x" && rm -rf
%{buildroot}
%attr(755, root, root) %{_sbindir}/matahari-dbus-serviced
%endif
-%files config
+%files postboot
%defattr(644, root, root, 755)
%doc AUTHORS COPYING
%if %{with qmf}
-%attr(755, root, root) %{_initddir}/matahari-config
-%attr(755, root, root) %{_initddir}/matahari-config-console
-%attr(755, root, root) %{_sbindir}/matahari-qmf-configd
-%attr(755, root, root) %{_sbindir}/matahari-qmf-config-consoled
+%attr(755, root, root) %{_initddir}/matahari-postboot
+%attr(755, root, root) %{_initddir}/matahari-postboot-console
+%attr(755, root, root) %{_sbindir}/matahari-qmf-postbootd
+%attr(755, root, root) %{_sbindir}/matahari-qmf-postboot-consoled
%endif
%if %{with qmf}
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index d3fd72f..6079cfd 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -133,7 +133,7 @@ add_subdirectory(lib)
add_subdirectory(host)
add_subdirectory(network)
add_subdirectory(service)
-add_subdirectory(config)
+add_subdirectory(postboot)
add_subdirectory(tests)
### Installation
diff --git a/src/config/CMakeLists.txt b/src/config/CMakeLists.txt
deleted file mode 100644
index fb6560b..0000000
--- a/src/config/CMakeLists.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-set(BASE "config")
-set(BASE_LIB "m${BASE}")
-set(QMF_AGENT "matahari-qmf-${BASE}d")
-set(QMF_CONSOLE "matahari-qmf-${BASE}-consoled")
-
-# QMF daemon
-if(WITH-QMF)
- set(SCHEMA_SOURCES
${CMAKE_CURRENT_BINARY_DIR}/qmf/org/matahariproject/QmfPackage.cpp)
- generate_qmf_schemas(${CMAKE_CURRENT_SOURCE_DIR}/schema.xml ${SCHEMA_SOURCES})
- include_directories(${CMAKE_CURRENT_BINARY_DIR})
-
- add_executable(${QMF_AGENT} ${BASE}-qmf.cpp ${SCHEMA_SOURCES})
- add_executable(${QMF_CONSOLE} ${BASE}-console.cpp)
-
- target_link_libraries(${QMF_AGENT} ${BASE_LIB} mcommon_qmf)
- target_link_libraries(${QMF_CONSOLE} mcommon_qmf)
-
- if(NOT WIN32)
- configure_file(${CMAKE_SOURCE_DIR}/matahari.init.in
${CMAKE_CURRENT_BINARY_DIR}/matahari-${BASE})
- install(FILES ${CMAKE_CURRENT_BINARY_DIR}/matahari-${BASE} DESTINATION ${initdir})
- # Override BASE for matahari-config-console
- unset(BASE)
- set(BASE "config-console")
- configure_file(${CMAKE_SOURCE_DIR}/matahari.init.in
${CMAKE_CURRENT_BINARY_DIR}/matahari-${BASE})
- install(FILES ${CMAKE_CURRENT_BINARY_DIR}/matahari-${BASE} DESTINATION ${initdir})
- endif(NOT WIN32)
-
- install(TARGETS ${QMF_AGENT} DESTINATION sbin)
- install(TARGETS ${QMF_CONSOLE} DESTINATION sbin)
-endif(WITH-QMF)
diff --git a/src/config/config-console.cpp b/src/config/config-console.cpp
deleted file mode 100644
index 188c443..0000000
--- a/src/config/config-console.cpp
+++ /dev/null
@@ -1,79 +0,0 @@
-/* config-console.cpp - Copyright (c) 2011 Red Hat, Inc.
- * Written by Adam Stokes <astokes(a)fedoraproject.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library 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
- */
-
-#ifndef WIN32
-#include "config.h"
-#endif
-
-#include <qpid/messaging/Connection.h>
-#include <qpid/messaging/Duration.h>
-#include <qmf/ConsoleSession.h>
-#include <qmf/ConsoleEvent.h>
-#include <qmf/Agent.h>
-#include <qmf/Data.h>
-#include <qmf/DataAddr.h>
-#include <qmf/Query.h>
-#include <qpid/types/Variant.h>
-
-#include <string>
-#include <iostream>
-
-using namespace std;
-using namespace qmf;
-using qpid::types::Variant;
-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;
- string sessionOptions;
-
- connectionOptions["reconnect"] = true;
-
- dataProperties["uri"] = argv[1] ? argv[1] :
"http://localhost/config/uuid";
-
- qpid::messaging::Connection connection(brokerUrl, connectionOptions);
- 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, 'Config']]]");
- session.open();
-
- Agent agent;
- 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,
- agent_event_addr));
- }
- break;
- default: {}
- }
- }
- }
- return 0;
-}
diff --git a/src/config/config-qmf.cpp b/src/config/config-qmf.cpp
deleted file mode 100644
index de3e669..0000000
--- a/src/config/config-qmf.cpp
+++ /dev/null
@@ -1,102 +0,0 @@
-/* config-qmf.cpp - Copyright (C) 2011 Red Hat, Inc.
- * Written by Adam Stokes <astokes(a)fedoraproject.org>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU 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 software 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
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef WIN32
-#include "config.h"
-#endif
-
-#include "matahari/mh_agent.h"
-
-#include "qmf/org/matahariproject/QmfPackage.h"
-
-#include <qpid/agent/ManagementAgent.h>
-
-extern "C" {
-#include <stdlib.h>
-#include <string.h>
-#include <glib.h>
-#include <glib/gprintf.h>
-#include "matahari/mh_agent_config.h"
-#include "matahari/logging.h"
-#include "matahari/network.h"
-#include "matahari/host.h"
-#include <sigar.h>
-#include <sigar_format.h>
-};
-
-class ConfigAgent : public MatahariAgent
-{
-private:
- qmf::org::matahariproject::PackageDefinition _package;
-public:
- virtual int setup(qmf::AgentSession session);
- virtual gboolean invoke(qmf::AgentSession session, qmf::AgentEvent event,
- gpointer user_data);
-};
-
-int
-main(int argc, char **argv)
-{
- ConfigAgent agent;
- int rc = agent.init(argc, argv, "Config");
- if (rc == 0) {
- agent.run();
- }
- return rc;
-}
-
-int
-ConfigAgent::setup(qmf::AgentSession session)
-{
- _package.configure(session);
- _instance = qmf::Data(_package.data_Config);
-
- _instance.setProperty("hostname", mh_hostname());
- _instance.setProperty("uuid", mh_uuid());
- _instance.setProperty("is_configured", mh_is_configured());
-
- _agent_session.addData(_instance, "config");
- return 0;
-}
-
-gboolean
-ConfigAgent::invoke(qmf::AgentSession session, qmf::AgentEvent event, gpointer
user_data)
-{
- if (event.getType() != qmf::AGENT_METHOD) {
- session.methodSuccess(event);
- return TRUE;
- }
-
- const std::string& methodName(event.getMethodName());
-
- if (methodName == "configure") {
- int rc = mh_is_configured();
- if(rc == 0) {
- mh_configure(event.getArguments()["uri"].asString().c_str());
- }
- event.addReturnArgument("configured", rc);
- } else {
- session.raiseException(event, MH_NOT_IMPLEMENTED);
- goto bail;
- }
-
- session.methodSuccess(event);
-
-bail:
- return TRUE;
-}
diff --git a/src/config/schema.xml b/src/config/schema.xml
deleted file mode 100644
index da29d0d..0000000
--- a/src/config/schema.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<schema package="org.matahariproject">
-
- <!-- Config API -->
- <class name="Config">
- <property name="uuid" type="sstr"
access="RO" desc="Host UUID" />
- <property name="hostname" type="sstr"
access="RO" desc="Hostname" index="y"/>
- <property name="is_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="configure" desc="Send configure
method">
- <arg name="uri" dir="I"
type="sstr" />
- <arg name="configured" dir="O"
type="uint32" />
- </method>
- </class>
-</schema>
diff --git a/src/include/matahari/mh_agent_config.h
b/src/include/matahari/mh_agent_config.h
deleted file mode 100644
index 9968032..0000000
--- a/src/include/matahari/mh_agent_config.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* mh_agent_config.h - Copyright (C) 2011 Red Hat, Inc.
- * Written by Adam Stokes <astokes(a)fedoraproject.org>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU 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 software 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
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-/**
- * \file
- * \brief Config API
- * \ingroup coreapi
- */
-
-#ifndef __MH_CONFIG_H__
-#define __MH_CONFIG_H__
-
-#include <stdint.h>
-#include <stdlib.h>
-
-extern uint32_t mh_is_configured();
-extern void mh_configure(const char *uri);
-
-#endif // __MH_CONFIG_H__
diff --git a/src/include/matahari/postboot.h b/src/include/matahari/postboot.h
new file mode 100644
index 0000000..9968032
--- /dev/null
+++ b/src/include/matahari/postboot.h
@@ -0,0 +1,34 @@
+/* mh_agent_config.h - Copyright (C) 2011 Red Hat, Inc.
+ * Written by Adam Stokes <astokes(a)fedoraproject.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU 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 software 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
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/**
+ * \file
+ * \brief Config API
+ * \ingroup coreapi
+ */
+
+#ifndef __MH_CONFIG_H__
+#define __MH_CONFIG_H__
+
+#include <stdint.h>
+#include <stdlib.h>
+
+extern uint32_t mh_is_configured();
+extern void mh_configure(const char *uri);
+
+#endif // __MH_CONFIG_H__
diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt
index d33057b..86048b9 100644
--- a/src/lib/CMakeLists.txt
+++ b/src/lib/CMakeLists.txt
@@ -1,6 +1,6 @@
# Library
-set(LIBS mcommon mhost mnetwork mservice mconfig)
+set(LIBS mcommon mhost mnetwork mservice mpostboot)
include_directories(${pcre_INCLUDE_DIRS})
# See
http://sourceware.org/autobook/autobook/autobook_91.html for
@@ -22,9 +22,9 @@ add_library (mservice SHARED services.c services_${VARIANT}.c)
set_target_properties(mservice PROPERTIES SOVERSION 1.0.0)
target_link_libraries(mservice ${pcre_LIBRARIES} mcommon ${SIGAR} ${glib_LIBRARIES})
-add_library (mconfig SHARED mh_agent_config.c)
-set_target_properties(mconfig PROPERTIES SOVERSION 1.0.0)
-target_link_libraries(mconfig ${pcre_LIBRARIES} mcommon ${glib_LIBRARIES})
+add_library (mpostboot SHARED postboot.c)
+set_target_properties(mpostboot PROPERTIES SOVERSION 1.0.0)
+target_link_libraries(mpostboot ${pcre_LIBRARIES} mcommon ${glib_LIBRARIES})
if(WIN32)
foreach (lib ${LIBS})
diff --git a/src/lib/mh_agent_config.c b/src/lib/mh_agent_config.c
deleted file mode 100644
index 7102f61..0000000
--- a/src/lib/mh_agent_config.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* mh_agent_config.c - Copyright (C) 2011 Red Hat, Inc.
- * Written by Adam Stokes <astokes(a)fedoraproject.org>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU 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 software 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
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef WIN32
-#include "config.h"
-#include <stddef.h>
-#endif
-
-#include <stdint.h>
-#include <stdio.h>
-#include <glib.h>
-#include "matahari/logging.h"
-#include "matahari/mh_agent_config.h"
-
-
-MH_TRACE_INIT_DATA(mh_config);
-
-static const char *filename = "/var/lib/matahari/.mh_configured";
-
-uint32_t mh_is_configured()
-{
- int config_file_exist = 0;
-
- if(g_file_test(filename, G_FILE_TEST_EXISTS)) {
- config_file_exist = 1;
- }
- return config_file_exist;
-}
-
-void mh_configure(const char *uri)
-{
- if(!g_file_set_contents(filename, uri, -1, NULL)) {
- mh_log(LOG_DEBUG, "Unable to create file.");
- }
-}
diff --git a/src/lib/postboot.c b/src/lib/postboot.c
new file mode 100644
index 0000000..6f970fa
--- /dev/null
+++ b/src/lib/postboot.c
@@ -0,0 +1,50 @@
+/* postboot.c - Copyright (C) 2011 Red Hat, Inc.
+ * Written by Adam Stokes <astokes(a)fedoraproject.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU 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 software 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
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef WIN32
+#include "config.h"
+#include <stddef.h>
+#endif
+
+#include <stdint.h>
+#include <stdio.h>
+#include <glib.h>
+#include "matahari/logging.h"
+#include "matahari/postboot.h"
+
+
+MH_TRACE_INIT_DATA(mh_postboot);
+
+static const char *filename = "/var/lib/matahari/.mh_configured";
+
+uint32_t mh_is_configured()
+{
+ int config_file_exist = 0;
+
+ if(g_file_test(filename, G_FILE_TEST_EXISTS)) {
+ config_file_exist = 1;
+ }
+ return config_file_exist;
+}
+
+void mh_configure(const char *uri)
+{
+ if(!g_file_set_contents(filename, uri, -1, NULL)) {
+ mh_log(LOG_DEBUG, "Unable to create file.");
+ }
+}
diff --git a/src/postboot/CMakeLists.txt b/src/postboot/CMakeLists.txt
new file mode 100644
index 0000000..d097fd6
--- /dev/null
+++ b/src/postboot/CMakeLists.txt
@@ -0,0 +1,30 @@
+set(BASE "postboot")
+set(BASE_LIB "m${BASE}")
+set(QMF_AGENT "matahari-qmf-${BASE}d")
+set(QMF_CONSOLE "matahari-qmf-${BASE}-consoled")
+
+# QMF daemon
+if(WITH-QMF)
+ set(SCHEMA_SOURCES
${CMAKE_CURRENT_BINARY_DIR}/qmf/org/matahariproject/QmfPackage.cpp)
+ generate_qmf_schemas(${CMAKE_CURRENT_SOURCE_DIR}/schema.xml ${SCHEMA_SOURCES})
+ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+
+ add_executable(${QMF_AGENT} ${BASE}-qmf.cpp ${SCHEMA_SOURCES})
+ add_executable(${QMF_CONSOLE} ${BASE}-console.cpp)
+
+ target_link_libraries(${QMF_AGENT} ${BASE_LIB} mcommon_qmf)
+ target_link_libraries(${QMF_CONSOLE} mcommon_qmf)
+
+ if(NOT WIN32)
+ configure_file(${CMAKE_SOURCE_DIR}/matahari.init.in
${CMAKE_CURRENT_BINARY_DIR}/matahari-${BASE})
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/matahari-${BASE} DESTINATION ${initdir})
+ # Override BASE for matahari-config-console
+ unset(BASE)
+ set(BASE "config-console")
+ configure_file(${CMAKE_SOURCE_DIR}/matahari.init.in
${CMAKE_CURRENT_BINARY_DIR}/matahari-${BASE})
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/matahari-${BASE} DESTINATION ${initdir})
+ endif(NOT WIN32)
+
+ install(TARGETS ${QMF_AGENT} DESTINATION sbin)
+ install(TARGETS ${QMF_CONSOLE} DESTINATION sbin)
+endif(WITH-QMF)
diff --git a/src/postboot/postboot-console.cpp b/src/postboot/postboot-console.cpp
new file mode 100644
index 0000000..188c443
--- /dev/null
+++ b/src/postboot/postboot-console.cpp
@@ -0,0 +1,79 @@
+/* config-console.cpp - Copyright (c) 2011 Red Hat, Inc.
+ * Written by Adam Stokes <astokes(a)fedoraproject.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library 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
+ */
+
+#ifndef WIN32
+#include "config.h"
+#endif
+
+#include <qpid/messaging/Connection.h>
+#include <qpid/messaging/Duration.h>
+#include <qmf/ConsoleSession.h>
+#include <qmf/ConsoleEvent.h>
+#include <qmf/Agent.h>
+#include <qmf/Data.h>
+#include <qmf/DataAddr.h>
+#include <qmf/Query.h>
+#include <qpid/types/Variant.h>
+
+#include <string>
+#include <iostream>
+
+using namespace std;
+using namespace qmf;
+using qpid::types::Variant;
+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;
+ string sessionOptions;
+
+ connectionOptions["reconnect"] = true;
+
+ dataProperties["uri"] = argv[1] ? argv[1] :
"http://localhost/config/uuid";
+
+ qpid::messaging::Connection connection(brokerUrl, connectionOptions);
+ 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, 'Config']]]");
+ session.open();
+
+ Agent agent;
+ 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,
+ agent_event_addr));
+ }
+ break;
+ default: {}
+ }
+ }
+ }
+ return 0;
+}
diff --git a/src/postboot/postboot-qmf.cpp b/src/postboot/postboot-qmf.cpp
new file mode 100644
index 0000000..5e720c0
--- /dev/null
+++ b/src/postboot/postboot-qmf.cpp
@@ -0,0 +1,102 @@
+/* config-qmf.cpp - Copyright (C) 2011 Red Hat, Inc.
+ * Written by Adam Stokes <astokes(a)fedoraproject.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU 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 software 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
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef WIN32
+#include "config.h"
+#endif
+
+#include "matahari/mh_agent.h"
+
+#include "qmf/org/matahariproject/QmfPackage.h"
+
+#include <qpid/agent/ManagementAgent.h>
+
+extern "C" {
+#include <stdlib.h>
+#include <string.h>
+#include <glib.h>
+#include <glib/gprintf.h>
+#include "matahari/postboot.h"
+#include "matahari/logging.h"
+#include "matahari/network.h"
+#include "matahari/host.h"
+#include <sigar.h>
+#include <sigar_format.h>
+};
+
+class ConfigAgent : public MatahariAgent
+{
+private:
+ qmf::org::matahariproject::PackageDefinition _package;
+public:
+ virtual int setup(qmf::AgentSession session);
+ virtual gboolean invoke(qmf::AgentSession session, qmf::AgentEvent event,
+ gpointer user_data);
+};
+
+int
+main(int argc, char **argv)
+{
+ ConfigAgent agent;
+ int rc = agent.init(argc, argv, "Config");
+ if (rc == 0) {
+ agent.run();
+ }
+ return rc;
+}
+
+int
+ConfigAgent::setup(qmf::AgentSession session)
+{
+ _package.configure(session);
+ _instance = qmf::Data(_package.data_Postboot);
+
+ _instance.setProperty("hostname", mh_hostname());
+ _instance.setProperty("uuid", mh_uuid());
+ _instance.setProperty("is_configured", mh_is_configured());
+
+ _agent_session.addData(_instance, "postboot");
+ return 0;
+}
+
+gboolean
+ConfigAgent::invoke(qmf::AgentSession session, qmf::AgentEvent event, gpointer
user_data)
+{
+ if (event.getType() != qmf::AGENT_METHOD) {
+ session.methodSuccess(event);
+ return TRUE;
+ }
+
+ const std::string& methodName(event.getMethodName());
+
+ if (methodName == "configure") {
+ int rc = mh_is_configured();
+ if(rc == 0) {
+ mh_configure(event.getArguments()["uri"].asString().c_str());
+ }
+ event.addReturnArgument("configured", rc);
+ } else {
+ session.raiseException(event, MH_NOT_IMPLEMENTED);
+ goto bail;
+ }
+
+ session.methodSuccess(event);
+
+bail:
+ return TRUE;
+}
diff --git a/src/postboot/schema.xml b/src/postboot/schema.xml
new file mode 100644
index 0000000..2d930ce
--- /dev/null
+++ b/src/postboot/schema.xml
@@ -0,0 +1,16 @@
+<schema package="org.matahariproject">
+
+ <!-- Config API -->
+ <class name="Postboot">
+ <property name="uuid" type="sstr"
access="RO" desc="Host UUID" />
+ <property name="hostname" type="sstr"
access="RO" desc="Hostname" index="y"/>
+ <property name="is_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="configure" desc="Send configure
method">
+ <arg name="uri" dir="I"
type="sstr" />
+ <arg name="configured" dir="O"
type="uint32" />
+ </method>
+ </class>
+</schema>
diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt
index 7e29430..b8576dd 100644
--- a/src/tests/CMakeLists.txt
+++ b/src/tests/CMakeLists.txt
@@ -5,9 +5,11 @@ if(CXXTEST_FOUND)
ENABLE_TESTING()
CXXTEST_ADD_TEST(mh_api_network_unittest network_unittest.cpp
${CMAKE_CURRENT_SOURCE_DIR}/mh_api_network.h)
CXXTEST_ADD_TEST(mh_api_host_unittest host_unittest.cpp
${CMAKE_CURRENT_SOURCE_DIR}/mh_api_host.h)
+ CXXTEST_ADD_TEST(mh_api_postboot_unittest postboot_unittest.cpp
${CMAKE_CURRENT_SOURCE_DIR}/mh_api_postboot.h)
add_library(mh_tester SHARED test_utilities.c)
- target_link_libraries(mh_tester ${pcre_LIBRARIES} mcommon mnetwork mhost)
+ target_link_libraries(mh_tester ${pcre_LIBRARIES} mcommon mnetwork mhost mpostboot)
target_link_libraries(mh_api_network_unittest mh_tester)
target_link_libraries(mh_api_host_unittest mh_tester)
+ target_link_libraries(mh_api_postboot_unittest mh_tester)
endif(CXXTEST_FOUND)
diff --git a/src/tests/mh_api_postboot.h b/src/tests/mh_api_postboot.h
new file mode 100644
index 0000000..5e59a9b
--- /dev/null
+++ b/src/tests/mh_api_postboot.h
@@ -0,0 +1,34 @@
+#ifndef __MH_API_NETWORK_UNITTEST_H
+#define __MH_API_NETWORK_UNITTEST_H
+#include <iostream>
+#include <string>
+#include <sstream>
+#include <utility>
+#include <vector>
+#include <cstdlib>
+#include <cstdio>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <cxxtest/TestSuite.h>
+
+extern "C" {
+#include "matahari/postboot.h"
+#include <glib.h>
+#include "mh_test_utilities.h"
+};
+
+using namespace std;
+
+class MhApiPostbootSuite : public CxxTest::TestSuite
+{
+ public:
+
+ void testIsConfigured(void)
+ {
+ const char *uri = "http://matahariproject.org/testing.xml";
+ mh_configure(uri);
+ TS_ASSERT((mh_is_configured()) == 1);
+ }
+};
+
+#endif
--
1.7.5.2