Jim,

You can apply Chris's solution to ExecuteScript itself, as you can add
dynamic properties there and they will evaluate the EL for you. If you
set a dynamic property "myNode" to "${ip()}", you should be able to
use myNode.evaluateAttributeExpressions().getValue().

Regards,
Matt

On Mon, Jul 19, 2021 at 5:56 AM James McMahon <jsmcmah...@gmail.com> wrote:
>
> Chris, thank you very much for suggesting a few alternatives. I'll tune my 
> flow this morning and give these a try, too. I think the path suggested by 
> Lars is going to prove ideal for my situation, where I want to enter my 
> ExecuteScript with one flowFile and create multiple flowFiles from that in a 
> loop, as I work my way through a series of directories in a python loop, 
> pulling metadata from them. Since I'll be running my ES in "all node" 
> configuration, if I'm on a four-node cluster my created flowFiles can be on 
> any of the cluster nodes. I want to identify the host node for each of the 
> created flowFiles within my script, where I need to apply that knowledge. 
> Lars suggested leveraging python rather than trying to figure out how to do 
> this programmatically through nifi session and flowFile objects.
> Cheers and thank very much once again,
> Jim
>
> On Mon, Jul 19, 2021 at 1:41 AM Chris Sampson <chris.samp...@naimuri.com> 
> wrote:
>>
>> If you're using GenerateFlowFile, you could add a dynamic property to set an 
>> attribute using the ${hostname} (or ip) on the created FlowFile.
>>
>> If you're only running Generate on a single node before load balancing the 
>> FlowFile (e.g. round-robin) and the expression needs to be calculated on the 
>> destination host, you could use an UpdateAttribute to create the attribute 
>> before ExecuteScript but after the load balancing.
>>
>> Of course, this doesn't answer your original question about evaluating EL 
>> within a script, but gives you a couple of alternate options.
>>
>> Cheers,
>>
>> Chris Sampson
>>
>> On Sun, 18 Jul 2021, 12:46 James McMahon, <jsmcmah...@gmail.com> wrote:
>>>
>>> Lars, thank you so much. I was fixated on getting the host information from 
>>> the flowFile itself and overlooked the obvious. Your suggestion will be 
>>> ideal. Thank you once again!
>>> Jim
>>>
>>> On Sun, Jul 18, 2021 at 12:59 AM Lars Winderling 
>>> <lars.winderl...@posteo.de> wrote:
>>>>
>>>> James,
>>>>
>>>> maybe just use?
>>>> Import socket
>>>> socket.gethostname()
>>>> It will give you rather the hostname, but that should also help for 
>>>> distinguishing between nodes.
>>>>
>>>> Best, Lars
>>>>
>>>> On 17 July 2021 22:25:47 CEST, James McMahon <jsmcmah...@gmail.com> wrote:
>>>>>
>>>>> Looking closely at the flowFiles I am creating,in the subsequent output 
>>>>> queue, I see they have a Node Address listed in FlowFile Details. It is 
>>>>> not listed in the flowfile attributes.
>>>>> That is what I need to get at programmatically in my python script. How 
>>>>> can I access Node Address?
>>>>>
>>>>> On Sat, Jul 17, 2021 at 2:59 PM James McMahon <jsmcmah...@gmail.com> 
>>>>> wrote:
>>>>>>
>>>>>> I have a single flowfile I generate on a periodic basis using a cron 
>>>>>> scheduled GenerateFlowFile. This then flows into an ExecuteScript, where 
>>>>>> I have a python script that will create multiple flowfiles from the one.
>>>>>>
>>>>>> My ExecuteScript is configured to run on all my cluster nodes. For each 
>>>>>> instance of flowfile I am creating, I need to determine which cluster 
>>>>>> node it associates with. There’s an expression language function called 
>>>>>> ip(). Can anyone tell me how to employ ${ip()} in my python to determine 
>>>>>> the cluster node the newly created flowFile is associated with?
>>>>>>
>>>>>> I’d be using this after I execute
>>>>>> flowfile = session.create()
>>>>>>
>>>>>> Thanks in advance for your help.

Reply via email to