Guide rapide - Créer des fichiers HOT


Créer un fichier HOT de base

Les fichiers HOT sont basés sur le format HOT (Heat Orchestration Template).

Un fichier HOT de base peut contenir les définitions d’une seule ressource avec sa configuration. Par exemple, le fichier HOT suivant peut être utilisé pour déployer une instance Ubuntu 14.04 :

heat_template_version: 2013-05-23

description: Fichier HOT permettant de déployer une seule instance

resources:
  my_instance:
    type: OS::Nova::Server
    properties:
      key_name: my_key
      image: Ubuntu 14.04
      flavor: n1.cw.standard-1

Tous les fichiers HOT doivent contenir le paramètre heat_template_version avec la valeur 2013-05-23 (version actuelle du service d’orchestration. Même si la description est optionnelle, nous vous recommandons de mettre une explication sur ce qu’il est possible de faire avec ce fichier HOT. Si vous souhaitez intégrer une description ne tenant pas sur une ligne, vous pouvez utiliser la syntaxe permettant de faire du multiligne en YAML, par exemple :

description: > 
  Voici un exemple permettant de mettre
  une description de plusieurs lignes dans votre fichier HOT

La section ressources est obligatoire et doit contenir au moins une ressource avec ses paramètres. Dans l’exemple ci-dessus, nous avons une instance pour laquelle nous avons défini la paire de clé à utiliser, le type d’image et le type d’instance.

Les paramètres que vous utilisez pour définir votre instance doivent bien entendu être existants sur l’infrastructure Cloudwatt. Un fichier HOT est plus facilement réutilisable si vous variabilisez vos paramètres en utilisant des paramètres d’entrée (input parameters).

Utilisation des paramètres d’entrée

Les paramètres d’entrée sont définis dans la section parameters. Ils vous permettent de personnaliser votre fichier HOT lors de son déploiement. Par exemple, vous pouvez donner la possibilité de modifier la paire de clés ou le type d’image à utiliser lors de votre déploiement. Vous pourrez donc plus facilement personnaliser et modifier vos fichiers HOT avant chaque déploiement.

Dans l’exemple ci-dessous, nous allons écrire un fichier HOT permettant de déployer une instance. Mais cette fois, nous allons permettre la modification de la paire de clés, le type d’image et le type d’instances.

heat_template_version: 2013-05-23

description: Fichier HOT permettant de déployer une seule instance

parameters:
  key_name:
    type: string
    label: Paire de clé
    description: Nom de la paire de clés à utiliser avec l'instance
  image_id:
    type: string
    label: ID de l'image
    description: Image à utiliser pour déployer l'instance
  instance_type:
    type: string
    label: Type d'instance
    description: Type d'instance à utiliser

resources:
  my_instance:
    type: OS::Nova::Server
    properties:
      key_name: { get_param: key_name }
      image: { get_param: image_id }
      flavor: { get_param: instance_type }

Dans l’exemple ci-dessus, les 3 paramètres d’entrée doivent être définis durant le déploiement. Les valeurs fixes des paramètres pour les différentes ressources ont été remplacées par la fonction get_param.

Il est également possible de définir des valeurs par défaut qui seront utilisées si elles ne sont pas définies durant le déploiement. Par exemple, on peut définir d’utiliser le type d’instance n1.cw.standard-1 si aucun autre n’est spécifié au moment du déploiement :

parameters:
  instance_type:
    type: string
    label: Type d'instance
    description: Type d'instance à utiliser
    default: n1.cw.standard-1

Une autre option vous permet de cacher les valeurs d’un paramètre lorsque celui-ci est saisi lors du déploiement du fichier HOT. On utilise pour cela l’attribut hidden. Par exemple si on souhaite permettre de renseigner un mot de passe :

parameters:
  database_password:
    type: string
    label: Mot de passe de la base de données
    description: Mot de passe à utiliser pour accéder à la base de données
    hidden: true

Restreindre la saisie des valeurs

Dans un fichier HOT il est possible de restreindre les valeurs d’entées. Par exemple, vous pouvez vouloir définir un choix de types d’instances compatibles avec projet à proposer lors du déploiement. Pour cela on va utiliser le paramètre constraints :

parameters:
  instance_type:
    type: string
    label: Instance Type
    description: Type d'instance à utiliser
    constraints:
      - allow_values: [ n1.cw.standard-1, n1.cw.standard-2, n1.cw.standard-4 ]
        description: > 
          Vous devez obligatoirement utiliser les types d'instances : 
          n1.cw.standard-1, n1.cw.standard-2, n1.cw.standard-4

Le paramètre constraints permet également de définir une liste de contraintes à imposer lors de la saisie des valeurs. Par exemple, la liste de contraintes ci-dessous, spécifie le format à utiliser lors de la saisie d’un mot de passe :

parameters:
  database_password:
    type: string
    label: Mot de passe de la base de données
    description: Mot de passe à utiliser pour accéder à la base de données
    hidden: true
    constraints:
      - length: { min: 6, max: 8 }
        description: Le mot de passe doit contenir entre 6 et 8 caractères.
      - allowed_pattern: "[a-zA-Z0-9]+"
        description: Le mot de passe doit contenir uniquement des caractères alphanumériques.
      - allowed_pattern: "[A-Z]+[a-zA-Z0-9]*"
        description: Le mot de passe doit obligatoirement débuter avec une majuscule.

Vous pouvez ainsi définir plus de contraintes de ce type. Vous pourrez donc maintenir vos expressions régulières simples à maintenir et surtout définir des messages d’erreur pertinents à afficher en cas d’erreur lors de la saisie des valeurs.

Définir les paramètres de sortie

De la même manière que vous pouvez définir des paramètres d’entrées, vous pouvez également des valeurs de sortie dans vos fichiers HOT. Vous souhaitez sans doute pouvoir définir des informations à la fin de votre déploiement. Par exemple, vous pourriez afficher l’adresse IP de l’instance de que vous venez déployer en utilisant les exemples ci-dessus :

outputs:
  instance_ip:
    description: Adresse IP de l'instance déployée
    value: { get_attr: [my_instance, first_address] }

Les valeurs affichées seront celles qui sont définies dans la fonction get_attr. L’exemple ci-dessus permet de récupérer le nom de l’instance et son adresse IP.