Commit 5b5a35ac authored by Jérome Perrin's avatar Jérome Perrin

Update Release Candidate

parents f6361a00 06fd87df
...@@ -30,6 +30,7 @@ extends = ...@@ -30,6 +30,7 @@ extends =
../defaults.cfg ../defaults.cfg
[gcc] [gcc]
min_version = 10.5
max_version = 11 max_version = 11
[gsl] [gsl]
......
...@@ -18,6 +18,7 @@ configure-command = ${cmake:location}/bin/cmake ...@@ -18,6 +18,7 @@ configure-command = ${cmake:location}/bin/cmake
configure-options = configure-options =
-DCMAKE_INSTALL_PREFIX=${:location} -DCMAKE_INSTALL_PREFIX=${:location}
-DCMAKE_INSTALL_RPATH=${:location}/lib:${bzip2:location}/lib:${popt:location}/lib:${zlib:location}/lib -DCMAKE_INSTALL_RPATH=${:location}/lib:${bzip2:location}/lib:${popt:location}/lib:${zlib:location}/lib
-DCMAKE_INSTALL_LIBDIR=lib
make-options = make-options =
VERBOSE=1 VERBOSE=1
environment = environment =
......
[buildout] [buildout]
parts = parts =
[macro.pythonpath.eggs] [macro.variable.eggs]
recipe = slapos.recipe.build recipe = slapos.recipe.build
init = init =
self.eggs = [e.strip() for e in options['eggs'].splitlines() if e.strip()] self.eggs = [e.strip() for e in options['eggs'].splitlines() if e.strip()]
update = update =
import os
from zc.buildout.easy_install import working_set from zc.buildout.easy_install import working_set
buildout = self.buildout['buildout'] buildout = self.buildout['buildout']
eggs_directory = buildout['eggs-directory'] eggs_directory = buildout['eggs-directory']
develop_eggs_directory = buildout['develop-eggs-directory'] develop_eggs_directory = buildout['develop-eggs-directory']
dists = working_set(self.eggs, [develop_eggs_directory, eggs_directory]) dists = working_set(self.eggs, [develop_eggs_directory, eggs_directory])
paths = ':'.join(dist.location for dist in dists) subpaths = dict(l.split() for l in options['subpaths'].splitlines())
self.buildout[options['environment']]['PYTHONPATH'] = paths def make_path(dist):
print("PYTHONPATH=" + paths) subpath = subpaths.get(dist.key)
return os.path.join(dist.location, subpath) if subpath else dist.location
paths = ':'.join(make_path(dist) for dist in dists)
environment = self.buildout[options['environment']]
variable = options['variable']
value = environment.get(variable)
if value:
paths = '%s:%s' % (paths, value)
environment[variable] = paths
print("%s=%s" %(variable, paths))
variable = PYTHONPATH
subpaths =
[macro.pythonpath.eggs]
<= macro.variable.eggs
...@@ -51,8 +51,8 @@ md5sum = e6fe71fb59a502db54a25cd0f34ea67e ...@@ -51,8 +51,8 @@ md5sum = e6fe71fb59a502db54a25cd0f34ea67e
[openssl-quictls] [openssl-quictls]
<= openssl-3.0 <= openssl-3.0
url = https://github.com/quictls/openssl/archive/refs/tags/openssl-3.0.13-quic1.tar.gz url = https://github.com/quictls/openssl/archive/refs/tags/openssl-3.0.14-quic1.tar.gz
md5sum = ff6a1f5fc5e7ea03aba9c97e7f26d97d md5sum = fa0ae39667afa8be6dbeadb3cc838e89
[openssl-1.1] [openssl-1.1]
<= openssl-common <= openssl-common
......
[buildout] [buildout]
# Scipy requires BLAS/LAPACK libraries. # Scipy requires BLAS/LAPACK libraries.
extends = extends =
../meson/buildout.cfg
../ninja/buildout.cfg
../numpy/openblas.cfg ../numpy/openblas.cfg
../pandas/buildout.cfg ../pandas/buildout.cfg
../pkgconfig/buildout.cfg
parts = scipy parts = scipy
[scipy-env] [scipy-env]
<= numpy-env <= numpy-env
PATH=${meson:location}/bin:${ninja:location}/bin:${pkgconfig:location}/bin:${buildout:bin-directory}:%(PATH)s
PKG_CONFIG_PATH = ${openblas:location}/lib/pkgconfig
[scipy] [scipy]
recipe = zc.recipe.egg:custom recipe = zc.recipe.egg:custom
...@@ -14,30 +19,51 @@ egg = scipy ...@@ -14,30 +19,51 @@ egg = scipy
environment = scipy-env environment = scipy-env
setup-eggs = ${numpy:egg} setup-eggs = ${numpy:egg}
rpath = ${numpy:rpath} rpath = ${numpy:rpath}
depends = ${scipy-pythonpath:recipe} depends =
${scipy-pythonpath:recipe}
${scipy-pkgconfig:recipe}
[scipy-pythonpath] [scipy-pythonpath]
<= macro.pythonpath.eggs <= macro.pythonpath.eggs
environment = scipy-env environment = scipy-env
eggs = ${scipy-setup-eggs:eggs} eggs = ${scipy-setup-eggs:eggs}
[scipy-pkgconfig]
<= macro.variable.eggs
variable = PKG_CONFIG_PATH
environment = scipy-env
eggs = pybind11
subpaths =
pybind11 pybind11/share/pkgconfig/
depends = ${scipy-setup-eggs:recipe}
[scipy-setup-eggs] [scipy-setup-eggs]
recipe = zc.recipe.egg recipe = zc.recipe.egg
scripts = scripts =
cython
pythran
eggs = eggs =
${cython:egg} ${cython:egg}
${numpy:egg} ${numpy:egg}
${pandas:egg} ${pandas:egg}
meson-python
pythran pythran
pybind11 pybind11
[versions] [versions]
pybind11 = 2.9.2 pybind11 = 2.11.1
scipy = 1.8.1 scipy = 1.12.0
meson-python = 0.13.2:whl
pyproject-metadata = 0.8.0:whl
meson = 1.4.1
beniget = 0.4.1 beniget = 0.4.1
gast = 0.5.3 gast = 0.5.3
pythran = 0.11.0:whl pythran = 0.11.0:whl
[versions:sys.version_info < (3,11)]
tomli = 2.0.1:whl
[scipy:sys.version_info < (3,8)] [scipy:sys.version_info < (3,8)]
depends = depends =
......
...@@ -50,7 +50,7 @@ CGO_LDFLAGS += -Wl,-rpath=${zlib:location}/lib ...@@ -50,7 +50,7 @@ CGO_LDFLAGS += -Wl,-rpath=${zlib:location}/lib
recipe = slapos.recipe.build:gitclone recipe = slapos.recipe.build:gitclone
repository = https://lab.nexedi.com/nexedi/wendelin.core.git repository = https://lab.nexedi.com/nexedi/wendelin.core.git
branch = master branch = master
revision = wendelin.core-2.0.alpha3-9-gda765ef revision = wendelin.core-2.0.alpha3-22-g07087ec8
# dir is pretty name as top-level recipe # dir is pretty name as top-level recipe
location = ${buildout:parts-directory}/wendelin.core location = ${buildout:parts-directory}/wendelin.core
git-executable = ${git:location}/bin/git git-executable = ${git:location}/bin/git
[buildout]
extends =
../gettext/buildout.cfg
../lunzip/buildout.cfg
../openssl/buildout.cfg
../patch/buildout.cfg
../pcre/buildout.cfg
../perl/buildout.cfg
../pkgconfig/buildout.cfg
../zlib/buildout.cfg
parts =
wget
[wget]
recipe = slapos.recipe.cmmi
shared = true
url = http://ftp.gnu.org/gnu/wget/wget-1.20.3.tar.lz
md5sum = 3bc242eb69165247b1793dd0b794ff52
configure-options =
--enable-ipv6
--enable-opie
--disable-iri
--disable-pcre2
--with-ssl=openssl
--with-libssl-prefix=${openssl:location}
--with-zlib-lib=${zlib:location}
environment =
# Python 3 is used for things we don't need. This is an optional dependency,
# unless PYTHON is set (previously set by [python]): wget complains (rightly)
# if it points to Python 2.7 (which we may still use).
PYTHON=
PATH=${gettext:location}/bin:${lunzip:location}/bin:${patch:location}/bin:${perl:location}/bin:${pkgconfig:location}/bin:%(PATH)s
PKG_CONFIG_PATH=${openssl:location}/lib/pkgconfig
LDFLAGS=-L${zlib:location}/lib -Wl,-rpath=${zlib:location}/lib -L${openssl:location}/lib -L${pcre:location}/lib -Wl,-rpath=${pcre:location}/lib -Wl,-rpath=${openssl:location}/lib
CPPFLAGS=-I${zlib:location}/include -I${openssl:location}/include -I${pcre:location}/include
...@@ -28,7 +28,7 @@ from setuptools import setup, find_packages ...@@ -28,7 +28,7 @@ from setuptools import setup, find_packages
import glob import glob
import os import os
version = '1.0.360' version = '1.0.365'
name = 'slapos.cookbook' name = 'slapos.cookbook'
long_description = open("README.rst").read() long_description = open("README.rst").read()
...@@ -163,7 +163,6 @@ setup(name=name, ...@@ -163,7 +163,6 @@ setup(name=name,
'urlparse = slapos.recipe._urlparse:Recipe', 'urlparse = slapos.recipe._urlparse:Recipe',
'uuid = slapos.recipe._uuid:Recipe', 'uuid = slapos.recipe._uuid:Recipe',
'userinfo = slapos.recipe.userinfo:Recipe', 'userinfo = slapos.recipe.userinfo:Recipe',
'webchecker = slapos.recipe.web_checker:Recipe',
'wrapper = slapos.recipe.wrapper:Recipe', 'wrapper = slapos.recipe.wrapper:Recipe',
'zabbixagent = slapos.recipe.zabbixagent:Recipe', 'zabbixagent = slapos.recipe.zabbixagent:Recipe',
'zeo = slapos.recipe.zeo:Recipe', 'zeo = slapos.recipe.zeo:Recipe',
......
...@@ -96,6 +96,7 @@ class Recipe(GenericBaseRecipe): ...@@ -96,6 +96,7 @@ class Recipe(GenericBaseRecipe):
ip=self.options['ip'], ip=self.options['ip'],
port=int(self.options['port']), port=int(self.options['port']),
openoffice_port=int(self.options['openoffice-port']), openoffice_port=int(self.options['openoffice-port']),
ooo_enable_scripting=self.options.get('ooo_enable_scripting', 'false'),
) )
environment_variable_list = [] environment_variable_list = []
for env_line in self.options['environment'].splitlines(): for env_line in self.options['environment'].splitlines():
......
...@@ -12,6 +12,8 @@ working_path = %(working_path)s ...@@ -12,6 +12,8 @@ working_path = %(working_path)s
uno_path = %(uno_path)s uno_path = %(uno_path)s
# Folder where soffice.bin is installed # Folder where soffice.bin is installed
office_binary_path = %(office_binary_path)s office_binary_path = %(office_binary_path)s
# Whether running scripts on the loaded document is allowed
ooo_enable_scripting = %(ooo_enable_scripting)s
# #
## Monitor Settings ## Monitor Settings
# #
......
[web_checker]
url = %(frontend_url)s
working_directory = %(web_checker_working_directory)s
varnishlog_binary_path = %(varnishlog_binary_path)s
wget_binary_path = %(wget_binary_path)s
email_address = %(web_checker_mail_address)s
smtp_host = %(web_checker_smtp_host)s
debug_level = debug
file_log_path = %(web_checker_log)s
[header_list]
Expires = True
Vary = Accept-Language, Cookie, Accept-Encoding
Accept-Language, Cookie
Accept-Language,Cookie,Accept-Encoding
Accept-Language,Cookie
Accept-Encoding
Cache-Control = max-age=300
max-age=3600
public,max-age=300
public,max-age=3600
[header url=(.*_form)]
Vary = Accept-Encoding
[header url=.*/favicon.ico]
Last-Modified = True
[header content-type=(text/css|.*/javascript)]
Last-Modified = True
Cache-Control = public,max-age=300
public,max-age=3600
public
[no_header content-type=(image/.*|application/font)]
Vary = None
[erp5_extension_list]
prohibited_folder_name_list = web_page_module
document_module
prohibited_file_name_list = WebSection_viewAsWeb
Base_viewHistory
list
This diff is collapsed.
...@@ -2,65 +2,62 @@ ...@@ -2,65 +2,62 @@
"type": "object", "type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema#", "$schema": "https://json-schema.org/draft/2020-12/schema#",
"description": "Parameters to instantiate resilient KVM", "description": "Parameters to instantiate resilient KVM",
"unevaluatedProperties": false,
"allOf": [ "allOf": [
{ {
"$ref": "./instance-kvm-input-schema.json#", "$ref": "./instance-kvm-input-schema.json#/$defs/instance-parameters"
"additionalProperties": true, }
],
"properties": {
"resilient-clone-number": {
"title": "Amount of backup(s) to create",
"description": "Amount of backup(s) to create. Each backup consists of a Pull Backup Server and a clone.",
"type": "integer",
"default": 1,
"optional": true
}, },
{ "-sla-0-computer_guid": {
"additionalProperties": true, "title": "Target computer for main instance",
"properties": { "description": "Target computer GUID for main instance.",
"resilient-clone-number": { "type": "string",
"title": "Amount of backup(s) to create", "optional": true
"description": "Amount of backup(s) to create. Each backup consists of a Pull Backup Server and a clone.", },
"type": "integer", "-sla-1-computer_guid": {
"default": 1, "title": "Target computer for first clone",
"optional": true "description": "Target computer for first clone and PBS.",
}, "type": "string",
"-sla-0-computer_guid": { "optional": true
"title": "Target computer for main instance", },
"description": "Target computer GUID for main instance.", "-sla-pbs1-computer_guid": {
"type": "string", "title": "Target computer for first PBS",
"optional": true "description": "Target computer for first PBS instance.",
}, "type": "string",
"-sla-1-computer_guid": { "optional": true
"title": "Target computer for first clone", },
"description": "Target computer for first clone and PBS.", "-sla-2-computer_guid": {
"type": "string", "title": "Target computer for second clone",
"optional": true "description": "Target computer for second clone and PBS.",
}, "type": "string",
"-sla-pbs1-computer_guid": { "optional": true
"title": "Target computer for first PBS", },
"description": "Target computer for first PBS instance.", "-sla-pbs2-computer_guid": {
"type": "string", "title": "Target computer for second PBS",
"optional": true "description": "Target computer for second PBS instance.",
}, "type": "string",
"-sla-2-computer_guid": { "optional": true
"title": "Target computer for second clone", },
"description": "Target computer for second clone and PBS.", "resiliency-backup-periodicity": {
"type": "string", "title": "Periodicity of backup",
"optional": true "description": "Periodicity of backup, in cron format.",
}, "type": "string",
"-sla-pbs2-computer_guid": { "optional": true
"title": "Target computer for second PBS", },
"description": "Target computer for second PBS instance.", "remove-backup-older-than": {
"type": "string", "title": "Remove backups older than...",
"optional": true "description": "Remove all the backups in PBS that are older than specified value. It should be rdiff-backup-compatible.",
}, "type": "string",
"resiliency-backup-periodicity": { "default": "2W",
"title": "Periodicity of backup", "optional": true
"description": "Periodicity of backup, in cron format.",
"type": "string",
"optional": true
},
"remove-backup-older-than": {
"title": "Remove backups older than...",
"description": "Remove all the backups in PBS that are older than specified value. It should be rdiff-backup-compatible.",
"type": "string",
"default": "2W",
"optional": true
}
}
} }
] }
} }
...@@ -79,6 +79,7 @@ numpy = 1.22.0 ...@@ -79,6 +79,7 @@ numpy = 1.22.0
# For numy = 1.22.0 # For numy = 1.22.0
setuptools = 44.1.1 setuptools = 44.1.1
scipy = 1.11.4
# Build GCC with Fortran for OpenBLAS (scipy & numpy) # Build GCC with Fortran for OpenBLAS (scipy & numpy)
[gcc] [gcc]
......
...@@ -29,7 +29,6 @@ extends = ...@@ -29,7 +29,6 @@ extends =
# redis-server # redis-server
../../component/redis/buildout.cfg ../../component/redis/buildout.cfg
../../component/git/buildout.cfg ../../component/git/buildout.cfg
../../component/wget/buildout.cfg
# backup # backup
../../component/rdiff-backup/buildout.cfg ../../component/rdiff-backup/buildout.cfg
../../component/rsync/buildout.cfg ../../component/rsync/buildout.cfg
...@@ -39,15 +38,8 @@ parts = ...@@ -39,15 +38,8 @@ parts =
# in 99,9% of Slapos Software Releases) # in 99,9% of Slapos Software Releases)
slapos-cookbook slapos-cookbook
dcron dcron
unzip
curl
openssl
python3
nginx
ffmpeg ffmpeg
postgresql postgresql
redis
wget
# peetube sections # peetube sections
peertube peertube
peertube-build peertube-build
...@@ -65,7 +57,7 @@ md5sum = 1c9639748d66e8c49fc27e4705f87622 ...@@ -65,7 +57,7 @@ md5sum = 1c9639748d66e8c49fc27e4705f87622
recipe = slapos.recipe.cmmi recipe = slapos.recipe.cmmi
path = ${peertube:location} path = ${peertube:location}
environment = environment =
PATH=${unzip:location}/bin:${vim:location}/bin:${nodejs:location}/bin:${yarn:location}/bin:${python3:location}/bin:${nginx:location}/sbin:${postgresql10:location}/bin:${redis:location}/bin:${git:location}/bin:${wget:location}/bin:%(PATH)s PATH=${unzip:location}/bin:${vim:location}/bin:${nodejs:location}/bin:${yarn:location}/bin:${python3:location}/bin:${nginx:location}/sbin:${postgresql10:location}/bin:${redis:location}/bin:${git:location}/bin:%(PATH)s
CPPFLAGS=-I${openssl:location}/include CPPFLAGS=-I${openssl:location}/include
LDFLAGS=-L${curl:location}/lib -Wl,-rpath -Wl,${openssl:location}/lib -Wl LDFLAGS=-L${curl:location}/lib -Wl,-rpath -Wl,${openssl:location}/lib -Wl
pre-configure = pre-configure =
......
...@@ -38,7 +38,6 @@ url = ${:_profile_base_location_}/software.py ...@@ -38,7 +38,6 @@ url = ${:_profile_base_location_}/software.py
recipe = plone.recipe.command recipe = plone.recipe.command
stop-on-error = True stop-on-error = True
location = ${buildout:parts-directory}/${:_buildout_section_name_} location = ${buildout:parts-directory}/${:_buildout_section_name_}
update-command = ${:command}
command = command =
rm -fr ${:location} && rm -fr ${:location} &&
mkdir -p ${:location} && mkdir -p ${:location} &&
......
...@@ -2584,10 +2584,10 @@ class TestSlave(SlaveHttpFrontendTestCase, TestDataMixin, AtsMixin): ...@@ -2584,10 +2584,10 @@ class TestSlave(SlaveHttpFrontendTestCase, TestDataMixin, AtsMixin):
self.certificate_pem, self.certificate_pem,
result.certificate) result.certificate)
self.assertEqual( # 502 and 503 are both ok as response codes by the backend-haproxy
self.assertIn(
result.status_code, result.status_code,
http.client.BAD_GATEWAY [http.client.BAD_GATEWAY, http.client.SERVICE_UNAVAILABLE])
)
finally: finally:
self.stopAuthenticatedServerProcess() self.stopAuthenticatedServerProcess()
......
...@@ -272,6 +272,11 @@ setup = ${slapos-repository:location}/software/js-drone/test/ ...@@ -272,6 +272,11 @@ setup = ${slapos-repository:location}/software/js-drone/test/
egg = slapos.test.osie_coupler egg = slapos.test.osie_coupler
setup = ${slapos-repository:location}/software/osie-coupler/test/ setup = ${slapos-repository:location}/software/osie-coupler/test/
[slapos.test.slapos-testing-setup]
<= setup-develop-egg
egg = slapos.test.slapos_testing
setup = ${slapos-repository:location}/software/slapos-testing/test/
[slapos.core-repository] [slapos.core-repository]
<= git-clone-repository <= git-clone-repository
repository = https://lab.nexedi.com/nexedi/slapos.core.git repository = https://lab.nexedi.com/nexedi/slapos.core.git
...@@ -394,6 +399,7 @@ eggs += ...@@ -394,6 +399,7 @@ eggs +=
${slapos.test.restic_rest_server-setup:egg} ${slapos.test.restic_rest_server-setup:egg}
${slapos.test.seleniumserver-setup:egg} ${slapos.test.seleniumserver-setup:egg}
${slapos.test.slapos-master-setup:egg} ${slapos.test.slapos-master-setup:egg}
${slapos.test.slapos-testing-setup:egg}
${slapos.test.ssh-setup:egg} ${slapos.test.ssh-setup:egg}
${slapos.test.theia-setup:egg} ${slapos.test.theia-setup:egg}
${slapos.test.turnserver-setup:egg} ${slapos.test.turnserver-setup:egg}
...@@ -490,6 +496,7 @@ tests = ...@@ -490,6 +496,7 @@ tests =
restic-rest-server ${slapos.test.restic_rest_server-setup:setup} restic-rest-server ${slapos.test.restic_rest_server-setup:setup}
seleniumserver ${slapos.test.seleniumserver-setup:setup} seleniumserver ${slapos.test.seleniumserver-setup:setup}
slapos-master ${slapos.test.slapos-master-setup:setup} slapos-master ${slapos.test.slapos-master-setup:setup}
slapos-testing ${slapos.test.slapos-testing-setup:setup}
ssh ${slapos.test.ssh-setup:setup} ssh ${slapos.test.ssh-setup:setup}
theia ${slapos.test.theia-setup:setup} theia ${slapos.test.theia-setup:setup}
turnserver ${slapos.test.turnserver-setup:setup} turnserver ${slapos.test.turnserver-setup:setup}
......
##############################################################################
#
# Copyright (c) 2019 Nexedi SA and Contributors. All Rights Reserved.
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsibility of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# guarantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 3
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
from setuptools import setup, find_packages
version = '0.0.1.dev0'
name = 'slapos.test.slapos_testing'
description = "Test for SlapOS' slapos-testing"
setup(
name=name,
version=version,
description=description,
long_description=description,
long_description_content_type='text/plain',
maintainer="Nexedi",
maintainer_email="info@nexedi.com",
url="https://lab.nexedi.com/nexedi/slapos",
packages=find_packages(),
install_requires=[
'slapos.core',
'slapos.libnetworkcache',
],
zip_safe=True,
test_suite='test',
)
############################################################################## ##############################################################################
# #
# Copyright (c) 2012 Vifib SARL and Contributors. All Rights Reserved. # Copyright (c) 2019 Nexedi SA and Contributors. All Rights Reserved.
# #
# WARNING: This program as such is intended to be used by professional # WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsibility of assessing all potential # programmers who take the whole responsibility of assessing all potential
...@@ -24,37 +24,44 @@ ...@@ -24,37 +24,44 @@
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# #
############################################################################## ##############################################################################
import os import os
import re
from slapos.recipe.librecipe import GenericSlapRecipe from slapos.testing.testcase import (
makeModuleSetUpAndTestCaseClass,
class Recipe(GenericSlapRecipe): installSoftwareUrlList,
""" )
Create web checker configuration.
""" parent_folder = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
def _install(self):
path_list = [] software_files = ['software%s.cfg' % v for v in ('', '-py3next', '-py2')]
try:
web_checker_mail_address = self.options['mail-address'] software_urls = [os.path.join(parent_folder, name) for name in software_files]
web_checker_smtp_host = self.options['smtp-host']
web_checker_frontend_url = self.options['frontend-url'] _, SlapOSInstanceTestCase = makeModuleSetUpAndTestCaseClass(
except KeyError: parent_folder + '/{' + '|'.join(software_files) + '}' # used only for display
# BBB )
web_checker_mail_address = self.parameter_dict['web-checker-mail-address']
web_checker_smtp_host = self.parameter_dict['web-checker-smtp-host'] def setUpModule():
web_checker_frontend_url = self.parameter_dict['web-checker-frontend-url'] # Supply every version of the software.
web_checker_working_directory = \ installSoftwareUrlList(
self.options['web-checker-working-directory'] SlapOSInstanceTestCase,
config = dict( software_urls,
web_checker_mail_address = web_checker_mail_address, debug=bool(int(os.environ.get('SLAPOS_TEST_DEBUG', 0))),
web_checker_smtp_host = web_checker_smtp_host, )
web_checker_working_directory = web_checker_working_directory,
frontend_url = web_checker_frontend_url, class SlaposTestingTestCase(SlapOSInstanceTestCase):
wget_binary_path = self.options['wget-binary-path'], def requestDefaultInstance(cls, state='started'):
varnishlog_binary_path = self.options['varnishlog-binary-path'], # This method is called for requesting and destroying (state='destroyed').
web_checker_log = self.options['web-checker-log'], for name, url in zip(software_files, software_urls):
) cls.slap.request(
path_list.append(self.createFile(self.options['web-checker-config'], software_release=url,
self.substituteTemplate(self.getTemplateFilename('web_checker.cfg.in'), software_type=None, # default
config))) partition_reference='Instance_of_' + name,
return path_list partition_parameter_kw=cls._instance_parameter_dict,
state=state,
)
def test():
# Just test that each version of the software compiled and instantiates.
pass
...@@ -23,7 +23,7 @@ md5sum = 9658a11340c018de816d0de40683706a ...@@ -23,7 +23,7 @@ md5sum = 9658a11340c018de816d0de40683706a
[instance-import] [instance-import]
_update_hash_filename_ = instance-import.cfg.jinja.in _update_hash_filename_ = instance-import.cfg.jinja.in
md5sum = d0ff7b93e392f9b9233f9ae6ba81583f md5sum = 647d99aa6f96b2515ac28013145fe81f
[instance-export] [instance-export]
_update_hash_filename_ = instance-export.cfg.jinja.in _update_hash_filename_ = instance-export.cfg.jinja.in
......
...@@ -67,8 +67,8 @@ autorun = stopped ...@@ -67,8 +67,8 @@ autorun = stopped
# Change the gravatar favicon seed # Change the gravatar favicon seed
[favicon.ico] [frontend-instance-favicon.ico]
seed = Import {{ root_title }} seed = {{ theia_id }} {{ root_title }}
# The resilient stack calls post-notification-run:output followed by # The resilient stack calls post-notification-run:output followed by
......
{ {
"$schema": "http://json-schema.org/draft-06/schema#", "$schema": "https://json-schema.org/draft/2019-09/schema",
"type": "object",
"description": "Parameters to instantiate Theia", "description": "Parameters to instantiate Theia",
"additionalProperties": false, "$defs": {
"properties": { "instance-parameters": {
"autorun": { "type": "object",
"title": "Automatically Run Software/Instance", "properties": {
"description": "The option used to pilot automatic build and run of software and instances hosted inside Theia. When 'running', build and run is done automatically in the background. When 'stopped' build and run processes are stopped and need to be run manually. When 'user-controlled', the user can manage it directly in the local supervisord. ", "autorun": {
"type": "string", "title": "Automatically Run Software/Instance",
"enum": [ "description": "The option used to pilot automatic build and run of software and instances hosted inside Theia. When 'running', build and run is done automatically in the background. When 'stopped' build and run processes are stopped and need to be run manually. When 'user-controlled', the user can manage it directly in the local supervisord. ",
"running", "type": "string",
"stopped", "enum": [
"user-controlled" "running",
], "stopped",
"default": "running" "user-controlled"
}, ],
"initial-embedded-instance": { "default": "running"
"title": "Initial Embedded Instance Configuration", },
"description": "One-shot optional JSON preconfiguration for an embedded instance. Only applied once when Theia is instantiated. Changing this option afterward will have no effect.", "initial-embedded-instance": {
"type": "string", "title": "Initial Embedded Instance Configuration",
"textarea": true, "description": "One-shot optional JSON preconfiguration for an embedded instance. Only applied once when Theia is instantiated. Changing this option afterward will have no effect.",
"examples": [ "type": "string",
"{\"software-url\": \"~/srv/project/slapos/software/html5as-base/software.cfg\"}", "textarea": true,
"{\"software-url\": \"~/srv/project/slapos/software/html5as/software.cfg\", \"software-type\": \"replicate\", \"instance-parameters\": {\"replicate-quantity\": 3}}" "examples": [
] "{\"software-url\": \"~/srv/project/slapos/software/html5as-base/software.cfg\"}",
}, "{\"software-url\": \"~/srv/project/slapos/software/html5as/software.cfg\", \"software-type\": \"replicate\", \"instance-parameters\": {\"replicate-quantity\": 3}}"
"forward-slapos-frontend-requests": { ]
"title": "Forward Frontend Requests in the Embedded SlapOS", },
"description": "Embedded SlapOS instance by default forwards frontend requests as shared instances attached to the Theia instance, so that HTTP frontends can be allocated for services. This behavior can be disabled, in that case frontends will not be allocated.", "forward-slapos-frontend-requests": {
"type": "string", "title": "Forward Frontend Requests in the Embedded SlapOS",
"enum": [ "description": "Embedded SlapOS instance by default forwards frontend requests as shared instances attached to the Theia instance, so that HTTP frontends can be allocated for services. This behavior can be disabled, in that case frontends will not be allocated.",
"enabled", "type": "string",
"disabled" "enum": [
], "enabled",
"default": "enabled" "disabled"
}, ],
"frontend-guid": { "default": "enabled"
"title": "Frontend Instance ID", },
"description": "Unique identifier of the frontend instance, like \"SOFTINST-11031\".", "frontend-guid": {
"type": "string" "title": "Frontend Instance ID",
}, "description": "Unique identifier of the frontend instance, like \"SOFTINST-11031\".",
"frontend-sr": { "type": "string"
"title": "Frontend Software URL", },
"description": "Software Release URL of the frontend instance, like \"http://example.com/path/to/software.cfg\".", "frontend-sr": {
"type": "string", "title": "Frontend Software URL",
"format": "uri", "description": "Software Release URL of the frontend instance, like \"http://example.com/path/to/software.cfg\".",
"default": "http://git.erp5.org/gitweb/slapos.git/blob_plain/HEAD:/software/apache-frontend/software.cfg" "type": "string",
}, "format": "uri",
"frontend-sr-type": { "default": "http://git.erp5.org/gitweb/slapos.git/blob_plain/HEAD:/software/apache-frontend/software.cfg"
"title": "Frontend Software Type", },
"description": "Type of the frontend instance, like \"frontend\".", "frontend-sr-type": {
"type": "string", "title": "Frontend Software Type",
"default": "RootSoftwareInstance" "description": "Type of the frontend instance, like \"frontend\".",
}, "type": "string",
"additional-frontend-guid": { "default": "RootSoftwareInstance"
"title": "Additional Frontend Instance ID", },
"description": "Unique identifier of the additional frontend instance, like \"SOFTINST-11031\", if empty won't be requested.", "additional-frontend-guid": {
"type": "string" "title": "Additional Frontend Instance ID",
}, "description": "Unique identifier of the additional frontend instance, like \"SOFTINST-11031\", if empty won't be requested.",
"additional-frontend-sr": { "type": "string"
"title": "Additional Frontend Software URL", },
"description": "Software Release URL of the frontend instance, like \"http://example.com/path/to/software.cfg\".", "additional-frontend-sr": {
"type": "string", "title": "Additional Frontend Software URL",
"format": "uri", "description": "Software Release URL of the frontend instance, like \"http://example.com/path/to/software.cfg\".",
"default": "http://git.erp5.org/gitweb/slapos.git/blob_plain/HEAD:/software/apache-frontend/software.cfg" "type": "string",
}, "format": "uri",
"additional-frontend-sr-type": { "default": "http://git.erp5.org/gitweb/slapos.git/blob_plain/HEAD:/software/apache-frontend/software.cfg"
"title": "Additional Frontend Software Type", },
"description": "Type of the frontend instance, like \"frontend\".", "additional-frontend-sr-type": {
"type": "string", "title": "Additional Frontend Software Type",
"default": "RootSoftwareInstance" "description": "Type of the frontend instance, like \"frontend\".",
"type": "string",
"default": "RootSoftwareInstance"
}
}
} }
} },
"unevaluatedProperties": false,
"allOf": [
{
"$ref": "#/$defs/instance-parameters"
}
]
} }
{ {
"$schema": "https://json-schema.org/draft/2020-12/schema#", "$schema": "https://json-schema.org/draft/2019-09/schema",
"type": "object", "type": "object",
"description": "Parameters to instantiate resilient Theia", "description": "Parameters to instantiate resilient Theia",
"unevaluatedProperties": false,
"allOf": [ "allOf": [
{ {
"$ref": "./instance-input-schema.json#", "$ref": "./instance-input-schema.json#/$defs/instance-parameters"
"additionalProperties": true }
],
"properties": {
"resilient-clone-number": {
"title": "Amount of backup(s) to create",
"description": "Amount of backup(s) to create. Each backup consists of a Pull Backup Server and a clone.",
"type": "integer",
"default": 1,
"minimum": 0,
"maximum": 2,
"optional": true
}, },
{ "-sla-theia0-computer_guid": {
"additionalProperties": true, "title": "Target computer for main instance",
"properties": { "description": "Target computer GUID for main instance.",
"resilient-clone-number": { "type": "string",
"title": "Amount of backup(s) to create", "optional": true
"description": "Amount of backup(s) to create. Each backup consists of a Pull Backup Server and a clone.", },
"type": "integer", "-sla-theia1-computer_guid": {
"default": 1, "title": "Target computer for first clone",
"minimum": 0, "description": "Target computer for first clone instance.",
"maximum": 2, "type": "string",
"optional": true "optional": true
}, },
"-sla-theia0-computer_guid": { "-sla-pbs1-computer_guid": {
"title": "Target computer for main instance", "title": "Target computer for first PBS",
"description": "Target computer GUID for main instance.", "description": "Target computer for first PBS instance.",
"type": "string", "type": "string",
"optional": true "optional": true
}, },
"-sla-theia1-computer_guid": { "-sla-theia2-computer_guid": {
"title": "Target computer for first clone", "title": "Target computer for second clone",
"description": "Target computer for first clone instance.", "description": "Target computer for second clone instance.",
"type": "string", "type": "string",
"optional": true "optional": true
}, },
"-sla-pbs1-computer_guid": { "-sla-pbs2-computer_guid": {
"title": "Target computer for first PBS", "title": "Target computer for second PBS",
"description": "Target computer for first PBS instance.", "description": "Target computer for second PBS instance.",
"type": "string", "type": "string",
"optional": true "optional": true
}, },
"-sla-theia2-computer_guid": { "resiliency-backup-periodicity": {
"title": "Target computer for second clone", "title": "Periodicity of backup",
"description": "Target computer for second clone instance.", "description": "Periodicity of backup, in cron format.",
"type": "string", "type": "string",
"optional": true "optional": true
}, },
"-sla-pbs2-computer_guid": { "remove-backup-older-than": {
"title": "Target computer for second PBS", "title": "Remove backups older than...",
"description": "Target computer for second PBS instance.", "description": "Remove all the backups in PBS that are older than specified value. It should be rdiff-backup-compatible.",
"type": "string", "type": "string",
"optional": true "default": "2W",
}, "optional": true
"resiliency-backup-periodicity": {
"title": "Periodicity of backup",
"description": "Periodicity of backup, in cron format.",
"type": "string",
"optional": true
},
"remove-backup-older-than": {
"title": "Remove backups older than...",
"description": "Remove all the backups in PBS that are older than specified value. It should be rdiff-backup-compatible.",
"type": "string",
"default": "2W",
"optional": true
}
}
} }
] }
} }
...@@ -650,6 +650,15 @@ class TestTheiaResilientInterface(ResilientTheiaMixin, TestTheia): ...@@ -650,6 +650,15 @@ class TestTheiaResilientInterface(ResilientTheiaMixin, TestTheia):
monitor_setup_params['password'], monitor_setup_params['password'],
)).raise_for_status() )).raise_for_status()
def test_all_favicon_are_different(self):
favicon_relpath = os.path.join('srv', 'frontend-static', 'favicon.ico')
with open(self.getPartitionPath('export', favicon_relpath), 'rb') as f:
export_favicon = f.read()
with open(self.getPartitionPath('import', favicon_relpath), 'rb') as f:
import_favicon = f.read()
if export_favicon == import_favicon:
self.fail('Import favicon and export favicon are not different')
class TestTheiaResilientWithEmbeddedInstance(ResilientTheiaMixin, TestTheiaWithEmbeddedInstance): class TestTheiaResilientWithEmbeddedInstance(ResilientTheiaMixin, TestTheiaWithEmbeddedInstance):
pass pass
...@@ -499,8 +499,8 @@ class TakeoverMixin(ExportAndImportMixin): ...@@ -499,8 +499,8 @@ class TakeoverMixin(ExportAndImportMixin):
resp = requests.get("%s?password=%s" % (takeover_url, takeover_password), verify=True) resp = requests.get("%s?password=%s" % (takeover_url, takeover_password), verify=True)
self.assertEqual(requests.codes.ok, resp.status_code) self.assertEqual(requests.codes.ok, resp.status_code)
# Allow KeyError because of stricter "slapos request" command # Allow KeyError because of stricter "slapos request" command
self.assertNotIn("Error", resp.text.replace("KeyError: \\'frozen\\'", ""), "An Error occured: %s" % resp.text) self.assertNotIn("Error", resp.text.replace("KeyError: \\'frozen\\'", ""))
self.assertIn("Success", resp.text, "An Error occured: %s" % resp.text) self.assertIn("Success", resp.text)
return resp.text return resp.text
def _doTakeover(self): def _doTakeover(self):
......
...@@ -46,7 +46,6 @@ extends = ...@@ -46,7 +46,6 @@ extends =
../../component/grep/buildout.cfg ../../component/grep/buildout.cfg
../../component/dash/buildout.cfg ../../component/dash/buildout.cfg
../../component/bash/buildout.cfg ../../component/bash/buildout.cfg
../../component/wget/buildout.cfg
../../component/aspell/buildout.cfg ../../component/aspell/buildout.cfg
../../component/6tunnel/buildout.cfg ../../component/6tunnel/buildout.cfg
../../component/userhosts/buildout.cfg ../../component/userhosts/buildout.cfg
...@@ -228,7 +227,6 @@ context = ...@@ -228,7 +227,6 @@ context =
key template_fonts_conf template-fonts-conf:output key template_fonts_conf template-fonts-conf:output
key userhosts_location userhosts:location key userhosts_location userhosts:location
key unixodbc_location unixodbc:location key unixodbc_location unixodbc:location
key wget_location wget:location
key extra_path_list eggs:extra-paths key extra_path_list eggs:extra-paths
key python_executable_for_kernel erp5-python-interpreter-jupyter:exe key python_executable_for_kernel erp5-python-interpreter-jupyter:exe
key erp5_kernel_location erp5-kernel:location key erp5_kernel_location erp5-kernel:location
......
...@@ -50,7 +50,6 @@ extends = ...@@ -50,7 +50,6 @@ extends =
../../component/grep/buildout.cfg ../../component/grep/buildout.cfg
../../component/dash/buildout.cfg ../../component/dash/buildout.cfg
../../component/bash/buildout.cfg ../../component/bash/buildout.cfg
../../component/wget/buildout.cfg
../../component/aspell/buildout.cfg ../../component/aspell/buildout.cfg
../../component/6tunnel/buildout.cfg ../../component/6tunnel/buildout.cfg
../../component/userhosts/buildout.cfg ../../component/userhosts/buildout.cfg
...@@ -233,7 +232,6 @@ context = ...@@ -233,7 +232,6 @@ context =
key template_fonts_conf template-fonts-conf:output key template_fonts_conf template-fonts-conf:output
key userhosts_location userhosts:location key userhosts_location userhosts:location
key unixodbc_location unixodbc:location key unixodbc_location unixodbc:location
key wget_location wget:location
key extra_path_list eggs:extra-paths key extra_path_list eggs:extra-paths
key python_executable_for_kernel erp5-python-interpreter-jupyter:exe key python_executable_for_kernel erp5-python-interpreter-jupyter:exe
key erp5_kernel_location erp5-kernel:location key erp5_kernel_location erp5-kernel:location
...@@ -633,7 +631,6 @@ scripts = ...@@ -633,7 +631,6 @@ scripts =
tidstoraged tidstoraged
tidstorage_repozo tidstorage_repozo
wcfs wcfs
web_checker_utility
extra-paths = extra-paths =
${erp5:location} ${erp5:location}
......
...@@ -138,10 +138,10 @@ eggs = ...@@ -138,10 +138,10 @@ eggs =
# The last version of setuptools compatible with Python 3.7 # The last version of setuptools compatible with Python 3.7
setuptools = 67.8.0 setuptools = 67.8.0
# Use SlapOS patched zc.buildout # Use SlapOS patched zc.buildout
zc.buildout = 3.0.1+slapos002 zc.buildout = 3.0.1+slapos004
pip = 23.2.1 pip = 23.2.1
# Use SlapOS patched zc.recipe.egg (zc.recipe.egg 2.x is for Buildout 2) # Use SlapOS patched zc.recipe.egg (zc.recipe.egg 2.x is for Buildout 2)
zc.recipe.egg = 2.0.8.dev0+slapos002 zc.recipe.egg = 2.0.8.dev0+slapos004
aiofiles = 23.1.0:whl aiofiles = 23.1.0:whl
aiohttp = 3.8.5:whl aiohttp = 3.8.5:whl
......
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