Thanks a lot Zdenek.

I got it now i have  heard your comments and converted this to something 
closer .

https://github.com/sameergithub5/prometheusrole/tree/main/node_exporter_and_prometheus_jmx_exporter

Can you plz spot if  there is a room for an improvement .

On Thursday, November 16, 2023 at 8:10:02 PM UTC+5:30 Zdenek Pyszko wrote:

> Hello Sameer,
> my two cents here as i made a quick lookup to your repo.
> I would suggest to refactor your repo to use roles.
> You have three different playbooks referenced in main.yml, which are doing 
> more or less the same job.
> Create a role 'enable prometheus' which will be dynamic enough to make 
> decision based on input variables (zookeeper, Kafka,...)
> And one tiny role to restart the services(if needed).
> Outcome: single playbook, one prometheus role, one service mgmt(restart) 
> role, no DRY code(dont repeat yourself), re-usable.
>
> Dne čtvrtek 9. listopadu 2023 v 17:29:28 UTC+1 uživatel Sameer Modak 
> napsal:
>
>> Hello Todd,
>>
>> I tried serial and it works but my problem is, serial works in playbook 
>> so when i write import_playbook inside include_task: zookeeper.yaml it 
>> fails saying u cant import playbook inside task.
>> Now, How do i do it then??
>>
>> ok so let me give you how i am running basically i have created role 
>> prometheus which you can find here in below my personal public repo.  Role 
>> has its usual main.yml which includes tasks and i have created 
>> Restartandcheck.yml which i am unable to use because import_playbook error 
>> if i put in zookeeper.yml file
>>
>>
>> https://github.com/sameergithub5/prometheusrole/tree/main/prometheus
>>
>>
>> On Friday, November 3, 2023 at 9:00:13 PM UTC+5:30 Todd Lewis wrote:
>>
>>> That's correct; serial is not a task or block key word. It's a playbook 
>>> key word.
>>>
>>> - name: One host at a time
>>>   hosts: ducks_in_a_row
>>>   serial: 1
>>>   max_fail_percentage: 0
>>>   tasks:
>>>     - task1
>>>     - task2
>>>     - task3
>>>
>>> Read up on serial 
>>> <https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_strategies.html#setting-the-batch-size-with-serial>
>>>  
>>> and max_fail_percentage 
>>> <https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_error_handling.html#setting-a-maximum-failure-percentage>
>>>  
>>> . Blocks don't come into it.
>>>
>>>
>>> On 11/3/23 9:22 AM, Sameer Modak wrote:
>>>
>>> Hello will, 
>>>
>>>
>>>
>>> i tried to do it with block and serial no it does not work say's block 
>>> cant have serial 
>>>
>>> tasks:
>>>
>>>   - name: block check
>>>
>>>     block:
>>>
>>>       - name: run this shell
>>>
>>>         shell: 'systemctl restart "{{zookeeper_service_name}}"'
>>>
>>>
>>>       - name: debug
>>>
>>>         debug:
>>>
>>>           msg: "running my task"
>>>
>>>
>>>       - name: now run this task
>>>
>>>         shell: timeout -k 3 1m sh -c 'until nc -zv localhost 
>>> {{hostvars[inventory_hostname].zk_port}}; do sleep 1; done'
>>>
>>>
>>>     when:
>>>
>>>     - not zkmode is search('leader')
>>>
>>>     serial: 1
>>>
>>> ~                                                
>>>
>>> On Wednesday, November 1, 2023 at 3:39:54 PM UTC+5:30 Sameer Modak wrote:
>>>
>>>> Let me try with block and serial and get back to you
>>>>
>>>> On Wednesday, November 1, 2023 at 5:33:14 AM UTC+5:30 Will McDonald 
>>>> wrote:
>>>>
>>>>> Edit: s/along with a failed_when/along with wait_for/ 
>>>>>
>>>>> On Tue, 31 Oct 2023 at 23:58, Will McDonald <wmcd...@gmail.com> wrote:
>>>>>
>>>>>> I don't entirely understand your approach, constraints or end-to-end 
>>>>>> requirements here, but trying to read between the lines... 
>>>>>>
>>>>>> 1. You have a cluster of zookeeper nodes (presumably 2n+1 so 3, 5 or 
>>>>>> more nodes)
>>>>>> 2. You want to do a rolling restart of these nodes 1 at a time, wait 
>>>>>> for the node to come back up, check it's functioning, and if that 
>>>>>> doesn't 
>>>>>> work, fail the run
>>>>>> 3. With your existing approach you can limit the restart of a service 
>>>>>> using throttle at the task level, but then don't know how to handle 
>>>>>> failure 
>>>>>> in a subsequent task
>>>>>> 4. You don't think wait_for will work because you only throttle on 
>>>>>> the restart task
>>>>>>
>>>>>> (Essentially you want your condition "has the service restarted 
>>>>>> successfully" to be in the task itself.)
>>>>>>
>>>>>> Again some thoughts that might help you work through this...
>>>>>>
>>>>>> 1. Any reason you couldn't just use serial at a playbook level? If 
>>>>>> so, what is that?
>>>>>> 2. If you must throttle rather than serial, consider using it in a 
>>>>>> block along with a failed_when
>>>>>> 3. Try and avoid using shell and use builtin constructs like service, 
>>>>>> it'll save you longer term pain
>>>>>>
>>>>>> Read through the links I posted earlier and explain what might stop 
>>>>>> you using the documented approach.
>>>>>>
>>>>>> This post from Vladimir on Superuser might be useful too: 
>>>>>> https://superuser.com/questions/1664197/ansible-keyword-throttle 
>>>>>> (loads of other 2n+1 rolling update/restart examples out there too: 
>>>>>> https://stackoverflow.com/questions/62378317/ansible-rolling-restart-multi-cluster-environment
>>>>>> )
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Tue, 31 Oct 2023 at 17:54, Sameer Modak <sameer.m...@gmail.com> 
>>>>>> wrote:
>>>>>>
>>>>>>> Hello Will, 
>>>>>>>
>>>>>>> I have used throttle so that part is sorted. But i dont think 
>>>>>>> wait_for works here for example.
>>>>>>> task 1 restart. <--- now in this task already he has restarted all 
>>>>>>> hosts one by one 
>>>>>>> task 2 wait_for <-- this will fail if port does not come up but no 
>>>>>>> use because restart is triggered.
>>>>>>>
>>>>>>> we just want to know if in one task it restarts and checks if fails 
>>>>>>> aborts play thats it. Now we got the results but used shell module.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Tuesday, October 31, 2023 at 7:53:31 PM UTC+5:30 Will McDonald 
>>>>>>> wrote:
>>>>>>>
>>>>>>>> I'd suggest reading up on rolling updates using serial:
>>>>>>>>
>>>>>>>>
>>>>>>>> https://docs.ansible.com/ansible/latest/playbook_guide/guide_rolling_upgrade.html#the-rolling-upgrade
>>>>>>>>
>>>>>>>> https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_strategies.html#setting-the-batch-size-with-serial
>>>>>>>>
>>>>>>>> You can use wait_for or wait_for_connection to ensure service 
>>>>>>>> availability before continuing:
>>>>>>>>
>>>>>>>>
>>>>>>>> https://docs.ansible.com/ansible/latest/collections/ansible/builtin/wait_for_module.html
>>>>>>>>
>>>>>>>> https://docs.ansible.com/ansible/latest/collections/ansible/builtin/wait_for_connection_module.html
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Tue, 31 Oct 2023 at 14:08, Sameer Modak <sameer.m...@gmail.com> 
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> restart service, check if service is ready to accept connection 
>>>>>>>>> because it takes time to come up. Once we sure its listening on port 
>>>>>>>>> then 
>>>>>>>>> only move to next host. unless dont move because we can only afford 
>>>>>>>>> to have 
>>>>>>>>> one service down at a time.
>>>>>>>>>
>>>>>>>>> is there any to short hand or ansible native way to handle this 
>>>>>>>>> using ansible module.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> code: 
>>>>>>>>>
>>>>>>>>> name: Restart zookeeper followers
>>>>>>>>>
>>>>>>>>>   throttle: 1
>>>>>>>>>
>>>>>>>>>   any_errors_fatal: true
>>>>>>>>>
>>>>>>>>>   shell: |
>>>>>>>>>
>>>>>>>>>      systemctl restart {{zookeeper_service_name}}  
>>>>>>>>>
>>>>>>>>>      timeout 22 sh -c 'until nc localhost 
>>>>>>>>> {{zookeeper_server_port}}; do sleep 1; done'
>>>>>>>>>
>>>>>>>>>   when: not zkmode.stdout_lines is search('leader')
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> -- 
>>>>>>>>> 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 ansible-proje...@googlegroups.com.
>>>>>>>>> To view this discussion on the web visit 
>>>>>>>>> https://groups.google.com/d/msgid/ansible-project/67ca5f13-855d-4d40-a47a-c0fbe11ea3b5n%40googlegroups.com
>>>>>>>>>  
>>>>>>>>> <https://groups.google.com/d/msgid/ansible-project/67ca5f13-855d-4d40-a47a-c0fbe11ea3b5n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>>>>> .
>>>>>>>>>
>>>>>>>> -- 
>>>>>>> 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 ansible-proje...@googlegroups.com.
>>>>>>> To view this discussion on the web visit 
>>>>>>> https://groups.google.com/d/msgid/ansible-project/3370b143-050a-4a14-a858-f5abe60c2678n%40googlegroups.com
>>>>>>>  
>>>>>>> <https://groups.google.com/d/msgid/ansible-project/3370b143-050a-4a14-a858-f5abe60c2678n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>>> .
>>>>>>>
>>>>>> -- 
>>> 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 ansible-proje...@googlegroups.com.
>>>
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/ansible-project/69417f84-b761-4008-8284-ac644d3384f7n%40googlegroups.com
>>>  
>>> <https://groups.google.com/d/msgid/ansible-project/69417f84-b761-4008-8284-ac644d3384f7n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>>
>>> -- 
>>> Todd
>>>
>>>

-- 
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 ansible-project+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/8a1f1dc7-6aeb-4919-b37e-10bff750c653n%40googlegroups.com.

Reply via email to