Ce rôle est chargé de gérer les enregistrements de domaine.

Tags internes

  • packages : Installation et configuration des packages ;
  • domain : Gestion des enregistrements ;

Traitements spécifiques du jeu de tâches

Le jeu de tâche construit la liste des domaines depuis les informations des autres tâches et la variable managed_domains pour la mettre dans domains.

En plus de fournir les API, la configuration du jeu de tâche fourni les variables disponibles pour tous les inventaires :

Variable Type Description
domain_api_providers Dictionnaire de provider Informations d’authentification aux API des fournisseurs
domain_providers Dictionnaire Association entre les zones et les founisseurs pour la détermination automatique du fournisseur

Le jeu de tâche défini ces variables pour l’usage dans managed_domains :

Variable Type Description
target_hostname FQDN Nom de l’hôte utilisé pour les enregistrement CNAME – Calculé depuis le premier défini parmis hostoverride, ansible_host et inventory_hostname
target_ipv4 IPv4 Adresse IPv4 pour les enregistrements A – Utilise ipv4override ou calcul depuis ansible_all_ipv4_addresses
target_ipv6 IPv6 Adresse IPv6 pour les enregistrements AAAA – Utilise ipv6override ou calcul depuis ansible_all_ipv6_addresses

Et ces variables sont utilisables pour les surcharger, dans l’ordre :

Variable Type Description
hostoverride FQDN Nom d’hôte à utiliser pour les enregistrement CNAME
ipv4override IPv4 Adresse IPv4 pour les enregistrements A
ipv6override IPv6 Adresse IPv6 pour les enregistrements AAAA

Variables à fournir

Variable Type Requis Défaut Description
domain_api_providers Dictionnaire de provider Oui Dictionnaire vide Informations d’authentification aux API des fournisseurs
domains Liste de domain Oui Liste vide Information des domaines à mettre en place
domain_pause Booléen Non Faux Indique si l’on souhaite une pause de 60 secondes après la mise à jour des domaines en cas d’usage de reverse juste après

Type provider

Propriété Type Requis Défaut Description
type Identifiant Oui Fournisseur d’API à utiliser.

La propriété type indique le sous-type de l’objet.

Sous-type ovh

Propriété Type Requis Défaut Description
endpoint Chaîne Non Point de terminaison
application_key Chaîne Non Clé de l’application
application_secret Chaîne Non Secret de l’application
consumer_key Chaîne Non Clé du consommateur

Aucune ou toutes les propriétés doivent être utilisées. Dans le cas ou aucune des propriétés est utilisé, le fichier ovh.ini configuré est utilisé.

Sous-type gandi

Propriété Type Requis Défaut Description
endpoint URL Oui Point de terminaison
apikey Chaîne Oui Clé API de l’utilisateur

Type domain

Propriété Type Requis Défaut Description
provider Identifiant Oui Nom du fournisseur dans domain_api_providers
domain Chaîne Oui Nom de la zone gérée
name Chaîne Oui Nom de domain sans le nom de la zone
ttl Entier Non Non défini Durée de vie de l’enregistrement
rrtype Identifiant Oui Type d’enregistrement DNS
value Chaîne Oui si state != ‘absent’ Non définie Valeur de l’enregistrement
state Énumération Non ‘present’ État de l’enregistrement souhaité

L’unicité d’un enregistrement est effectué sur : name, rrtype et value.

Les valeurs valides pour state sont:

  • present: L’enregistrement existe dans la zone avec les paramètres indiqués.
  • only: L’enregistrement existe et est le seul de son type. Les autres enregistrements du même type sont supprimés. Le reste est comme present.
  • absent: L’enregistrement n’existe pas. Si la valeur n’est pas spécifiée, tous les enregistrement de ce type sont supprimés.

Initialisation d’une clé OVH

Le point d’entrée est ovh-eu.

  1. Créer une application avec https://eu.api.ovh.com/createApp/ ;
  2. Créer un jeton d’authentification avec la commande suivante ;
