Rolling restart using handlers

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

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.

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

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.