<?xml version="1.0" encoding="utf-8"?>
<creole>
    <files>
        <!--file filelist='onesinglenode' name='/etc/one/sunstone-server.conf' rm='True' mkdir='True'/-->
        <file filelist='onesinglenode' name='/etc/one/vmm_exec/vmm_exec_kvm.conf' rm='True' mkdir='True'/>
        <file filelist='onesinglenode' name='/etc/one/oned.conf' rm='True'/>
        <file filelist='onesinglenode' name='/etc/one/sched.conf' rm='True'/>
        <file filelist='onesinglenode' name='/var/lib/one/remotes/etc/vnm/OpenNebulaNetwork.conf' rm='True' mkdir='True'/>
        <file filelist='onesinglenode' name='/var/lib/one/remotes/etc/vmm/kvm/kvmrc'/>
        <file filelist='onesinglenode' name='/etc/one/auth/ldap_auth.conf'/>
        <file filelist='one_ha' name='/usr/share/eole/bastion/data/60-one' mode='755'/>

        <file filelist='onesinglenode' name='/etc/nginx/upstream.d/oned.conf' source='nginx-oned-upstream.conf' mkdir='True'/>
        <file filelist='onesinglenode' name='/etc/nginx/web.d/oned.conf' source='nginx-oned-web-d.conf' mkdir='True'/>
        <file filelist='onesinglenode' name='/etc/nginx/http.d/oned.conf' source='nginx-oned-web-d.conf' mkdir='True'/>

	<file name='/etc/eole/one_backup_env.conf'/>

        <service>opennebula</service>
        <service>opennebula-scheduler</service>

        <service_access service='one-ssh'>
            <tcpwrapper>sshd</tcpwrapper>
        </service_access>

        <service_restriction service='one-ssh'>
            <ip interface='eth0' ip_type='SymLinkOption'>adresse_ip_eth0</ip>
        </service_restriction>

        <service_access service='sunstone_xmlrpc'>
            <port port_type="SymLinkOption" service_accesslist="sunstone_xmlrpc">oned_xmlrpc_port</port>
        </service_access>

        <service_restriction service='sunstone_xmlrpc'>
            <ip interface='one_node_int_name' interface_type='SymLinkOption' ip_type='SymLinkOption'>one_nodes</ip>
            <ip interface='one_node_int_name' interface_type='SymLinkOption' ip_type='SymLinkOption'>xmlrpc_allowed_ips</ip>
        </service_restriction>
    </files>
    <variables>
        <family name='general'>
            <variable name='nom_machine' redefine='True' auto_freeze='True'/>
        </family>
        <family name='services'>
            <variable name='activer_oned' type='oui/non' description="Activer l'orchestrateur de virtualisation" mode='expert'>
                <value>oui</value>
            </variable>
        </family>
        <family name='Virtualisation' icon='cloud'>
            <variable name="one_default_configuration_eole" type="oui/non" description="Activer le paramétrage par défaut adapté aux machines virtuelles EOLE">
                <value>non</value>
            </variable>
            <variable name='one_cluster_name' type='string' description="Nom de la grappe OpenNebula par défaut" mode='expert'>
                <value>default</value>
            </variable>

            <!-- Base de donnée -->
            <variable name="one_database_type" description="Moteur de base de données a utiliser" type="string" mode="expert">
               <value>sqlite</value>
            </variable>
            <variable name="one_database_host" description="Adresse du serveur de base de données (MySQL uniquement)"  mandatory="True" mode="expert"/>
            <variable name="one_database_port" description="Port d'écoute du serveur de base de données" mode="expert" type="number" mandatory="True">
                <value>3306</value>
            </variable>
            <variable name="one_database_name" description="Nom de la base de données" type="string" mandatory="True">
                <value>onedb</value>
            </variable>
            <variable name="one_database_user" description="Utilisateur pour se connecter à la base de données" type="string" mandatory="True">
                <value>one</value>
            </variable>
            <variable name="one_database_pass" description="Mot de passe pour se connecter à la base de données" type="password" mandatory="True"/>
            <variable name="one_database_connections" description="Nombre de connection à la base de données" type="number" mandatory="True" mode="expert"><value>50</value></variable>

            <!-- VNETS -->
            <variable name='vnet_pilote' type='string'  description='Pilote utilisé pour le réseau virtuel' hidden='True' />
            <variable name='vnets'             type='string'  description="Nom du réseau virtuel à plage d'adresse IP" multi='True'/>
            <variable name='vnet_range_start'  type='ip'      description='Première IP de la plage' mandatory="True"/>
            <variable name='vnet_range_size'   type='number'  description="Nombre d'adresses disponibles" mandatory="True"/>
            <variable name='vnet_network_addr' type='network'      description='Adresse du réseau virtuel'/>
            <variable name='vnet_network_mask' type='netmask' description='Masque du réseau virtuel'/>
            <variable name='vnet_network_gw'   type='ip'      description='Passerelle du réseau virtuel'/>
            <variable name='vnet_network_dns'  type='ip'      description='Adresse du serveur DNS'/>
            <variable name='vnet_vlan_tag'     type='number'  description='Numéro du VLAN'/>
            <variable name='vnet_vlan_trunk'   type='string'  description="VLAN à transporter (trunk)" mode='expert'/>

            <variable name='l2_vnets'             type='string'  description="Nom du réseau virtuel à plage d'adresse ethernet" multi='True'/>
            <variable name='l2_vnet_first_mac'    type='string'  description='Première adresse MAC' mode='expert'/>
            <variable name='l2_vnet_size'         type='number'  description="Nombre d'adresses MAC disponibles" mandatory="True"/>
            <variable name='l2_vnet_vlan_tag'     type='number'  description='Numéro du VLAN'/>
            <variable name='l2_vnet_vlan_trunk'   type='string'  description="VLAN à transporter (trunk)" mode='expert'/>

            <variable name='one_ds_system_prefix' description="Préfixe de l'espace de stockage système" auto_freeze='True'>
                <value>system-</value>
            </variable>
            <variable name='one_ds_iso_name' description="Nom de l'espace de stockage des images ISO" auto_freeze='True'>
                <value>iso-images</value>
            </variable>
            <variable name='one_ds_image_name' description="Nom de l'espace de stockage des images disques" auto_freeze='True'>
                <value>images-disques</value>
            </variable>
            <variable name='one_disk_cache' type='oui/non' description='Activer le cache pour les images Qcow2' mode='expert'>
                <value>oui</value>
            </variable>
            <variable name='one_video_driver' type='string' description='Pilote vidéo par défaut' mode='expert'>
                <value>vga</value>
            </variable>
            <variable name='arp_cache_poisoning' type='oui/non' description="Activer la protection contre l'ARP Poisoning" mode='expert'>
                <value>non</value>
            </variable>
            <variable name='activer_hooks' type='oui/non' description="Utiliser des hooks personnalisés" mode='expert'>
                <value>non</value>
            </variable>

            <!-- HA et Multi-node -->
            <variable name='activer_one_ha' type='oui/non' description="Activer le support pour la haute disponibilité OpenNebula" mode='expert'>
                <value>non</value>
            </variable>
            <variable name='activer_multinode' description="Activer l'intégration de plusieurs nœuds de virtualisation" mode='expert' type='oui/non'/>
            <variable name='one_nodes' type='domain' description="Nom du nœud de virtualisation" multi='True' mandatory='True'/>
            <variable name="one_ha_server_index" description="Index du serveur dans la liste des nœuds de virtualisation" type="number" mandatory="True"/>
            <variable name='one_node_int' type='domain' description="Interface de communication des nœuds" mandatory='True'/>
            <variable name='one_node_int_name' type='domain' description="Nom de l'interface de communication des nœuds"/>
            <variable name="one_vip" description="Adresse IP de la VIP OpenNebula" type="ip" mandatory="True"/>
            <variable name="one_vip_mask" description="Masque de sous-réseau de la VIP OpenNebula" type="netmask" mandatory="True"/>
            <variable name="one_max_conn" description="Nombre maximum de connexion TCP simultanées maintenu avec le serveur" mode="expert" type='number'>
                <value>15</value>
            </variable>
            <variable name="one_max_conn_backlog" description="Nombre maximum de connexion TCP simultanées accepté par le système d'exploitation" mode="expert" type='number'>
                <value>15</value>
            </variable>
            <variable name="one_keepalive_timeout" description="Durée maximum d'une connexion RPC en secondes" mode="expert" type='number'>
                <value>30</value>
            </variable>
            <variable name="one_rpc_log" description="Créer un fichier séparé pour les log XML-RPC" mode="expert">
                <value>NO</value>
            </variable>
            <variable name='activer_acces_xmlrpc' type='oui/non' description="Ouvrir l'accès à l'API XMLRPC pour des IP externes ?" mode='expert'>
                <value>non</value>
            </variable>
            <variable name='oned_xmlrpc_ip' type='ip' description="Adresse IP d'écoute du service XML-RPC" mode='expert' hidden="True">
                <value>127.0.0.1</value>
            </variable>
            <variable name='oned_xmlrpc_port' type='port' description="Port d'écoute du service XML-RPC" mode='expert' hidden="True">
                <value>2633</value>
            </variable>
            <variable name='xmlrpc_allowed_ips' type='domain' description="Adresses IP/Noms DNS autorisées à utiliser l'API XMLRPC" multi='True' mode='expert'/>
        </family>

        <family name='Modèle' icon='cloud'>
            <variable name='hapy_init_master' type='oui/non' description="Activer l'auto-création du modèle de machine virtuelle pour installer un module EOLE">
                <value>non</value>
            </variable>
            <variable name='hapy_init_master_iso_versions' type='string' description="Version de l'image ISO EOLE à télécharger" multi="True" mandatory="True"/>
            <variable name='hapy_init_master_disks_size' type='number' description="Taille en giga-octets du disque dur vierge" multi="True">
                <value>40</value>
            </variable>
        </family>
        <family name='Hooks' icon='anchor'>
            <variable name='hapy_vm_hooks' type='oui/non' description="Hooks sur les machines virtuelles" mode='expert' mandatory='True'>
                 <value>non</value>
            </variable>
            <variable name='hapy_vm_hook' type='string' description="Nom du hook des machines virtuelles" multi='True' mode='expert'/>
            <variable name='hapy_vm_hook_on' type='string' description="Déclencheur (on)" mode='expert'/>
            <variable name='hapy_vm_hook_command' type='string' description="Script à déclencher (command)" mode='expert'/>
            <variable name='hapy_vm_hook_arguments' type='string' description="Arguments à passer au script (arguments)" mode='expert'/>
            <variable name='hapy_vm_hook_remote' type='oui/non' description="Exécuter sur les nœuds (remote)" mode='expert'>
                 <value>non</value>
            </variable>
            <variable name='hapy_vm_hook_state' type='string' description='État attendu en déclencheur CUSTOM (state)' mode='expert'/>
            <variable name='hapy_vm_hook_lcm_state' type='string' description='État LCM attendu en déclencheur CUSTOM (lcm_state)' mode='expert'/>

            <variable name='hapy_user_hooks' type='oui/non' description="Hooks sur les utilisateurs" mode='expert' mandatory='True'>
                 <value>non</value>
            </variable>
            <variable name='hapy_user_hook' type='string' description="Nom du hook d'utilisateur" multi='True' mode='expert'/>
            <variable name='hapy_user_hook_on' type='string' description="Déclencheur (on)" mode='expert' mandatory='True'/>
            <variable name='hapy_user_hook_command' type='string' description="Script à déclencher (command)" mode='expert' mandatory='True'/>
            <variable name='hapy_user_hook_arguments' type='string' description="Arguments à passer au script (arguments)" mode='expert'/>
        </family>
        <separators>
            <separator name="one_database_type">Configuration de la base de données</separator>
            <separator name='vnet_pilote'>Configuration des réseaux de l'orchestrateur</separator>
            <separator name='one_ds_system_prefix'>Configuration de l'orchestrateur</separator>
            <separator name='activer_one_ha'>Configuration des nœuds de virtualisation</separator>
        </separators>
    </variables>

    <constraints>
        <check name="valid_enum" target="vnet_pilote">
            <param>['openvswitch']</param>
        </check>
        <check name="valid_enum" target="one_rpc_log">
            <param>['YES', 'NO']</param>
        </check>
        <auto name='calc_multi_condition' target='activer_openvswitch'>
            <param>openvswitch</param>
            <param type="eole" name="condition_1">vnet_pilote</param>
        </auto>

        <check name="valid_enum" target="one_database_type">
            <param>['sqlite','mysql']</param>
        </check>

        <check name='valid_enum' target='one_video_driver'>
            <param>['qxl','vga','std','cirrus']</param>
            <param name='checkval'>False</param>
        </check>

        <check name='valid_regexp' target='vnet_vlan_trunk'>
            <param>^[0-9,]*$</param>
            <param name='err_msg'>un ID de VLAN ou une liste d'ID de VLAN séparée par des virgules est attendu</param>
        </check>

        <check name='valid_regexp' target='l2_vnet_vlan_trunk'>
            <param>^[0-9,]*$</param>
            <param name='err_msg'>un ID de VLAN ou une liste d'ID de VLAN séparée par des virgules est attendu</param>
        </check>

        <condition name='disabled_if_in' source='activer_oned'>
            <param>non</param>
            <target type='filelist'>onesinglenode</target>
            <target type='filelist'>one_ha</target>
            <target type='family'>Modèle</target>
            <target type='variable'>one_ds_system_prefix</target>
            <target type='variable'>one_ds_iso_name</target>
            <target type='variable'>one_ds_image_name</target>
            <target type='variable'>vnets</target>
            <target type='variable'>vnet_network_addr</target>
            <target type='variable'>vnet_network_mask</target>
            <target type='variable'>vnet_network_dns</target>
            <target type='variable'>vnet_network_gw</target>
            <target type='variable'>vnet_range_start</target>
            <target type='variable'>vnet_range_size</target>
            <target type='variable'>vnet_vlan_tag</target>
            <target type='variable'>vnet_vlan_trunk</target>
            <target type='variable'>activer_multinode</target>
            <target type='variable'>l2_vnets</target>
            <target type='variable'>l2_vnet_first_mac</target>
            <target type='variable'>l2_vnet_size</target>
            <target type='variable'>l2_vnet_vlan_tag</target>
            <target type='variable'>l2_vnet_vlan_trunk</target>
            <target type='variable'>arp_cache_poisoning</target>
        </condition>

        <condition name="disabled_if_in" source="one_database_type">
            <param>sqlite</param>
            <target type="variable">one_database_host</target>
            <target type="variable">one_database_port</target>
            <target type="variable">one_database_name</target>
            <target type="variable">one_database_user</target>
            <target type="variable">one_database_pass</target>
            <target type="variable">one_database_connections</target>
        </condition>

        <fill name='calc_val' target='activer_acces_xmlrpc'>
            <param type='eole'>activer_one_ha</param>
        </fill>

        <condition name='frozen_if_in' source='activer_one_ha'>
            <param>oui</param>
            <target type='variable'>activer_acces_xmlrpc</target>
        </condition>

        <check name="valid_enum" target="one_node_int">
            <param>['0','1','2','3','4']</param>
        </check>
        <auto name='concat' target='one_node_int_name'>
            <param>eth</param>
            <param type='eole'>one_node_int</param>
        </auto>

        <condition name='disabled_if_in' source='activer_multinode'>
            <param>non</param>
            <target type='variable'>one_nodes</target>
            <target type='variable'>one_node_int</target>
            <target type='variable'>one_node_int_name</target>
        </condition>

        <fill name='calc_val' target='activer_multinode'>
            <param type='eole' name='valeur'>activer_one_ha</param>
        </fill>

        <condition name='frozen_if_in' source='activer_one_ha'>
            <param>oui</param>
            <target type='variable'>activer_multinode</target>
        </condition>

        <condition name='disabled_if_in' source='activer_one_ha'>
            <param>non</param>
            <target type='variable'>one_ha_server_index</target>
            <target type='variable'>one_vip</target>
            <target type='variable'>one_vip_mask</target>
            <target type='filelist'>one_ha</target>
        </condition>

        <condition name='disabled_if_in' source='activer_acces_xmlrpc'>
            <param>non</param>
            <target type='variable'>xmlrpc_allowed_ips</target>
            <target type='service_accesslist'>sunstone_xmlrpc</target>
        </condition>

        <fill name='calc_val' target='xmlrpc_allowed_ips'>
            <param type='eole' name='valeur'>one_nodes</param>
        </fill>

        <fill name='calc_val' target='one_vip_mask'>
            <param type='eole' name='valeur'>adresse_netmask_eth0</param>
        </fill>

        <check name="valid_differ" target="adresse_ip_eth0">
            <param type='eole' hidden='False'>one_vip</param>
        </check>
        <check name="valid_differ" target="adresse_ip_gw">
            <param type='eole' hidden='False'>one_vip</param>
        </check>
        <check name="valid_ipnetmask" target="one_vip_mask" level="warning">
            <param type='eole'>one_vip</param>
        </check>

        <group master='vnets'>
            <slave>vnet_range_start</slave>
            <slave>vnet_range_size</slave>
            <slave>vnet_network_addr</slave>
            <slave>vnet_network_mask</slave>
            <slave>vnet_network_gw</slave>
            <slave>vnet_network_dns</slave>
            <slave>vnet_vlan_tag</slave>
            <slave>vnet_vlan_trunk</slave>
        </group>

        <group master='l2_vnets'>
            <slave>l2_vnet_first_mac</slave>
            <slave>l2_vnet_size</slave>
            <slave>l2_vnet_vlan_tag</slave>
            <slave>l2_vnet_vlan_trunk</slave>
        </group>

        <check name='valid_enum' target='vnets'>
            <param>['internet','admin','pedago','dmzpub','dmzpriv','wifi']</param>
            <param name='checkval'>False</param>
        </check>

        <check name='valid_enum' target='l2_vnets'>
            <param>['internet','admin','pedago','dmzpub','dmzpriv','wifi']</param>
            <param name='checkval'>False</param>
        </check>

        <condition name='disabled_if_in' source='activer_openvswitch'>
            <param>non</param>
            <target type='variable'>vnets</target>
            <target type='variable'>vnet_network_addr</target>
            <target type='variable'>vnet_network_dns</target>
            <target type='variable'>vnet_network_mask</target>
            <target type='variable'>vnet_network_gw</target>
            <target type='variable'>vnet_range_start</target>
            <target type='variable'>vnet_range_size</target>
            <target type='variable'>vnet_vlan_tag</target>
            <target type='variable'>vnet_vlan_trunk</target>
            <target type='variable'>l2_vnet_first_mac</target>
            <target type='variable'>l2_vnet_size</target>
            <target type='variable'>l2_vnet_vlan_tag</target>
            <target type='variable'>l2_vnet_vlan_trunk</target>
            <target type='variable'>arp_cache_poisoning</target>
        </condition>

        <condition name='disabled_if_in' source='activer_hooks'>
            <param>non</param>
            <target type='family'>Hooks</target>
        </condition>

        <check name="valid_enum" target="hapy_vm_hook_on">
            <param>['CREATE','RUNNING','SHUTDOWN','STOP','DONE','UNKNOWN','FAILED','CUSTOM']</param>
        </check>

        <condition name='disabled_if_in' source='hapy_vm_hooks'>
            <param>non</param>
            <target type='variable'>hapy_vm_hook</target>
        </condition>

        <group master='hapy_vm_hook'>
            <slave>hapy_vm_hook_on</slave>
            <slave>hapy_vm_hook_command</slave>
            <slave>hapy_vm_hook_arguments</slave>
            <slave>hapy_vm_hook_remote</slave>
            <slave>hapy_vm_hook_state</slave>
            <slave>hapy_vm_hook_lcm_state</slave>
        </group>

        <check name="valid_enum" target="hapy_user_hook_on">
            <param>['CREATE','REMOVE']</param>
        </check>

        <condition name='disabled_if_in' source='hapy_user_hooks'>
            <param>non</param>
            <target type='variable'>hapy_user_hook</target>
        </condition>

        <group master='hapy_user_hook'>
            <slave>hapy_user_hook_on</slave>
            <slave>hapy_user_hook_command</slave>
            <slave>hapy_user_hook_arguments</slave>
        </group>

        <condition name='disabled_if_in' source='hapy_init_master'>
            <param>non</param>
            <target type='variable'>hapy_init_master_iso_versions</target>
            <target type='variable'>hapy_init_master_disks_size</target>
        </condition>

        <fill name='calc_val' target='hapy_init_master_iso_versions'>
            <param type='eole' name='valeur'>eole_release</param>
        </fill>

        <auto name='calc_network' target='vnet_network_addr'>
            <param type='eole' name='ip'>vnet_range_start</param>
            <param type='eole' name='netmask'>vnet_network_mask</param>
        </auto>

        <check name="valid_in_network" target="vnet_network_gw" level="warning">
            <param type='eole'>vnet_network_addr</param>
            <param type='eole'>vnet_network_mask</param>
        </check>

        <check name="valid_differ" target="vnet_network_gw" level="warning">
            <param type='eole'>vnet_range_start</param>
        </check>

        <check name="valid_differ" target="vnet_network_dns" level="warning">
            <param type='eole'>vnet_range_start</param>
        </check>
    </constraints>

    <help>
        <variable name='arp_cache_poisoning'>Active la protection contre les attaques par empoisonnement ARP. Non compatible avec les réseaux à plage d'adresse ethernet</variable>
        <family name='Hooks'>Gestion des hooks personnalisés</family>
        <variable name='hapy_vm_hook'>Nom du hook de machine virtuelle</variable>
        <variable name='hapy_vm_hook_on'>Déclencheur du hook</variable>
        <variable name='hapy_vm_hook_command'>Script lancé par le hook</variable>
        <variable name='hapy_vm_hook_arguments'>Arguments passés au script lancé par le hook de machine virtuelle</variable>
        <variable name='hapy_vm_hook_remote'>Exécuter le script sur le nœud plutôt que sur l'orchestrateur</variable>
        <variable name='hapy_vm_hook_state'>État attendu par le hook lorsque le déclencheur est "CUSTOM"</variable>
        <variable name='hapy_vm_hook_lcm_state'>État LCM attendu par le hook lorsque le déclencheur est "CUSTOM"</variable>
        <variable name='hapy_user_hook'>Nom du hook d'utilisateur</variable>
        <variable name='hapy_user_hook_on'>Déclencheur du hook</variable>
        <variable name='hapy_user_hook_command'>Script lancé par le hook</variable>
        <variable name='hapy_user_hook_arguments'>Arguments passés au script lancé par le hook</variable>
        <family name='Modèle'>Configuration d'un modèle de machine virtuelle par défaut</family>
        <variable name='hapy_init_master'>Initialiser OpenNebula avec quelques fonctions de base : ISO EOLE, Disque dur vierge et template d'installation d'Eolebase. ATTENTION, provoque le téléchargement de l'ISO EOLE</variable>
        <variable name='hapy_init_master_iso_versions'>Version de l'ISO EOLE à télécharger lors de l'initialisation</variable>
        <variable name='vnets'>Réseau de type IPv4 (niveau 3 du modèle OSI)</variable>
        <variable name='l2_vnets'>Réseau de type ethernet (niveau 2 du modèle OSI)</variable>
        <variable name='one_ha_server_index'>Le leader à l'index 0, les followers commencent à 1</variable>
        <variable name='activer_one_ha'>Active la possibilité d'intégrer Hâpy dans une grappe de haute disponibilité OpenNebula</variable>
        <variable name="one_vip">Adresse IP virtuelle (VIP) utilisée pour joindre le "Leader" de la grappe, les usagés utiliseront cette IP pour contacter la grappe</variable>
    </help>
</creole>
