<?xml version="1.0" encoding="utf-8"?>

<creole>

    <files>
        <!--service method="restartonly">netplan-apply</service-->
        <!--service method="restartonly">networkd-dispatcher</service-->
        <service method="restartonly">cron</service>
        <service servicelist='systemd-resolved' method="restartonly">systemd-resolved</service>
        <service servicelist='rngd'>rng-tools</service>
        <service method="restartonly">ssh</service>
        <file name='/etc/eole/release'/>
        <!-- Lock file, must not be removed -->
        <file name='/etc/eole/.VirtDisabled.lock' rm='False' source='container.lockfile' filelist='container_disabled' />
        <file name='/etc/timezone'/>
        <file name='/etc/netplan/00-eole.yaml'/>
        <file name='/etc/systemd/resolved.conf'/>
        <file name='/etc/resolv.conf' filelist='resolvconf'/>
        <file name='/etc/resolv.conf.full' filelist='resolvconf' source="resolv.conf"/>
        <file name='/etc/resolv.conf.minimal' filelist='resolvconf'/>
        <file name='/etc/hostname'/>
        <file name='/etc/hosts'/>
        <file name='/etc/sysctl.conf'/>
        <file name='/etc/sudoers' mode="0440"/>
        <file name='/etc/vim/vimrc'/>
        <file name='/etc/profile.d/eolerc.sh' mode='0755'/>
        <file name='/etc/ssh/sshd_config'/>
        <file name='/etc/ssh/ssh_config'/>
        <file name='/etc/pam.d/common-password'/>
        <file name='/etc/pam.d/chpasswd'/>
        <file name='/etc/DIR_COLORS'/>
        <file name='/etc/pythonrc'/>
        <file name='/etc/apt/apt.conf.d/02eoleproxy'/>
        <file filelist='rngd' name='/etc/default/rng-tools'/>
        <file name='/etc/issue'/>
        <file name='/etc/update-motd.d/00-header' mode='0755'/>
        <file name='/etc/update-motd.d/10-help-text' mode='0755'/>
        <file name='/etc/systemd/system/fwupd-refresh.service.d/override.conf' source='fwupd-refresh.service.override' mkdir='True'/>
        <file name='/etc/network/if-up.d/openssh-server' mode='0755'/>
        <file name='/etc/sysctl.d/10-console-messages.conf'/>
        <file name='/etc/cron.d/schedule' source='cron-schedule' filelist='cronschedule' rm="True"/>
        <file name='/etc/logrotate.d/00-eole-options' source='logrotate_global_options'/>
        <file name='/etc/eole/server.cfg'/>
        <!-- fix 8001 (voir pour mettre dans un autre dico -->
        <file name='/var/lib/eole/config/zstats.cfg'/>

        <!-- Workaround https://dev-eole.ac-dijon.fr/issues/21207 -->
        <file name='/usr/sbin/policy-rc.d' mode='0755' />
    </files>

    <containers>
        <all>
            <file name='/etc/update-motd.d/00-header' mode='0755'/>
            <file name='/etc/update-motd.d/10-help-text' mode='0755'/>
            <file name='/etc/apt/apt.conf.d/02eoleproxy' instance_mode='when_container' />

            <!-- Workaround https://dev-eole.ac-dijon.fr/issues/21207 -->
            <file name='/usr/sbin/policy-rc.d' mode='0755'  instance_mode='when_container' />
        </all>
    </containers>

    <variables>
        <family name='général' icon='wrench'>
            <variable name='eole_module' type='string' description="Nom du module EOLE" hidden="True">
                <value>eolebase</value>
            </variable>
            <!-- a reporter dans creole/eoleversion.py-->
            <variable name='ubuntu_version' type='string' description="Nom de version de la distribution Ubuntu" hidden="True">
              <value>jammy</value>
            </variable>
            <variable name='eole_version' type='string' description="Numéro de version majeure du module EOLE" hidden="True">
              <value>2.9</value>
            </variable>
            <variable name='eole_release' type='string' description="Numéro de version fonctionnelle du module EOLE" hidden="True">
              <value>2.9.0</value>
            </variable>
            <!-- -->
            <variable name='mode_conteneur_actif' type='oui/non' description="Le serveur est en mode conteneur" hidden="True">
                <value>non</value>
            </variable>
            <variable name='module_instancie' type='oui/non' description="Le serveur a été instancié" />
            <variable name='numero_etab' type='string' description="Identifiant de l'établissement (exemple UAI)" auto_freeze='True' mandatory='True'/>
            <variable name='libelle_etab' type='string' description="Nom de l'établissement" mandatory='True'/>
            <variable name='nom_machine' type='hostname_strict' description='Nom de la machine' mandatory='True' mode='basic'/>
            <variable name='nom_domaine_local' type='domain' description='Nom DNS du réseau local' mandatory='True' mode='basic'/>
            <variable name='nom_domaine_machine' type='domain_strict' description="Nom DNS associé à l'interface 0" />
            <variable name='nom_academie' type='hostname_strict' description='Nom de domaine académique (ex : ac-dijon)' mandatory='True'/>
            <variable name='suffixe_domaine_academique' type='hostname_strict' description='Suffixe du nom de domaine académique' mandatory='True' mode='basic'>
                <value>fr</value>
            </variable>
            <variable name='nombre_interfaces' type='string' description="Nombre d'interfaces à activer"/>
            <variable name='activer_proxy_client' type='oui/non' description="Utiliser un serveur mandataire (proxy) pour accéder à Internet" mode='basic'>
                <value>non</value>
            </variable>
            <variable name='proxy_client_adresse' type='domain' description='Nom ou adresse IP du serveur proxy' mandatory='True'/>
            <variable name='proxy_client_port' type='port' description='Port du serveur proxy' mandatory='True' mode='basic'>
                <value>3128</value>
            </variable>
            <variable name='activer_proxy_client_mitm' type='oui/non' description="Le serveur mandataire intercepte les communications HTTPS" mode='basic'>
                <value>non</value>
            </variable>
            <variable name='proxy_client_mitm_fingerprint_type' type='string' description="Type d'empreinte du certification racine du proxy" mandatory='True'/>
            <variable name='proxy_client_mitm_fingerprint' type='string' description="Empreinte du certification racine du proxy" mandatory='True'/>
            <variable name='adresse_ip_dns' type='ip' description='Adresse IP du serveur DNS' multi='True' mode='basic'/>
            <variable name='adresse_ip_dns_du_dhcp' type='ip' description='Adresse IP du serveur DNS fourni par un serveur DHCP' multi='True' />
            <variable name='test_adresse_ip_dns' type='oui/non' description='Vérifie si des adresses IP DNS sont déclarées.' />
            <variable name='test_activer_resolvconf_template' type='oui/non' description='Vérifie s’il faut activer la templatisation du fichier /etc/resolv.conf' />
            <variable name='time_zone' type='string' description="Fuseau horaire du serveur" mode='basic'>
                <value>Europe/Paris</value>
            </variable>
        </family>

        <!-- déclaration pour fixer l'ordre d'affichage -->
        <family name='services' icon='cogs'/>
        <family name='firewall' icon='fire'/>

        <family name='système' mode='expert' icon='desktop'>
            <variable name='activer_bash_completion' type='oui/non' description="Activer l'auto-complétion étendue sur la console (touche TAB)">
                <value>oui</value>
            </variable>
            <variable name='bash_tmout' type='number' description="Temps d'inactivité avant déconnexion bash (0 pour désactiver)">
                <value>900</value>
            </variable>
            <variable name='activer_ctrl_alt_suppr' type='oui/non' description="Activer le reboot sur ctrl-alt-suppr">
                <value>oui</value>
            </variable>
            <variable name='vim_background' type='string' description="Nuance du fond d'écran dans Vim">
                <value>dark</value>
            </variable>
            <variable name='vm_swappiness' type='number' description="Poids relatif de l'utilisation de la swap par rapport à la mémoire vive">
                <value>60</value>
            </variable>
            <variable name='activer_rngd' type='oui/non' description="Activer le service de génération de nombres aléatoires rng-tools">
                <value>non</value>
            </variable>
            <variable name='check_passwd' type='oui/non' description="Vérifier la complexité des mots de passe">
                <value>oui</value>
            </variable>
            <variable name='check_passwd_min_len_one_type' type='number' description="Taille minimum du mot de passe utilisant une seule classe de caractères">
                <value>0</value>
            </variable>
            <variable name='check_passwd_min_len_two_type' type='number' description="Taille minimum du mot de passe utilisant deux classes de caractères">
                <value>9</value>
            </variable>
            <variable name='check_passwd_min_len_three_type' type='number' description="Taille minimum du mot de passe utilisant trois classes de caractères">
                <value>8</value>
            </variable>
            <variable name='check_passwd_min_len_four_type' type='number' description="Taille minimum du mot de passe utilisant quatre classes de caractères">
                <value>8</value>
            </variable>
            <variable name='check_passwd_max' type='number' description="Taille maximale du mot de passe ">
                <value>40</value>
            </variable>
            <variable name="cdrom_devices" type="string" multi="True" description="Liste des lecteurs de CDROM présent sur le serveur"/>
            <variable name="cdrom_minor" type="number" description="Minor du device CDROM présent sur le serveur"/>
            <variable name="cdrom_major" type="number" description="Major du device CDROM présent sur le serveur"/>
        </family>

        <family name='sshd' mode='expert' icon='shell'>
            <variable name='ssh_permit_root' type='oui/non' description="Autoriser les connexions SSH pour l'utilisateur root" >
                 <value>oui</value>
             </variable>
             <variable name='ssh_allow_passwd' type='oui/non' description="Autoriser les connexions SSH par mot de passe (si non clef RSA obligatoire)" >
                 <value>oui</value>
             </variable>
             <variable name='ssh_allow_groups' type='unix_user' description="Autoriser les connexions SSH pour les groupes" multi='True' />
             <variable name='ssh_maxstartups' type='string' description="Critères à appliquer pour le blocage des tentatives de connexions par force brute">
                <value>5:30:10</value>
            </variable>
         </family>

         <separators>
            <!-- général -->
            <separator name='numero_etab'>Établissement</separator>
            <separator name='nom_machine'>Nom DNS du serveur</separator>
            <separator name='nom_academie'>Paramètres réseau globaux</separator>
            <!-- sshd -->
            <separator name='ssh_permit_root'>Configuration SSH</separator>
            <!-- systeme -->
            <separator name='activer_bash_completion'>Console</separator>
            <separator name='vm_swappiness'>Optimisations système</separator>
            <separator name='check_passwd'>Validation des mots de passe des utilisateurs système (root, eole, ...)</separator>
        </separators>

    </variables>

    <constraints>
        <auto name='concat' target='nom_domaine_machine'>
            <param type='eole'>nom_machine</param>
            <param>.</param>
            <param type='eole'>nom_domaine_local</param>
        </auto>
        <auto name='list_cdrom_devices' target='cdrom_devices'>
            <param type='eole' optional='True'>mode_zephir</param>
        </auto>
        <auto name='cdrom_minormajor' target='cdrom_minor'>
            <param>minor</param>
            <param type='eole'>cdrom_devices</param>
        </auto>
        <auto name='cdrom_minormajor' target='cdrom_major'>
            <param>major</param>
            <param type='eole'>cdrom_devices</param>
        </auto>
        <group master="cdrom_devices">
            <slave>cdrom_minor</slave>
            <slave>cdrom_major</slave>
        </group>
        <condition name='disabled_if_in' source='activer_proxy_client'>
            <param>non</param>
            <target type='variable'>proxy_client_adresse</target>
            <target type='variable'>proxy_client_port</target>
            <target type='variable'>activer_proxy_client_mitm</target>
        </condition>
        <condition name='disabled_if_in' source='activer_proxy_client_mitm'>
            <param>non</param>
            <target type='variable'>proxy_client_mitm_fingerprint_type</target>
            <target type='variable'>proxy_client_mitm_fingerprint</target>
        </condition>

        <fill name='calc_val' target='nom_machine'>
            <param type='eole' name='valeur'>eole_module</param>
        </fill>

        <auto name='is_instanciate' target='module_instancie'>
        </auto>

        <condition name='disabled_if_in' source='mode_conteneur_actif'>
            <param>oui</param>
            <target type='filelist'>container_disabled</target>
        </condition>
        <check name="valid_enum" target="proxy_client_mitm_fingerprint_type">
            <param>['sha256','sha1']</param>
        </check>
        <check name="valid_enum" target="nombre_interfaces">
            <param>['1','2','3','4','5']</param>
        </check>
        <check name="valid_enum" target="vim_background">
            <param>['dark','light']</param>
        </check>

        <check name="valid_enum" target="time_zone">
            <param>["Africa/Asmara", "Africa/Cairo", "Africa/Tripoli", "America/Adak", "America/Anchorage", "America/Argentina/Buenos_Aires", "America/Argentina/Catamarca", "America/Argentina/Cordoba", "America/Argentina/Jujuy", "America/Argentina/Mendoza", "America/Cayenne", "America/Chicago", "America/Denver", "America/Detroit", "America/Edmonton", "America/Guadeloupe", "America/Halifax", "America/Havana", "America/Indianapolis", "America/Jamaica", "America/Los_Angeles", "America/Manaus", "America/Martinique", "America/Mazatlan", "America/Mexico_City", "America/Miquelon", "America/New_York", "America/Noronha", "America/Phoenix", "America/Regina", "America/Rio_Branco", "America/Santiago", "America/Sao_Paulo", "America/St_Johns", "America/Tijuana", "America/Toronto", "America/Vancouver", "America/Whitehorse", "America/Winnipeg", "Antarctica/McMurdo", "Asia/Ashgabat", "Asia/Chongqing", "Asia/Dhaka", "Asia/Ho_Chi_Minh", "Asia/Hong_Kong", "Asia/Kathmandu", "Asia/Kolkata", "Asia/Macau", "Asia/Riyadh", "Asia/Seoul", "Asia/Shanghai", "Asia/Singapore", "Asia/Taipei", "Asia/Tehran", "Asia/Tel_Aviv", "Asia/Thimphu", "Asia/Tokyo", "Asia/Ulaanbaatar", "Atlantic/Faroe", "Atlantic/Reykjavik", "Australia/Adelaide", "Australia/Brisbane", "Australia/Darwin", "Australia/Hobart", "Australia/Lord_Howe", "Australia/Melbourne", "Australia/Perth", "Australia/Sydney", "Europe/Dublin", "Europe/Helsinki", "Europe/Istanbul", "Europe/Lisbon", "Europe/London", "Europe/Moscow", "Europe/Paris", "Europe/Warsaw", "Indian/Mayotte", "Indian/Reunion", "Pacific/Auckland", "Pacific/Chatham", "Pacific/Easter", "Pacific/Gambier", "Pacific/Honolulu", "Pacific/Kwajalein", "Pacific/Noumea", "Pacific/Marquesas", "Pacific/Pago_Pago", "Pacific/Tahiti", "Pacific/Wallis"]</param>
            <!--Pacific : Apia, Auckland, Chatham, Chuuk, Easter, Efate, Enderbury, Fakaofo, Fiji, Funafuti, Galapagos, Gambier, Guadalcanal, Guam, Honolulu, Johnston, Kiritimati, Kosrae, Kwajalein, Majuro, Marquesas, Midway, Nauru, Niue, Norfolk, Pago_Pago, Palau, Pitcairn, Pohnpei, Ponape, Port_Moresby, Rarotonga, Saipan, Samoa, Tahiti, Tarawa, Tongatapu, Truk, Wake, Yap
            Liste complete : /var/lib/dpkg/info/tzdata.templates et /var/lib/dpkg/info/tzdata.config-->
            <param name="checkval">False</param>
        </check>

        <check name='valid_entier' target='vm_swappiness'>
            <param name="mini">0</param>
            <param name="maxi">100</param>
        </check>

        <check name='valid_fingerprint' target='proxy_client_mitm_fingerprint'>
            <param name="type" type="eole">proxy_client_mitm_fingerprint_type</param>
        </check>

        <condition name='disabled_if_in' source='activer_rngd'>
            <param>non</param>
            <target type='servicelist'>rngd</target>
            <target type='filelist'>rngd</target>
        </condition>

        <condition name='disabled_if_in' source='check_passwd'>
            <param>non</param>
            <target type='variable'>check_passwd_min_len_one_type</target>
            <target type='variable'>check_passwd_min_len_two_type</target>
            <target type='variable'>check_passwd_min_len_three_type</target>
            <target type='variable'>check_passwd_min_len_four_type</target>
            <target type='variable'>check_passwd_max</target>
        </condition>


        <auto name='auto_dns' target='adresse_ip_dns_du_dhcp'>
            <param type='eole' name='container_ip_dns' optional='True'>container_ip_dns</param>
            <param type='eole' name='nom_zone_eth0' optional='True'>nom_zone_eth0</param>
        </auto>

        <auto name='list_len_gt' target='test_adresse_ip_dns'>
            <param type='eole' name='param'>adresse_ip_dns</param>
            <param name='max_len'>0</param>
            <param name='match'>oui</param>
            <param name='mismatch'>non</param>
        </auto>

        <auto name='calc_multi_condition' target='test_activer_resolvconf_template'>
            <param>oui</param>
            <param name="operator">OR</param>
            <param name='condition_1' type='eole'>test_adresse_ip_dns</param>
            <param name='condition_2' type='eole' optional='True'>activer_bind</param>
            <param name='match'>oui</param>
            <param name='mismatch'>non</param>
        </auto>

        <condition name='disabled_if_in' source='test_activer_resolvconf_template'>
            <param>non</param>
            <target type='filelist'>resolvconf</target>
        </condition>


    </constraints>

    <help>
        <family name='général'>Paramètres de base du serveur</family>
        <variable name='adresse_ip_dns'>Adresse IP du serveur de nom primaire, en général celui de votre fournisseur Internet</variable>
        <variable name='nom_machine'>Nom de la machine (exemple : eolebase)</variable>
        <variable name='activer_proxy_client'>Le module EOLE doit utiliser un serveur mandataire (proxy) pour accéder à Internet</variable>
        <variable name='proxy_client_adresse'>Adresse IP ou nom de domaine du serveur proxy à utiliser par le module EOLE</variable>
        <variable name='proxy_client_port'>Port du serveur proxy à utiliser par le module EOLE</variable>
        <variable name='nom_domaine_local'>Nom de domaine privé du réseau local</variable>
        <family name='services'>Paramètres des services fournis par le serveur</family>
        <family name='firewall'>Configuration du pare-feu</family>
        <!-- systeme -->
        <family name='système'>Configuration système avancée</family>
        <variable name='bash_tmout'>Durée en secondes</variable>
        <variable name='vim_background'>Indication de la valeur de la couleur d’arrière-plan de l’éditeur Vim pour améliorer la lisibilité de la coloration syntaxique (dark et light pour une coloration adaptée à un arrière-plan sombre et clair respectivement)</variable>
        <variable name='vm_swappiness'>Le swappiness est un paramètre du noyau Linux permettant de définir avec quelle sensibilité il va écrire dans le swap si la quantité de RAM à utiliser devient trop importante</variable>
        <variable name='activer_rngd'>Le démon rngd agit comme une passerelle entre un vrai générateur de nombres aléatoires, matériel (TRNG), tel que ceux que l'on peut trouver dans les puces Intel/AMD/VIA et le pseudo-générateur de nombres aléatoires du noyau (PRNG)</variable>
        <variable name='check_passwd_min_len_one_type'>Taille minimum du mot de passe compris seulement dans une classe, 0 pour interdire (les classes de caractères sont : chiffres, lettres minuscules, lettres majuscules, et autres caractères)</variable>
        <variable name='check_passwd_min_len_two_type'>Taille minimum du mot de passe compris seulement dans deux classes, 0 pour interdire (les classes de caractères sont : chiffres, lettres minuscules, lettres majuscules, et autres caractères)</variable>
        <variable name='check_passwd_min_len_three_type'>Taille minimum du mot de passe compris seulement dans trois classes, 0 pour interdire (les classes de caractères sont : chiffres, lettres minuscules, lettres majuscules, et autres caractères)</variable>
        <variable name='check_passwd_min_len_four_type'>Taille minimum du mot de passe compris seulement dans quatre classes, 0 pour interdire (les classes de caractères sont : chiffres, lettres minuscules, lettres majuscules, et autres caractères)</variable>
        <family name='sshd'>Configuration des connexions SSH</family>
        <variable name='ssh_maxstartups'>La première valeur est le nombre de tentatives de connexions échouées tolérées. La dernière valeur est le nombre de connexions échouées maximales. La deuxième valeur fixe le pourcentage de refus aléatoire une fois le nombre de connexions tolérées atteint. Ce pourcentage de refus augmente à chaque échec supplémentaire jusqu'à ce que le nombre de connexions maximales soit atteint.</variable>
    </help>

</creole>
<!-- vim: ts=4 sw=4 expandtab
-->
