2017-02-01 4 views
0

ich eine Registervariable, die letztlich diesen Wert hat:In Ansible, wie überprüfe ich, ob ein Wert in einem der Elemente in einem Array ist?

ok: [10.xx.xx.xx] => { 
    "yum_sec_upd.stdout_lines": [ 
     "Loaded plugins: fastestmirror", 
     "Loading mirror speeds from cached hostfile", 
     " * base: mirrors.usinternet.com", 
     " * epel: mirror.steadfast.net", 
     " * extras: mirror.lax.hugeserver.com", 
     " * updates: centos.mirrors.tds.net", 
     "CESA_2017__0086 Important/Sec. kernel-3.10.0-514.6.1.el7.x86_64", 
     "CESA_2017__0086 Important/Sec. kernel-tools-3.10.0-514.6.1.el7.x86_64", 
     "CESA_2017__0086 Important/Sec. kernel-tools-libs-3.10.0-514.6.1.el7.x86_64", 
     "CESA_2017__0086 Important/Sec. python-perf-3.10.0-514.6.1.el7.x86_64", 
     "updateinfo list done" 
    ] 
} 

Wie ich, wenn die Zeichenfolge prüfe „Sec.“ ist im yum_sec_upd.stdout_lines Array von Strings vorhanden? Ich mag diesen

- name: Send mail for security updates 
    mail: # mail parms here 
    when: "'Sec.' in yum_sec_upd.stdout_lines[]" 
+0

Ich habe dies nicht getestet, aber ansible verwendet Python, wäre dies oder einige Permutation davon möglich y Arbeit? 'wenn:" Sec. " in l für l in yum_sec_upd.stdout_lines'? – castis

+0

Leider hat das nicht funktioniert. Ich werde mich jedoch daran erinnern für Python. –

Antwort

1

tun Wenn Sie die Ausgabe eines Befehls registrieren, verwende nur stdout statt stdout_lines:

- name: Send mail for security updates 
    mail: # mail parms here 
    when: 'Sec.' in yum_sec_upd.stdout 

Um zu überprüfen, ob eine Liste einen Teil enthält, könnten Sie Verwenden Sie zum Beispiel:

when: yum_sec_upd.stdout_lines | select('search', 'Sec.') | list | length > 0 
+0

Ja, das verwende ich jetzt. Ich dachte, ich wäre schlau. –

Verwandte Themen