diff --git a/roles/systemd_socket/README.md b/roles/systemd_socket/README.md new file mode 100644 index 0000000..038da5c --- /dev/null +++ b/roles/systemd_socket/README.md @@ -0,0 +1 @@ +Adds a systemd socket for a service diff --git a/roles/systemd_socket/defaults/main.yaml b/roles/systemd_socket/defaults/main.yaml new file mode 100644 index 0000000..2900359 --- /dev/null +++ b/roles/systemd_socket/defaults/main.yaml @@ -0,0 +1,2 @@ +--- +systemd_socket_requires: [] diff --git a/roles/systemd_socket/handlers/main.yaml b/roles/systemd_socket/handlers/main.yaml new file mode 100644 index 0000000..8f3a24e --- /dev/null +++ b/roles/systemd_socket/handlers/main.yaml @@ -0,0 +1,6 @@ +--- +- name: Restart socket {{ systemd_socket_name }} + ansible.builtin.set_fact: + systemd_restart_units: "{{ systemd_restart_units + [systemd_socket_name ~ '.socket'] }}" # noqa: var-naming[no-role-prefix] + changed_when: true + notify: Apply systemd unit restarts diff --git a/roles/systemd_socket/meta/argument_specs.yaml b/roles/systemd_socket/meta/argument_specs.yaml new file mode 100644 index 0000000..59d281d --- /dev/null +++ b/roles/systemd_socket/meta/argument_specs.yaml @@ -0,0 +1,16 @@ +--- +argument_specs: + main: + description: + - Adds a systemd socket for a service + options: + systemd_socket_name: + description: Name of the socket. The socket will be created at /run/.sock + type: str + required: true + systemd_socket_requires: + description: List of units this socket depends on. + type: list + required: false + default: [] + elements: str diff --git a/roles/systemd_socket/meta/main.yaml b/roles/systemd_socket/meta/main.yaml new file mode 100644 index 0000000..a11606c --- /dev/null +++ b/roles/systemd_socket/meta/main.yaml @@ -0,0 +1,3 @@ +--- +dependencies: + - role: systemd diff --git a/roles/systemd_socket/tasks/main.yaml b/roles/systemd_socket/tasks/main.yaml new file mode 100644 index 0000000..648ee52 --- /dev/null +++ b/roles/systemd_socket/tasks/main.yaml @@ -0,0 +1,9 @@ +--- +- name: Socket {{ systemd_socket_name }} + ansible.builtin.template: + src: socket.j2 + dest: /etc/systemd/system/{{ systemd_socket_name }}.socket + mode: "0644" + notify: + - Reload systemd daemon + - Restart socket {{ systemd_socket_name }} diff --git a/roles/systemd_socket/templates/socket.j2 b/roles/systemd_socket/templates/socket.j2 new file mode 100644 index 0000000..8320e2f --- /dev/null +++ b/roles/systemd_socket/templates/socket.j2 @@ -0,0 +1,9 @@ +# {{ ansible_managed }} +[Unit] +Description={{ systemd_socket_name }} socket +{% for item in systemd_socket_requires %} +Requires={{ item }} +{% endfor %} + +[Socket] +ListenStream=/run/{{ systemd_socket_name }}.sock