criteria.addFilterResourceIds(resourceId);
criteria.setStrict(true);
criteria.clearPaging();//disable paging as the code assumes all the results will be returned.
PageList<DriftDefinition> results = driftManager.findDriftDefinitionsByCriteria(subject, criteria);
DriftDefinition doomedDriftDef = null;
if (results != null && results.size() == 1) {
doomedDriftDef = results.get(0);
}
if (doomedDriftDef != null) {
// TODO security check!
// tell the agent first - we don't want the agent reporting on the drift def after we delete it
boolean unscheduledOnAgent = false;
try {
AgentClient agentClient = agentManager.getAgentClient(subjectManager.getOverlord(), resourceId);
DriftAgentService service = agentClient.getDriftAgentService();
service.unscheduleDriftDetection(resourceId, doomedDriftDef);
unscheduledOnAgent = true;
} catch (Exception e) {
log.warn(" Unable to inform agent of unscheduled drift detection [" + doomedDriftDef + "]", e);
}
// purge all data related to this drift definition
try {
driftManager.purgeByDriftDefinitionName(subject, resourceId, doomedDriftDef.getName());
} catch (Exception e) {
String warnMessage = "Failed to purge data for drift definition [" + driftDefName
+ "] for resource [" + resourceId + "].";
if (unscheduledOnAgent) {
warnMessage += " The agent was told to stop detecting drift for that definition.";
}
log.warn(warnMessage, e);
}
// now purge the drift def itself
driftManager.deleteResourceDriftDefinition(subject, resourceId, doomedDriftDef.getId());
} else {
throw new IllegalArgumentException("Resource does not have drift definition named [" + driftDefName
+ "]");
}
break;