rougail/doc/service/file.md
2021-02-12 18:08:28 +01:00

4.4 KiB

La gestion d'un fichier

La balise file

La gestion des fichiers se fait dans un conteneur de service.

La déclaration du fichier met de générer un fichier à partir d'un template pour le déposer à l'endroit prévu dans la déclaration de cette élément.

Il est nécessaire, au minimum, de spécifier le chemin complet du fichier :

<services>
    <service name="squid">
        <file name="/etc/squid/squid.conf"/>
    </service>
</services>

Dans ce cas, le nom du template est déduit du nom du fichier, ici ca sera "squid.conf".

Si le template a un nom différent (par exemple si plusieurs template se retrouve avec le même nom), il est possible de changer le nom du template avec l'attribut source :

<file name="/etc/squid/squid.conf" source="template-squid.conf"/>

Les noms de fichiers dynamique

Il est possible également de définir le nom du fichier dans une variable :

<services>
    <service name="squid">
        <file name="my_variable" file_type="variable" source="squid.conf"/>
    </service>
</services>
<variables>
    <variable name="my_variable">
        <value>/etc/squid/squid.conf</value>
    </variable>
</variables>

Dans le cas des fichiers dynamique, la source est obligatoire.

Et même de définir une variable de type multiple, ce qui génèrera plusiers fichiers :

<services>
    <service name="squid">
        <file name="my_variable" file_type="variable" source="squid.conf"/>
    </service>
</services>
<variables>
    <variable name="my_variable" multi="True">
        <value>/etc/squid1/squid.conf</value>
        <value>/etc/squid2/squid.conf</value>
    </variable>
</variables>

Dans ce cas là, le fichier source est identique mais les fichiers de destination seront différent.

Il peut être important de personnaliser le contenu du fichier suivant le fichier de destination. Dans ce cas il y a deux possibilités :

  • la variable "rougail_filename" contient le nom de fichier de destination
  • l'utilisateur de l'attribut "variable"

En effet, il est possible de passer le contenu d'une variable au template :

<services>
    <service name="squid">
        <file name="my_variable1" file_type="variable" source="squid.conf" variable="my_variable2"/>
    </service>
</services>
<variables>
    <variable name="my_variable1" multi="True">
        <value>/etc/squid1/squid.conf</value>
        <value>/etc/squid2/squid.conf</value>
    </variable>
    <variable name="my_variable2" multi="True">
        <value>squid1</value>
        <value>squid2</value>
    </variable>
</variables>

Dans ce cas, lors de la génération du fichier /etc/squid1/squid.conf on retrouvera la variable "rougail_variable" avec la valeur "squid1" et le fichier /etc/squid2/squid.conf on retrouvera la variable "rougail_variable" avec la valeur "squid2".

Attention : les deux variables "my_variable1" et "my_variable2" doivent être multiple et de même longueur.

Les droits des fichiers

Par défaut les droits du fichier généré sont "0644" avec comme utilisateur "root" et groupe "root".

<file name="/etc/squid/squid.conf" mode="0640" owner="nobody" group="squid"/>

Désactiver la génération d'un fichier

Il est possible de définir une condition de type "disabled_if_in" ou "disabled_if_not_in" sur une balise fichier :

<services>
    <service name="test">
        <file name="/etc/squid/squid.conf" filelist="squid"/>
    </service>
</services>
<variables>
    <family name="general">
        <variable name="condition" type="boolean"/>
    </family>
</variables>
<constraints>
    <condition name="disabled_if_in" source="condition">
        <param>False</param>
        <target type="filelist">squid</target>
    </condition>
</constraints>

Dans ce cas, tous les fichiers avec un attribut filelist à "squid" seront désactivé si la variable "condition" est False.

Redéfinir une fichier

Il est possible de redéfinir les éléments d'un fichier dans un dictionnaire différent en utilisant l'attribut redefine :

<file name="/etc/squid/squid.conf" source="template-squid.conf" redefine="True"/>

Choix du moteur de templating

Par défaut, le moteur de templating est le moteur de templating compatible avec "creole".

Aujourd'hui il est possible de désactiver la templatisation du fichier (il sera alors uniquement copié) :

<file name="/etc/squid/squid.conf" templating="none"/>