Ajouter un modèle en tant que type composite

Vous trouverez sur cette page la procédure à suivre pour créer un type composite avec Deployment Manager. Après avoir créé un tel type, vous pouvez l'appeler dans votre configuration et créer des déploiements.

Un type composite consiste en un ou plusieurs modèles conçus pour fonctionner ensemble qui ont été ajoutés de manière permanente à Deployment Manager. Une fois que vous avez ajouté un type composite, vous pouvez l'utiliser de la même façon qu'un type appartenant à Google. Pour en savoir plus sur les types, consultez la section Présentation des types.

Par exemple, vous pouvez créer un ensemble de modèles qui déploient un groupe d'instances géré avec équilibrage de la charge réseau. Vous ajoutez ces modèles en tant que type composite dans Deployment Manager, que vous pouvez ensuite utiliser dans des configurations futures, tout comme vous exploiteriez d'autres types.

La section Partager des types entre plusieurs projets pourrait également vous intéresser.

Avant de commencer

Composants d'un type composite

Pour créer un type composite, vous devez disposer d'un modèle Jinja ou Python de premier niveau et, éventuellement, d'un ensemble de fichiers source qui se transforment à terme en types de base. Les types composites peuvent se composer de ressources qui constituent elles-mêmes d'autres types composites. Deployment Manager développera ces types de façon récursive pendant le déploiement.

Un type composite se compose des éléments suivants :

  • Un modèle de premier niveau : modèle de premier niveau Jinja ou Python exécuté lors du développement lorsque le type est appelé.
  • Un schéma : fichier de schéma JSON décrivant les informations sur le modèle de premier niveau et les sous-importations définies.
  • Des fichiers importés : tous les fichiers supplémentaires nécessaires à l'exécution, tels que les fichiers d'aide, les sous-modèles et les schémas pertinents pour les sous-modèles, le cas échéant. Ces fichiers importés sont toutefois facultatifs. Votre type composite peut très bien ne contenir qu'un modèle de premier niveau.

Créer un type composite

Vous pouvez créer un type composite en enregistrant le modèle de premier niveau d'une configuration ainsi que ses importations et schémas associés. Créez un type composite à l'aide de gcloud ou de l'API.

L'exemple expliquant comment créer et appeler un type composite pourrait également vous intéresser.

gcloud

Pour exécuter cette commande, vous devez vous trouver dans le répertoire où vous avez stocké le modèle de premier niveau et les sous-modèles faisant partie de ce type composite.

À l'aide de la gcloud CLI, exécutez une requête types create et spécifiez le modèle de premier niveau et le nom du type souhaité pour appeler ce type composite. Exécutez cette commande dans le répertoire local contenant vos fichiers de modèle.

$ gcloud beta deployment-manager types create [TYPE_NAME] --template=[TOP_LEVEL_TEMPLATE]

où :

  • [TYPE_NAME] est le nom que vous souhaitez donner à ce type.
  • [TOP_LEVEL_TEMPLATE] est le chemin d'accès relatif au modèle de premier niveau décrivant ce type.

API

Dans l'API, exécutez une requête POST contenant les champs composite et name. Dans le champ composite, définissez les valeurs suivantes :

  • Le schéma de premier niveau
  • Le contenu de vos modèles importés
  • Le contenu de votre modèle de premier niveau

Le corps de la requête API possède la structure suivante :

POST https://www.googleapis.com/deploymentmanager/v2beta/projects/[PROJECT_ID]/global/compositeTypes

{
 "composite": {
  "files": {
   "schema": "[CONTENTS_OF_SCHEMA]",
   "imports": [
    {
     "name": "[TEMPLATE_FILE]",
     "content": "[CONTENTS_OF_TEMPLATE_FILE]"
    },
    {
     "name": "[ANOTHER_TEMPLATE_IF_NECESSARY]",
     "content": "[CONTENTS_OF_TEMPLATES]"
    }
   ],
   "template": "[TOP-LEVEL_TEMPLATE_CONTENTS]",
   "templateFileType": "[FILE_TYPE]"
  }
 },
 "name": "[TYPE_NAME]"
}

Pour obtenir un exemple expliquant comment créer ces requêtes, consultez la section Créer un type composite de groupe d'instances géré avec autoscaling. Pour en savoir plus, consultez la documentation de la méthode insert.

Déployer un type composite

Les types sont des ressources associées à un projet dont l'accès nécessite les autorisations décrites dans la documentation relative au contrôle des accès. Par exemple :

  • Les lecteurs et éditeurs de projet, ainsi que les éditeurs de type, peuvent créer et utiliser des types disponibles pour le projet en question.
  • Les lecteurs de type peuvent obtenir la liste des types disponibles pour ce projet et les utiliser.

