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/4e69b38a-b7b2-4c4e-8691-27097f8c4c21n%40googlegroups.com.

Reply via email to