services: Add keepalived service.

* gnu/services/networking.scm (<keepalived-configuration>): New record.
(keepalived-shepherd-service): New procedure.
(keepalived-service-type): New variable.
* doc/guix.texi (Networking Services): Document this.
This commit is contained in:
Oleg Pykhalov 2021-01-01 13:02:11 +03:00
parent 79ba12a1db
commit 4e511fcfce
No known key found for this signature in database
GPG Key ID: 167F8EA5001AFA9C
2 changed files with 99 additions and 2 deletions

@ -55,7 +55,7 @@ Copyright @copyright{} 2017 Andy Wingo@*
Copyright @copyright{} 2017, 2018, 2019, 2020 Arun Isaac@*
Copyright @copyright{} 2017 nee@*
Copyright @copyright{} 2018 Rutger Helling@*
Copyright @copyright{} 2018 Oleg Pykhalov@*
Copyright @copyright{} 2018, 2021 Oleg Pykhalov@*
Copyright @copyright{} 2018 Mike Gerwitz@*
Copyright @copyright{} 2018 Pierre-Antoine Rouby@*
Copyright @copyright{} 2018, 2019 Gábor Boskovits@*
@ -17207,6 +17207,58 @@ address, delete everything except these options:
@end table
@end deftp
@cindex keepalived
@deffn {Scheme Variable} keepalived-service-type
This is the type for the @uref{https://www.keepalived.org/, Keepalived}
routing software, @command{keepalived}. Its value must be an
@code{keepalived-configuration} record as in this example for master
machine:
@lisp
(service keepalived-service-type
(keepalived-configuration
(config-file (local-file "keepalived-master.conf"))))
@end lisp
where @file{keepalived-master.conf}:
@example
vrrp_instance my-group @{
state MASTER
interface enp9s0
virtual_router_id 100
priority 100
unicast_peer @{ 10.0.0.2 @}
virtual_ipaddress @{
10.0.0.4/24
@}
@}
@end example
and for backup machine:
@lisp
(service keepalived-service-type
(keepalived-configuration
(config-file (local-file "keepalived-backup.conf"))))
@end lisp
where @file{keepalived-backup.conf}:
@example
vrrp_instance my-group @{
state BACKUP
interface enp9s0
virtual_router_id 100
priority 99
unicast_peer @{ 10.0.0.3 @}
virtual_ipaddress @{
10.0.0.4/24
@}
@}
@end example
@end deffn
@node Unattended Upgrades
@subsection Unattended Upgrades

@ -14,6 +14,7 @@
;;; Copyright © 2019 Sou Bunnbu <iyzsong@member.fsf.org>
;;; Copyright © 2019 Alex Griffin <a@ajgrf.com>
;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
;;; Copyright © 2021 Oleg Pykhalov <go.wigust@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@ -42,6 +43,7 @@
#:use-module (gnu packages admin)
#:use-module (gnu packages base)
#:use-module (gnu packages bash)
#:use-module (gnu packages cluster)
#:use-module (gnu packages connman)
#:use-module (gnu packages freedesktop)
#:use-module (gnu packages linux)
@ -192,7 +194,11 @@
yggdrasil-configuration-log-level
yggdrasil-configuration-log-to
yggdrasil-configuration-json-config
yggdrasil-configuration-package))
yggdrasil-configuration-package
keepalived-configuration
keepalived-configuration?
keepalived-service-type))
;;; Commentary:
;;;
@ -1865,4 +1871,43 @@ See yggdrasil -genconf for config options.")
(service-extension profile-service-type
(compose list yggdrasil-configuration-package))))))
;;;
;;; Keepalived
;;;
(define-record-type* <keepalived-configuration>
keepalived-configuration make-keepalived-configuration
keepalived-configuration?
(keepalived keepalived-configuration-keepalived ;<package>
(default keepalived))
(config-file keepalived-configuration-config-file ;file-like
(default #f)))
(define keepalived-shepherd-service
(match-lambda
(($ <keepalived-configuration> keepalived config-file)
(list
(shepherd-service
(provision '(keepalived))
(documentation "Run keepalived.")
(requirement '(loopback))
(start #~(make-forkexec-constructor
(list (string-append #$keepalived "/sbin/keepalived")
"--dont-fork" "--log-console" "--log-detail"
"--pid=/var/run/keepalived.pid"
(string-append "--use-file=" #$config-file))
#:pid-file "/var/run/keepalived.pid"
#:log-file "/var/log/keepalived.log"))
(respawn? #f)
(stop #~(make-kill-destructor)))))))
(define keepalived-service-type
(service-type (name 'keepalived)
(extensions (list (service-extension shepherd-root-service-type
keepalived-shepherd-service)))
(description
"Run @uref{https://www.keepalived.org/, Keepalived}
routing software.")))
;;; networking.scm ends here