feat(testing02): Init testing vm
Some checks failed
Build all the nodes / netcore02 (pull_request) Successful in 40s
Build all the nodes / hypervisor02 (pull_request) Successful in 2m31s
Build all the nodes / geo02 (pull_request) Successful in 2m40s
Build all the nodes / hypervisor01 (pull_request) Successful in 2m39s
Build all the nodes / hypervisor03 (pull_request) Successful in 2m24s
Build all the nodes / geo01 (pull_request) Successful in 2m40s
Build all the nodes / rescue01 (pull_request) Successful in 2m8s
Build all the nodes / tower01 (pull_request) Successful in 1m58s
Build all the nodes / storage01 (pull_request) Successful in 2m19s
Build all the nodes / vault01 (pull_request) Successful in 2m20s
Build all the nodes / testing02 (pull_request) Successful in 2m39s
Build all the nodes / web01 (pull_request) Successful in 2m33s
Build the shell / build-shell (pull_request) Successful in 1m2s
Run pre-commit on all files / pre-commit (pull_request) Failing after 45s
Build all the nodes / web02 (pull_request) Successful in 1m43s
Build all the nodes / web03 (pull_request) Successful in 1m48s
Run pre-commit on all files / pre-commit (push) Failing after 36s
Check meta / check_dns (pull_request) Successful in 17s
Check meta / check_meta (pull_request) Successful in 17s
Check workflows / check_workflows (pull_request) Successful in 27s
Build all the nodes / ap01 (pull_request) Successful in 1m6s
Build all the nodes / bridge01 (pull_request) Successful in 1m56s
Build all the nodes / compute01 (pull_request) Successful in 2m44s
Some checks failed
Build all the nodes / netcore02 (pull_request) Successful in 40s
Build all the nodes / hypervisor02 (pull_request) Successful in 2m31s
Build all the nodes / geo02 (pull_request) Successful in 2m40s
Build all the nodes / hypervisor01 (pull_request) Successful in 2m39s
Build all the nodes / hypervisor03 (pull_request) Successful in 2m24s
Build all the nodes / geo01 (pull_request) Successful in 2m40s
Build all the nodes / rescue01 (pull_request) Successful in 2m8s
Build all the nodes / tower01 (pull_request) Successful in 1m58s
Build all the nodes / storage01 (pull_request) Successful in 2m19s
Build all the nodes / vault01 (pull_request) Successful in 2m20s
Build all the nodes / testing02 (pull_request) Successful in 2m39s
Build all the nodes / web01 (pull_request) Successful in 2m33s
Build the shell / build-shell (pull_request) Successful in 1m2s
Run pre-commit on all files / pre-commit (pull_request) Failing after 45s
Build all the nodes / web02 (pull_request) Successful in 1m43s
Build all the nodes / web03 (pull_request) Successful in 1m48s
Run pre-commit on all files / pre-commit (push) Failing after 36s
Check meta / check_dns (pull_request) Successful in 17s
Check meta / check_meta (pull_request) Successful in 17s
Check workflows / check_workflows (pull_request) Successful in 27s
Build all the nodes / ap01 (pull_request) Successful in 1m6s
Build all the nodes / bridge01 (pull_request) Successful in 1m56s
Build all the nodes / compute01 (pull_request) Successful in 2m44s
This commit is contained in:
parent
e574d2ab72
commit
6a0d07fddb
14 changed files with 470 additions and 18 deletions
|
@ -120,6 +120,17 @@ jobs:
|
||||||
STORE_USER: admin
|
STORE_USER: admin
|
||||||
name: Build and cache storage01
|
name: Build and cache storage01
|
||||||
run: nix-shell -A eval-nodes --run cache-node
|
run: nix-shell -A eval-nodes --run cache-node
|
||||||
|
testing02:
|
||||||
|
runs-on: nix
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- env:
|
||||||
|
BUILD_NODE: testing02
|
||||||
|
STORE_ENDPOINT: https://tvix-store.dgnum.eu/infra-signing/
|
||||||
|
STORE_PASSWORD: ${{ secrets.STORE_PASSWORD }}
|
||||||
|
STORE_USER: admin
|
||||||
|
name: Build and cache testing02
|
||||||
|
run: nix-shell -A eval-nodes --run cache-node
|
||||||
tower01:
|
tower01:
|
||||||
runs-on: nix
|
runs-on: nix
|
||||||
steps:
|
steps:
|
||||||
|
|
|
@ -20,7 +20,7 @@ precedence = "closest"
|
||||||
[[annotations]]
|
[[annotations]]
|
||||||
SPDX-FileCopyrightText = "2024 Tom Hubrecht <tom.hubrecht@dgnum.eu>"
|
SPDX-FileCopyrightText = "2024 Tom Hubrecht <tom.hubrecht@dgnum.eu>"
|
||||||
SPDX-License-Identifier = "EUPL-1.2"
|
SPDX-License-Identifier = "EUPL-1.2"
|
||||||
path = ["machines/nixos/compute01/ds-fr/01-smtp-tls.patch", "machines/nixos/compute01/librenms/kanidm.patch", "machines/nixos/compute01/stirling-pdf/*.patch", "machines/nixos/vault01/k-radius/packages/01-python_path.patch", "machines/nixos/web01/crabfit/*.patch", "machines/nixos/web02/cas-eleves/01-pytest-cas.patch", "patches/lix/01-disable-installChecks.patch", "patches/nixpkgs/03-crabfit-karla.patch", "patches/nixpkgs/05-netbird-relay.patch"]
|
path = ["machines/nixos/compute01/ds-fr/01-smtp-tls.patch", "machines/nixos/compute01/librenms/kanidm.patch", "machines/nixos/compute01/stirling-pdf/*.patch", "machines/nixos/vault01/k-radius/packages/01-python_path.patch", "machines/nixos/web01/crabfit/*.patch", "machines/nixos/web02/cas-eleves/01-pytest-cas.patch", "machines/nixos/testing02/cas-eleves/01-pytest-cas.patch", "patches/lix/01-disable-installChecks.patch", "patches/nixpkgs/03-crabfit-karla.patch", "patches/nixpkgs/05-netbird-relay.patch"]
|
||||||
precedence = "closest"
|
precedence = "closest"
|
||||||
|
|
||||||
[[annotations]]
|
[[annotations]]
|
||||||
|
|
43
default.nix
43
default.nix
|
@ -5,7 +5,9 @@
|
||||||
|
|
||||||
{
|
{
|
||||||
sources ? import ./npins,
|
sources ? import ./npins,
|
||||||
pkgs ? import sources.nixpkgs { },
|
pkgs ? import sources.nixpkgs {
|
||||||
|
overlays = [ (import sources.proxmox-nixos).overlays.x86_64-linux ];
|
||||||
|
},
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
|
@ -92,6 +94,7 @@ let
|
||||||
"machines/nixos/vault01/k-radius/packages/01-python_path.patch"
|
"machines/nixos/vault01/k-radius/packages/01-python_path.patch"
|
||||||
"machines/nixos/web01/crabfit/*.patch"
|
"machines/nixos/web01/crabfit/*.patch"
|
||||||
"machines/nixos/web02/cas-eleves/01-pytest-cas.patch"
|
"machines/nixos/web02/cas-eleves/01-pytest-cas.patch"
|
||||||
|
"machines/nixos/testing02/cas-eleves/01-pytest-cas.patch"
|
||||||
"patches/lix/01-disable-installChecks.patch"
|
"patches/lix/01-disable-installChecks.patch"
|
||||||
"patches/nixpkgs/03-crabfit-karla.patch"
|
"patches/nixpkgs/03-crabfit-karla.patch"
|
||||||
"patches/nixpkgs/05-netbird-relay.patch"
|
"patches/nixpkgs/05-netbird-relay.patch"
|
||||||
|
@ -176,24 +179,30 @@ in
|
||||||
devShell = pkgs.mkShell {
|
devShell = pkgs.mkShell {
|
||||||
name = "dgnum-infra";
|
name = "dgnum-infra";
|
||||||
|
|
||||||
packages = [
|
packages =
|
||||||
(pkgs.nixos-generators.overrideAttrs (_: {
|
[
|
||||||
version = "1.8.0-unstable";
|
(pkgs.nixos-generators.overrideAttrs (_: {
|
||||||
src = sources.nixos-generators;
|
version = "1.8.0-unstable";
|
||||||
}))
|
src = sources.nixos-generators;
|
||||||
pkgs.npins
|
}))
|
||||||
|
pkgs.npins
|
||||||
|
|
||||||
# SSO testing
|
# deploying on testing hypervisor
|
||||||
pkgs.kanidm
|
pkgs.nixmoxer
|
||||||
pkgs.freeradius
|
|
||||||
pkgs.picocom # for serial access
|
|
||||||
|
|
||||||
(pkgs.callPackage ./lib/colmena {
|
# SSO testing
|
||||||
colmena = pkgs.callPackage "${sources.colmena}/package.nix" { };
|
pkgs.kanidm
|
||||||
})
|
pkgs.freeradius
|
||||||
(pkgs.callPackage "${sources.agenix}/pkgs/agenix.nix" { })
|
pkgs.picocom # for serial access
|
||||||
(pkgs.callPackage "${sources.lon}/nix/packages/lon.nix" { })
|
|
||||||
] ++ git-checks.enabledPackages ++ (builtins.attrValues scripts);
|
(pkgs.callPackage ./lib/colmena {
|
||||||
|
colmena = pkgs.callPackage "${sources.colmena}/package.nix" { };
|
||||||
|
})
|
||||||
|
(pkgs.callPackage "${sources.agenix}/pkgs/agenix.nix" { })
|
||||||
|
(pkgs.callPackage "${sources.lon}/nix/packages/lon.nix" { })
|
||||||
|
]
|
||||||
|
++ git-checks.enabledPackages
|
||||||
|
++ (builtins.attrValues scripts);
|
||||||
|
|
||||||
shellHook = builtins.concatStringsSep "\n" [
|
shellHook = builtins.concatStringsSep "\n" [
|
||||||
git-checks.shellHook
|
git-checks.shellHook
|
||||||
|
|
|
@ -34,6 +34,7 @@ rec {
|
||||||
];
|
];
|
||||||
rescue01 = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEJa02Annu8o7ggPjTH/9ttotdNGyghlWfU9E8pnuLUf" ];
|
rescue01 = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEJa02Annu8o7ggPjTH/9ttotdNGyghlWfU9E8pnuLUf" ];
|
||||||
storage01 = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA0s+rPcEcfWCqZ4B2oJiWT/60awOI8ijL1rtDM2glXZ" ];
|
storage01 = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA0s+rPcEcfWCqZ4B2oJiWT/60awOI8ijL1rtDM2glXZ" ];
|
||||||
|
testing02 = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN9ZLXDshhwRZs35oN3UYDtJXEBwMTP20nyWz453TvlY" ];
|
||||||
tower01 = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICVpR+TMRLGAfhn7Q0C3tKOydYYjfoC/e1ZYbKpby01Z" ];
|
tower01 = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICVpR+TMRLGAfhn7Q0C3tKOydYYjfoC/e1ZYbKpby01Z" ];
|
||||||
vault01 = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAJA6VA7LENvTRlKdcrqt8DxDOPvX3bg3Gjy9mNkdFEW" ];
|
vault01 = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAJA6VA7LENvTRlKdcrqt8DxDOPvX3bg3Gjy9mNkdFEW" ];
|
||||||
web01 = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPR+lewuJ/zhCyizJGJOH1UaAB699ItNKEaeuoK57LY5" ];
|
web01 = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPR+lewuJ/zhCyizJGJOH1UaAB699ItNKEaeuoK57LY5" ];
|
||||||
|
|
33
machines/nixos/testing02/_configuration.nix
Normal file
33
machines/nixos/testing02/_configuration.nix
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
# SPDX-FileCopyrightText: 2024 Tom Hubrecht <tom.hubrecht@dgnum.eu>
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: EUPL-1.2
|
||||||
|
|
||||||
|
{ lib, pkgs, ... }:
|
||||||
|
|
||||||
|
lib.extra.mkConfig {
|
||||||
|
enabledModules = [
|
||||||
|
# List of modules to enable
|
||||||
|
"dgn-web"
|
||||||
|
];
|
||||||
|
|
||||||
|
enabledServices = [
|
||||||
|
# List of services to enable
|
||||||
|
"cas-eleves"
|
||||||
|
];
|
||||||
|
|
||||||
|
extraConfig = {
|
||||||
|
# Disable monitoring
|
||||||
|
dgn-node-monitoring.enable = false;
|
||||||
|
dgn-records.enable = false;
|
||||||
|
dgn-notify.enable = false;
|
||||||
|
|
||||||
|
# Enable Postgres databases
|
||||||
|
services.postgresql = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
package = pkgs.postgresql_16;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
root = ./.;
|
||||||
|
}
|
33
machines/nixos/testing02/_hardware-configuration.nix
Normal file
33
machines/nixos/testing02/_hardware-configuration.nix
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
# SPDX-FileCopyrightText: 2024 Tom Hubrecht <tom.hubrecht@dgnum.eu>
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: EUPL-1.2
|
||||||
|
|
||||||
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
|
# and may be overwritten by future invocations. Please make changes
|
||||||
|
# to /etc/nixos/configuration.nix instead.
|
||||||
|
{ modulesPath, sources, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
(modulesPath + "/profiles/qemu-guest.nix")
|
||||||
|
(sources.disko + "/module.nix")
|
||||||
|
./disko.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
boot = {
|
||||||
|
initrd = {
|
||||||
|
availableKernelModules = [
|
||||||
|
"ata_piix"
|
||||||
|
"uhci_hcd"
|
||||||
|
"ehci_pci"
|
||||||
|
"virtio_pci"
|
||||||
|
"sr_mod"
|
||||||
|
"virtio_blk"
|
||||||
|
];
|
||||||
|
kernelModules = [ ];
|
||||||
|
};
|
||||||
|
|
||||||
|
kernelModules = [ "kvm-intel" ];
|
||||||
|
extraModulePackages = [ ];
|
||||||
|
};
|
||||||
|
}
|
98
machines/nixos/testing02/cas-eleves/01-pytest-cas.patch
Normal file
98
machines/nixos/testing02/cas-eleves/01-pytest-cas.patch
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
diff --git a/setup.py b/setup.py
|
||||||
|
index 7c7b02d..3f677ff 100644
|
||||||
|
--- a/setup.py
|
||||||
|
+++ b/setup.py
|
||||||
|
@@ -67,6 +67,4 @@ if __name__ == '__main__':
|
||||||
|
url="https://github.com/nitmir/django-cas-server",
|
||||||
|
download_url="https://github.com/nitmir/django-cas-server/releases/latest",
|
||||||
|
zip_safe=False,
|
||||||
|
- setup_requires=['pytest-runner'],
|
||||||
|
- tests_require=['pytest', 'pytest-django', 'pytest-pythonpath', 'pytest-warnings', 'mock>=1'],
|
||||||
|
)
|
||||||
|
index 2b389d3..dcdfafd 100644
|
||||||
|
--- a/cas_server/tests/test_federate.py
|
||||||
|
+++ b/cas_server/tests/test_federate.py
|
||||||
|
@@ -16,6 +16,7 @@ from cas_server.default_settings import settings
|
||||||
|
import django
|
||||||
|
from django.test import TestCase, Client
|
||||||
|
from django.test.utils import override_settings
|
||||||
|
+import pytest
|
||||||
|
|
||||||
|
from six.moves import reload_module
|
||||||
|
|
||||||
|
@@ -64,6 +65,7 @@ class FederateAuthLoginLogoutTestCase(
|
||||||
|
) in response.content.decode("utf-8"))
|
||||||
|
self.assertEqual(response.context['post_url'], '/federate')
|
||||||
|
|
||||||
|
+ @pytest.mark.skip(reason="Address already in use")
|
||||||
|
def test_login_post_provider(self, remember=False):
|
||||||
|
"""test a successful login wrokflow"""
|
||||||
|
tickets = []
|
||||||
|
@@ -159,6 +161,7 @@ class FederateAuthLoginLogoutTestCase(
|
||||||
|
self.assertTrue(response["Location"].startswith("%s?ticket=" % self.service))
|
||||||
|
return tickets
|
||||||
|
|
||||||
|
+ @pytest.mark.skip(reason="Address already in use")
|
||||||
|
def test_login_twice(self):
|
||||||
|
"""Test that user id db is used for the second login (cf coverage)"""
|
||||||
|
self.test_login_post_provider()
|
||||||
|
@@ -253,6 +256,7 @@ class FederateAuthLoginLogoutTestCase(
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
self.assertIn(b"Invalid response from your identity provider CAS", response.content)
|
||||||
|
|
||||||
|
+ @pytest.mark.skip(reason="Address already in use")
|
||||||
|
def test_auth_federate_slo(self):
|
||||||
|
"""test that SLO receive from backend CAS log out the users"""
|
||||||
|
# get tickets and connected clients
|
||||||
|
@@ -301,6 +305,7 @@ class FederateAuthLoginLogoutTestCase(
|
||||||
|
client, response, username=provider.build_username(settings.CAS_TEST_USER)
|
||||||
|
)
|
||||||
|
|
||||||
|
+ @pytest.mark.skip(reason="Address already in use")
|
||||||
|
def test_federate_logout(self):
|
||||||
|
"""
|
||||||
|
test the logout function: the user should be log out
|
||||||
|
@@ -340,6 +345,7 @@ class FederateAuthLoginLogoutTestCase(
|
||||||
|
response = client.get("/login")
|
||||||
|
self.assert_login_failed(client, response)
|
||||||
|
|
||||||
|
+ @pytest.mark.skip(reason="Address already in use")
|
||||||
|
def test_remember_provider(self):
|
||||||
|
"""
|
||||||
|
If the user check remember, next login should not offer the chose of the backend CAS
|
||||||
|
@@ -355,6 +361,7 @@ class FederateAuthLoginLogoutTestCase(
|
||||||
|
provider.suffix
|
||||||
|
))
|
||||||
|
|
||||||
|
+ @pytest.mark.skip(reason="Address already in use")
|
||||||
|
def test_forget_provider(self):
|
||||||
|
"""Test the logout option to forget remembered provider"""
|
||||||
|
tickets = self.test_login_post_provider(remember=True)
|
||||||
|
@@ -365,6 +372,7 @@ class FederateAuthLoginLogoutTestCase(
|
||||||
|
client.get("/logout?forget_provider=1")
|
||||||
|
self.assertEqual(client.cookies["remember_provider"]["max-age"], 0)
|
||||||
|
|
||||||
|
+ @pytest.mark.skip(reason="Address already in use")
|
||||||
|
def test_renew(self):
|
||||||
|
"""
|
||||||
|
Test authentication renewal with federation mode
|
||||||
|
diff --git a/cas_server/tests/test_utils.py b/cas_server/tests/test_utils.py
|
||||||
|
index d690724..73ee761 100644
|
||||||
|
--- a/cas_server/tests/test_utils.py
|
||||||
|
+++ b/cas_server/tests/test_utils.py
|
||||||
|
@@ -17,6 +17,7 @@ from django.db import connection
|
||||||
|
import six
|
||||||
|
import warnings
|
||||||
|
import datetime
|
||||||
|
+import pytest
|
||||||
|
|
||||||
|
from cas_server import utils
|
||||||
|
|
||||||
|
@@ -61,6 +62,7 @@ class CheckPasswordCase(TestCase):
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
+ @pytest.mark.skip(reason="crypt is broken somehow")
|
||||||
|
def test_crypt(self):
|
||||||
|
"""test the crypt auth method"""
|
||||||
|
salts = ["$6$UVVAQvrMyXMF3FF3", "aa"]
|
155
machines/nixos/testing02/cas-eleves/default.nix
Normal file
155
machines/nixos/testing02/cas-eleves/default.nix
Normal file
|
@ -0,0 +1,155 @@
|
||||||
|
# SPDX-FileCopyrightText: 2024 Tom Hubrecht <tom.hubrecht@dgnum.eu>
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: EUPL-1.2
|
||||||
|
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
sources,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
inherit (lib) mapAttrsToList;
|
||||||
|
|
||||||
|
host = "cas.eleves.ens.fr";
|
||||||
|
|
||||||
|
src = sources.cas-eleves;
|
||||||
|
|
||||||
|
port = 9889;
|
||||||
|
|
||||||
|
python3 =
|
||||||
|
let
|
||||||
|
nix-pkgs = import sources.nix-pkgs {
|
||||||
|
inherit pkgs;
|
||||||
|
python3 = pkgs.python312;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
pkgs.python312.override {
|
||||||
|
packageOverrides = _: _: {
|
||||||
|
inherit (nix-pkgs) django-browser-reload django-bulma-forms loadcredential;
|
||||||
|
|
||||||
|
django-cas-server = nix-pkgs.django-cas-server.overridePythonAttrs (_: {
|
||||||
|
patches = [ ./01-pytest-cas.patch ];
|
||||||
|
});
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
pythonEnv = python3.withPackages (ps: [
|
||||||
|
ps.django
|
||||||
|
ps.ldap3
|
||||||
|
ps.gunicorn
|
||||||
|
ps.psycopg
|
||||||
|
|
||||||
|
# Local packages
|
||||||
|
ps.django-browser-reload
|
||||||
|
ps.django-bulma-forms
|
||||||
|
ps.django-cas-server
|
||||||
|
ps.loadcredential
|
||||||
|
]);
|
||||||
|
|
||||||
|
staticDrv = pkgs.stdenv.mkDerivation {
|
||||||
|
name = "cas_eleves-static";
|
||||||
|
|
||||||
|
inherit src;
|
||||||
|
|
||||||
|
nativeBuildInputs = [ pythonEnv ];
|
||||||
|
|
||||||
|
configurePhase = ''
|
||||||
|
export CE_STATIC_ROOT=$out/static
|
||||||
|
export CE_DEBUG=true
|
||||||
|
export CREDENTIALS_DIRECTORY=$(pwd)/.credentials
|
||||||
|
'';
|
||||||
|
|
||||||
|
doBuild = false;
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out/static
|
||||||
|
python3 manage.py collectstatic
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
in
|
||||||
|
|
||||||
|
{
|
||||||
|
systemd.services = {
|
||||||
|
django-cas-eleves = {
|
||||||
|
description = "ENS CAS server";
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
after = [
|
||||||
|
"network.target"
|
||||||
|
"postgresql.service"
|
||||||
|
];
|
||||||
|
|
||||||
|
serviceConfig = {
|
||||||
|
DynamicUser = true;
|
||||||
|
LoadCredential = mapAttrsToList (name: value: "${name}:${value}") {
|
||||||
|
SECRET_KEY = config.age.secrets."cas_eleves-secret_key_file".path;
|
||||||
|
};
|
||||||
|
StateDirectory = "django-cas-eleves";
|
||||||
|
User = "cas_server";
|
||||||
|
WorkingDirectory = src;
|
||||||
|
};
|
||||||
|
|
||||||
|
environment = {
|
||||||
|
CE_ALLOWED_HOSTS = builtins.toJSON [
|
||||||
|
host
|
||||||
|
];
|
||||||
|
CE_STATIC_ROOT = staticDrv;
|
||||||
|
};
|
||||||
|
|
||||||
|
path = [ pythonEnv ];
|
||||||
|
|
||||||
|
script = ''
|
||||||
|
python3 manage.py migrate
|
||||||
|
python3 manage.py loaddata patterns
|
||||||
|
gunicorn app.wsgi --pythonpath ${sources.cas-eleves} -b 127.0.0.1:${builtins.toString port} --workers=2 --threads=4
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
cas-eleves-cleanup = {
|
||||||
|
description = "Periodic cleanup of cas_server database";
|
||||||
|
|
||||||
|
startAt = "daily";
|
||||||
|
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "oneshot";
|
||||||
|
|
||||||
|
LoadCredential = mapAttrsToList (name: value: "${name}:${value}") {
|
||||||
|
SECRET_KEY = config.age.secrets."cas_eleves-secret_key_file".path;
|
||||||
|
};
|
||||||
|
StateDirectory = "django-cas-eleves";
|
||||||
|
User = "cas_server";
|
||||||
|
WorkingDirectory = src;
|
||||||
|
};
|
||||||
|
|
||||||
|
path = [ pythonEnv ];
|
||||||
|
|
||||||
|
script = ''
|
||||||
|
python3 manage.py clearsessions
|
||||||
|
python3 manage.py cas_clean_sessions
|
||||||
|
python3 manage.py cas_clean_tickets
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
dgn-redirections.permanent."cas-eleves.dgnum.eu" = "cas.eleves.ens.fr";
|
||||||
|
|
||||||
|
dgn-web.simpleProxies.cas-eleves = {
|
||||||
|
inherit host port;
|
||||||
|
vhostConfig.locations = {
|
||||||
|
"/static/".root = staticDrv;
|
||||||
|
"= /robots.txt".root = "${staticDrv}/static";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.postgresql = {
|
||||||
|
ensureDatabases = [ "cas_server" ];
|
||||||
|
ensureUsers = [
|
||||||
|
{
|
||||||
|
name = "cas_server";
|
||||||
|
ensureDBOwnership = true;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
37
machines/nixos/testing02/disko.nix
Normal file
37
machines/nixos/testing02/disko.nix
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
# SPDX-FileCopyrightText: 2024 Maurice Debray <maurice.debray@dgnum.eu>
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: EUPL-1.2
|
||||||
|
|
||||||
|
_: {
|
||||||
|
disko.devices = {
|
||||||
|
disk = {
|
||||||
|
main = {
|
||||||
|
device = "/dev/sda";
|
||||||
|
type = "disk";
|
||||||
|
content = {
|
||||||
|
type = "gpt";
|
||||||
|
partitions = {
|
||||||
|
ESP = {
|
||||||
|
type = "EF00";
|
||||||
|
size = "1G";
|
||||||
|
content = {
|
||||||
|
type = "filesystem";
|
||||||
|
format = "vfat";
|
||||||
|
mountpoint = "/boot";
|
||||||
|
mountOptions = [ "umask=0077" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
root = {
|
||||||
|
size = "100%";
|
||||||
|
content = {
|
||||||
|
type = "filesystem";
|
||||||
|
format = "ext4";
|
||||||
|
mountpoint = "/";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
28
machines/nixos/testing02/secrets/cas_eleves-secret_key_file
Normal file
28
machines/nixos/testing02/secrets/cas_eleves-secret_key_file
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
age-encryption.org/v1
|
||||||
|
-> ssh-ed25519 jIXfPA Y8DShtEMQgOntLe2D7DmyiBBk79lyqgnr+v2XU1wEUY
|
||||||
|
0Ld753OZvmra3hu2ZhDTb+D6fmEDFHF3N1KXf576vFs
|
||||||
|
-> ssh-ed25519 QlRB9Q UHxOhsZ4SVBxktiJZvdZWNoLTbDYwxgCxXH9kUOAHwc
|
||||||
|
LHpldriHj6V7o3NBzRY5XCuKBVyt1TY8PwAV/Sw/II0
|
||||||
|
-> ssh-ed25519 r+nK/Q Of86Jw9wbRO5FLqXBX9UBbgKvepsSs/RfoXA+WF5dEE
|
||||||
|
RHUU7tJkLWGbwPbths8K1+RD3kAprtr+tcrutNIx4kw
|
||||||
|
-> ssh-rsa krWCLQ
|
||||||
|
leBDZeUh6g7VShLphqdbiSqbcWlWrWd2rsU5FJQRBp93ou81uTSx7YX0k+2T3j68
|
||||||
|
oFwzYEAlCO+HS1pf4Xm+RU+v1Cek6v0GiKbOa0Qoq/quRACoz9XmYjuZymTywA9v
|
||||||
|
1fsKI5lZf3Wrm+mo5kLjsN3r5sOzOwMJPDuyVToU85smnHEVLsyVHgk0NYOR3/FQ
|
||||||
|
RfwCbIV8QDAQhO7wxeESbJc7uXV/Y3yW7R1beUqw10JjaP22+3XlBBirjJecfXbq
|
||||||
|
3BjePWWXCbJiBfwusCYYFnNB+IH5Z+Iq5jjBPoC2Ds2qWF/u8Zkzm5kKFNe3FZAF
|
||||||
|
irjyxq8Ig4mup8GbHJPhWQ
|
||||||
|
-> ssh-ed25519 /vwQcQ I2XFpnON3doHt211OVV2jup8Gq45AnXxngl4buX11iU
|
||||||
|
tETEki2X8DqWSobwkc3DIX5jRgEjIwEAkfwOgAn6XQQ
|
||||||
|
-> ssh-ed25519 0R97PA 3SLLzYOFPJIMHPNv+nNRj0AVKVdjjzLwklNxTP22i3o
|
||||||
|
SecCIijSQX9/trUkIcVZhkHkL0I91OoaVB0o7W7eQKY
|
||||||
|
-> ssh-ed25519 JGx7Ng xgn+3vNx3+LFiCddKIm4Liw0dY1Tu9LbIv0IO7PsnTQ
|
||||||
|
sBLQ5b+VfFna2NxRMiIKxPBS7ta25pB87g/w0dw5kBY
|
||||||
|
-> ssh-ed25519 bUjjig Wy37MyZlHKZgAYoiZ51C1aKXk3ViEbsjywzEtirniWE
|
||||||
|
xxO2NBD6XSRjD4V4LlrgFlgg6AfhDTXJeALjuSAMQ/E
|
||||||
|
-> ssh-ed25519 4AXTDw olhRRCwy6pQKn3SoDoEOZX5O5UcG0OLU0tuWWRMXS1I
|
||||||
|
EzE41m9GZSDUKa5YeE0yAboCqqPyA36/Y5jyrOuh1uY
|
||||||
|
-> 0M'P-grease
|
||||||
|
gY0
|
||||||
|
--- AXjB6LAy1sz5hu44nz2pRCgvppwN+n2VDjUUtYwPGcY
|
||||||
|
|¿&§Ð™·Ê*ê;ÕÌ<C395>C8qXå«.–Þ3³#‘F˜ql„¬¯¨Þk?|•Œí¤¨t u7eÚ§ão¯"è±qad嶈Ü<ÑR
|
10
machines/nixos/testing02/secrets/secrets.nix
Normal file
10
machines/nixos/testing02/secrets/secrets.nix
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
# SPDX-FileCopyrightText: 2024 La Délégation Générale Numérique <contact@dgnum.eu>
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: EUPL-1.2
|
||||||
|
|
||||||
|
(import ../../../../keys).mkSecrets
|
||||||
|
[ "testing02" ]
|
||||||
|
[
|
||||||
|
# List of secrets for web02
|
||||||
|
"cas_eleves-secret_key_file"
|
||||||
|
]
|
|
@ -115,6 +115,10 @@ let
|
||||||
"status" # Uptime Kuma
|
"status" # Uptime Kuma
|
||||||
];
|
];
|
||||||
|
|
||||||
|
testing02.dual = [
|
||||||
|
"*.testing"
|
||||||
|
];
|
||||||
|
|
||||||
vault01.dual = [
|
vault01.dual = [
|
||||||
"radius" # FreeRADIUS
|
"radius" # FreeRADIUS
|
||||||
];
|
];
|
||||||
|
|
|
@ -189,6 +189,25 @@
|
||||||
netbirdIp = "100.80.156.154";
|
netbirdIp = "100.80.156.154";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
testing02 = {
|
||||||
|
interfaces = {
|
||||||
|
ens18 = {
|
||||||
|
ipv4 = [
|
||||||
|
{
|
||||||
|
address = "129.199.146.44";
|
||||||
|
prefixLength = 24;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
gateways = [ "129.199.146.254" ];
|
||||||
|
enableDefaultDNS = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
hostId = "7bb28324";
|
||||||
|
netbirdIp = null; # testing02 is not to be connected on the VPN
|
||||||
|
};
|
||||||
|
|
||||||
tower01 = {
|
tower01 = {
|
||||||
interfaces = {
|
interfaces = {
|
||||||
eno2 = {
|
eno2 = {
|
||||||
|
|
|
@ -182,6 +182,20 @@
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
testing02 = {
|
||||||
|
site = "pav01";
|
||||||
|
|
||||||
|
hashedPassword = "$y$j9T$GMdDdUJFS3/.JruWdRjaJ1$7Or5QvWsYQ77swplkQdYAqdyVDmku0t6htBL0r5MT19";
|
||||||
|
|
||||||
|
stateVersion = "24.11";
|
||||||
|
vm-cluster = "Hyperviseur Lab-infra";
|
||||||
|
|
||||||
|
nixpkgs = {
|
||||||
|
version = "24.11";
|
||||||
|
system = "nixos";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
tower01 = {
|
tower01 = {
|
||||||
site = "oik01";
|
site = "oik01";
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue