From 17f833f27a1f326b494471575f53bbc7438b05f4 Mon Sep 17 00:00:00 2001 From: Dmitriy Rabotyagov Date: Mon, 23 Jan 2023 19:15:09 +0100 Subject: [PATCH] Restart sockets when they are changed At the moment it's possible only to forcefully restart sockets under each run, which is not idempotent and may cause interruptions for service. To avoid that we add a way to restart socket just on config change with same logic applied as for service. Change-Id: Ifb6fd9461d7b6a65191b918c0863406cf4de6725 --- handlers/main.yml | 12 ++++++++++++ handlers/socket_restart.yml | 27 +++++++++++++++++++++++++++ tasks/main.yml | 1 + 3 files changed, 40 insertions(+) create mode 100644 handlers/socket_restart.yml diff --git a/handlers/main.yml b/handlers/main.yml index d66d2f0..dd07b9b 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -13,6 +13,18 @@ # See the License for the specific language governing permissions and # limitations under the License. +- name: Restart changed sockets + include_tasks: handlers/socket_restart.yml + listen: systemd socket changed + when: + - 'socket_results is changed' + loop: "{{ systemd_socket.results }}" + loop_control: + loop_var: socket_results + tags: + - systemd-service + + - name: Restart changed services include_tasks: handlers/systemd_restart.yml listen: systemd service changed diff --git a/handlers/socket_restart.yml b/handlers/socket_restart.yml new file mode 100644 index 0000000..b9c20fb --- /dev/null +++ b/handlers/socket_restart.yml @@ -0,0 +1,27 @@ +--- +# Copyright 2023, Cleura AB. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +- name: "Restart socket" + systemd: + name: "{{ socket.socket_name | replace(' ', '_') }}.socket" + state: restarted + when: + - "'socket_name' in socket" + - socket.restart_changed | default(systemd_service_restart_changed) | bool + - "'state' not in socket" + - socket.enabled | default(systemd_service_enabled) | bool + loop: "{{ socket_results.item }}" + loop_control: + loop_var: socket diff --git a/tasks/main.yml b/tasks/main.yml index 21a6a99..9bef157 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -131,6 +131,7 @@ group: "root" loop: "{{ systemd_services | subelements('sockets', skip_missing=True) }}" notify: + - systemd socket changed - systemd service changed register: systemd_socket tags: