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

Offical Documentation

Official Docs: