NetXMS Support Forum

English Support => General Support => Topic started by: Borgso on October 11, 2019, 09:22:30 PM

Title: Understanding the AgentReadList vs readAgentList
Post by: Borgso on October 11, 2019, 09:22:30 PM
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;
}
Title: Re: Understanding the AgentReadList vs readAgentList
Post by: Victor Kirhenshtein on October 14, 2019, 01:33:58 PM
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
Title: Re: Understanding the AgentReadList vs readAgentList
Post by: Borgso on October 14, 2019, 08:52:36 PM
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.