action - variable - Ansible-Imprimir mensaje-depurar: msg=“línea1 / n{{var2}} / n línea3 con var3={{var3}}”
blockinfile ansible examples (6)
Suprimiendo la última cadena vacía de apt
con [:-1]
---
- name: ''apt: update & upgrade''
apt:
update_cache: yes
cache_valid_time: 3600
upgrade: safe
register: apt
- debug: msg={{ apt.stdout.split(''/n'')[:-1] }}
.split(''/n'')
resultado saltos de línea agradables, gracias a .split(''/n'')
, y una última cadena vacía suprimida debido a [:-1]
, todo lo cual es manipulación de cadenas de Python, por supuesto.
"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..."
]
En Ansible (1.9.4) o 2.0.0
Ejecuté la siguiente acción:
- debug: msg="line1 /n {{ var2 }} /n line3 with var3 = {{ var3 }}"
$ cat roles / setup_jenkins_slave / tasks / 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 = /n/nfsroot[ {{ 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
¿Pero esto no imprime la variable con nuevas líneas (para la tercera acción de depuración)?
Cavo un poco en la respuesta de @Bruce P sobre la salida de tuberías a través de sed, y esto es lo que encontré para:
ansible-playbook [blablabla] | sed ''s///n//n/g''
si alguien esta interesado
Como solución alternativa, utilicé with_items y funcionó para mí.
- 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
Esto se discute aquí . En resumen, debe canalizar su salida a través de sed para convertir el /n
a una nueva línea real, o necesita escribir un complemento de devolución de llamada para hacer esto por usted.
La forma más conveniente que encontré para imprimir texto de varias líneas con depuración es:
- 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'') }}"
Divide el mensaje en una matriz y la depuración imprime cada línea como una cadena. La salida es:
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...",
""
]
}
Gracias a jhutar .
módulo de depuración compatible con la matriz, por lo que puede hacer esto:
debug:
msg:
- "First line"
- "Second line"
La salida:
ok: [node1] => {
"msg": [
"First line",
"Second line"
]
}
O puedes usar el método de esta respuesta: