summaryrefslogtreecommitdiff
path: root/gnu
diff options
context:
space:
mode:
Diffstat (limited to 'gnu')
-rw-r--r--gnu/services/high-availability.scm23
-rw-r--r--gnu/tests/high-availability.scm31
2 files changed, 47 insertions, 7 deletions
diff --git a/gnu/services/high-availability.scm b/gnu/services/high-availability.scm
index 7b57d9a613e..73d534cf020 100644
--- a/gnu/services/high-availability.scm
+++ b/gnu/services/high-availability.scm
@@ -1,6 +1,6 @@
1;;; GNU Guix --- Functional package management for GNU 1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2018 Christopher Baines <mail@cbaines.net> 2;;; Copyright © 2018 Christopher Baines <mail@cbaines.net>
3;;; Copyright © 2025 Artur Wroblewski <wrobell@riseup.net> 3;;; Copyright © 2025-2026 Artur Wroblewski <wrobell@riseup.net>
4;;; Copyright © 2026 Mathieu Lirzin <mthl@gnu.org> 4;;; Copyright © 2026 Mathieu Lirzin <mthl@gnu.org>
5;;; 5;;;
6;;; This file is part of GNU Guix. 6;;; This file is part of GNU Guix.
@@ -32,19 +32,25 @@
32 32
33 #:export (rabbitmq-configuration rabbitmq-configuration? 33 #:export (rabbitmq-configuration rabbitmq-configuration?
34 rabbitmq-configuration-rabbitmq 34 rabbitmq-configuration-rabbitmq
35 rabbitmq-configuration-node-name
35 rabbitmq-configuration-config-file 36 rabbitmq-configuration-config-file
37 rabbitmq-configuration-env-config-file
36 rabbitmq-configuration-plugins 38 rabbitmq-configuration-plugins
37 rabbitmq-service-type)) 39 rabbitmq-service-type))
38 40
39;; By default, start on local ipv4 and ipv6 interfaces only, see also: 41;; By default, start messaging and inter-node RabbitMQ listeners on local
42;; interfaces only, see also:
40;; 43;;
41;; https://www.rabbitmq.com/docs/networking 44;; https://www.rabbitmq.com/docs/networking
42;; 45;;
43;; NOTE: How to enable plugins to listen on localhost only? 46;; NOTE: Enabling a RabbitMQ plugin will make it usually listen on a public
47;; interface.
44(define %default-rabbitmq-config-file 48(define %default-rabbitmq-config-file
45 (plain-file "rabbitmq.conf" " 49 (plain-file "rabbitmq.conf" "
46listeners.tcp.1 = 127.0.0.1:5672 50listeners.tcp.1 = 127.0.0.1:5672
47listeners.tcp.2 = ::1:5672 51listeners.tcp.2 = ::1:5672
52
53distribution.listener.interface = 127.0.0.1
48")) 54"))
49 55
50(define-record-type* <rabbitmq-configuration> rabbitmq-configuration 56(define-record-type* <rabbitmq-configuration> rabbitmq-configuration
@@ -52,8 +58,11 @@ listeners.tcp.2 = ::1:5672
52 rabbitmq-configuration? 58 rabbitmq-configuration?
53 (rabbitmq rabbitmq-configuration-rabbitmq 59 (rabbitmq rabbitmq-configuration-rabbitmq
54 (default rabbitmq)) 60 (default rabbitmq))
61 (node-name rabbitmq-configuration-node-name
62 (default "rabbit@localhost"))
55 (config-file rabbitmq-configuration-config-file 63 (config-file rabbitmq-configuration-config-file
56 (default %default-rabbitmq-config-file)) 64 (default %default-rabbitmq-config-file))
65 (env-config-file rabbitmq-configuration-env-file (default #f))
57 ;; It can be a mnesia database or a khepri database, so use "data" instead 66 ;; It can be a mnesia database or a khepri database, so use "data" instead
58 ;; of the traditional "mnesia". 67 ;; of the traditional "mnesia".
59 (data-directory rabbitmq-configuration-data-directory 68 (data-directory rabbitmq-configuration-data-directory
@@ -102,7 +111,7 @@ listeners.tcp.2 = ::1:5672
102 111
103(define (rabbitmq-shepherd-service config) 112(define (rabbitmq-shepherd-service config)
104 (match-record config <rabbitmq-configuration> 113 (match-record config <rabbitmq-configuration>
105 (rabbitmq data-directory config-file plugins) 114 (rabbitmq node-name data-directory config-file env-config-file plugins)
106 (with-imported-modules 115 (with-imported-modules
107 (source-module-closure '((gnu build shepherd))) 116 (source-module-closure '((gnu build shepherd)))
108 (list 117 (list
@@ -119,10 +128,14 @@ listeners.tcp.2 = ::1:5672
119 #:group "rabbitmq" 128 #:group "rabbitmq"
120 #:environment-variables 129 #:environment-variables
121 (append 130 (append
131 (if #$env-config-file
132 (list (string-append "RABBITMQ_CONF_ENV_FILE="
133 #$env-config-file))
134 (list))
122 (list 135 (list
136 (string-append "RABBITMQ_NODENAME=" #$node-name)
123 (string-append "RABBITMQ_CONFIG_FILE=" #$config-file) 137 (string-append "RABBITMQ_CONFIG_FILE=" #$config-file)
124 "RABBITMQ_PID_FILE=/var/run/rabbitmq/pid" 138 "RABBITMQ_PID_FILE=/var/run/rabbitmq/pid"
125 "RABBITMQ_CONF_ENV_FILE=/run/current-system/profile/etc/rabbitmq/rabbitmq-env.conf"
126 (string-append 139 (string-append
127 "RABBITMQ_ENABLED_PLUGINS_FILE=" 140 "RABBITMQ_ENABLED_PLUGINS_FILE="
128 #$data-directory 141 #$data-directory
diff --git a/gnu/tests/high-availability.scm b/gnu/tests/high-availability.scm
index 591e5f5bc23..6eb13d1a068 100644
--- a/gnu/tests/high-availability.scm
+++ b/gnu/tests/high-availability.scm
@@ -1,6 +1,6 @@
1;;; GNU Guix --- Functional package management for GNU 1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2017 Christopher Baines <mail@cbaines.net> 2;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>
3;;; Copyright © 2025 Artur Wroblewski <wrobell@riseup.net> 3;;; Copyright © 2025-2026 Artur Wroblewski <wrobell@riseup.net>
4;;; 4;;;
5;;; This file is part of GNU Guix. 5;;; This file is part of GNU Guix.
6;;; 6;;;
@@ -19,6 +19,7 @@
19 19
20(define-module (gnu tests high-availability) 20(define-module (gnu tests high-availability)
21 #:use-module (gnu tests) 21 #:use-module (gnu tests)
22 #:use-module (gnu packages high-availability)
22 #:use-module (gnu system) 23 #:use-module (gnu system)
23 #:use-module (gnu system file-systems) 24 #:use-module (gnu system file-systems)
24 #:use-module (gnu system shadow) 25 #:use-module (gnu system shadow)
@@ -34,12 +35,15 @@
34 (plain-file "rabbitmq.conf" " 35 (plain-file "rabbitmq.conf" "
35listeners.tcp.1 = 127.0.0.1:15672 36listeners.tcp.1 = 127.0.0.1:15672
36listeners.tcp.2 = ::1:15672 37listeners.tcp.2 = ::1:15672
38
39distribution.listener.interface = 127.0.0.1
37")) 40"))
38 41
39(define %rabbitmq-os 42(define %rabbitmq-os
40 (simple-operating-system 43 (simple-operating-system
41 (service rabbitmq-service-type 44 (service rabbitmq-service-type
42 (rabbitmq-configuration (config-file %rabbitmq-config-file))))) 45 (rabbitmq-configuration (node-name "rabbit@komputilo")
46 (config-file %rabbitmq-config-file)))))
43 47
44(define* (run-rabbitmq-test #:key (rabbitmq-port 15672)) 48(define* (run-rabbitmq-test #:key (rabbitmq-port 15672))
45 "Run tests in %RABBITMQ-OS, forwarding PORT." 49 "Run tests in %RABBITMQ-OS, forwarding PORT."
@@ -94,6 +98,29 @@ listeners.tcp.2 = ::1:15672
94 '(file-exists? "/var/log/rabbitmq/rabbit@komputilo.log") 98 '(file-exists? "/var/log/rabbitmq/rabbit@komputilo.log")
95 marionette)) 99 marionette))
96 100
101 (test-assert "RabbitMQ await startup command is successful"
102 (marionette-eval
103 '(begin
104 (use-modules (guix build utils))
105
106 (current-output-port (open-file "/dev/console" "w0"))
107 (invoke #$(file-append rabbitmq "/sbin/rabbitmqctl")
108 "await_startup"
109 "-n"
110 "rabbit@komputilo"))
111 marionette))
112
113 (test-assert "RabbitMQ status command is successful"
114 (marionette-eval
115 '(begin
116 (use-modules (guix build utils))
117
118 (current-output-port (open-file "/dev/console" "w0"))
119 (invoke #$(file-append rabbitmq "/sbin/rabbitmqctl")
120 "status"
121 "-n"
122 "rabbit@komputilo"))
123 marionette))
97 (test-end)))) 124 (test-end))))
98 125
99 (gexp->derivation "rabbitmq-test" test)) 126 (gexp->derivation "rabbitmq-test" test))