lab.nexedi.com will be down from Thursday, 20 March 2025, 07:30:00 UTC for a duration of approximately 2 hours

Commit 5d712e09 authored by Thomas Gambier's avatar Thomas Gambier 🚴🏼

Update Release Candidate

parents 5f239087 70d8d6f8
......@@ -127,5 +127,6 @@ ZODB3 = 3.11.0
# eggs that are common to ZODB4 and ZODB5.
[versions:python2]
BTrees = 4.11.3
# NOTE: keep persistent version in sync with test-zodb4-wc2.cfg
persistent = 4.9.3
zodbpickle = 2.6.0
......@@ -8,6 +8,7 @@ extends =
../pygolang/buildout.cfg
buildout.cfg
../ZEO/buildout.cfg
../../stack/slapos-py2.cfg
parts =
ZODB
......@@ -22,11 +23,6 @@ parts =
major = 4-wc2
[ZODB4-wc2-repository]
revision =
[python]
part = python2.7
[openssl]
<= openssl-1.1
# we need persistent to be a git checkout because persistent tests want to
# discover in-tree files that are not present in persistent egg when it is
......@@ -35,7 +31,7 @@ part = python2.7
# https://erp5.nexedi.net/test_result_module/20201123-3F859E35/7
# (look for "AssertionError: could not find my setup.py")
#
# https://github.com/zopefoundation/persistent/blob/4.6.4-0-g7ed95cf/persistent/tests/test_docs.py#L37-L43
# https://github.com/zopefoundation/persistent/blob/4.9.3-0-g599bb36/src/persistent/tests/test_docs.py#L37-L43
[persistent]
recipe = zc.recipe.egg:develop
setup = ${persistent-repository:location}
......@@ -45,7 +41,7 @@ recipe = slapos.recipe.build:gitclone
location = ${buildout:parts-directory}/persistent
repository = https://github.com/zopefoundation/persistent.git
branch = master
revision = 4.6.4-0-g7ed95cf
revision = 4.9.3-0-g599bb36
git-executable = ${git:location}/bin/git
# bin/python is preinstalled with sys.path to ZODB & friends.
......
# See https://github.com/GNUAspell/aspell-lang/issues/3
--- a/configure
+++ b/configure
@@ -79,9 +79,9 @@
datadir=`$ASPELL dump config data-dir`
echo $datadir
-echo "ASPELL = `which $ASPELL`" > Makefile
+echo "ASPELL = `command -v $ASPELL`" > Makefile
echo "ASPELL_FLAGS = $ASPELL_FLAGS" >> Makefile
-echo "PREZIP = `which $PREZIP`" >> Makefile
+echo "PREZIP = `command -v $PREZIP`" >> Makefile
echo "DESTDIR = $DESTDIR" >> Makefile
echo "dictdir = $dictdir" >> Makefile
echo "datadir = $datadir" >> Makefile
\ No newline at end of file
......@@ -46,3 +46,8 @@ make-options = -j1
<= aspell-dictionary-common
url = ftp://ftp.gnu.org/gnu/aspell/dict/en/aspell6-en-7.1-0.tar.bz2
md5sum = beba5e8f3afd3ed1644653bb685b2dfb
patch-options = -p1
patches =
${:_profile_base_location_}/aspell-en_configure_which.patch#97e9fc81d5612634e9b8224b20855698
environment =
PATH=${patch:location}/bin:%(PATH)s
......@@ -10,6 +10,10 @@ extensions =
extends =
buildout.cfg
../../stack/slapos.cfg
parts =
fluent-bit
[versions]
slapos.extension.strip = 0.4
......@@ -44,18 +44,22 @@ configure-options-extra2 =
[gnutls]
<= gpg-common
url = https://www.gnupg.org/ftp/gcrypt/gnutls/v3.7/gnutls-3.7.2.tar.xz
md5sum = 95c32a1af583ecfcb280648874c0fbd9
url = https://www.gnupg.org/ftp/gcrypt/gnutls/v3.7/gnutls-3.7.11.tar.xz
md5sum = dd8c16b17f1d37fca203e756e981a957
configure-options-extra =
--disable-doc
--disable-static
--disable-libdane
--disable-guile
--without-tpm
--without-tpm2
--without-brotli
--without-zstd
--with-included-unistring
pkg-config-path = ${libtasn1:location}/lib/pkgconfig:${nettle:location}/lib/pkgconfig:${p11-kit:location}/lib/pkgconfig:${zlib:location}/lib/pkgconfig
environment =
PATH=${pkgconfig:location}/bin:${xz-utils:location}/bin:%(PATH)s
PKG_CONFIG_PATH=${:pkg-config-path}
PYTHON=${python3:location}/bin/python3
CPPFLAGS=-I${gmp:location}/include -I${libtasn1:location}/include
LDFLAGS=-L${gmp:location}/lib -Wl,-rpath=${gmp:location}/lib -Wl,-rpath=${nettle:location}/lib -Wl,-rpath=${zlib:location}/lib
......@@ -48,8 +48,8 @@ environment =
[openssl-3.0]
<= openssl-common
url = https://github.com/openssl/openssl/releases/download/openssl-3.0.15/openssl-3.0.15.tar.gz
md5sum = 08f458c00fff496a52ef931c481045cd
url = https://github.com/openssl/openssl/releases/download/openssl-3.0.16/openssl-3.0.16.tar.gz
md5sum = 7b6a9cded21b9fa51877444f5defebd4
[openssl-quictls]
<= openssl-3.0
......
......@@ -20,10 +20,11 @@ setup-eggs =
${scipy:egg}
${cython:egg}
setuptools-dso
statsmodels-patches = ${:_profile_base_location_}/statsmodels-add-setup-version.patch#8bb8eac7375e13fa8104a6aa905ef35c
packaging
statsmodels-patches = ${:_profile_base_location_}/statsmodels-add-setup-version.patch#226a03ae31d060583fa21d425e6a81b6
statsmodels-patch-options = -p1
[statsmodels:sys.version_info < (3,10)]
[statsmodels:sys.version_info < (3,9)]
statsmodels-patches =
statsmodels-patch-options =
......
......@@ -2,20 +2,20 @@ add a version to make this package compatible with buildout's easy_install
Fixes this issue:
Installing statsmodels 0.13.5
Installing statsmodels 0.14.4
Caused installation of a distribution:
statsmodels 0.0.0
with a different version.
diff '--color=auto' -ru statsmodels-0.13.5.orig/setup.py statsmodels-0.13.5/setup.py
--- statsmodels-0.13.5.orig/setup.py 2022-11-02 01:54:20.000000000 +0900
+++ statsmodels-0.13.5/setup.py 2023-10-26 14:12:35.157708043 +0900
@@ -387,6 +387,7 @@
diff -ruN statsmodels-0.14.4.orig/setup.py statsmodels-0.14.4/setup.py
--- statsmodels-0.14.4.orig/setup.py 2025-01-24 09:27:54.995143777 +0100
+++ statsmodels-0.14.4/setup.py 2025-01-24 09:29:14.175103580 +0100
@@ -349,6 +349,7 @@
setup(
name=DISTNAME,
+ version='0.13.5',
+ version='0.14.4',
maintainer=MAINTAINER,
ext_modules=extensions,
maintainer_email=MAINTAINER_EMAIL,
......@@ -50,6 +50,6 @@ class Recipe(GenericSlapRecipe):
'computer_guid': slap_connection['computer-id'],
'partition_id': slap_connection['partition-id'],
'software_release': slap_connection['software-release-url'],
'namebase': self.parameter_dict['namebase'],
'namebase': self.options['namebase'],
'takeover_triggered_file_path': self.options['takeover-triggered-file-path'],
})
......@@ -114,7 +114,7 @@ def requestRemoveToken(client, token_base_path):
reference)
request_file.unlink()
status_file = request_file.with_suffix('.status')
status_file.unlink()
status_file.unlink(missing_ok=True)
ipv6_file = request_file.with_suffix('.ipv6')
ipv6_file.unlink(missing_ok=True)
else:
......
[buildout]
extends =
../../kvm/development.cfg
../../kvm/software.cfg
testsuite.cfg
parts += template-erp5testnode
......@@ -16,5 +16,3 @@ md5sum = dd82c771f6f7738fb4b0fc1330ed8236
extra-context =
raw default_test_image_url file://${default-test-image:target}
raw default_test_image_md5sum ${default-test-image:md5sum}
......@@ -23,7 +23,7 @@ md5sum = 86e379ac6ba789d65369ca1e0d4dfa3f
[instance-agent]
filename = instance-agent.cfg.in
md5sum = eeb529b2b6a8e762a9072c520691c66c
md5sum = 11cd081c2196f73441cd677b0d74b16a
[influxdb-config-file]
......
......@@ -568,8 +568,8 @@ init =
"stages": [
{
"multiline": {
# TODO this does not seem to work well
"firstline": "^------",
"max_lines": 1024,
"max_wait_time": "5s"
}
},
......@@ -628,6 +628,7 @@ init =
{
"multiline": {
"firstline": "^\\d{4}-\\d{2}-\\d{2}\\s\\d{1,2}\\:\\d{2}\\:\\d{2}\\,\\d{3}",
"max_lines": 1024,
"max_wait_time": "5s"
}
},
......@@ -657,19 +658,25 @@ init =
cfg['scrape_configs'].append({
"job_name": job_name,
"pipeline_stages": [
{
# between each slow query, slow query log has a first line like:
# # Time: 231008 16:29:01
# and then a second like:
# # User@Host: user[user] @ [10.0.71.207]
# but the first line is not repeated for subsequent queries that happens
# at the same second. Drop this "Time:" line
"drop": {
"expression": r"^# Time: \d+.*",
}
},
{
"match": {
"selector": get_job_selector(partition, job_name, application['name']),
"stages": [
{
"multiline": {
# between each slow query, slow query log has a first line like:
# # Time: 231008 16:29:01
# and then a second like:
# # User@Host: user[user] @ [10.0.71.207]
# but the first line is not repeated for subsequent queries that happens
# at the same second
"firstline": r"(^# Time: \d{2}.*\n^# User@Host:.*|^# User@Host:.*)",
"firstline": "^# User@Host:.*",
"max_lines": 1024,
"max_wait_time": "5s"
}
},
......
......@@ -15,11 +15,11 @@
[template]
filename = instance.cfg.in
md5sum = 2ef12d7fc16d74e0887a8cb16a848445
md5sum = 7f357b3ec6763d6a5e084fc460223e4c
[template-kvm]
filename = instance-kvm.cfg.jinja2
md5sum = 957f3a3c8e5f9a905026cc01a25b326e
md5sum = 8414431b20715cb9383b5577de9afdaf
[template-kvm-cluster]
filename = instance-kvm-cluster.cfg.jinja2.in
......@@ -31,19 +31,19 @@ md5sum = 12d46a7d45f00e091d18e6d4552d0973
[template-kvm-import]
filename = instance-kvm-import.cfg.jinja2.in
md5sum = 0829d08337a09b8ef017e71fbb9384fb
md5sum = 022438f445e9ae5b1930a586e7914024
[template-kvm-import-script]
filename = template/kvm-import.sh.jinja2
md5sum = a6e6abb3b17fae37b84233d63014b885
md5sum = 21a620fafd8b76d4e915e359c69ae553
[template-kvm-export]
filename = instance-kvm-export.cfg.jinja2
md5sum = a02f0694dcb944c18d99f7f79afa2384
md5sum = 72f1f334e3b9f8de0f65373b4cd6e6d6
[template-kvm-export-script]
filename = template/kvm-export.sh.jinja2
md5sum = 667e4668cfdf396d18785d8cfa096396
md5sum = e07fb8561c9aed4919c656c2d192e02b
[template-nginx]
filename = template/nginx_conf.in
......@@ -100,3 +100,7 @@ md5sum = d53afe719e2cbfc2480277af340f8429
[check-backup-directory.sh]
filename = template/check-backup-directory.sh
md5sum = e569494a941e1d585c2e0bbf070cf1c9
[disk-image-corruption.sh]
filename = template/disk-image-corruption.sh
md5sum = 714e9d6e2fdb0ef4ef7844a3148a5a4b
# Development profile of kvm.
# Exactly the same as software.cfg, but fetch the slapos.cookbook and
# slapos.toolbox from git repository instead of fetching stable version,
# allowing to play with bleeding edge environment.
[buildout]
extends = software.cfg
../../stack/slapos-dev.cfg
parts +=
# Development eggs
${:common-parts}
......@@ -43,6 +43,7 @@ context =
key socket_path kvm-instance:socket-path
section disk disk
raw qmpbackup {{ qmpbackup }}
raw backup_signature {{ backup_signature }}
# Extends publish section with resilient parameters
[publish-connection-information]
......
......@@ -67,21 +67,19 @@ wrapper = ${:output}
context =
section directory directory
raw qmprestore {{ qmprestore }}
raw backup_signature {{ backup_signature }}
[kvm-disk-image-corruption-bin]
recipe = collective.recipe.template
input = inline:#!/bin/sh
QEMU_IMAGE="${directory:srv}/virtual.qcow2"
if [ ! -s "$QEMU_IMAGE" ]; then
exit 0
fi
{{ qemu_location }}/bin/qemu-img check $QEMU_IMAGE
RETURN_CODE=$?
if [ $RETURN_CODE -eq 0 ] || [ $RETURN_CODE -eq 3 ]; then
exit 0
else
exit 1
fi
recipe = slapos.recipe.template:jinja2
url = {{ disk_image_corruption }}
qemu_img_path = {{ qemu_location }}/bin/qemu-img
disk_path = ${directory:srv}/virtual.qcow2
# force empty disk device
disk_device_path =
context =
key disk_device_path :disk_device_path
key qemu_img_path :qemu_img_path
key disk_path :disk_path
output = ${directory:bin}/kvm-disk-image-corruption
mode = 700
......
......@@ -566,22 +566,12 @@ config-host = ${kvm-parameter-dict:vnc-ip}
config-port = ${kvm-parameter-dict:vnc-websocket-port}
[kvm-disk-image-corruption-bin]
recipe = collective.recipe.template
input = inline:#!/bin/sh
# Return code 0 is "OK"
# Return code 3 is "found leaks, but image is OK"
# http://git.qemu.org/?p=qemu.git;a=blob;f=qemu-img.c;h=4e9a7f5741c9cb863d978225829e68fefcae3947;hb=HEAD#l702
if [ "${slap-parameter:disk-device-path}" != "" ]; then
# disk device option is used, skip qemu img check
exit 0
fi
${kvm-parameter-dict:qemu-img-path} check -U ${kvm-parameter-dict:disk-path} > /dev/null 2>&1
RETURN_CODE=$?
if [ $RETURN_CODE -eq 0 ] || [ $RETURN_CODE -eq 3 ]; then
exit 0
else
exit 1
fi
recipe = slapos.recipe.template:jinja2
url = {{ disk_image_corruption }}
context =
key disk_device_path slap-parameter:disk-device-path
key qemu_img_path kvm-parameter-dict:qemu-img-path
key disk_path kvm-parameter-dict:disk-path
output = ${directory:bin}/kvm-disk-image-corruption
mode = 700
......
......@@ -101,6 +101,7 @@ extra-context =
raw template_nginx ${template-nginx:target}
raw websockify_executable_location ${buildout:directory}/bin/websockify
raw wipe_disk_wrapper ${buildout:directory}/bin/securedelete
raw disk_image_corruption ${disk-image-corruption.sh:target}
template-parts-destination = ${template-parts:target}
template-replicated-destination = ${template-replicated:target}
import-list = file parts :template-parts-destination
......@@ -146,6 +147,7 @@ context =
key slapparameter_dict slap-configuration:configuration
key qmpbackup qmpbackup-binary:wrapper-path
raw check_backup_directory ${check-backup-directory.sh:output}
raw backup_signature ${buildout:bin-directory}/backup-signature
[qmprestore-binary]
recipe = slapos.cookbook:wrapper
......@@ -170,3 +172,5 @@ context =
key pbsready_import_template template-pbsready-import:output
key slapparameter_dict slap-configuration:configuration
key qmprestore qmprestore-binary:wrapper-path
raw backup_signature ${buildout:bin-directory}/backup-signature
raw disk_image_corruption ${disk-image-corruption.sh:target}
......@@ -147,3 +147,6 @@ context =
[check-backup-directory.sh]
<= template-base
output = ${buildout:parts-directory}/${:_buildout_section_name_}/check-backup-directory.sh
[disk-image-corruption.sh]
<= download-base
#!/bin/sh
if [ "{{ disk_device_path }}" != "" ]; then
# disk device option is used, skip qemu img check
exit 0
fi
if [ ! -s "{{ disk_path }}" ]; then
exit 0
fi
{{ qemu_img_path }} check -U {{ disk_path }}
RETURN_CODE=$?
# Return code 0 is "OK"
# Return code 3 is "found leaks, but image is OK"
# http://git.qemu.org/?p=qemu.git;a=blob;f=qemu-img.c;h=4e9a7f5741c9cb863d978225829e68fefcae3947;hb=HEAD#l702
if [ $RETURN_CODE -eq 0 ] || [ $RETURN_CODE -eq 3 ]; then
exit 0
else
exit 1
fi
......@@ -47,4 +47,4 @@ if [ x"$recent_full" != x"" ] ; then
done
fi
cd $BACKUP_DIR && find -type f ! -name backup.signature -print0 | xargs -0 sha256sum | LC_ALL=C sort -k 66 > backup.signature
{{ backup_signature }} --action update --directory $BACKUP_DIR --signature-file-name backup.signature
......@@ -10,7 +10,7 @@ umask 077
write_backup_proof () {
cd {{ directory['backup'] }}
find -type f ! -name backup.signature ! -wholename "./rdiff-backup-data/*" -print0 | xargs -0 sha256sum | LC_ALL=C sort -k 66 > {{ directory['srv'] }}/proof.signature
{{ backup_signature }} --action update --directory {{ directory['backup'] }} --signature-file-name backup.signature --proof-signature-path {{ directory['srv'] }}/proof.signature
diff -ruw {{ directory['backup'] }}/backup.signature {{ directory['srv'] }}/proof.signature > {{ directory['srv'] }}/backup.diff
}
......
......@@ -215,7 +215,7 @@ class KvmMixin:
)
@classmethod
def getPartitionId(cls, instance_type):
def getPartitionIdByType(cls, instance_type):
software_url = cls.getSoftwareURL()
for computer_partition in cls.slap.computer.getComputerPartitionList():
try:
......@@ -235,7 +235,7 @@ class KvmMixin:
@classmethod
def getPartitionPath(cls, instance_type='kvm-export', *paths):
return os.path.join(
cls.slap._instance_root, cls.getPartitionId(instance_type), *paths)
cls.slap._instance_root, cls.getPartitionIdByType(instance_type), *paths)
@classmethod
def getBackupPartitionPath(cls, *paths):
......@@ -1116,10 +1116,11 @@ class TestInstanceResilient(KVMTestCase, KvmMixin):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.pbs1_ipv6 = cls.getPartitionIPv6(cls.getPartitionId('PBS (kvm / 1)'))
cls.kvm_instance_partition_reference = cls.getPartitionId('kvm0')
cls.pbs1_ipv6 = cls.getPartitionIPv6(cls.getPartitionIdByType(
'pull-backup'))
cls.kvm_instance_partition_reference = cls.getPartitionIdByType('kvm-export')
cls.kvm0_ipv6 = cls.getPartitionIPv6(cls.kvm_instance_partition_reference)
cls.kvm1_ipv6 = cls.getPartitionIPv6(cls.getPartitionId('kvm1'))
cls.kvm1_ipv6 = cls.getPartitionIPv6(cls.getPartitionIdByType('kvm-import'))
def test(self):
connection_parameter_dict = self\
......@@ -2990,3 +2991,52 @@ vm""", fh.read())
class TestInstanceHttpServerJson(
KvmMixinJson, TestInstanceHttpServer):
pass
@skipUnlessKvm
class TestDefaultDiskImageCorruption(KVMTestCase, KvmMixin):
__partition_reference__ = 'ddic'
kvm_instance_partition_reference = 'ddic0'
def assertPromiseFails(self, partition_directory, promise):
monitor_run_promise = os.path.join(
partition_directory, 'software_release', 'bin',
'monitor.runpromise'
)
monitor_configuration = os.path.join(
partition_directory, 'etc', 'monitor.conf')
try:
output = subprocess.check_output(
[monitor_run_promise, '-c', monitor_configuration, '-a', '-f',
'--run-only', promise],
stderr=subprocess.STDOUT).decode('utf-8')
self.fail('Promise did not failed with output %s' % (output,))
except subprocess.CalledProcessError as e:
return e.output.decode('utf-8')
def _test(self, partition_type):
image = self.getPartitionPath(partition_type, 'srv', 'virtual.qcow2')
with open(image, 'w') as fh:
fh.write('damage')
partition = self.getPartitionPath(partition_type)
promise = 'kvm-disk-image-corruption.py'
output = self.assertPromiseFails(partition, promise)
self.assertIn(
'qemu-img: This image format does not support checks', output)
def test(self):
self._test('default')
@skipUnlessKvm
class TestResilientDiskImageCorruption(TestDefaultDiskImageCorruption):
@classmethod
def getInstanceSoftwareType(cls):
return 'kvm-resilient'
def test(self):
self._test('kvm-export')
def test_kvm_import(self):
self._test('kvm-import')
......@@ -74,12 +74,6 @@ peewee = 3.14.4
python-whois = 0.7.3
future = 0.18.3
# For statsmodel =0.11.1
numpy = 1.22.0
# For numy = 1.22.0
setuptools = 44.1.1
scipy = 1.11.4
# use old netaddr because we are using old setuptools
netaddr = 0.7.19
......
......@@ -26,7 +26,7 @@ md5sum = 4a53b09ba4cbf15e32a5088cc81db5ea
[profile-master]
filename = instance-master.cfg.in
md5sum = 78c556911944339f0c03c8416db8dbaa
md5sum = fcc78c9f240974dff2ed5055a2675603
[profile-slave-list]
filename = instance-slave-list.cfg.in
......
......@@ -316,7 +316,9 @@ context =
{%- endfor %}
{%- for k in ['ssl_proxy_ca_crt', 'health-check-failover-ssl-proxy-ca-crt'] %}
{%- if k in slave %}
{%- set crt = slave.get(k, '') %}
{#- Be very cautious -- some master implementations are returning None for empty strings #}
{#- Thus get can return None so convert it to a string #}
{%- set crt = slave.get(k, '') or '' %}
{%- set check_popen = popen([software_parameter_dict['openssl'], 'x509', '-noout']) %}
{%- do check_popen.communicate(crt.encode()) %}
{%- if check_popen.returncode != 0 %}
......
......@@ -15,7 +15,7 @@
[template]
filename = instance.cfg.in
md5sum = eb69f3c2a26948eb7e413a891589608d
md5sum = 8a7379533ca40668cb7fd482dcd48c61
[software.json]
filename = software.cfg.json
......
......@@ -142,7 +142,7 @@ filename = template-vpsbrute-6disks.cfg
extra-context =
key slapparameter_dict slap-configuration-vpsbrute-6disks:configuration
[dynamic-template-vpsbrute-4disks]
[dynamic-template-vpsbrute-10disks]
<= jinja2-template-base
filename = template-vpsbrute-10disks.cfg
extra-context =
......
......@@ -43,7 +43,7 @@ md5sum = 6a25c6a7f1beb27232a3c9acd8a76500
[theia-export]
_update_hash_filename_ = theia_export.py
md5sum = bc58b7191243bce2bbc95696abce9ef8
md5sum = dee2a58994296b56ba1a4a639c238165
[theia-import]
_update_hash_filename_ = theia_import.py
......
......@@ -2,6 +2,7 @@ import argparse
import glob
import itertools
import os
import shutil
import sys
import time
import traceback
......@@ -92,7 +93,7 @@ class TheiaExport(object):
with open(tmpfile, 'w') as f:
for s in signatures:
f.write(s + '\n')
os.rename(tmpfile, signaturefile)
shutil.move(tmpfile, signaturefile)
def sign_root(self):
signaturefile = os.path.join(self.backup_dir, 'backup.signature')
......
......@@ -18,7 +18,7 @@ md5sum = 5fec0e5f892aaf06beb814e24e514cae
[pbsready-import]
filename = pbsready-import.cfg.in
md5sum = 730b83e1090054ae30b78bbb04d6a9f1
md5sum = 824e2893258bce1f11b9b896f541a126
[pbsready-export]
filename = pbsready-export.cfg.in
......
......@@ -92,6 +92,7 @@ config-command = $${backup-checksum-integrity-promise-bin:output}
recipe = slapos.cookbook:addresiliency
wrapper-takeover = $${rootdirectory:bin}/takeover
takeover-triggered-file-path = $${rootdirectory:srv}/takeover_triggered
namebase = $${slap-parameter:namebase}
# Add path of file created by takeover script when takeover is triggered
# Takeover script will create this file
......
......@@ -300,7 +300,7 @@ parso = 0.7.1
passlib = 1.7.4
pathlib2 = 2.3.5
pathspec = 0.12.1:whl
patsy = 0.5.3
patsy = 0.5.6
pbr = 5.9.0
pexpect = 4.8.0
pickleshare = 0.7.4
......@@ -361,20 +361,20 @@ simplegeneric = 0.8.1
singledispatch = 3.4.0.3
six = 1.16.0
slapos.cookbook = 1.0.403
slapos.core = 1.16.1
slapos.core = 1.16.2
slapos.extension.shared = 1.0
slapos.libnetworkcache = 0.25
slapos.rebootstrap = 4.7
slapos.recipe.build = 0.58
slapos.recipe.cmmi = 0.22
slapos.recipe.template = 5.1
slapos.toolbox = 0.146
slapos.toolbox = 0.149
smmap = 5.0.0
sniffio = 1.3.0
sortedcontainers = 2.4.0
soupsieve = 1.9.5
stack-data = 0.6.3:whl
statsmodels = 0.13.5+SlapOSPatched001
statsmodels = 0.14.4+SlapOSPatched001
stevedore = 1.21.0:whl
subprocess32 = 3.5.4
supervisor = 4.1.0
......@@ -426,10 +426,6 @@ zope.testrunner = 6.6
pycountry = 18.12.8
fonttools = 3.44.0
[versions:sys.version_info < (3,10)]
# keep old statsmodels by default until slapos.toolbox is updated
statsmodels = 0.11.1
# this is mostly needed for slapos-node
# it can be removed when slapos-node uses current python3
[versions:sys.version_info < (3,8)]
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment