2017-10-17 2 views
0

J'essaye de faire un rôle Ansible pour créer MOTD (message du jour) sur le serveur Linux.Ansible: Variable multiligne contenant un tuyau

Je veux ajouter de l'art ASCII dans ce fichier, l'art ASCII est défini dans une variable utilisée dans mon modèle. Donc, ma variable d'art ASCII doit être multiligne et contenir plusieurs caractères spéciaux.

J'essaie:

motd_asciiart: | 
    _____ _    _      __ _    
    /___| |   | |     /_| |    
    \ `--.| |_ __ _ ___| | _______ _____ _ __| |_| | _____  __ 
    `--. \ __/ _` |/ __| |//_ \ \// _ \ '__| _| |/ _ \ \ /\// 
    /\__//|| (_| | (__| < (_) \ V/__/ | | | | | (_) \ V V/
    \____/ \__\__,_|\___|_|\_\___/ \_/ \___|_| |_| |_|\___/ \_/\_/ 

Mais j'ai cette erreur:

ERROR! Syntax Error while loading YAML.

The error appears to have been in '/Users/ydavid/Devops/ansible2/roles/umanit.motd/defaults/main.yml': line 3, column 9, but may be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

 _____ _    _      __ _ 
    /___| |   | |     /_| | 
    ^here 

J'essaie d'ajouter "sur la première et la dernière ligne, j'ai une autre erreur:

ERROR! Syntax Error while loading YAML.

The error appears to have been in '/Users/ydavid/Devops/ansible2/roles/umanit.motd/defaults/main.yml': line 7, column 74, but may be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

/\__//|| (_| | (__| < (_) \ V/__/ | | | | | (_) \ V V/
    \____/ \__\__,_|\___|_|\_\___/ \_/ \___|_| |_| |_|\___/ \_/\_/ " 
                    ^here 

Pouvez-vous me aider?

Pouvons-nous échapper à un bloc entier?

J'ai trouvé ce rôle (https://github.com/picotrading/ansible-motd) qui fait la même chose mais l'art ASCII est doublé, si je peux je veux éviter cela.

Répondre

1

La raison de ceci est l'indentation - la deuxième ligne commence un espace plus tôt que dans le premier, qui est un point de référence.

Je pense que la solution la plus propre serait de sauver l'art dans un fichier séparé et lire le contenu en utilisant file_contents lookup plugin:

vars: 
    motd_asciiart: "{{lookup('file', './art.txt')}}" 
+0

Merci pour la suggestion. Avec cette solution, comment puis-je utiliser un fichier différent pour mon hôte? J'ai besoin d'un fichier générique et d'une exception pour les hôtes spécifiques – voidAndAny

+0

Bien sûr. Je ne vois pas comment cela se rapporte à la question initiale. Vous pouvez utiliser host_vars, group_vars ou inclure le fichier en fonction du nom d'hôte. – techraf