Name
sn_agent.AgentRestartUtil
Description
No description available
Script
var AgentRestartUtil = Class.create();
AgentRestartUtil.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
restartAgent: function(agentList) {
if (agentList == undefined) { // in case called with Ajax
var agentSysIdList = this.getParameter('sysparm_agentSysIdList');
agentList = agentSysIdList.split(",");
}
var cis = new GlideRecord("sn_agent_cmdb_ci_agent");
cis.addQuery("sys_id", agentList);
cis.query();
var relevantAgentList = [];
while (cis.next()) {
var agentInfoGr = cis.getElement("agent_extended_info").getRefRecord();
if (this.canAgentRestart(agentInfoGr)) {
relevantAgentList.push(cis.getUniqueValue());
}
}
var check = {
"checkDefId": "be7a605dc7151010c62216dab8c260eb" // this is the sys_id of the check definition needed to restart the machine
};
var agentNow = new sn_agent.AgentNowHandler();
var relevantCIs = new GlideRecord("sn_agent_cmdb_ci_agent");
relevantCIs.addQuery("sys_id", relevantAgentList);
relevantCIs.query();
gs.info('request_id: ' + agentNow.runCheckForCis(relevantCIs, check, '1', 60000));
this.changeStatus(relevantAgentList);
},
changeStatus: function(relevantAgentList) {
var cisGr = new GlideRecord("sn_agent_cmdb_ci_agent");
cisGr.addQuery("sys_id", relevantAgentList); //querying the same table again since the record was iterated in the api used previously
cisGr.query();
while (cisGr.next()) {
var agentInfo = cisGr.getElement("agent_extended_info").getRefRecord();
agentInfo.setValue("status", "3"); // this is the 'restarting' status for the agent
agentInfo.update();
}
},
canAgentRestart: function(agentInfoGr) {
if (agentInfoGr.getValue('cmdb_ci') == null)
return false;
return agentInfoGr.getValue("status") == 0 && !this.isLinuxAgentNonSystemd(agentInfoGr);
},
// Returns true if the agent is running on Linux and isn't using systemd.
// Precondition: Must have a cmdb_ci reference.
isLinuxAgentNonSystemd: function(agentInfoGr) {
var os = agentInfoGr.getElement("cmdb_ci").getRefRecord().getValue("os");
if (os === null)
return false;
var isMac = os.toLowerCase().contains("mac");
var isLinux = !isMac && !agentInfoGr.is_windows;
return isLinux && agentInfoGr.getValue("is_using_systemd") !== "1";
},
// Get only the agents that are running on Linux and aren't using systemd. Returns an array of agent ci sys ids.
filterLinuxAgentsNonSystemd: function(agentCiSysIds) {
var filteredAgents = [];
for (var i = 0; i < agentCiSysIds.length; i++) {
var agentCiGr = new GlideRecord("sn_agent_cmdb_ci_agent");
agentCiGr.get(agentCiSysIds[i]);
var agentInfoGr = agentCiGr.getElement("agent_extended_info").getRefRecord();
if (agentInfoGr.getValue('cmdb_ci') == null) continue;
if (this.isLinuxAgentNonSystemd(agentInfoGr))
filteredAgents.push(agentCiSysIds[i]);
}
return filteredAgents;
},
// Get only the agents that don't have an associated host. Returns an array of agent ci sys ids.
filterAgentsWithoutHostData: function(agentCiSysIds) {
var filteredAgents = [];
for (var i = 0; i < agentCiSysIds.length; i++) {
var agentCiGr = new GlideRecord("sn_agent_cmdb_ci_agent");
agentCiGr.get(agentCiSysIds[i]);
var agentInfoGr = agentCiGr.getElement("agent_extended_info").getRefRecord();
if (agentInfoGr.getValue('cmdb_ci') == null) {
filteredAgents.push(agentCiSysIds[i]);
}
}
return filteredAgents;
},
agentCiSysIdsToDisplayString: function(agentCiSysIds) {
var names = [];
for (var i = 0; i < agentCiSysIds.length; i++) {
var agentCiGr = new GlideRecord("sn_agent_cmdb_ci_agent");
agentCiGr.get(agentCiSysIds[i]);
names.push(agentCiGr.getValue("name"));
}
return names.join(', ');
},
type: 'AgentRestartUtil'
});
Sys ID
ff91b4fac7291410c62216dab8c2606c