Understanding the AgentReadList vs readAgentList

Started by Borgso, October 11, 2019, 09:22:30 PM

Previous topic - Next topic

Borgso

Have been using AgentReadList in different scenarios to dynamic apply template and dci instances
Could need some help to get it rewritten for NXLSv3


What worked in 2.2.x

Scenario 1:

DCI on agentless node, using a "source node" and "Instance discovery method: Script", called with
QuoteDW::DiscoverActiveMQ("DLQDetailsQueue")

DW::DiscoverActiveMQ script is:
if ($1 == "ActiveMQ") {
  //return AgentReadList($node, "DiscoverActiveMQ(" . $targetObject->ipAddr . ")");
  return $targetObject->readAgentList("DiscoverActiveMQ(" . $targetObject->ipAddr . ")");
}


ExternalList DiscoverActiveMQ do a do a call from source node to node and get a instance list to create DCI to poll info using a ExternalParameter (script on source node -> node) on each instance.




Scenario 2:
AutoApply template if user X is within /etc/passwd.

Using a script library with following code and "ExternalList = UserList:cut -d: -f1 /etc/passwd"
sub ServiceCheck(ServiceName) {
  if ($node->isAgent && $node->platformName like "Linux-*") {
    users = AgentReadList($node,"UserList");
    if ( users == null ) return null;
    foreach ( user : users ) {
      if ( user == ServiceName ) return true;
    }
  }
  return false;
}

Victor Kirhenshtein

Hi,

readAgentList is a node object method, so if you were calling

AgentReadList($node, ...

(read agent parameter from node pointed by $node variable) you now should use

$node->readAgentList(...

to read list from agent on same node.

Best regards,
Victor

Borgso

Hi and thank for reply.

I tried what you suggest, but it doesnt work as before:

ServiceName is username within /etc/passwd catched using ExternalList on the node.

Does not work:
if ($node->isAgent && $node->platformName like "Linux-*") {
    users = $node->readAgentList("UserList");
    if ( users == null ) return null;
    foreach ( user : users ) {
      if ( user == ServiceName ) return true;
    }
  }
  return false;


Does work, but is not the correct way..
if ($node->isAgent && $node->platformName like "Linux-*") {
    users = AgentReadList($node,"UserList");
    if ( users == null ) return null;
    foreach ( user : users ) {
      if ( user == ServiceName ) return true;
    }
  }
  return false;



However, if i add node to template first and then do "Configuration Poll" with $node->readAgentList version, it does not remove the node from template even if "Remove this template automatically when node no longer passes through filter"
It does get removed/unbind if i only put "return false;" in the Automatic Apply Rules.