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