... or
- name: task1 pick the first server running 9090
debug:
msg: "{{ (fake.results | selectattr('stdout', 'search', 'running
9090') | first).item }}"
On Saturday, August 20, 2022 at 1:56:31 PM UTC-4 Todd Lewis wrote:
> ...except that first task should be
> - name: task1 pick the first server running 9090
> debug:
> msg: "{{ item.item }}"
> vars:
> item: "{{ fake.results | selectattr('stdout', 'search', 'running
> 9090') | first }}"
>
>
>
> On Saturday, August 20, 2022 at 1:46:03 PM UTC-4 Todd Lewis wrote:
>
>> Let's assume (ha!) you've got a shell task that loops over a list of
>> servers, and for any server with port 9090 open it prints "{{item}} running
>> 9090" to its stdout. And that you register that to "fake" to match the code
>> below.
>>
>> ---
>> - name: Working with registered data
>> hosts: localhost
>> gather_facts: no
>> vars:
>> fake:
>> results:
>> - item: server1
>> stdout: ""
>> - item: server2
>> stdout: ""
>> - item: server3
>> stdout: "server3 running 9090\n"
>> - item: server4
>> stdout: ""
>> - item: server5
>> stdout: "server5 running 9090\n"
>> tasks:
>> - name: task1 pick the first server running 9090
>> debug:
>> msg: "{{ fake.results | selectattr('stdout', 'search', 'running
>> 9090') | first }}"
>>
>> - name: task2 pick all servers running 9090
>> debug:
>> msg: "{{ fake.results | selectattr('stdout', 'search', 'running
>> 9090') | map(attribute='item') }}"
>>
>>
>> That produces the following output:
>>
>> TASK [task1 pick the first server running 9090]
>> ********************************
>> task path: /home/utoddl/ansible/register-games.yml:19
>> ok: [localhost] => {
>> "msg": "server3"
>> }
>>
>> TASK [task2 pick all servers running 9090]
>> *************************************
>> task path: /home/utoddl/ansible/register-games.yml:25
>> ok: [localhost] => {
>> "msg": [
>> "server3",
>> "server5"
>> ]
>> }
>>
>>
>>
>> On 8/20/22 11:05 AM, [email protected] wrote:
>>
>> HI,
>> I have a list of servers that only part of them are running port 9090.
>> I need to create two tasks, each should loop the server's hostnames. the
>> first task should define inside a register the first server hostname that
>> was found running port 9090 , the second task should define in a register
>> all server's hostnames that are running port 9090. If no server is running
>> port 9090 the tasks should fail
>>
>> I have nc installed on the server and i thought about using a shell with
>> the command "nc -zv {{ item}} 9090
>>
>> But I don't know how to filter the relevant answers
>>
>> For example:
>> server1
>> server2
>> server3 running 9090
>> server4
>> server5 running 9090
>>
>> - The first task should include in a register server 3 *or* server 5
>> hostname
>> - The second task should include in a register server 3 *and *server 5
>> hostname
>>
>>
>>
--
You received this message because you are subscribed to the Google Groups
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/aaa850dd-7945-43a5-88ee-fd5733f56bben%40googlegroups.com.