Vous pouvez également ajouter un autre projet en tant que lecteur de type pour lui permettre d'accéder à vos types. Consultez la section Partager des types entre plusieurs projets pour en savoir plus.

Une fois que vous avez enregistré un type composite, vous pouvez le déployer de la même manière que vous appelleriez des types gérés par Google :

types: [PROJECT_ID]/composite:[TYPE_NAME]

Exemple :

resources:
- name: my example-resource
  type: example-project/composite:autoscaled-igm
  properties:
  ...

Déployer un type composite directement à l'aide de l'outil de ligne de commande

Deployment Manager permet de déployer un type composite directement à l'aide de la Google Cloud CLI. Plutôt que de créer un fichier de configuration de premier niveau, la CLI gcloud génère automatiquement une configuration de premier niveau pour vous.

Par exemple, la commande suivante déploie un type composite appelé autoscaled-igm :

gcloud deployment-manager deployments create my-igm \
    --composite-type example-project/composite:autoscaled-igm

Vous pouvez également définir les propriétés de votre type composite à l'aide de l'indicateur --properties :

gcloud deployment-manager deployments create my-igm \
    --composite-type example-project/composite:autoscaled-igm \
    --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 et True 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 \
    --composite-type example-project/composite:autoscaled-igm \
    --properties zone:us-central1-a,machineType:n1-standard-1,image:debian-8

Une fois cette commande exécutée, Deployment Manager crée un déploiement à partir du type composite 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.

Exemple : Créer un type composite

Deployment Manager propose de nombreux exemples de configurations dans le dépôt GitHub de Deployment Manager, que vous pouvez utiliser en tant que types composites. Dans cet exemple, vous allez ajouter un type composite qui déploie un service de haute disponibilité à équilibrage de charge dans plusieurs zones d'une même région. Pour en savoir plus, consultez l'exemple complet.

Dans cet exemple, le fichier de configuration de premier niveau correspond au fichier ha-service.py. Tous les sous-modèles sont importés dans les fichiers de schéma.

  1. Téléchargez les fichiers Python et les fichiers de schéma à partir du répertoire GitHub. Omettez les fichiers appartenant à un sous-répertoire et les fichiers de diagramme.
  2. Dans le répertoire local où vous avez téléchargé tous les fichiers, exécutez la commande suivante pour créer un type composite appelé ha-service-example :

    gcloud beta deployment-manager types create ha-service-example --template=ha-service.py
    
  3. Obtenez la liste des types pour vérifier que le type a bien été créé :

    gcloud beta deployment-manager types list --provider composite
    
  4. Décrivez votre nouveau type :

    gcloud beta deployment-manager types describe ha-service-example --provider composite
    
  5. Créez une configuration déployant votre type. Remplacez [PROJECT_ID] par votre ID de projet :

    resources:
    - name: ha-service-example
      type: [PROJECT_ID]/composite:ha-service-example
      properties:
        dockerImage: gcr.io/deployment-manager-examples/nodejsservicestatic
        zones:
        - us-central1-b
        - us-central1-a
    

    Enregistrez la configuration sous le nom example-config.yaml. Vous noterez que vous n'avez pas eu à importer de modèles dans votre configuration.

  6. Déployez votre nouveau type composite :

    gcloud deployment-manager deployments create ha-service-deployment --config example-config.yaml
    

    L'API renvoie une liste de ressources créées à partir du type :

    Waiting for create [operation-1488254932422-5498f5a950d71-2bd3b8c8-b13ddab5]...done.
    Create operation operation-1488254932422-5498f5a950d71-2bd3b8c8-b13ddab5 completed successfully.
    NAME                                            TYPE                             STATE      ERRORS  INTENT
    ha-service-deployment-lb-fr                      compute.v1.forwardingRule        COMPLETED  []
    ha-service-deployment-lb-hc                      compute.v1.httpHealthCheck       COMPLETED  []
    ha-service-deployment-lb-tp                      compute.v1.targetPool            COMPLETED  []
    ha-service-deployment-service-us-central1-a-as   compute.v1.autoscaler            COMPLETED  []
    ha-service-deployment-service-us-central1-a-igm  compute.v1.instanceGroupManager  COMPLETED  []
    ha-service-deployment-service-us-central1-a-it   compute.v1.instanceTemplate      COMPLETED  []
    ha-service-deployment-service-us-central1-b-as   compute.v1.autoscaler            COMPLETED  []
    ha-service-deployment-service-us-central1-b-igm  compute.v1.instanceGroupManager  COMPLETED  []
    ha-service-deployment-service-us-central1-b-it   compute.v1.instanceTemplate      COMPLETED  []

Félicitations, vous venez de créer votre premier type composite !

Étapes suivantes