|
From: <jc...@us...> - 2008-05-07 21:11:29
|
Revision: 600
http://omc.svn.sourceforge.net/omc/?rev=600&view=rev
Author: jcarey
Date: 2008-05-07 14:11:21 -0700 (Wed, 07 May 2008)
Log Message:
-----------
Implemented GetInstance for CreationData
Modified Paths:
--------------
contrib/xen-vm-builder/trunk/src/providers/vm-builder/vmcreation-data.c
Modified: contrib/xen-vm-builder/trunk/src/providers/vm-builder/vmcreation-data.c
===================================================================
--- contrib/xen-vm-builder/trunk/src/providers/vm-builder/vmcreation-data.c 2008-05-07 20:22:58 UTC (rev 599)
+++ contrib/xen-vm-builder/trunk/src/providers/vm-builder/vmcreation-data.c 2008-05-07 21:11:21 UTC (rev 600)
@@ -68,6 +68,49 @@
#define DEBUGOUT(fmt, args...)
#endif
+const char* all_cd_fields_query_with_where = "SELECT "
+ "InstanceID,"
+ "AutoMaticRecoveryAction,"
+ "AutoMaticShutdownAction,"
+ "AutoMaticStartupAction,"
+ "AutoMaticStartupActionDelay,"
+ "AutoMaticStartupActionSequenceNumber,"
+ "CPUArchitecture,"
+ "Caption,"
+ "ChangableType,"
+ "ConfigurationDataRoot,"
+ "ConfigurationFile,"
+ "ConfigurationID,"
+ "ConfigurationName,"
+ "CreationTime,"
+ "Description,"
+ "Disks,"
+ "ElementName,"
+ "ExtraConfigInfo,"
+ "ExtraInstallArgs,"
+ "GraphicsType,"
+ "GraphicsViewerType,"
+ "LogDataRoot,"
+ "MaxMemory,"
+ "Memory,"
+ "Nics,"
+ "Notes,"
+ "NumVCPUs,"
+ "OSType,"
+ "RecoveryFile,"
+ "ResponseFile,"
+ "SnapshotDataRoot,"
+ "SourceURL,"
+ "SuspendDataRoot,"
+ "SwapFileDataRoot,"
+ "UUID,"
+ "VNCPort,"
+ "VirtType,"
+ "VirtualSystemIdentifier,"
+ "VirtualSystemType "
+ "FROM CreationData "
+ "WHERE InstanceID=%Q;";
+
const char* all_cd_fields_query = "SELECT "
"InstanceID,"
"AutoMaticRecoveryAction,"
@@ -152,51 +195,6 @@
CDF_VirtualSystemType
};
-static const char* CreationDataFields[] = {
- "InstanceID",
- "AutoMaticRecoveryAction",
- "AutoMaticShutdownAction",
- "AutoMaticStartupAction",
- "AutoMaticStartupActionDelay",
- "AutoMaticStartupActionSequenceNumber",
- "CPUArchitecture",
- "Caption",
- "ChangableType",
- "ConfigurationDataRoot",
- "ConfigurationFile",
- "ConfigurationID",
- "ConfigurationName",
- "CreationTime",
- "Description",
- "Disks",
- "ElementName",
- "ExtraConfigInfo",
- "ExtraInstallArgs",
- "GraphicsType",
- "GraphicsViewerType",
- "LogDataRoot",
- "MaxMemory",
- "Memory",
- "Nics",
- "Notes",
- "NumVCPUs",
- "OSType",
- "RecoveryFile",
- "ResponseFile",
- "SnapshotDataRoot",
- "SourceURL",
- "SuspendDataRoot",
- "SwapFileDataRoot",
- "UUID",
- "VNCPort",
- "VirtType",
- "VirtualSystemIdentifier",
- "VirtualSystemType",
- NULL
-};
-
-static int CreationDataFieldCount = (sizeof(CreationDataFields)/sizeof(char*))-1;
-
/*
* Global handle to the CIM broker
* This is initialized by the CIMOM when the provider is loaded
@@ -470,19 +468,54 @@
const CMPIObjectPath* cop,
const char** properties)
{
- //CMPIInstance* instance;
+ CMPIInstance* instance;
//CMPIObjectPath *objectpath;
CMPIStatus status = {CMPI_RC_OK, NULL};
- //char *ns = (char*) CMGetCharPtr(CMGetNameSpace(cop, NULL));
- const char *className;
+ char *ns = (char*) CMGetCharPtr(CMGetNameSpace(cop, NULL));
+ const char *className, *iid;
+ char *query;
+ CMPIData key;
+ int cc;
+ VMBDBCtx dbctx;
+ char err_msg[256];
DEBUGOUT("GetInstance() called\n");
className = CMGetCharPtr(CMGetClassName(cop, NULL));
if (strcasecmp(className, "XEN_VMBuilderVirtualSystemCreationData") == 0)
{
- OMC_SETSTATUS(_broker, &status, CMPI_RC_ERR_NOT_FOUND,
- "Instance does not exists");
+ key = CMGetKey(cop, "InstancdID", &status);
+ if (status.rc != CMPI_RC_OK || CMIsNullValue(key)) {
+ DEBUGOUT("GetInstance(): CMGetKey(\"InstanceID\") failed - %s\n", CMGetCharPtr(status.msg));
+ OMC_SETSTATUS(_broker, &status, CMPI_RC_ERR_NOT_FOUND, "Cannot get InstanceID property");
+ return status;
+ }
+
+ iid = CMGetCharPtr(key.value.string);
+ if (!iid || strlen(iid) == 0) {
+ OMC_SETSTATUS(_broker, &status, CMPI_RC_ERR_NOT_FOUND, "Empty InstanceID property");
+ return status;
+ }
+
+ query = db_create_formatted_sql(all_cd_fields_query_with_where, iid);
+ cc = db_create_select_results(&dbctx, query, err_msg, sizeof(err_msg));
+ db_destroy_formatted_sql(query);
+ if (cc != 0) {
+ DEBUGOUT("GetInstance(): Failed to connect to database: %s",
+ err_msg);
+ OMC_SETSTATUS(_broker, &status, CMPI_RC_ERROR_SYSTEM, err_msg);
+ return status;
+ }
+ if (db_results_have_more_rows(dbctx)) {
+ instance = omccmpiNewInstance(_broker, ns, "XEN_VMBuilderVirtualSystemCreationData",
+ creation_data_keys, properties, &status);
+ _fillInstance(dbctx, instance);
+ CMReturnInstance(results, instance);
+ }
+ else {
+ OMC_SETSTATUS(_broker, &status, CMPI_RC_ERR_NOT_FOUND, "Instance Not Found");
+ }
+ db_destroy_select_results(dbctx);
}
DEBUGOUT("Leaving GetInstance(): %s\n", (status.rc == CMPI_RC_OK)? "succeeded":"failed");
return status;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jc...@us...> - 2008-05-09 16:35:50
|
Revision: 603
http://omc.svn.sourceforge.net/omc/?rev=603&view=rev
Author: jcarey
Date: 2008-05-09 09:35:47 -0700 (Fri, 09 May 2008)
Log Message:
-----------
Implemented delete instance
Modified Paths:
--------------
contrib/xen-vm-builder/trunk/src/providers/vm-builder/vmcreation-data.c
Modified: contrib/xen-vm-builder/trunk/src/providers/vm-builder/vmcreation-data.c
===================================================================
--- contrib/xen-vm-builder/trunk/src/providers/vm-builder/vmcreation-data.c 2008-05-08 23:36:59 UTC (rev 602)
+++ contrib/xen-vm-builder/trunk/src/providers/vm-builder/vmcreation-data.c 2008-05-09 16:35:47 UTC (rev 603)
@@ -243,7 +243,7 @@
char err_msg[256];
char* iid;
- cc = db_create_select_results(&dbctx, "select InstanceID from CreationData",
+ cc = db_create_select_results(&dbctx, "SELECT InstanceID FROM CreationData",
err_msg, sizeof(err_msg));
if (cc != 0) {
DEBUGOUT("EnumInstanceNames(): Failed to connect to database: %s",
@@ -535,7 +535,7 @@
return status;
}
- query = db_create_formatted_sql("Select InstanceID from CreationData "
+ query = db_create_formatted_sql("SELECT InstanceID FROM CreationData "
"WHERE InstanceID=%Q;", iid);
cc = db_create_select_results(&dbctx, query, wkbfr, sizeof(wkbfr));
db_destroy_formatted_sql(query);
@@ -650,6 +650,7 @@
omcStrBuf_destroy(pstrbuf);
}
+ DEBUGOUT("CreateInstance() returning\n");
return status;
}
@@ -668,7 +669,55 @@
const CMPIResult* results,
const CMPIObjectPath* cop)
{
- CMPIStatus status = {CMPI_RC_ERR_NOT_SUPPORTED, NULL};
+ CMPIStatus status = {CMPI_RC_OK, NULL};
+ const char *className, *iid;
+ char *query, err_msg[256];
+ CMPIData key;
+ int cc;
+ VMBDBCtx dbctx;
+
+ DEBUGOUT("DeleteInstance() called...\n");
+ className = CMGetCharPtr(CMGetClassName(cop, NULL));
+ if (strcasecmp(className, "XEN_VMBuilderVirtualSystemCreationData") == 0)
+ {
+ key = CMGetKey(cop, "InstanceID", &status);
+ if (status.rc != CMPI_RC_OK || CMIsNullValue(key)) {
+ DEBUGOUT("DeleteInstance(): CMGetKey(\"InstanceID\") failed - %d\n", status.rc);
+ OMC_SETSTATUS(_broker, &status, CMPI_RC_ERR_NOT_FOUND, "Cannot get InstanceID property");
+ return status;
+ }
+
+ iid = CMGetCharPtr(key.value.string);
+ if (!iid || !strlen(iid)) {
+ OMC_SETSTATUS(_broker, &status, CMPI_RC_ERR_NOT_FOUND, "Empty InstanceID property");
+ return status;
+ }
+
+ query = db_create_formatted_sql("SELECT InstanceID FROM CreationData "
+ "WHERE InstanceID=%Q", iid);
+ cc = db_create_select_results(&dbctx, query, err_msg, sizeof(err_msg));
+ db_destroy_formatted_sql(query);
+ if (cc != 0) {
+ DEBUGOUT("DeleteInstance(): Failed to connect to database: %s",
+ err_msg);
+ OMC_SETSTATUS(_broker, &status, CMPI_RC_ERROR_SYSTEM, err_msg);
+ return status;
+ }
+ cc = db_results_have_more_rows(dbctx);
+ db_destroy_select_results(dbctx);
+ if (!cc) {
+ OMC_SETSTATUS(_broker, &status, CMPI_RC_ERR_NOT_FOUND, "Instance Not Found");
+ return status;
+ }
+ query = db_create_formatted_sql("DELETE FROM CreationData WHERE InstanceID=%Q", iid);
+ if (db_exec(query, err_msg, sizeof(err_msg)) < 0LL) {
+ DEBUGOUT("DeleteInstance(): failed deleting record from "
+ "database: %s", err_msg);
+ OMC_SETSTATUS(_broker, &status, CMPI_RC_ERROR_SYSTEM, err_msg);
+ }
+ }
+
+ DEBUGOUT("DeleteInstance() returning\n");
return status;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jc...@us...> - 2008-05-09 22:41:33
|
Revision: 604
http://omc.svn.sourceforge.net/omc/?rev=604&view=rev
Author: jcarey
Date: 2008-05-09 15:41:26 -0700 (Fri, 09 May 2008)
Log Message:
-----------
dev chk pnt
Modified Paths:
--------------
contrib/xen-vm-builder/trunk/src/providers/vm-builder/vmcreation-data.c
Modified: contrib/xen-vm-builder/trunk/src/providers/vm-builder/vmcreation-data.c
===================================================================
--- contrib/xen-vm-builder/trunk/src/providers/vm-builder/vmcreation-data.c 2008-05-09 16:35:47 UTC (rev 603)
+++ contrib/xen-vm-builder/trunk/src/providers/vm-builder/vmcreation-data.c 2008-05-09 22:41:26 UTC (rev 604)
@@ -163,6 +163,120 @@
/*****************************************************************************/
static void
+add_u8_prop_to_query(omcStrBuf* pstrbuf, const CMPIInstance* instance,
+ const char* prop_name)
+{
+ CMPIData data = CMGetProperty(instance, prop_name, NULL);
+ if (!CMIsNullValue(data)) {
+ char wkbfr[32];
+ snprintf(wkbfr, sizeof(wkbfr), "%u,", data.value.uint8);
+ omcStrBuf_cat(pstrbuf, wkbfr, 0);
+ } else {
+ omcStrBuf_cat(pstrbuf, "NULL,", 0);
+ }
+}
+
+/*****************************************************************************/
+static void
+add_u16_prop_to_query(omcStrBuf* pstrbuf, const CMPIInstance* instance,
+ const char* prop_name)
+{
+ CMPIData data = CMGetProperty(instance, prop_name, NULL);
+ if (!CMIsNullValue(data)) {
+ char wkbfr[32];
+ snprintf(wkbfr, sizeof(wkbfr), "%u,", data.value.uint16);
+ omcStrBuf_cat(pstrbuf, wkbfr, 0);
+ } else {
+ omcStrBuf_cat(pstrbuf, "NULL,", 0);
+ }
+}
+
+/*****************************************************************************/
+static void
+add_u32_prop_to_query(omcStrBuf* pstrbuf, const CMPIInstance* instance,
+ const char* prop_name)
+{
+ CMPIData data = CMGetProperty(instance, prop_name, NULL);
+ if (!CMIsNullValue(data)) {
+ char wkbfr[32];
+ snprintf(wkbfr, sizeof(wkbfr), "%u,", data.value.uint32);
+ omcStrBuf_cat(pstrbuf, wkbfr, 0);
+ } else {
+ omcStrBuf_cat(pstrbuf, "NULL,", 0);
+ }
+}
+
+/*****************************************************************************/
+static void
+add_str_prop_to_query(omcStrBuf* pstrbuf, const CMPIInstance* instance,
+ const char* prop_name, int endstmt)
+{
+ CMPIData data;
+ const char* pnnfmt;
+ const char* pnullfmt;
+ if (endstmt) {
+ pnnfmt = "%Q";
+ pnullfmt = "NULL";
+ } else {
+ pnnfmt = "%Q,";
+ pnullfmt = "NULL,";
+ }
+ data = CMGetProperty(instance, prop_name, NULL);
+ if (!CMIsNullValue(data)) {
+ char *p = (char*) CMGetCharPtr(data.value.string);
+ db_sql_insert(pstrbuf, pnnfmt, p);
+ } else {
+ omcStrBuf_cat(pstrbuf, pnullfmt, 0);
+ }
+}
+
+/*****************************************************************************/
+static void
+add_stra_prop_to_query(omcStrBuf* pstrbuf, const CMPIInstance* instance,
+ const char* prop_name)
+{
+ CMPIData data = CMGetProperty(instance, prop_name, NULL);
+ if (!CMIsNullValue(data)) {
+ omcStrBuf* lstrbuf = stringArray2Str(_broker, data.value.array);
+ if (lstrbuf) {
+ db_sql_insert(pstrbuf, "%Q,", lstrbuf->bfr);
+ omcStrBuf_destroy(lstrbuf);
+ } else {
+ omcStrBuf_cat(pstrbuf, "NULL,", 0);
+ }
+ } else {
+ omcStrBuf_cat(pstrbuf, "NULL,", 0);
+ }
+}
+
+
+/*****************************************************************************/
+static int
+instance_on_file(const char* iid, CMPIStatus *pstatus)
+{
+ int cc;
+ char *query, err_msg[256];
+ VMBDBCtx dbctx;
+
+ OMC_SETSTATUS(_broker, pstatus, CMPI_RC_OK, "No Error");
+ query = db_create_formatted_sql("SELECT InstanceID FROM CreationData "
+ "WHERE InstanceID=%Q", iid);
+ cc = db_create_select_results(&dbctx, query, err_msg, sizeof(err_msg));
+ db_destroy_formatted_sql(query);
+ if (cc != 0) {
+ DEBUGOUT("instance_on_file(): Failed to connect to database: %s",
+ err_msg);
+ OMC_SETSTATUS(_broker, pstatus, CMPI_RC_ERROR_SYSTEM, err_msg);
+ return -1;
+ }
+ cc = db_results_have_more_rows(dbctx);
+ db_destroy_select_results(dbctx);
+ return cc;
+}
+
+
+/*****************************************************************************/
+static void
_fillInstance(
VMBDBCtx dbctx,
CMPIInstance* instance)
@@ -384,114 +498,301 @@
return status;
}
-/******************************************************************************
-ModifyInstance() - modify instance
- params: CMPIInstanceMI* self: [in] Handle to this provider
- CMPIContext* context: [in] any additional context info
- CMPIResult* results: [out] Results
- CMPIObjectPath* cop: [in] target namespace and classname, and objectpath
- CMPIInstance* newInst: [in] new (modified) instance data
-******************************************************************************/
-static CMPIStatus
-ModifyInstance(
- CMPIInstanceMI* self,
- const CMPIContext* context,
- const CMPIResult* results,
- const CMPIObjectPath* cop,
- const CMPIInstance* newinstance,
- const char** properties)
+
+/*****************************************************************************/
+static int
+get_mod_property(const CMPIInstance* ci, const char* prop_name, const char** properties,
+ CMPIData* pdata)
{
- CMPIStatus status = {CMPI_RC_ERR_NOT_SUPPORTED, NULL};
- return status;
+ if (properties) {
+ int i, found = 0;
+ for (i = 0; properties[i]; i++) {
+ if (strcasecmp(prop_name, properties[i]) == 0) {
+ found = 1;
+ break;
+ }
+ }
+ if (!found) {
+ return 0;
+ }
+ }
+ *pdata = CMGetProperty(ci, prop_name, NULL);
+ return 1;
}
/*****************************************************************************/
-static void
-add_u8_prop_to_query(omcStrBuf* pstrbuf, const CMPIInstance* instance,
- const char* prop_name)
+void
+mod_add_u16_prop(omcStrArray* pstra, const CMPIInstance* modified_instance,
+ const char* prop_name, const char** properties)
{
- CMPIData data = CMGetProperty(instance, prop_name, NULL);
+ char wkbfr[256];
+ CMPIData data;
+ if (!get_mod_property(modified_instance, prop_name, properties, &data)) {
+ return;
+ }
if (!CMIsNullValue(data)) {
- char wkbfr[32];
- snprintf(wkbfr, sizeof(wkbfr), "%u,", data.value.uint8);
- omcStrBuf_cat(pstrbuf, wkbfr, 0);
+ snprintf(wkbfr, sizeof(wkbfr), "%s=%u", prop_name, data.value.uint16);
} else {
- omcStrBuf_cat(pstrbuf, "NULL,", 0);
+ snprintf(wkbfr, sizeof(wkbfr), "%s=NULL", prop_name);
}
+ omcStrArray_append(pstra, wkbfr);
}
/*****************************************************************************/
-static void
-add_u16_prop_to_query(omcStrBuf* pstrbuf, const CMPIInstance* instance,
- const char* prop_name)
+void
+mod_add_str_prop(omcStrArray* pstra, const CMPIInstance* modified_instance,
+ const char* prop_name, const char** properties)
{
- CMPIData data = CMGetProperty(instance, prop_name, NULL);
+ CMPIData data;
+ if (!get_mod_property(modified_instance, prop_name, properties, &data)) {
+ return;
+ }
if (!CMIsNullValue(data)) {
- char wkbfr[32];
- snprintf(wkbfr, sizeof(wkbfr), "%u,", data.value.uint16);
- omcStrBuf_cat(pstrbuf, wkbfr, 0);
+ char *p = (char*) CMGetCharPtr(data.value.string);
+ char* sql = db_create_formatted_sql("%s=%Q", prop_name, p);
+ omcStrArray_append(pstra, sql);
+ db_destroy_formatted_sql(sql);
} else {
- omcStrBuf_cat(pstrbuf, "NULL,", 0);
+ char wkbfr[256];
+ snprintf(wkbfr, sizeof(wkbfr), "%s=NULL", prop_name);
+ omcStrArray_append(pstra, wkbfr);
}
}
/*****************************************************************************/
-static void
-add_u32_prop_to_query(omcStrBuf* pstrbuf, const CMPIInstance* instance,
- const char* prop_name)
+void
+mod_add_stra_prop(omcStrArray* pstra, const CMPIInstance* modified_instance,
+ const char* prop_name, const char** properties)
{
- CMPIData data = CMGetProperty(instance, prop_name, NULL);
+ CMPIData data;
+ if (!get_mod_property(modified_instance, prop_name, properties, &data)) {
+ return;
+ }
if (!CMIsNullValue(data)) {
- char wkbfr[32];
- snprintf(wkbfr, sizeof(wkbfr), "%u,", data.value.uint32);
- omcStrBuf_cat(pstrbuf, wkbfr, 0);
+ omcStrBuf* lstrbuf = stringArray2Str(_broker, data.value.array);
+ if (lstrbuf) {
+ char* sql = db_create_formatted_sql("%s=%Q", prop_name, lstrbuf->bfr);
+ omcStrBuf_destroy(lstrbuf);
+ omcStrArray_append(pstra, sql);
+ db_destroy_formatted_sql(sql);
+ } else {
+ char wkbfr[256];
+ snprintf(wkbfr, sizeof(wkbfr), "%s=NULL", prop_name);
+ omcStrArray_append(pstra, wkbfr);
+ }
} else {
- omcStrBuf_cat(pstrbuf, "NULL,", 0);
+ char wkbfr[256];
+ snprintf(wkbfr, sizeof(wkbfr), "%s=NULL", prop_name);
+ omcStrArray_append(pstra, wkbfr);
}
}
/*****************************************************************************/
-static void
-add_str_prop_to_query(omcStrBuf* pstrbuf, const CMPIInstance* instance,
- const char* prop_name, int endstmt)
+void
+mod_add_u32_prop(omcStrArray* pstra, const CMPIInstance* modified_instance,
+ const char* prop_name, const char** properties)
{
+ char wkbfr[256];
CMPIData data;
- const char* pnnfmt;
- const char* pnullfmt;
- if (endstmt) {
- pnnfmt = "%Q";
- pnullfmt = "NULL";
- } else {
- pnnfmt = "%Q,";
- pnullfmt = "NULL,";
+ if (!get_mod_property(modified_instance, prop_name, properties, &data)) {
+ return;
}
- data = CMGetProperty(instance, prop_name, NULL);
if (!CMIsNullValue(data)) {
- char *p = (char*) CMGetCharPtr(data.value.string);
- db_sql_insert(pstrbuf, pnnfmt, p);
+ snprintf(wkbfr, sizeof(wkbfr), "%s=%u", prop_name, data.value.uint32);
} else {
- omcStrBuf_cat(pstrbuf, pnullfmt, 0);
+ snprintf(wkbfr, sizeof(wkbfr), "%s=NULL", prop_name);
}
+ omcStrArray_append(pstra, wkbfr);
}
-/*****************************************************************************/
-static void
-add_stra_prop_to_query(omcStrBuf* pstrbuf, const CMPIInstance* instance,
- const char* prop_name)
+/******************************************************************************
+ModifyInstance() - modify instance
+ params: CMPIInstanceMI* self: [in] Handle to this provider
+ CMPIContext* context: [in] any additional context info
+ CMPIResult* results: [out] Results
+ CMPIObjectPath* cop: [in] target namespace and classname, and objectpath
+ CMPIInstance* newInst: [in] new (modified) instance data
+******************************************************************************/
+static CMPIStatus
+ModifyInstance(
+ CMPIInstanceMI* self,
+ const CMPIContext* context,
+ const CMPIResult* results,
+ const CMPIObjectPath* cop,
+ const CMPIInstance* modified_instance,
+ const char** properties)
{
- CMPIData data = CMGetProperty(instance, prop_name, NULL);
- if (!CMIsNullValue(data)) {
- omcStrBuf* lstrbuf = stringArray2Str(_broker, data.value.array);
- if (lstrbuf) {
- db_sql_insert(pstrbuf, "%Q,", lstrbuf->bfr);
- omcStrBuf_destroy(lstrbuf);
- } else {
- omcStrBuf_cat(pstrbuf, "NULL,", 0);
+ CMPIStatus status = {CMPI_RC_OK, NULL};
+ const char *className, *iid;
+ char *query, wkbfr[256];
+ CMPIData key, data;
+ int cc, prop_cnt, cur_prop_cnt = 0;
+ VMBDBCtx dbctx;
+ omcStrBuf *pstrbuf;
+ omcStrArray *pstra;
+
+ DEBUGOUT("ModifyInstance() called...\n");
+ if (properties) {
+ for (prop_cnt = 0; properties[prop_cnt]; prop_cnt++) {
+ /* empty */
}
+ if (!prop_cnt) {
+ DEBUGOUT("ModifyInstance() empty prop list. Did Nothing\n");
+ return status;
+ }
} else {
- omcStrBuf_cat(pstrbuf, "NULL,", 0);
+ prop_cnt = CMGetPropertyCount(modified_instance, &status);
+ if (status.rc != CMPI_RC_OK) {
+ DEBUGOUT("ModifyInstance(): Get Property Count return %d\n", status.rc);
+ OMC_SETSTATUS(_broker, &status, CMPI_RC_ERR_NOT_FOUND,
+ "CMGetPropertyCount failed");
+ return status;
+ }
}
+
+ if (properties && !properties[0]) {
+ DEBUGOUT("ModifyInstance() empty prop list. Did Nothing\n");
+ return status;
+ }
+
+ className = CMGetCharPtr(CMGetClassName(cop, NULL));
+ if (strcasecmp(className, "XEN_VMBuilderVirtualSystemCreationData") == 0)
+ {
+ key = CMGetKey(cop, "InstanceID", &status);
+ if (status.rc != CMPI_RC_OK || CMIsNullValue(key)) {
+ DEBUGOUT("ModifyInstance(): CMGetKey(\"InstanceID\") failed - %d\n", status.rc);
+ OMC_SETSTATUS(_broker, &status, CMPI_RC_ERR_NOT_FOUND, "Cannot get InstanceID property");
+ return status;
+ }
+
+ iid = CMGetCharPtr(key.value.string);
+ if (!iid || !strlen(iid)) {
+ OMC_SETSTATUS(_broker, &status, CMPI_RC_ERR_NOT_FOUND, "Empty InstanceID property");
+ return status;
+ }
+ if ((cc = instance_on_file(iid, &status)) < 0) {
+ return status;
+ }
+ if (!cc) {
+ OMC_SETSTATUS(_broker, &status, CMPI_RC_ERR_NOT_FOUND, "Instance Not Found");
+ return status;
+ }
+
+ pstra = omcStrArray_create();
+ if (!pstra) {
+ CMSetStatusWithChars(_broker, &status, CMPI_RC_ERROR_SYSTEM,
+ "Failed to create string array");
+ return status;
+ }
+
+ pstrbuf = omcStrBuf_create();
+ if (!pstrbuf) {
+ CMSetStatusWithChars(_broker, &status, CMPI_RC_ERROR_SYSTEM,
+ "Failed to create string buffer");
+ omcStrArray_destroy(pstra);
+ return status;
+ }
+
+ mod_add_u16_prop(pstra, modified_instance, "AutoMaticRecoveryAction", properties);
+ mod_add_u16_prop(pstra, modified_instance, "AutoMaticShutdownAction", properties);
+ mod_add_u16_prop(pstra, modified_instance, "AutoMaticStartupAction", properties);
+ if (get_mod_property(modified_instance, "AutoMaticStartupActionDelay", properties, &data)) {
+ if (!CMIsNullValue(data)) {
+ if (!CMIsInterval(data.value.dateTime, &status)) {
+ CMSetStatusWithChars(_broker, &status,
+ CMPI_RC_ERR_INVALID_PARAMETER,
+ "'AutoMaticStartupActionDelay' must be an interval");
+ omcStrBuf_destroy(pstrbuf);
+ omcStrArray_destroy(pstra);
+ return status;
+ }
+ CMPIUint64 wku64 = CMGetBinaryFormat(data.value.dateTime, &status);
+ snprintf(wkbfr, sizeof(wkbfr), "AutoMaticStartupActionDelay=%llu", wku64);
+ omcStrArray_append(pstra, wkbfr);
+ } else {
+ omcStrArray_append(pstra, "AutoMaticStartupActionDelay=NULL");
+ }
+ }
+ mod_add_u16_prop(pstra, modified_instance, "AutoMaticStartupAction", properties);
+ mod_add_str_prop(pstra, modified_instance, "CPUArchitecture", properties);
+ mod_add_str_prop(pstra, modified_instance, "Caption", properties);
+ mod_add_u16_prop(pstra, modified_instance, "ChangeableType", properties);
+ mod_add_str_prop(pstra, modified_instance, "ConfigurationDataRoot", properties);
+ mod_add_str_prop(pstra, modified_instance, "ConfigurationFile", properties);
+ mod_add_str_prop(pstra, modified_instance, "ConfigurationID", properties);
+ mod_add_str_prop(pstra, modified_instance, "ConfigurationName", properties);
+ if (get_mod_property(modified_instance, "CreationTime", properties, &data)) {
+ if (!CMIsNullValue(data)) {
+ if (CMIsInterval(data.value.dateTime, &status)) {
+ CMSetStatusWithChars(_broker, &status,
+ CMPI_RC_ERR_INVALID_PARAMETER,
+ "'CreationTime' cannot be an interval");
+ omcStrBuf_destroy(pstrbuf);
+ omcStrArray_destroy(pstra);
+ return status;
+ }
+ CMPIUint64 wku64 = CMGetBinaryFormat(data.value.dateTime, &status);
+ snprintf(wkbfr, sizeof(wkbfr), "CreationTime=%llu", wku64);
+ omcStrArray_append(pstra, wkbfr);
+ } else {
+ omcStrArray_append(pstra, "CreationTime=NULL");
+ }
+ }
+ mod_add_str_prop(pstra, modified_instance, "Description", properties);
+ mod_add_stra_prop(pstra, modified_instance, "Disks", properties);
+ mod_add_str_prop(pstra, modified_instance, "ElementName", properties);
+ mod_add_stra_prop(pstra, modified_instance, "ExtraConfigInfo", properties);
+ mod_add_str_prop(pstra, modified_instance, "ExtraInstallArgs", properties);
+ mod_add_u32_prop(pstra, modified_instance, "GraphicsType", properties);
+ mod_add_u32_prop(pstra, modified_instance, "GraphicsViewerType", properties);
+ mod_add_str_prop(pstra, modified_instance, "LogDataRoot", properties);
+
+ mod_add_u32_prop(pstra, modified_instance, "MaxMemory", properties);
+ mod_add_u32_prop(pstra, modified_instance, "Memory", properties);
+
+/*
+
+
+ omcStrBuf_cat(pstrbuf, "UPDATE CreationData SET ", 0);
+
+
+
+ get_mod_property(modified_instance, "Nics", properties, &data)
+ get_mod_property(modified_instance, "Notes", properties, &data)
+ get_mod_property(modified_instance, "NumVCPUs", properties, &data)
+ get_mod_property(modified_instance, "OSType", properties, &data)
+ get_mod_property(modified_instance, "RecoveryFile", properties, &data)
+ get_mod_property(modified_instance, "ResponseFile", properties, &data)
+ get_mod_property(modified_instance, "SnapshotDataRoot", properties, &data)
+ get_mod_property(modified_instance, "SourceURL", properties, &data)
+ get_mod_property(modified_instance, "SuspendDataRoot", properties, &data)
+ get_mod_property(modified_instance, "SwapFileDataRoot", properties, &data)
+ get_mod_property(modified_instance, "UUID", properties, &data)
+ get_mod_property(modified_instance, "VNCPort", properties, &data)
+ get_mod_property(modified_instance, "VirtType", properties, &data)
+ get_mod_property(modified_instance, "VirtualSystemIdentifier", properties, &data)
+ get_mod_property(modified_instance, "VirtualSystemType", properties, &data)
+
+
+*/
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }
+
+ DEBUGOUT("ModifyInstance() returning\n");
+ return status;
}
/******************************************************************************
@@ -535,18 +836,9 @@
return status;
}
- query = db_create_formatted_sql("SELECT InstanceID FROM CreationData "
- "WHERE InstanceID=%Q;", iid);
- cc = db_create_select_results(&dbctx, query, wkbfr, sizeof(wkbfr));
- db_destroy_formatted_sql(query);
- if (cc != 0) {
- DEBUGOUT("CreateInstance(): Failed to connect to database: %s",
- wkbfr);
- OMC_SETSTATUS(_broker, &status, CMPI_RC_ERROR_SYSTEM, wkbfr);
+ if ((cc = instance_on_file(iid, &status)) < 0) {
return status;
}
- cc = db_results_have_more_rows(dbctx);
- db_destroy_select_results(dbctx);
if (cc) {
/* Got hit on InstanceID - Already on file */
CMSetStatus(&status, CMPI_RC_ERR_ALREADY_EXISTS);
@@ -692,29 +984,21 @@
OMC_SETSTATUS(_broker, &status, CMPI_RC_ERR_NOT_FOUND, "Empty InstanceID property");
return status;
}
-
- query = db_create_formatted_sql("SELECT InstanceID FROM CreationData "
- "WHERE InstanceID=%Q", iid);
- cc = db_create_select_results(&dbctx, query, err_msg, sizeof(err_msg));
- db_destroy_formatted_sql(query);
- if (cc != 0) {
- DEBUGOUT("DeleteInstance(): Failed to connect to database: %s",
- err_msg);
- OMC_SETSTATUS(_broker, &status, CMPI_RC_ERROR_SYSTEM, err_msg);
+ if ((cc = instance_on_file(iid, &status)) < 0) {
return status;
}
- cc = db_results_have_more_rows(dbctx);
- db_destroy_select_results(dbctx);
if (!cc) {
OMC_SETSTATUS(_broker, &status, CMPI_RC_ERR_NOT_FOUND, "Instance Not Found");
return status;
}
+
query = db_create_formatted_sql("DELETE FROM CreationData WHERE InstanceID=%Q", iid);
if (db_exec(query, err_msg, sizeof(err_msg)) < 0LL) {
DEBUGOUT("DeleteInstance(): failed deleting record from "
"database: %s", err_msg);
OMC_SETSTATUS(_broker, &status, CMPI_RC_ERROR_SYSTEM, err_msg);
}
+ db_destroy_formatted_sql(query);
}
DEBUGOUT("DeleteInstance() returning\n");
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jc...@us...> - 2008-05-12 16:10:17
|
Revision: 605
http://omc.svn.sourceforge.net/omc/?rev=605&view=rev
Author: jcarey
Date: 2008-05-12 09:09:06 -0700 (Mon, 12 May 2008)
Log Message:
-----------
implemented modify instance
Modified Paths:
--------------
contrib/xen-vm-builder/trunk/src/providers/vm-builder/vmcreation-data.c
Modified: contrib/xen-vm-builder/trunk/src/providers/vm-builder/vmcreation-data.c
===================================================================
--- contrib/xen-vm-builder/trunk/src/providers/vm-builder/vmcreation-data.c 2008-05-09 22:41:26 UTC (rev 604)
+++ contrib/xen-vm-builder/trunk/src/providers/vm-builder/vmcreation-data.c 2008-05-12 16:09:06 UTC (rev 605)
@@ -541,6 +541,24 @@
/*****************************************************************************/
void
+mod_add_u8_prop(omcStrArray* pstra, const CMPIInstance* modified_instance,
+ const char* prop_name, const char** properties)
+{
+ char wkbfr[256];
+ CMPIData data;
+ if (!get_mod_property(modified_instance, prop_name, properties, &data)) {
+ return;
+ }
+ if (!CMIsNullValue(data)) {
+ snprintf(wkbfr, sizeof(wkbfr), "%s=%u", prop_name, data.value.uint8);
+ } else {
+ snprintf(wkbfr, sizeof(wkbfr), "%s=NULL", prop_name);
+ }
+ omcStrArray_append(pstra, wkbfr);
+}
+
+/*****************************************************************************/
+void
mod_add_str_prop(omcStrArray* pstra, const CMPIInstance* modified_instance,
const char* prop_name, const char** properties)
{
@@ -627,8 +645,7 @@
const char *className, *iid;
char *query, wkbfr[256];
CMPIData key, data;
- int cc, prop_cnt, cur_prop_cnt = 0;
- VMBDBCtx dbctx;
+ int i, size, cc, prop_cnt;
omcStrBuf *pstrbuf;
omcStrArray *pstra;
@@ -714,7 +731,8 @@
omcStrArray_append(pstra, "AutoMaticStartupActionDelay=NULL");
}
}
- mod_add_u16_prop(pstra, modified_instance, "AutoMaticStartupAction", properties);
+ mod_add_u16_prop(pstra, modified_instance,
+ "AutomaticStartupActionSequenceNumber", properties);
mod_add_str_prop(pstra, modified_instance, "CPUArchitecture", properties);
mod_add_str_prop(pstra, modified_instance, "Caption", properties);
mod_add_u16_prop(pstra, modified_instance, "ChangeableType", properties);
@@ -747,48 +765,41 @@
mod_add_u32_prop(pstra, modified_instance, "GraphicsType", properties);
mod_add_u32_prop(pstra, modified_instance, "GraphicsViewerType", properties);
mod_add_str_prop(pstra, modified_instance, "LogDataRoot", properties);
-
mod_add_u32_prop(pstra, modified_instance, "MaxMemory", properties);
mod_add_u32_prop(pstra, modified_instance, "Memory", properties);
+ mod_add_stra_prop(pstra, modified_instance, "Nics", properties);
+ mod_add_stra_prop(pstra, modified_instance, "Notes", properties);
+ mod_add_u8_prop(pstra, modified_instance, "NumVCPUs", properties);
+ mod_add_u32_prop(pstra, modified_instance, "OSType", properties);
+ mod_add_str_prop(pstra, modified_instance, "RecoveryFile", properties);
+ mod_add_str_prop(pstra, modified_instance, "ResponseFile", properties);
+ mod_add_str_prop(pstra, modified_instance, "SnapshotDataRoot", properties);
+ mod_add_str_prop(pstra, modified_instance, "SourceURL", properties);
+ mod_add_str_prop(pstra, modified_instance, "SuspendDataRoot", properties);
+ mod_add_str_prop(pstra, modified_instance, "SwapFileDataRoot", properties);
+ mod_add_str_prop(pstra, modified_instance, "UUID", properties);
+ mod_add_u32_prop(pstra, modified_instance, "VNCPort", properties);
+ mod_add_u32_prop(pstra, modified_instance, "VirtType", properties);
+ mod_add_str_prop(pstra, modified_instance, "VirtualSystemIdentifier", properties);
+ mod_add_str_prop(pstra, modified_instance, "VirtualSystemType", properties);
-/*
-
-
omcStrBuf_cat(pstrbuf, "UPDATE CreationData SET ", 0);
-
-
-
- get_mod_property(modified_instance, "Nics", properties, &data)
- get_mod_property(modified_instance, "Notes", properties, &data)
- get_mod_property(modified_instance, "NumVCPUs", properties, &data)
- get_mod_property(modified_instance, "OSType", properties, &data)
- get_mod_property(modified_instance, "RecoveryFile", properties, &data)
- get_mod_property(modified_instance, "ResponseFile", properties, &data)
- get_mod_property(modified_instance, "SnapshotDataRoot", properties, &data)
- get_mod_property(modified_instance, "SourceURL", properties, &data)
- get_mod_property(modified_instance, "SuspendDataRoot", properties, &data)
- get_mod_property(modified_instance, "SwapFileDataRoot", properties, &data)
- get_mod_property(modified_instance, "UUID", properties, &data)
- get_mod_property(modified_instance, "VNCPort", properties, &data)
- get_mod_property(modified_instance, "VirtType", properties, &data)
- get_mod_property(modified_instance, "VirtualSystemIdentifier", properties, &data)
- get_mod_property(modified_instance, "VirtualSystemType", properties, &data)
-
-
-*/
-
-
-
-
-
-
-
-
-
-
-
-
-
+ size = omcStrArray_size(pstra);
+ omcStrBuf_cat(pstrbuf, omcStrArray_get_element(pstra, (size_t)0), 0);
+ for(i = 1; i < size; i++) {
+ omcStrBuf_cat(pstrbuf, ",", 0);
+ omcStrBuf_cat(pstrbuf, omcStrArray_get_element(pstra, (size_t)i), 0);
+ }
+ omcStrArray_destroy(pstra);
+ query = db_create_formatted_sql(" WHERE InstanceID=%Q;", iid);
+ omcStrBuf_cat(pstrbuf, query, 0);
+ db_destroy_formatted_sql(query);
+ if (db_exec(pstrbuf->bfr, wkbfr, sizeof(wkbfr)) < 0LL) {
+ DEBUGOUT("ModifyInstance(): failed updating database record: %s\n",
+ wkbfr);
+ OMC_SETSTATUS(_broker, &status, CMPI_RC_ERROR_SYSTEM, wkbfr);
+ }
+ omcStrBuf_destroy(pstrbuf);
}
DEBUGOUT("ModifyInstance() returning\n");
@@ -815,9 +826,7 @@
CMPIStatus status = {CMPI_RC_OK, NULL};
char *ns = (char*) CMGetCharPtr(CMGetNameSpace(cop, NULL));
const char *className, *iid;
- char *query;
int cc;
- VMBDBCtx dbctx;
char wkbfr[256];
omcStrBuf *pstrbuf;
@@ -966,7 +975,6 @@
char *query, err_msg[256];
CMPIData key;
int cc;
- VMBDBCtx dbctx;
DEBUGOUT("DeleteInstance() called...\n");
className = CMGetCharPtr(CMGetClassName(cop, NULL));
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|