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
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 )
&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
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
.
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 '