From 5842a24cd3bc27179174949edadfb2758ae68af3 Mon Sep 17 00:00:00 2001 From: Logan V Date: Sat, 16 Sep 2017 13:48:37 -0500 Subject: [PATCH] Add external LB management handler hook interface Based on conversation on an ansible issue[1], I implemented a LB orchestration role[2] similar to the POC here[3]. This will allow external loadbalancer management roles to hook into a universal notify listener "Manage LB" to perform before/ after endpoint management actions when the service is being restarted. [1]: https://github.com/ansible/ansible/issues/27813 [2]: https://github.com/Logan2211/ansible-haproxy-endpoints [3]: https://github.com/Logan2211/tmp-ansible-27813 Change-Id: I7d2f47e94826526e9a5a99d32575f691fb6b30fd --- doc/source/index.rst | 14 +++++++++++++- handlers/main.yml | 4 ++++ tasks/glance_init_systemd.yml | 2 ++ tasks/glance_install.yml | 2 ++ tasks/glance_post_install.yml | 1 + tasks/glance_uwsgi.yml | 1 + 6 files changed, 23 insertions(+), 1 deletion(-) diff --git a/doc/source/index.rst b/doc/source/index.rst index 30b8746a..03162676 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -33,10 +33,22 @@ Example playbook .. literalinclude:: ../../examples/playbook.yml :language: yaml +External Restart Hooks +~~~~~~~~~~~~~~~~~~~~~~ + +When the role performs a restart of the service, it will notify an Ansible +handler named ``Manage LB``, which is a noop within this role. In the +playbook, other roles may be loaded before and after this role which will +implement Ansible handler listeners for ``Manage LB``, allowing external roles +to manage the load balancer endpoints responsible for sending traffic to the +servers being restarted by marking them in maintenance or active mode, +draining sessions, etc. For an example implementation, please reference the +`ansible-haproxy-endpoints role `_ +used by the openstack-ansible project. + Tags ~~~~ This role supports two tags: ``glance-install`` and ``glance-config``. The ``glance-install`` tag can be used to install and upgrade. The ``glance-config`` tag can be used to manage configuration. - diff --git a/handlers/main.yml b/handlers/main.yml index 63871f4a..4a42f9e5 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -56,3 +56,7 @@ retries: 5 delay: 2 listen: "Restart glance services" + +- meta: noop + listen: Manage LB + when: false diff --git a/tasks/glance_init_systemd.yml b/tasks/glance_init_systemd.yml index 0f2a01c8..6fee7078 100644 --- a/tasks/glance_init_systemd.yml +++ b/tasks/glance_init_systemd.yml @@ -49,6 +49,7 @@ group: "root" with_items: "{{ filtered_glance_services }}" notify: + - Manage LB - Restart glance services - name: Place the systemd init script @@ -62,4 +63,5 @@ config_type: "ini" with_items: "{{ filtered_glance_services }}" notify: + - Manage LB - Restart glance services diff --git a/tasks/glance_install.yml b/tasks/glance_install.yml index 2df15e69..0b4fe82c 100644 --- a/tasks/glance_install.yml +++ b/tasks/glance_install.yml @@ -81,6 +81,7 @@ copy: "no" when: glance_get_venv | changed notify: + - Manage LB - Restart glance services - name: Install pip packages @@ -99,6 +100,7 @@ delay: 2 when: glance_get_venv | failed or glance_get_venv | skipped notify: + - Manage LB - Restart glance services - name: Remove python from path first (CentOS, openSUSE) diff --git a/tasks/glance_post_install.yml b/tasks/glance_post_install.yml index 230d2296..dc57dd0f 100644 --- a/tasks/glance_post_install.yml +++ b/tasks/glance_post_install.yml @@ -72,6 +72,7 @@ config_overrides: "{{ glance_glance_rootwrap_conf_overrides }}" config_type: "ini" notify: + - Manage LB - Restart glance services - name: Create nfs shares local path diff --git a/tasks/glance_uwsgi.yml b/tasks/glance_uwsgi.yml index 69539344..f443f91b 100644 --- a/tasks/glance_uwsgi.yml +++ b/tasks/glance_uwsgi.yml @@ -29,4 +29,5 @@ with_items: "{{ filtered_glance_services }}" when: item.wsgi_app | default(False) notify: + - Manage LB - Restart glance services