curl -XPOST -H"X-Ovh-Application: YourApplicationKey" -H "Content-type: application/json" https://eu.api.ovh.com/1.0/auth/credential -d '{ "accessRules": [ { "method": "GET", "path": "/domain/zone/*" }, { "method": "POST", "path": "/domain/zone/*" }, { "method": "PUT", "path": "/domain/zone/*" }, { "method": "DELETE", "path": "/domain/zone/*" } ] }'
  1. Récupérer la valeur de consumerKey dans le résultat ;
  2. Accéder à l’URL validationUrl indiquée dans le résultat ;
    1. Indiquer les informations d’accès ;
    2. Choisir la validité non limitée ;

Récupération de la clé Gandi

  1. Se connecter à l’espace client https://admin.gandi.net ;
  2. Aller dans « Paramètres » ;
  3. Aller dans « Gérer le compte… » ;
  4. Aller dans « Sécurité » ;
  5. Récupérer la clé d’API ;

Ou demander la clé à un collaborateur si déjà générée.

Conversion Vhost en Domain

Détail de la conversion des champs de Virtual Host en champs de Domain.

Règles générales

Type vhost_base vers domain.

Propriété Application Type source Source Détails
provider Calculé vhost_name / vhost_aliases Le fournisseur est déterminé en fonction du nom de domaine
domain Calculé vhost_name / vhost_aliases Partie du nom de domaine ayant permis de trouver le fournisseur
name Calculé vhost_name / vhost_aliases Partie du nom de domaine restante après retrait de la partie déléguée
rrtype Calculé Voir détails ci-après
value Calculé Voir détails ci-après
state Calculé Voir détails ci-après

Notes :

  • Lorsqu’aucun fournisseur n’est trouvé pour le domaine, aucune équivalence n’est créé.
  • Si la propriété domain_ignore est présente et à Vrai, alors l’entrée n’est pas traitée.

Règles particulières

Un vhost peut engendrer la création de plusieurs entrées de domaine. Voir, même aucune. Le nom principal du vhost ainsi que ses alias sont pris en compte.

Les propriétés suivantes optionnelles sont aussi prises en compte :

Propriété Type Défaut Description
domains_by_ip Liste de FQDN Vide Liste des domaines pour lesquels il faut créer une association par adresse IP et non par nom canonique

Un nom tombe dans l’une de ces trois conditions, évaluées dans l’ordre :

  • Le nom de domaine n’est pas pris en charge par un fournisseur, le nom est ignoré ;
  • Le nom de domaine est pris en charge les conditions ci-après sont vrais. Un enregistrement de type nom canonique est créé, décris après la liste ;
    • Le nom de domaine n’est pas celui de la machine ;
    • Le nom de domaine n’est pas celui de la zone ;
    • Le nom de domaine est absent de la liste domains_by_ip de l’hôte ;
  • Le nom de domaine est pris en charge et au moins une condition de l’entrée précédente est fausse. Un ou plusieurs enregistrements d’adresses sont créés, décris après la liste ;

Enregistrement de type nom canonique :

  • rrtype: CNAME ;
  • value: valeur de target_hostname ;
  • state: only

Enregistrements de type adresse :

  • rrtype: A pour v4 et AAAA pour v6 ;
  • value: l’adresse IP ou absente si elle n’est pas disponible, venant de target_ipv4 et target_ipv6 ;
  • state: only si l’adresse est présente sinon absent ;

Autres rôles

Les vhosts mis en place par les rôles suivants sont aussi pris en compte :

Rôle vhost_name vhost_aliases domain_ignore domains_by_ip
GitLab gitlab.vhost.name gitlab.vhost.domain_ignore gitlab.vhost.domains_by_ip
GitLab Omnibus gitlab_omnibus.vhost.name gitlab_omnibus.vhost.domain_ignore gitlab_omnibus.vhost.domains_by_ip
Redmine redmine.vhost redmine.vhost_aliases redmine.domain_ignore redmine.domains_by_ip
Subversion subversion.admin.vhost subversion.admin.domain_ignore subversion.admin.domains_by_ip
subversion.repositories.vhost subversion.repositories.domain_ignore subversion.repositories.domains_by_ip