Ansible - message d'Impression - debug: msg="ligne1 n {var2} n line3 avec var3 = {var3}"
Dans Ansible (1.9.4) ou 2.0.0
j'ai lancé l'action suivante:
- debug: msg="line1 n {{ var2 }} n line3 with var3 = {{ var3 }}"
$ cat rôles/setup_jenkins_slave/tâches/main.yml
- debug: msg="Installing swarm slave = {{ slave_name }} at {{ slaves_dir }}/{{ slave_name }}"
tags:
- koba
- debug: msg="1 == Slave properties = fsroot[ {{ slave_fsroot }} ], master[ {{ slave_master }} ], connectingToMasterAs[ {{ slave_user }} ], description[ {{ slave_desc }} ], No.Of.Executors[ {{ slave_execs }} ], LABELs[ {{ slave_labels }} ], mode[ {{ slave_mode }} ]"
tags:
- koba
- debug: msg="print(2 == Slave properties = nnfsroot[ {{ slave_fsroot }} ],n master[ {{ slave_master }} ],n connectingToMasterAs[ {{ slave_user }} ],n description[ {{ slave_desc }} ],n No.Of.Executors[ {{ slave_execs }} ],n LABELs[ {{ slave_labels }} ],n mode[ {{ slave_mode }} ])"
tags:
- koba
mais ce n'est pas l'impression de la variable avec de nouvelles lignes (pour la 3e action de débogage)?
6 réponses
debug module de support de tableau, de sorte que vous pouvez le faire comme ceci:
debug:
msg:
- "First line"
- "Second line"
La sortie:
ok: [node1] => {
"msg": [
"First line",
"Second line"
]
}
ou vous pouvez utiliser la méthode de cette réponse:
En YAML, comment puis-je rompre une chaîne de caractères sur plusieurs lignes?
le moyen le plus pratique que j'ai trouvé pour imprimer le texte multi-ligne avec le débogage est:
- name: Print several lines of text
vars:
msg: |
This is the first line.
This is the second line with a variable like {{ inventory_hostname }}.
And here could be more...
debug:
msg: "{{ msg.split('\n') }}"
il divise le message en un tableau et débugge imprime chaque ligne comme une chaîne. La sortie est:
ok: [example.com] => {
"msg": [
"This is the first line.",
"This is the second line with a variable like example.com",
"And here could be more...",
""
]
}
merci à jhutar .
je creuse un peu sur la réponse de @Bruce P à propos de la sortie de tuyauterie à travers sed, et c'est ce que j'en suis venu à:
ansible-playbook [blablabla] | sed 's/\n/\n/g'
si quelqu'un est intéressé.
suppression de la dernière chaîne vide de apt
par [:-1]
---
- name: 'apt: update & upgrade'
apt:
update_cache: yes
cache_valid_time: 3600
upgrade: safe
register: apt
- debug: msg={{ apt.stdout.split('\n')[:-1] }}
se traduit par de belles ruptures de ligne, grâce à .split('\n')
, et une dernière chaîne vide supprimée en raison de [:-1]
, qui sont toutes des manipulations de chaîne de Python, bien sûr.
"msg": [
"Reading package lists...",
"Building dependency tree...",
"Reading state information...",
"Reading extended state information...",
"Initializing package states...",
"Building tag database...",
"No packages will be installed, upgraded, or removed.",
"0 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.",
"Need to get 0 B of archives. After unpacking 0 B will be used.",
"Reading package lists...",
"Building dependency tree...",
"Reading state information...",
"Reading extended state information...",
"Initializing package states...",
"Building tag database..."
]
C'est discuté ici . En bref, vous avez soit besoin de pipe votre sortie par sed pour convertir le \n
en une nouvelle ligne réelle, ou vous avez besoin d'écrire un plugin callback pour le faire pour vous.
comme solution de contournement, j'ai utilisé avec_items et ça a fonctionné pour moi.
- debug: msg="Installing swarm slave = {{ slave_name }} at {{ slaves_dir }}/{{ slave_name }}"
- debug: msg="Slave properties = {{ item.prop }} [ {{ item.value }} ]"
with_items:
- { prop: 'fsroot', value: "{{ slave_fsroot }}" }
- { prop: 'master', value: "{{ slave_master }}" }
- { prop: 'connectingToMasterAs', value: "{{ slave_user }}" }
- { prop: 'description', value: "{{ slave_desc }}" }
- { prop: 'No.Of.Executors', value: "{{ slave_execs }}" }
- { prop: 'LABELs', value: "{{ slave_labels }}" }
- { prop: 'mode', value: "{{ slave_mode }}" }
tags:
- koba