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

<creole>
    <files>
        <file filelist='h_dispo' name='/etc/logrotate.d/haute_dispo' source='haute_dispo.logrotate' rm='True'/>
        <file filelist='h_dispo' name='/etc/corosync/corosync.conf'/>
        <file name='/etc/default/corosync'/>
        <file name='/etc/default/pacemaker'/>
        <file filelist='h_dispo' name='/etc/rsyslog.d/eole-traps/haute-dispo.conf' source='rsyslog_traps_haute-dispo.conf' mkdir="True"/>
        <service_access service='corosync'>
            <port protocol='udp' port_type="SymLinkOption">corosync_mcastport</port>
        </service_access>
        <service_restriction service='corosync'>
            <ip service_restrictionlist='h_dispo' interface='corosync_restricted_int' interface_type='SymLinkOption' netmask='0.0.0.0'>0.0.0.0</ip>
        </service_restriction>
    </files>

    <variables>
        <family name='services'>
            <variable name='activer_haute_dispo' type='string' description="Activer la haute disponibilité" >
                <value>non</value>
            </variable>
        </family>

        <family name='haute-dispo' icon='bar-chart'>
            <variable name='corosync_dial_if' type='string' description="Interface de dialogue inter nœud" mandatory='True' />
            <variable name='corosync_restricted_int' type='string' description="corosync_dial_if avec eth"/>
            <variable name='corosync_mcastaddr' type='ip' description="Adresse multicast pour le dialogue inter nœud" mode='expert' mandatory='True'>
                <value>226.94.1.1</value>
            </variable>
            <variable name='corosync_mcastport' type='string' description="Port UDP pour le dialogue inter nœud" mode='expert' mandatory='True' >
                <value>5405</value>
            </variable>
            <variable name='nom_machine_maitre' type='string' description="Nom de machine du nœud maitre" mandatory='True' />
            <variable name='ip_machine_maitre' type='ip' description="Adresse IP du nœud maitre sur l'interface de dialogue inter nœud" mandatory='True' />
            <variable name='nom_machine_esclave' type='string' description="Nom de machine du nœud esclave" mandatory='True' />
            <variable name='ip_machine_esclave' type='ip' description="Adresse IP du nœud esclave sur l'interface de dialogue inter nœud" mandatory='True' />
            <variable name='activer_mail_ha' type='oui/non' description="Activer l'envoi d'un courrier électronique lors d'une bascule de nœud">
                <value>non</value>
            </variable>
            <variable name='mail_ha_resource_name' type='string' description="Nom de la ressource mail" hidden='True' mandatory='True'>
                <value>mail_admin</value>
            </variable>
            <variable name='to_mail_ha' type='string' description="Destinataire du courrier électronique" mandatory='True' />
            <variable name='subject_mail_ha' type='string' description="Sujet du courrier électronique">
                <value>Haute dispo - bascule de nœud</value>
            </variable>
            <variable name='vip_resource_name' type='string' description="Nom de la ressource" multi='True' mandatory='True' />
            <variable name='vip_resource_if' type='string' description="Interface de l'adresse IP redondée (VIP)" mandatory='True' />
            <variable name='vip_resource_adresseip' type='ip' description="Adresse IP redondée (VIP)" mandatory='True' />
            <variable name='vip_resource_netmask' type='netmask' description="Masque de sous réseau de l'adresse IP redondée (VIP)" mandatory='True' />
            <variable name='vip_resource_gw' type='ip' description="Passerelle de l'adresse IP redondée (VIP)" hidden='True' />
            <variable name='vip_resource_location' type='string' description="Nœud préféré pour cette ressource" mandatory='True' />
            <variable name='activer_service_resource' type='oui/non' description="Déclarer des ressources de type service">
                <value>non</value>
            </variable>
            <variable name='service_resource_name' type='string' description="Nom de la ressource" multi='True' mandatory='True' />
            <variable name='service_resource_script' type='string' description="Service à superviser" mandatory='True' />
            <variable name='service_resource_location' type='string' description="Nœud préféré pour ce service" mandatory='True'>
                <value>maitre</value>
            </variable>
            <variable name='service_resource_interval' type='number' description="Intervalle de vérification (en secondes)" mode='expert' mandatory='True'>
                <value>10</value>
            </variable>
            <variable name='service_resource_timeout' type='number' description="Délai d'attente avant échec de la vérification (en secondes)" mode='expert' mandatory='True'>
                <value>30</value>
            </variable>
            <variable name='service_resource_startdelay' type='number' description="Délai d'attente au lancement avant supervision (en secondes)" mode='expert' mandatory='True'>
                <value>15</value>
            </variable>
            <variable name='pingd_resource_name' type='string' description="Nom de la ressource" />
            <variable name='pingd_resource_adresseip' type='ip' description="Adresse IP à tester (doit répondre au ping)" multi='True' />
            <variable name='synchro_fichiers' type='string' description="Fichier ou répertoire à synchroniser sur le nœud distant" multi='True' />
        </family>

        <separators>
