# Configuration liée

Une configuration liée est un ensemble d'élément partagé entre deux serveurs différents.

## Lier un client à un serveur

```
<check name="set_linked">
  <param name="linked_provider">clients</param>
  <param name="linked_value" type="variable">service_variable</param>
  <target>service_variable_2</target>
</check>
```

## Lier un client à un serveur avec un nom d'utilisateur issu du nom de domaine

Il faut commencer de créer une variable côté serveur :

```
<variable name="remotes" description="All clients" type="domainname" multi="True" provider="clients"/>
```

Le nom d'utilisateur sera ici le nom de domaine du serveur avec l'application de la fonction 'normalize_family'.

Pour lier deux configurations il faut créer deux variables côté client :

```
<variable name='service_server_address' type='domainname' description="Nom DNS du serveur" mandatory='True'/>
<variable name='service_remote_user' type='string' description="Remote username" mandatory='True' hidden="True"/>
```

Enfin il faut lier les deux configurations :

```
<fill name="set_linked">
  <param name="linked_server" type="variable">service_server_address</param>
  <param name="linked_provider">clients</param>
  <param name="linked_value" type="information">server_name</param>
  <target>service_remote_user</target>
</fill>
```

Ainsi, lorsque l'utilisateur renseignera la variable "service_server_address", cette valeur sera ajouter à la variable "remotes" du serveur.
En retour la variable "service_remote_user" aura comme valeur "normalize_family(service_server_address)".

## Lier un client unique à un serveur avec un nom d'utilisateur calculé sur le serveur

Il faut commencer de créer les variables côté serveur :

```
<variables>
  <variable name="remote" description="The client" type="domainname" provider="client"/>
  <variable name="username" hidden="True" provider="client_name"/>
</variables>
<constraints>
  <fill name="gen_user_name">
    <target>username</target>
  </fill>
</constraints>
```

Côté client :

```
<variable name='service_server_address' type='domainname' description="Nom DNS du serveur" mandatory='True'/>
<variable name='service_remote_user' type='string' description="Remote username" mandatory='True' hidden="True"/>
```

```
<fill name="set_linked">
  <param name="linked_server" type="variable">service_server_address</param>
  <param name="linked_provider">clients</param>
  <param name="linked_value" type="information">server_name</param>
  <param name="linked_returns">client_name</param>
  <target>service_remote_user</target>
</fill>
```

Ainsi, lorsque l'utilisateur renseignera la variable "service_server_address", cette valeur sera la variable "remote" du serveur.
Un nom d'utilisateur sera alors généré côté serveur, la valeur de ce nom sera retourner au client comme valeur de 'service_remote_user'.

## Lier plusieurs clients à un serveur avec un nom d'utilisateur calculé sur le serveur

Il faut commencer de créer les variables côté serveur :

```
<variables>
  <variable name="remotes" description="All clients" type="domainname" multi="True" provider="clients"/>
  <family name="remote_" description="Compte pour " dynamic="remotes">
    <variable name="username_" hidden="True" provider="client_name"/>
  </family>
</variables>
<constraints>
  <fill name="gen_user_name">
    <target>username_</target>
  </fill>
</constraints>
```

Côté client :

```
<variable name='service_server_address' type='domainname' description="Nom DNS du serveur" mandatory='True'/>
<variable name='service_remote_user' type='string' description="Remote username" mandatory='True' hidden="True"/>
```

```
<fill name="set_linked">
  <param name="linked_server" type="variable">service_server_address</param>
  <param name="linked_provider">clients</param>
  <param name="linked_value" type="information">server_name</param>
  <param name="linked_returns">client_name</param>
  <param name="dynamic" type="information">server_name</param>
  <target>service_remote_user</target>
</fill>
```

Ainsi, lorsque l'utilisateur renseignera la variable "service_server_address", cette valeur sera ajouter à la variable "remotes" du serveur.
Un nom d'utilisateur sera alors généré côté serveur, la valeur de ce nom sera retourner au client comme valeur de 'service_remote_user'.

## Caculer une variable d'un client par rapport à la valeur d'un serveur

Il faut commencer de créer une nouvelle variables côté serveur par exemple dans une famille dynamique :

```
<variables>
  <family name="remote_" description="Compte pour " dynamic="remotes">
    <variable name="password_" description="Password " auto_save="True" hidden="True" type="password" provider="client_password"/>
  </family>
</variables>
<constraints>
  <fill name="gen_password">
    <target>password_</target>
  </fill>
</constraints>
```

Côté client on veut récupérer ce mot de passe dans une variable :

```
<variable name='service_remote_user_password' type='password' description="Remote password" mandatory='True' hidden="True"/>
```

Et calculer cette valeur :

```
<fill name="get_linked_configuration">
  <param name="linked_server" type="variable">service_server_address</param>
  <param name="linked_provider">client_password</param>
  <param name="dynamic" type="variable">service_remote_user</param>
  <target>service_remote_user_password</target>
</fill>
```

## Propoger la valeur d'une variable d'un client vers un serveur

```
<check name="set_linked_configuration">
  <param name="linked_server" type="variable">service_server_address</param>
  <param name="linked_provider">client_var</param>
  <param name="dynamic" type="variable">service_remote_user</param>
  <target>service_variable</target>
</check>
```

## Propoger la valeur d'une variable d'un client vers un variable esclave du serveur

```
<check name="set_linked_configuration">
  <param name="linked_server" type="variable">service_server_address</param>
  <param name="leader_provider">client_var</param>
  <param name="leader_value" type="variable">service_variable</param>
  <param name="linked_provider">slave</param>
  <param name="dynamic" type="variable">service_server_address</param>
  <target>service_variable_2</target>
</check>
```
