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:
		
							parent
							
								
									79ba12a1db
								
							
						
					
					
						commit
						4e511fcfce
					
				
					 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 | ||||
|  |  | |||
		Reference in a new issue