Aller au contenu

Le langage de modélisation HOT (Heat Orchestration Template)#


Introduction au langage HOT#

  • Heat Orchestration Template (HOT) : format YAML pour décrire les ressources et les configurations
  • HOT facilite la gestion et l'automatisation des déploiements d'infrastructure
  • Compatible avec les autres services OpenStack
  • Utilisation de la CLI Heat pour déployer et gérer les templates

Structure d'un template HOT#

  • En-tête avec la version du template et description (optionnelle)
  • Section "resources" pour décrire les ressources
  • Section "outputs" pour définir les sorties (optionnelle)
  • Section "parameters" pour définir les paramètres d'entrée (optionnelle)

En-tête#

  • La première ligne spécifie la version du langage à utiliser dans le template.
  • La description est optionnelle et fournit des informations sur le but du template.
heat_template_version: 2018-03-02
description: Deploy a simple web server

Section "resources"#

  • Décrit les ressources
  • Liste des ressources à déployer, avec leurs types, noms et propriétés.
resources:
  my_instance:
    type: OS::Nova::Server
    properties:
      image: "Ubuntu 18.04"
      flavor: "m1.small"

Section "outputs"#

  • Définit les sorties (optionnelle)
  • Les sorties fournissent des informations sur les ressources déployées (ex: adresses IP, URL).
outputs:
  instance_ip:
    description: The IP address of the deployed instance
    value: { get_attr: [my_instance, first_address] }

Section "parameters"#

  • Définit les paramètres d'entrée (optionnelle) :
  • Les paramètres permettent de personnaliser le déploiement (ex: choix de l'image, de la taille de l'instance).
parameters:
  image_name:
    type: string
    default: "Ubuntu 18.04"
    description: Name of the image to use for the instance

Exemple complet#

heat_template_version: 2018-03-02
description: Deploy a simple web server

parameters:
  image_name:
    type: string
    default: "Ubuntu 18.04"
    description: Name of the image to use for the instance

resources:
  my_instance:
    type: OS::Nova::Server
    properties:
      image: { get_param: image_name }
      flavor: "m1.small"

outputs:
  instance_ip:
    description: The IP address of the deployed instance
    value: { get_attr: [my_instance, first_address] }

Ressources, propriétés et attributs#

  • Ressources : éléments d'infrastructure déployés par Heat (ex: instances, réseaux)
  • Propriétés : spécifications et configurations des ressources
  • Attributs : informations dynamiques sur les ressources, accessibles après déploiement
  • Liste complète des ressources et propriétés dans la documentation OpenStack

Fonctions intrinsèques#

  • Fonctions pour manipuler et traiter les données du template
  • Elles facilitent la gestion des ressources, des attributs et des paramètres dans un template HOT.
  • Exemples : get_attr, get_param, get_resource, ref
  • Permettent d'éviter la duplication de code et de simplifier la maintenance
  • Documentation complète des fonctions intrinsèques dans la documentation OpenStack

📘 OpenStack Documentation: Fonctions intrinsèques


get_attr#

  • Utilisée pour récupérer la valeur d'un attribut d'une ressource
  • Syntaxe : { get_attr: [ resource_name, attribute_name ] }
  • Exemple :
resources:
  my_instance:
    type: OS::Nova::Server
    properties:
      ...

outputs:
  instance_ip:
    description: The IP address of the instance
    value: { get_attr: [ my_instance, first_address ] }

get_param#

  • Utilisée pour récupérer la valeur d'un paramètre d'entrée du template
  • Syntaxe : { get_param: parameter_name }
  • Exemple :
parameters:
  image_id:
    type: string
    description: ID of the image to use for the instance

resources:
  my_instance:
    type: OS::Nova::Server
    properties:
      image: { get_param: image_id }
      ...

get_resource#

  • Utilisée pour récupérer le nom d'une ressource
  • Syntaxe : { get_resource: resource_name }
  • Exemple :
resources:
  my_instance:
    type: OS::Nova::Server
    properties:
      ...

  my_volume:
    type: OS::Cinder::Volume
    properties:
      ...

  my_volume_attachment:
    type: OS::Cinder::VolumeAttachment
    properties:
      instance_uuid: { get_resource: my_instance }
      volume_id: { get_resource: my_volume }

ref#

  • Utilisée pour référencer une ressource, généralement pour récupérer son ID
  • Syntaxe : { ref: resource_name }
  • Exemple :
resources:
  my_instance:
    type: OS::Nova::Server
    properties:
      ...

  my_security_group:
    type: OS::Neutron::SecurityGroup
    properties:
      ...

  my_instance_security_group:
    type: OS::Nova::ServerSecurityGroup
    properties:
      server: { ref: my_instance }
      security_group: { ref: my_security_group }

Commandes de gestion de stack#

  • Déploiement d'une stack
    openstack stack create \
      -t my_stack.yaml my_stack
    
  • Voir la stack crée
    openstack stack show my_stack
    
  • Lister les stack
    openstack stack list
    

  • Lister les evenements d'une stack
    openstack stack event list my_stack
    
  • Lister les ressources d'une stack
    openstack stack resource list my_stack
    
  • Supprimer une stack
    openstack stack delete my_stack