Un fichier de configuration de base peut suffire pour des charges de travail simples, mais lorsque vous avez affaire à des architectures plus complexes ou à des configurations que vous envisagez de réutiliser, vous pouvez diviser votre configuration en modèles.
Un modèle est un fichier distinct importé et utilisé en tant que type dans une configuration. Vous pouvez utiliser autant de modèles que vous le souhaitez dans une configuration.
Les modèles vous permettent de séparer votre configuration en plusieurs parties que vous pouvez utiliser à volonté dans différents déploiements. Vous pouvez choisir le degré de généralité ou de spécificité des modèles selon vos besoins. Les modèles vous permettent également de tirer parti de fonctionnalités telles que les propriétés de modèle, les variables d'environnement, les modules et d'autres fonctionnalités de modèle pour créer des fichiers de configuration et de modèle dynamiques.
Pour consulter des exemples de modèles que vous pouvez utiliser dans vos propres déploiements, accédez au dépôt GitHub de Deployment Manager.
Avant de commencer
- Si vous voulez vous servir des exemples de ligne de commande de ce guide, installez l'outil de ligne de commande gcloud.
- Si vous voulez utiliser les exemples d'API de ce guide, configurez l'accès aux API.
- Découvrez comment créer une configuration de base.
Syntaxe du modèle
Les modèles peuvent être écrits en Jinja 2.10.x ou en Python 3.x. La syntaxe de Jinja se rapproche davantage de YAML. Il peut donc être plus simple de rédiger des modèles en Jinja si vous êtes plus à l'aise avec YAML.
Vous pouvez également rédiger des fichiers de modèle en Python et générer des parties de vos modèles de manière automatisée dans ce langage. Vous pouvez par exemple mettre en forme des définitions de modèle à l'aide de bibliothèques Python. Si vous maîtrisez Python, ce format pourrait mieux vous correspondre.
Deployment Manager accepte les modèles Jinja et Python. Vous pouvez importer des modèles dans les deux langues dans la même configuration.
Créer un modèle de base
Un modèle est un fichier que vous créez et qui est rédigé en Jinja ou en Python. Prenez par exemple le fichier de configuration suivant :
Cette configuration est valide, mais vous pouvez la simplifier davantage en divisant plusieurs parties en fichiers de modèle individuels réutilisables. Pour créer un modèle basé sur la configuration ci-dessus, extrayez la section correspondant à la ressource en question et créez un nouveau fichier Jinja ou Python.
Les extraits suivants montrent les sections de modèles qui peuvent simplifier votre déploiement. Pour les modèles complets, cliquez sur Afficher sur GitHub.
Jinja
Python
Vos modèles Python doivent respecter les conditions suivantes :
Le modèle doit définir une méthode appelée
GenerateConfig(context)
ougenerate_config(context)
. Si vous utilisez les deux noms de méthode dans le même modèle, la méthodegenerate_config()
a priorité.L'objet
context
contient des métadonnées relatives au déploiement et à votre environnement, telles que le nom du déploiement, le projet en cours, etc. En savoir plus sur l'utilisation des variables d'environnement spécifiques au déploiement.La méthode doit renvoyer un dictionnaire Python.
En dehors de ces exigences, vous pouvez générer le contenu de votre modèle comme vous l'entendez.
Exemple
Pour obtenir l'exemple complet en Python, consultez le dépôt GitHub de Deployment Manager.
Importer le modèle
Après avoir créé un modèle, importez-le dans votre fichier de configuration afin de l'utiliser.
Pour importer un modèle, ajoutez une section imports
à votre configuration, suivie du chemin relatif ou absolu du répertoire actuel. Vous pouvez par exemple importer votre modèle de machine virtuelle créé à l'étape précédente en ajoutant la ligne suivante en haut de votre configuration :
imports:
- path: path/to/my_vm_template.jinja
Si le chemin d'accès de votre fichier est long, vous pouvez fournir une propriété name
facultative qui servira d'alias au fichier. Vous pourrez ensuite vous référer au modèle à l'aide de ce nom. Si vous ne fournissez pas de nom, le modèle peut être référencé grâce à la valeur path
.
imports:
- path: path/to/my_vm_template.jinja
name: my_renamed_template.jinja
Vous pouvez importer une combinaison de plusieurs modèles, qu'ils soient rédigés en langage Jinja ou Python :
imports:
- path: path/to/my_vm_template.jinja
name: my_renamed_template.jinja
- path: special_vm.py
Si votre modèle utilise d'autres modèles comme dépendances, importez également ces modèles dépendants dans votre configuration :
imports:
- path: path/to/my_vm_template.jinja
- path: special_vm.py
- path: base_vm.jinja
Vous pouvez également importer des fichiers texte pour aligner le contenu. Par exemple, vous pouvez créer un fichier nommé resource_type.txt avec la chaîne suivante :
compute.v1.instance
Importez-le dans votre configuration et insérez le contenu aligné, comme le montre l'exemple ci-dessous :
imports: - path: resource_type.txt resources: - name: my-vm type: {{ imports["resource_type.txt"] }} # Resolves to "compute.v1.instance" properties: zone: us-central1-a machineType: zones/us-central1-a/machineTypes/f1-micro disks: - deviceName: boot type: PERSISTENT boot: true autoDelete: true initializeParams: sourceImage: projects/debian-cloud/global/images/family/debian-9 networkInterfaces: - network: global/networks/default accessConfigs: - name: External NAT type: ONE_TO_ONE_NAT
Déployer des modèles
Une fois que vous avez importé un modèle, vous pouvez l'utiliser en tant que type dans votre configuration :
Jinja
Python
Si vous n'avez pas défini de nom pour votre modèle, appelez-le à l'aide du chemin :
imports:
- path: path/to/my_vm_template.jinja
resources:
- name: my-first-virtual-machine
type: path/to/my_vm_template.jinja
Déployer des modèles directement avec l'outil de ligne de commande
Plutôt que de créer un fichier de configuration de premier niveau, Deployment Manager permet de déployer un modèle directement dans la Google Cloud CLI.
Par exemple, la requête suivante déploie un modèle appelé vm-template.jinja
:
gcloud deployment-manager deployments create a-single-vm --template vm-template.jinja
Si votre modèle dispose de propriétés de modèle, vous pouvez également les définir dans la ligne de commande à l'aide de l'indicateur --properties
:
gcloud deployment-manager deployments create my-igm \
--template vm-template.jinja \
--properties zone:us-central1-a
Points à noter :
Toutes les valeurs sont analysées en tant que valeurs YAML. Par exemple, la valeur
version: 3
est transmise au format d'entier. Si vous souhaitez la définir en tant que chaîne, placez la valeur entre guillemets simples avec échappement :version: \'3\'
.Les valeurs booléennes ne sont pas sensibles à la casse. Les valeurs
TRUE
,true
etTrue
sont donc traitées de la même manière.Vous devez transmettre toutes les propriétés requises définies par le modèle. Vous ne pouvez pas vous limiter à un sous-ensemble des propriétés. Si certaines propriétés possèdent des valeurs par défaut, vous pouvez les omettre dans la ligne de commande.
Pour spécifier plusieurs propriétés, fournissez des paires valeur/clé séparées par des virgules. L'ordre dans lequel vous spécifiez les paires n'a pas d'importance. Exemple :
gcloud deployment-manager deployments create my-igm
--template vm-template.jinja
--properties zone:us-central1-a,machineType:n1-standard-1,image:debian-9
Une fois cette commande exécutée, Deployment Manager crée un déploiement à partir du modèle fourni. Vous pouvez vérifier que le déploiement a bien été créé à l'aide de la console Google Cloud ou de la gcloud CLI. Pour savoir comment afficher un déploiement, consultez la section Afficher un fichier manifeste.
Étapes suivantes
- Pour obtenir des exemples de modèles prêts pour la production, consulter les exemples du kit Cloud Foundation dans GitHub
- Utiliser les propriétés du modèle pour pousser plus avant l'abstraction de contenu
- Renseigner des informations relatives à vos projets et déploiements à l'aide de variables d'environnement
- Ajouter un modèle qui sera associé de façon permanente à votre projet en tant que type composite