mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-07-30 21:47:18 +00:00
qemu: add ability to associate a string message with taint warning
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
2273065746
commit
30626ed15b
@ -6197,22 +6197,51 @@ void qemuDomainObjTaint(virQEMUDriverPtr driver,
|
|||||||
virDomainObjPtr obj,
|
virDomainObjPtr obj,
|
||||||
virDomainTaintFlags taint,
|
virDomainTaintFlags taint,
|
||||||
qemuDomainLogContextPtr logCtxt)
|
qemuDomainLogContextPtr logCtxt)
|
||||||
|
{
|
||||||
|
qemuDomainObjTaintMsg(driver, obj, taint, logCtxt, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void qemuDomainObjTaintMsg(virQEMUDriverPtr driver,
|
||||||
|
virDomainObjPtr obj,
|
||||||
|
virDomainTaintFlags taint,
|
||||||
|
qemuDomainLogContextPtr logCtxt,
|
||||||
|
const char *fmt, ...)
|
||||||
{
|
{
|
||||||
virErrorPtr orig_err = NULL;
|
virErrorPtr orig_err = NULL;
|
||||||
g_autofree char *timestamp = NULL;
|
g_autofree char *timestamp = NULL;
|
||||||
char uuidstr[VIR_UUID_STRING_BUFLEN];
|
char uuidstr[VIR_UUID_STRING_BUFLEN];
|
||||||
int rc;
|
int rc;
|
||||||
|
g_autofree char *extra = NULL;
|
||||||
|
const char *extraprefix = "";
|
||||||
|
const char *extramsg = "";
|
||||||
|
const char *extrasuffix = "";
|
||||||
|
va_list args;
|
||||||
|
|
||||||
if (!virDomainObjTaint(obj, taint))
|
if (virDomainObjTaint(obj, taint)) {
|
||||||
return;
|
/* If an extra message was given we must always
|
||||||
|
* emit the taint warning, otherwise it is a
|
||||||
|
* one-time only warning per VM
|
||||||
|
*/
|
||||||
|
if (!fmt)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
virUUIDFormat(obj->def->uuid, uuidstr);
|
virUUIDFormat(obj->def->uuid, uuidstr);
|
||||||
|
|
||||||
VIR_WARN("Domain id=%d name='%s' uuid=%s is tainted: %s",
|
if (fmt) {
|
||||||
|
va_start(args, fmt);
|
||||||
|
extraprefix = " (";
|
||||||
|
extramsg = extra = g_strdup_vprintf(fmt, args);
|
||||||
|
extrasuffix = ")";
|
||||||
|
va_end(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
VIR_WARN("Domain id=%d name='%s' uuid=%s is tainted: %s%s%s%s",
|
||||||
obj->def->id,
|
obj->def->id,
|
||||||
obj->def->name,
|
obj->def->name,
|
||||||
uuidstr,
|
uuidstr,
|
||||||
virDomainTaintTypeToString(taint));
|
virDomainTaintTypeToString(taint),
|
||||||
|
extraprefix, extramsg, extrasuffix);
|
||||||
|
|
||||||
/* We don't care about errors logging taint info, so
|
/* We don't care about errors logging taint info, so
|
||||||
* preserve original error, and clear any error that
|
* preserve original error, and clear any error that
|
||||||
@ -6224,16 +6253,18 @@ void qemuDomainObjTaint(virQEMUDriverPtr driver,
|
|||||||
|
|
||||||
if (logCtxt) {
|
if (logCtxt) {
|
||||||
rc = qemuDomainLogContextWrite(logCtxt,
|
rc = qemuDomainLogContextWrite(logCtxt,
|
||||||
"%s: Domain id=%d is tainted: %s\n",
|
"%s: Domain id=%d is tainted: %s%s%s%s\n",
|
||||||
timestamp,
|
timestamp,
|
||||||
obj->def->id,
|
obj->def->id,
|
||||||
virDomainTaintTypeToString(taint));
|
virDomainTaintTypeToString(taint),
|
||||||
|
extraprefix, extramsg, extrasuffix);
|
||||||
} else {
|
} else {
|
||||||
rc = qemuDomainLogAppendMessage(driver, obj,
|
rc = qemuDomainLogAppendMessage(driver, obj,
|
||||||
"%s: Domain id=%d is tainted: %s\n",
|
"%s: Domain id=%d is tainted: %s%s%s%s\n",
|
||||||
timestamp,
|
timestamp,
|
||||||
obj->def->id,
|
obj->def->id,
|
||||||
virDomainTaintTypeToString(taint));
|
virDomainTaintTypeToString(taint),
|
||||||
|
extraprefix, extramsg, extrasuffix);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rc < 0)
|
if (rc < 0)
|
||||||
|
@ -565,6 +565,13 @@ void qemuDomainObjTaint(virQEMUDriverPtr driver,
|
|||||||
virDomainTaintFlags taint,
|
virDomainTaintFlags taint,
|
||||||
qemuDomainLogContextPtr logCtxt);
|
qemuDomainLogContextPtr logCtxt);
|
||||||
|
|
||||||
|
void qemuDomainObjTaintMsg(virQEMUDriverPtr driver,
|
||||||
|
virDomainObjPtr obj,
|
||||||
|
virDomainTaintFlags taint,
|
||||||
|
qemuDomainLogContextPtr logCtxt,
|
||||||
|
const char *msg,
|
||||||
|
...) G_GNUC_PRINTF(5, 6);
|
||||||
|
|
||||||
void qemuDomainObjCheckTaint(virQEMUDriverPtr driver,
|
void qemuDomainObjCheckTaint(virQEMUDriverPtr driver,
|
||||||
virDomainObjPtr obj,
|
virDomainObjPtr obj,
|
||||||
qemuDomainLogContextPtr logCtxt,
|
qemuDomainLogContextPtr logCtxt,
|
||||||
|
Loading…
Reference in New Issue
Block a user