Rolling restart using handlers

72 views
Skip to first unread message

Costi Ciudatu

unread,
Nov 1, 2014, 8:46:51 AM11/1/14
to ansible...@googlegroups.com
Is there a way to run the handlers with a different `serial` value than the rest of the play ?

What I want is to install my services in large batches (usually, on all the machines at once) and if  any of those services needs to be restarted, I want to perform that operation on X machines at a time.
Ideally, the X value should be decided for each particular service: e.g. I want to restart postgresql instances one at a time and I want to restart nginx on 30% of the hosts at a time.
However, the installation needs to be done on all the machines in parallel, as I usually have no reason to do this sequentially (restarts are rarely required).

Is this possible with handlers ? Or can I trigger handlers from a different play ?
Or, at least, is there some best practice recommendation for how to achieve this ?

Thanks


Brian Coca

unread,
Nov 3, 2014, 7:23:38 AM11/3/14
to ansible...@googlegroups.com
No, handlers run with the play settings, so you can do serial: 30% but that will affect both the install and the handler. The other way to do it is to separate it into 2 plays with different serial, but then they are not really handlers.

--
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 post to this group, send email to ansible...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/0b91eabf-d7aa-43d1-9056-154b9eb5ab54%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.



--
Brian Coca

Azul Inho

unread,
Nov 11, 2014, 6:41:43 AM11/11/14
to ansible...@googlegroups.com


I do this:

# first batch in parallel                                                                                                                       
    6 - hosts:                                                                                                                                                                  
    7   - apps_servers                                                                                                                                                       
    8   max_fail_percentage: 1                                                                                                                                                  
    9   accelerate: false                                                                                                                                                       
   10   sudo: true                                                                                                                                                              
   11   gather_facts: true                                                                                                                                                      
   12                                                                                                                                                                           
   13   roles:                                                                                                                                                                  
   14   | - base            

# then one box at a time
 - hosts:                                                                                                                                                                  
   26   - apps_servers                                                                                                                                                       
   27   max_fail_percentage: 1                                                                                                                                                  
   28   serial: 1                                                                                                                                                               
   29   accelerate: false                                                                                                                                                       
   30   sudo: true                                                                                                                                                              
   31   gather_facts: false                                                                                                                                                     
   32                                                                                                                                                                           
   33   pre_tasks:                                                                                                                                                              
   34   - name: remove this host from the load balancer config                                                                                                                  
   35   | shell: ssh {{ item }} sudo manage-backend-servers {{ inventory_hostname }} remove                                                               
   36   | with_items: groups['lb_servers']                                                                                                                                      
   37   | sudo: false                                                                                                                                                           
   38   | delegate_to: 127.0.0.1                                                                                                                                                
   39                                                                                                                                                                           
   40   roles:      
   43   | - apps        

   11   post_tasks:                                                                                                                                                             
   10   - name: add this host back into the load balancer config                                                                                                                
    9   | shell: ssh {{ item }} sudo manage-backend-servers {{ inventory_hostname }} add                                                              
    8   | sudo: false                                                                                                                                                           
    7   | delegate_to: 127.0.0.1                                                                                                                                                
    6   | with_items: groups['lb_servers']  

# then last batch in parallel again
  13 - hosts:                                                                                                                                                                  
   12   - apps_servers                                                                                                                                                       
   11   max_fail_percentage: 1                                                                                                                                                  
   10   accelerate: false                                                                                                                                                       
    9   sudo: true                                                                                                                                                              
~   8   gather_facts: true                                                                                                                                                      
    7                                                                                                                                                                           
    6   roles:
    5   | - do_the_rest                                                                                                                                                              
    4   | - finish_up                

Costi Ciudatu

unread,
Nov 11, 2014, 7:52:46 AM11/11/14
to ansible...@googlegroups.com
Thanks Brian,

I wanted a confirmation for this because I feel like it makes the roles and handlers hardly unusable in a real cluster environment
and it shouldn't  be addressed with workarounds. I'll try to see if I can come up with a patch and submit it for review.
Reply all
Reply to author
Forward
0 new messages