summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gnu/local.mk3
-rw-r--r--gnu/packages/patches/ganeti-deterministic-manual.patch16
-rw-r--r--gnu/packages/patches/ganeti-drbd-compat.patch166
-rw-r--r--gnu/packages/patches/ganeti-os-disk-size.patch17
-rw-r--r--gnu/packages/virtualization.scm9
-rw-r--r--gnu/tests/ganeti.scm33
6 files changed, 19 insertions, 225 deletions
diff --git a/gnu/local.mk b/gnu/local.mk
index 502f198c5e..068cdb6730 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1063,11 +1063,8 @@ dist_patch_DATA = \
%D%/packages/patches/fuse-overlapping-headers.patch \
%D%/packages/patches/fxdiv-system-libraries.patch \
%D%/packages/patches/gajim-honour-GAJIM_PLUGIN_PATH.patch \
- %D%/packages/patches/ganeti-deterministic-manual.patch \
%D%/packages/patches/ganeti-disable-version-symlinks.patch \
- %D%/packages/patches/ganeti-drbd-compat.patch \
%D%/packages/patches/ganeti-haskell-pythondir.patch \
- %D%/packages/patches/ganeti-os-disk-size.patch \
%D%/packages/patches/ganeti-preserve-PYTHONPATH.patch \
%D%/packages/patches/ganeti-shepherd-master-failover.patch \
%D%/packages/patches/ganeti-shepherd-support.patch \
diff --git a/gnu/packages/patches/ganeti-deterministic-manual.patch b/gnu/packages/patches/ganeti-deterministic-manual.patch
deleted file mode 100644
index 2d90aa740e..0000000000
--- a/gnu/packages/patches/ganeti-deterministic-manual.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-Sort the ecode list in the gnt-cluster manual for deterministic results.
-
-Submitted upstream: <https://github.com/ganeti/ganeti/pull/1504>.
-
-diff --git a/lib/build/sphinx_ext.py b/lib/build/sphinx_ext.py
---- a/lib/build/sphinx_ext.py
-+++ b/lib/build/sphinx_ext.py
-@@ -108,7 +108,7 @@ CV_ECODES_DOC = "ecodes"
- # pylint: disable=W0621
- CV_ECODES_DOC_LIST = [(name, doc) for (_, name, doc) in constants.CV_ALL_ECODES]
- DOCUMENTED_CONSTANTS = {
-- CV_ECODES_DOC: CV_ECODES_DOC_LIST,
-+ CV_ECODES_DOC: sorted(CV_ECODES_DOC_LIST, key=lambda tup: tup[0]),
- }
-
-
diff --git a/gnu/packages/patches/ganeti-drbd-compat.patch b/gnu/packages/patches/ganeti-drbd-compat.patch
deleted file mode 100644
index 32f46bc7ed..0000000000
--- a/gnu/packages/patches/ganeti-drbd-compat.patch
+++ /dev/null
@@ -1,166 +0,0 @@
-This patch adds support for newer versions of DRBD.
-
-Submitted upstream: <https://github.com/ganeti/ganeti/pull/1496>.
-
-diff --git a/lib/storage/drbd.py b/lib/storage/drbd.py
---- a/lib/storage/drbd.py
-+++ b/lib/storage/drbd.py
-@@ -315,6 +315,13 @@ class DRBD8Dev(base.BlockDev):
- """
- return self._show_info_cls.GetDevInfo(self._GetShowData(minor))
-
-+ @staticmethod
-+ def _NeedsLocalSyncerParams():
-+ # For DRBD >= 8.4, syncer init must be done after local, not in net.
-+ info = DRBD8.GetProcInfo()
-+ version = info.GetVersion()
-+ return version["k_minor"] >= 4
-+
- def _MatchesLocal(self, info):
- """Test if our local config matches with an existing device.
-
-@@ -397,6 +404,20 @@ class DRBD8Dev(base.BlockDev):
- base.ThrowError("drbd%d: can't attach local disk: %s",
- minor, result.output)
-
-+ def _WaitForMinorSyncParams():
-+ """Call _SetMinorSyncParams and raise RetryAgain on errors.
-+ """
-+ if self._SetMinorSyncParams(minor, self.params):
-+ raise utils.RetryAgain()
-+
-+ if self._NeedsLocalSyncerParams():
-+ # Retry because disk config for DRBD resource may be still uninitialized.
-+ try:
-+ utils.Retry(_WaitForMinorSyncParams, 1.0, 5.0)
-+ except utils.RetryTimeout as e:
-+ base.ThrowError("drbd%d: can't set the synchronization parameters: %s" %
-+ (minor, utils.CommaJoin(e.args[0])))
-+
- def _AssembleNet(self, minor, net_info, dual_pri=False, hmac=None,
- secret=None):
- """Configure the network part of the device.
-@@ -432,21 +453,24 @@ class DRBD8Dev(base.BlockDev):
- # sync speed only after setting up both sides can race with DRBD
- # connecting, hence we set it here before telling DRBD anything
- # about its peer.
-- sync_errors = self._SetMinorSyncParams(minor, self.params)
-- if sync_errors:
-- base.ThrowError("drbd%d: can't set the synchronization parameters: %s" %
-- (minor, utils.CommaJoin(sync_errors)))
-+
-+ if not self._NeedsLocalSyncerParams():
-+ sync_errors = self._SetMinorSyncParams(minor, self.params)
-+ if sync_errors:
-+ base.ThrowError("drbd%d: can't set the synchronization parameters: %s" %
-+ (minor, utils.CommaJoin(sync_errors)))
-
- family = self._GetNetFamily(minor, lhost, rhost)
-
-- cmd = self._cmd_gen.GenNetInitCmd(minor, family, lhost, lport,
-+ cmds = self._cmd_gen.GenNetInitCmds(minor, family, lhost, lport,
- rhost, rport, protocol,
- dual_pri, hmac, secret, self.params)
-
-- result = utils.RunCmd(cmd)
-- if result.failed:
-- base.ThrowError("drbd%d: can't setup network: %s - %s",
-- minor, result.fail_reason, result.output)
-+ for cmd in cmds:
-+ result = utils.RunCmd(cmd)
-+ if result.failed:
-+ base.ThrowError("drbd%d: can't setup network: %s - %s",
-+ minor, result.fail_reason, result.output)
-
- def _CheckNetworkConfig():
- info = self._GetShowInfo(minor)
-@@ -463,19 +487,20 @@ class DRBD8Dev(base.BlockDev):
- base.ThrowError("drbd%d: timeout while configuring network", minor)
-
- # Once the assembly is over, try to set the synchronization parameters
-- try:
-- # The minor may not have been set yet, requiring us to set it at least
-- # temporarily
-- old_minor = self.minor
-- self._SetFromMinor(minor)
-- sync_errors = self.SetSyncParams(self.params)
-- if sync_errors:
-- base.ThrowError("drbd%d: can't set the synchronization parameters: %s" %
-- (self.minor, utils.CommaJoin(sync_errors)))
-- finally:
-- # Undo the change, regardless of whether it will have to be done again
-- # soon
-- self._SetFromMinor(old_minor)
-+ if not self._NeedsLocalSyncerParams():
-+ try:
-+ # The minor may not have been set yet, requiring us to set it at least
-+ # temporarily
-+ old_minor = self.minor
-+ self._SetFromMinor(minor)
-+ sync_errors = self.SetSyncParams(self.params)
-+ if sync_errors:
-+ base.ThrowError("drbd%d: can't set the synchronization parameters: %s" %
-+ (self.minor, utils.CommaJoin(sync_errors)))
-+ finally:
-+ # Undo the change, regardless of whether it will have to be done again
-+ # soon
-+ self._SetFromMinor(old_minor)
-
- @staticmethod
- def _GetNetFamily(minor, lhost, rhost):
-diff --git a/lib/storage/drbd_cmdgen.py b/lib/storage/drbd_cmdgen.py
---- a/lib/storage/drbd_cmdgen.py
-+++ b/lib/storage/drbd_cmdgen.py
-@@ -56,7 +56,7 @@ class BaseDRBDCmdGenerator(object):
- def GenLocalInitCmds(self, minor, data_dev, meta_dev, size_mb, params):
- raise NotImplementedError
-
-- def GenNetInitCmd(self, minor, family, lhost, lport, rhost, rport, protocol,
-+ def GenNetInitCmds(self, minor, family, lhost, lport, rhost, rport, protocol,
- dual_pri, hmac, secret, params):
- raise NotImplementedError
-
-@@ -138,7 +138,7 @@ class DRBD83CmdGenerator(BaseDRBDCmdGenerator):
-
- return [args]
-
-- def GenNetInitCmd(self, minor, family, lhost, lport, rhost, rport, protocol,
-+ def GenNetInitCmds(self, minor, family, lhost, lport, rhost, rport, protocol,
- dual_pri, hmac, secret, params):
- args = ["drbdsetup", self._DevPath(minor), "net",
- "%s:%s:%s" % (family, lhost, lport),
-@@ -155,7 +155,7 @@ class DRBD83CmdGenerator(BaseDRBDCmdGenerator):
- if params[constants.LDP_NET_CUSTOM]:
- args.extend(shlex.split(params[constants.LDP_NET_CUSTOM]))
-
-- return args
-+ return [args]
-
- def GenSyncParamsCmd(self, minor, params):
- args = ["drbdsetup", self._DevPath(minor), "syncer"]
-@@ -345,8 +345,14 @@ class DRBD84CmdGenerator(BaseDRBDCmdGenerator):
-
- return cmds
-
-- def GenNetInitCmd(self, minor, family, lhost, lport, rhost, rport, protocol,
-+ def GenNetInitCmds(self, minor, family, lhost, lport, rhost, rport, protocol,
- dual_pri, hmac, secret, params):
-+ cmds = []
-+
-+ cmds.append(["drbdsetup", "new-resource", self._GetResource(minor)])
-+ cmds.append(["drbdsetup", "new-minor", self._GetResource(minor),
-+ str(minor), "0"])
-+
- args = ["drbdsetup", "connect", self._GetResource(minor),
- "%s:%s:%s" % (family, lhost, lport),
- "%s:%s:%s" % (family, rhost, rport),
-@@ -362,7 +368,8 @@ class DRBD84CmdGenerator(BaseDRBDCmdGenerator):
- if params[constants.LDP_NET_CUSTOM]:
- args.extend(shlex.split(params[constants.LDP_NET_CUSTOM]))
-
-- return args
-+ cmds.append(args)
-+ return cmds
-
- def GenSyncParamsCmd(self, minor, params):
- args = ["drbdsetup", "disk-options", minor]
diff --git a/gnu/packages/patches/ganeti-os-disk-size.patch b/gnu/packages/patches/ganeti-os-disk-size.patch
deleted file mode 100644
index 16b1d7615c..0000000000
--- a/gnu/packages/patches/ganeti-os-disk-size.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-This exposes information about disk sizes to OS install scripts. instance-guix
-uses this if available to determine the size of the VM image.
-
-Submitted upstream:
-https://github.com/ganeti/ganeti/pull/1503
-
-diff --git a/lib/backend.py b/lib/backend.py
---- a/lib/backend.py
-+++ b/lib/backend.py
-@@ -4305,6 +4305,7 @@ def OSEnvironment(instance, inst_os, debug=0):
- uri = _CalculateDeviceURI(instance, disk, real_disk)
- result["DISK_%d_ACCESS" % idx] = disk.mode
- result["DISK_%d_UUID" % idx] = disk.uuid
-+ result["DISK_%d_SIZE" % idx] = str(disk.size)
- if real_disk.dev_path:
- result["DISK_%d_PATH" % idx] = real_disk.dev_path
- if uri:
diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm
index 09f27461a9..65f611736d 100644
--- a/gnu/packages/virtualization.scm
+++ b/gnu/packages/virtualization.scm
@@ -14,7 +14,7 @@
;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
;;; Copyright © 2020, 2021 Brice Waegeneire <brice@waegenei.re>
;;; Copyright © 2020 Mathieu Othacehe <m.othacehe@gmail.com>
-;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2020, 2021 Marius Bakke <mbakke@fastmail.com>
;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2020 Brett Gilio <brettg@gnu.org>
;;; Copyright © 2021 Leo Famulari <leo@famulari.name>
@@ -513,20 +513,17 @@ firmware blobs. You can
(name "ganeti")
;; Note: we use a pre-release for Python 3 compatibility as well as many
;; other fixes.
- (version "3.0.0beta1-24-g024cc9fa2")
+ (version "3.0.1")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/ganeti/ganeti")
(commit (string-append "v" version))))
(sha256
- (base32 "1ll34qd2mifni3bhg7cnir3xfnkafig8ch33qndqwrsby0y5ssia"))
+ (base32 "1i7gx0sdx9316fnldbv738s0ihym1370nhc1chk0biandkl8vvq0"))
(file-name (git-file-name name version))
(patches (search-patches "ganeti-shepherd-support.patch"
"ganeti-shepherd-master-failover.patch"
- "ganeti-deterministic-manual.patch"
- "ganeti-drbd-compat.patch"
- "ganeti-os-disk-size.patch"
"ganeti-haskell-pythondir.patch"
"ganeti-disable-version-symlinks.patch"
"ganeti-preserve-PYTHONPATH.patch"))))
diff --git a/gnu/tests/ganeti.scm b/gnu/tests/ganeti.scm
index b64a332dde..5ac2fd48dd 100644
--- a/gnu/tests/ganeti.scm
+++ b/gnu/tests/ganeti.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2020 Marius Bakke <marius@gnu.org>.
+;;; Copyright © 2020, 2021 Marius Bakke <marius@gnu.org>
;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
;;;
;;; This file is part of GNU Guix.
@@ -52,17 +52,17 @@
(hosts-file (plain-file "hosts" (format #f "
127.0.0.1 localhost
::1 localhost
-10.0.2.2 gnt1.example.com gnt1
+10.0.2.15 gnt1.example.com gnt1
192.168.254.254 ganeti.example.com
")))
(packages (append (list ganeti-instance-debootstrap ganeti-instance-guix)
%base-packages))
(services
- (append (list (static-networking-service "eth0" "10.0.2.2"
+ (append (list (static-networking-service "eth0" "10.0.2.15"
#:netmask "255.255.255.0"
- #:gateway "10.0.2.1"
- #:name-servers '("10.0.2.1"))
+ #:gateway "10.0.2.2"
+ #:name-servers '("10.0.2.3"))
(service openssh-service-type
(openssh-configuration
@@ -83,8 +83,7 @@
(master-netdev "eth0")
(hvparams '())
(extra-packages '())
- (rapi-port 5080)
- (noded-port 1811))
+ (rapi-port 5080))
"Run tests in %GANETI-OS."
(define os
(marionette-operating-system
@@ -96,7 +95,6 @@
(guix combinators))))
(define %forwarded-rapi-port 5080)
- (define %forwarded-noded-port 1811)
(define vm
(virtual-machine
@@ -104,14 +102,14 @@
;; Some of the daemons are fairly memory-hungry.
(memory-size 512)
;; Forward HTTP ports so we can access them from the "outside".
- (port-forwardings `((,%forwarded-rapi-port . ,rapi-port)
- (,%forwarded-noded-port . ,noded-port)))))
+ (port-forwardings `((,%forwarded-rapi-port . ,rapi-port)))))
(define test
(with-imported-modules '((gnu build marionette))
#~(begin
(use-modules (srfi srfi-11) (srfi srfi-64)
(web uri) (web client) (web response)
+ (ice-9 iconv)
(gnu build marionette))
(define marionette
@@ -213,18 +211,19 @@
"watcher" "continue"))
marionette))
- ;; Try accessing the RAPI. This causes an expected failure:
- ;; https://github.com/ganeti/ganeti/issues/1502
- ;; Run it anyway for easy testing of potential fixes.
+ ;; Try accessing the RAPI.
(test-equal "http-get RAPI version"
- '(200 "2")
+ '(200 "2\n")
(let-values
(((response text)
(http-get #$(simple-format
#f "http://localhost:~A/version"
%forwarded-rapi-port)
- #:decode-body? #t)))
- (list (response-code response) text)))
+ #:decode-body? #f)))
+ (list (response-code response)
+ ;; The API response lacks a content-type, so
+ ;; (http-client) won't decode it for us.
+ (bytevector->string text "UTF-8"))))
(test-equal "gnt-os list"
"debootstrap+default\nguix+default\n"
@@ -249,7 +248,7 @@
marionette))
(test-end)
- (exit (= (test-runner-fail-count (test-runner-current)) 1)))))
+ (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
(gexp->derivation (string-append "ganeti-" hypervisor "-test") test))