<!--            <separator name='dyn_route'>Paramètres de routage</separator> -->
            <separator name='corosync_dial_if'>Paramètrage de corosync</separator>
            <separator name='vip_resource_name'>Ressources de type IP Virtuelle</separator>
            <separator name='activer_service_resource'>Ressources de type Service</separator>
            <separator name='pingd_resource_name'>Ressources de type Ping</separator>
            <separator name='synchro_fichiers'>Synchronisation des fichiers de configuration sur le nœud distant</separator>
        </separators>
    </variables>

    <constraints>
        <!-- **** Listes deroulantes **** -->
        <check name="valid_enum" target='activer_haute_dispo'>
            <param>['non','maitre','esclave']</param>
        </check>
        <check name="valid_enum" target="corosync_dial_if">
            <param>['0','1','2','3','4']</param>
        </check>
        <check name="valid_enum" target="vip_resource_if">
            <param>['0','1','2','3','4']</param>
        </check>
        <check name="valid_enum" target='vip_resource_location'>
            <param>['maitre', 'esclave', 'LB']</param>
        </check>
        <check name="valid_enum" target='service_resource_location'>
            <param>['maitre', 'esclave', 'LB']</param>
        </check>

        <!-- *** Groupes de variables **** -->
        <group master='vip_resource_name'>
            <slave>vip_resource_if</slave>
            <slave>vip_resource_adresseip</slave>
            <slave>vip_resource_netmask</slave>
            <slave>vip_resource_gw</slave>
            <slave>vip_resource_location</slave>
        </group>

        <group master='service_resource_name'>
            <slave>service_resource_script</slave>
            <slave>service_resource_location</slave>
            <slave>service_resource_interval</slave>
            <slave>service_resource_timeout</slave>
            <slave>service_resource_startdelay</slave>
        </group>

        <!-- **** Conditions **** -->
        <condition name='disabled_if_in' source='activer_mail_ha'>
            <param>non</param>
            <target type='variable'>mail_ha_resource_name</target>
            <target type='variable'>to_mail_ha</target>
            <target type='variable'>subject_mail_ha</target>
        </condition>
        <condition name='disabled_if_in' source='activer_haute_dispo'>
            <param>non</param>
            <param>esclave</param>
            <target type='variable'>nom_machine_esclave</target>
            <target type='variable'>ip_machine_esclave</target>
            <target type='variable'>activer_mail_ha</target>
            <target type='variable'>vip_resource_name</target>
            <target type='variable'>vip_resource_if</target>
            <target type='variable'>vip_resource_adresseip</target>
            <target type='variable'>vip_resource_netmask</target>
            <target type='variable'>vip_resource_gw</target>
            <target type='variable'>vip_resource_location</target>
            <target type='variable'>activer_service_resource</target>
            <target type='variable'>service_resource_name</target>
            <target type='variable'>service_resource_script</target>
            <target type='variable'>service_resource_location</target>
            <target type='variable'>service_resource_interval</target>
            <target type='variable'>service_resource_timeout</target>
            <target type='variable'>service_resource_startdelay</target>
            <target type='variable'>pingd_resource_name</target>
            <target type='variable'>pingd_resource_adresseip</target>
        </condition>
        <condition name='disabled_if_in' source='activer_haute_dispo'>
            <param>non</param>
            <param>maitre</param>
            <target type='variable'>nom_machine_maitre</target>
            <target type='variable'>ip_machine_maitre</target>
        </condition>
        <condition name='disabled_if_in' source='activer_haute_dispo'>
            <param>non</param>
            <target type='filelist'>h_dispo</target>
            <target type='service_restrictionlist'>h_dispo</target>
            <target type='family'>haute-dispo</target>
        </condition>
        <condition name='disabled_if_in' source='activer_service_resource'>
            <param>non</param>
            <target type='variable'>service_resource_name</target>
            <target type='variable'>service_resource_script</target>
            <target type='variable'>service_resource_location</target>
            <target type='variable'>service_resource_interval</target>
            <target type='variable'>service_resource_timeout</target>
            <target type='variable'>service_resource_startdelay</target>
        </condition>

        <!-- **** Remplissage fill **** -->
        <fill name='calc_val' target='to_mail_ha'>
            <param type='eole' name='valeur'>system_mail_to</param>
        </fill>
        <fill name='calc_val' target='pingd_resource_name'>
            <param>gw_pingd</param>
        </fill>
        <fill name='calc_val' target='pingd_resource_adresseip'>
            <param type='eole' name='valeur'>adresse_ip_gw</param>
        </fill>
        <auto name='calc_if_in_network' target='vip_resource_gw'>
            <param type='eole' name='ip_addr1'>adresse_ip_gw</param>
            <param type='eole' name='netmask1'>adresse_netmask_eth0</param>
            <param type='eole' name='ip_addr2'>vip_resource_adresseip</param>
            <param type='eole' name='netmask2'>vip_resource_netmask</param>
        </auto>
        <auto name='concat' target='corosync_restricted_int'>
            <param>eth</param>
            <param type='eole'>corosync_dial_if</param>
        </auto>

    </constraints>

    <help>
        <variable name='activer_haute_dispo'>L'activation de la haute-disponibilité permet mettre en oeuvre un cluster de deux machines</variable>
        <family name='haute-dispo'>Configuration de la haute-disponibilité et des ressources du cluster</family>
        <variable name='corosync_dial_if'>Interface de dialogue entre les nœuds du cluster. Préférer une connexion directe</variable>
        <variable name='corosync_mcastaddr'>Adresse IP multicast pour le dialogue du cluster</variable>
        <variable name='corosync_mcastport'>Port UDP pour le dialogue multicast du cluster</variable>
        <variable name='nom_machine_maitre'>Nom de machine du nœud maître</variable>
        <variable name='ip_machine_maitre'>Adresse IP du nœud maître sur l'interface de dialogue inter nœud</variable>
        <variable name='nom_machine_esclave'>Nom de machine du nœud esclave</variable>
        <variable name='ip_machine_esclave'>Adresse IP du nœud esclave sur l'interface de dialogue inter nœud</variable>
        <variable name='activer_mail_ha'>Activer l'envoi d'un courrier électronique lors d'une bascule de nœud</variable>
        <variable name='mail_ha_resource_name'>Nom de la ressource pacemaker pour l'envoi de mail lors d'évènements sur le cluster</variable>
        <variable name='to_mail_ha'>Destinataire des mail envoyés lors d'évènements sur le cluster</variable>
        <variable name='subject_mail_ha'>Sujet des mail envoyés lors d'évènements sur le cluster</variable>
        <variable name='vip_resource_name'>Nom de la ressource pacemaker de type adresse IP virtuelle</variable>
        <variable name='vip_resource_if'>Interface sur laquelle sera positionnée l'adresse IP virtuelle</variable>
        <variable name='vip_resource_adresseip'>Adresse IP virtuelle de la ressource</variable>
        <variable name='vip_resource_netmask'>Masque de sous réseau de l'adresse IP virtuelle</variable>
        <variable name='vip_resource_location'>Préférence de nœud de la ressource : maitre, esclave ou Load Balancing</variable>
        <variable name='activer_service_resource'>Déclarer des resources pacemaker de type service</variable>
        <variable name='service_resource_name'>Nom de la ressource pacemaker de type service</variable>
        <variable name='service_resource_script'>Nom du service à superviser (system V ou systemd).</variable>
        <variable name='service_resource_location'>Préférence de nœud de la ressource : maitre, esclave ou Load Balancing</variable>
        <variable name='service_resource_interval'>Intervalle de vérification de l'état du service en secondes</variable>
        <variable name='service_resource_timeout'>Timeout au bout duquel le service sera considérée en erreur</variable>
        <variable name='service_resource_startdelay'>Délai avant de contrôler l'état du service. Cela lui laisse le temps de démarrer.</variable>
        <variable name='pingd_resource_name'>Nom de la ressource de type pingd</variable>
        <variable name='pingd_resource_adresseip'>Adresse(s) IP à pinguer. En cas d'impossibilité, les ressources basculent sur l'autre nœud.</variable>
        <variable name='synchro_fichiers'>Liste de fichiers et répertoires à synchroniser sur le nœud distant par le script synchro-nodes.sh</variable>
    </help>

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