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