Que signifie&,<<, * dans cette base de données.fichier yml?

Jusqu'à présent, je n'ai utilisé que la base de données.yml avec chaque paramètre appelé explicitement, dans le fichier ci-dessous, il utilise des caractères que je ne comprends pas. Que signifient chaque ligne et chaque symbole (&,*,

development: &default
  adapter: postgresql
  database: dev_development

test: &test
  <<: *default
  database: test_test


cucumber:
  <<: *test

production:
  <<: *default
  database: test_production
119
demandé sur dreftymac 2011-07-11 18:00:55

5 réponses

Le & marque un alias pour le nœud (dans votre exemple &default aliase le nœud de développement comme "par défaut") et le * fait référence au nœud alias avec le nom"par défaut". Le <<: insère le contenu de ce nœud.

Permettez-moi de citer la spécification YAML ici:

Les nœuds répétés (objets) sont d'abord identifiés par une ancre (marquée avec l'Esperluette - "&"), puis sont aliasés (référencés avec un astérisque - "*") par la suite.

Donc des parties de votre exemple

test: &test
  <<: *default

Étendre à

test: &test
  adapter: postgresql       # from the "default" alias
  database: dev_development # from the "default" alias

Et en même temps rendre le nœud "test" aussi bien disponible sous l'alias "test". jetez un oeil à la YAML specification - 2.2 Structures pour plus de détails (ou si vous avez besoin même Moar docs++: 3.2.2.2. Ancres et Alias )

141
répondu paukul 2013-10-15 15:18:04

Ce sont des références de nœuds ( * ) et des fusions de tableaux associatifs ( wikipedia

Essayez-le vous-même en ligne .

9
répondu Sam Ruby 2011-07-11 14:14:16

&default signifie que vous étiquetez cet ensemble d'attributs avec un nom pour une utilisation ultérieure

<<: *default signifie que vous incluez tous les attributs du groupe étiquetés par défaut

8
répondu keymone 2011-07-11 14:13:06

Ils sont un moyen de référencer des environnements sans avoir à répéter les mêmes paramètres encore et encore (sécher).

test: &test
  <<: *default

&test crée une référence à des paramètres spécifiques.

<<: *default dit d'utiliser les paramètres par défaut pour le test

cucumber:
  <<: *test

Alors maintenant, nous savons que pour cucumber, nous voulons utiliser les paramètres de test.

2
répondu thenengah 2011-07-11 14:13:38

En termes simples, cette notion ressemble à la classe de base et dérivée.

Dans le modèle de classe de base, vous mentionnez tous les détails communs avec '&', ce qui signifie qu'il peut être utilisé pour développer l'autre section yaml qui a besoin de ces champs. Maintenant, lorsque vous créez une autre section qui est un sur-Ensemble de valeurs de configuration de cette structure de type 'classe de base', vous utilisez le '*' avec l'ancre de la classe de base (c'est-à-dire celle commencée par '&'). Vous utilisez '

vsm:
  stub_nsx_mgr: &MGR_CTRL_STUB
    username: ADMIN
    password: $DEFAULT_PASSWORD
    deployment: ovf
    build: $PR_BUILD
    vmnics:
      - network: $MANAGEMENT_NETWORK_0
    vc: vc_0
    ovf_options:
      - --diskMode=$DISKMODE
      - --deploymentOption=$DEPLOYMENT_OPTION
$MGR_0:
    <<: *MGR_CTRL_STUB
    ovf_path_regex: 'appliance.*\.ovf'
    ovf_options:
      - --diskMode=$DISKMODE
      - --deploymentOption=$DEPLOYMENT_OPTION
$CTRL_0:
    <<: *MGR_CTRL_STUB
    ovf_options:
      - --diskMode=$DISKMODE
      - --allowExtraConfig
$CTRL_1:
    *MGR_CTRL_STUB

Mais, si vous ne voulez pas remplacer les champs étendus, vous pouvez ignorer '

1
répondu Mohammad Shahid Siddiqui 2018-02-07 16:29:38