zusammengesetzt ist habe ich eine Reihe von Rückgabewerte von einem Powershell-Skript, und ich möchte einen Befehl auszuführen, nur wenn alle Elemente im Array sind 0. Was ich diese haben, ist:Überprüfen Sie, ob eine Liste nur von Werten gleich 0 in ansible
- name: check if computer is running DC services
raw: Get-Service -name {{item}}
with_items:
- "adws"
- "kdc"
- "netlogon"
register: services
# ignore_errors: yes
failed_when: services.stderr and 'Cannot find any service with service name ' not in services.stderr
changed_when: False
- name: debug services
debug:
var=services
- name: copy check_ad.exe to DCs
win_copy: src=check_ad.exe dest='{{nagios_client_install_path}}\\check_ad.exe'
tags: ['win-nagios-client']
when: item.rc == 0
aber dies wird copy check_ad.exe
wenn jede der Dienste laufen ausgeführt werden. Wie kann ich es ändern, um nur zu laufen, wenn alle Dienste laufen?
Debug-Info ist hier:
ok: [server_name] => {
"changed": false,
"services": {
"changed": false,
"msg": "All items completed",
"results": [
{
"_ansible_item_result": true,
"_ansible_no_log": false,
"changed": false,
"failed": false,
"failed_when_result": false,
"item": "adws",
"rc": 1,
"stderr": "Get-Service : Cannot find any service with service name 'adws'.\r\nAt line:1 char:1\r\n+ Get-Service -name adws\r\n+ ~~~~~~~~~~~~~~~~~~~~~~\r\n + CategoryInfo : ObjectNotFound: (adws:String) [Get-Service], Ser \r\n viceCommandException\r\n + FullyQualifiedErrorId : NoServiceFoundForGivenName,Microsoft.PowerShell. \r\n Commands.GetServiceCommand\r\n \r\n\r\n",
"stdout": "",
"stdout_lines": []
},
{
"_ansible_item_result": true,
"_ansible_no_log": false,
"changed": false,
"failed": false,
"failed_when_result": false,
"item": "kdc",
"rc": 1,
"stderr": "Get-Service : Cannot find any service with service name 'kdc'.\r\nAt line:1 char:1\r\n+ Get-Service -name kdc\r\n+ ~~~~~~~~~~~~~~~~~~~~~\r\n + CategoryInfo : ObjectNotFound: (kdc:String) [Get-Service], Serv \r\n iceCommandException\r\n + FullyQualifiedErrorId : NoServiceFoundForGivenName,Microsoft.PowerShell. \r\n Commands.GetServiceCommand\r\n \r\n\r\n",
"stdout": "",
"stdout_lines": []
},
{
"_ansible_item_result": true,
"_ansible_no_log": false,
"changed": false,
"failed": false,
"failed_when_result": false,
"item": "netlogon",
"rc": 0,
"stderr": "",
"stdout": "\r\nStatus Name DisplayName \r\n------ ---- ----------- \r\nRunning Netlogon netlogon \r\n\r\n\r\n",
"stdout_lines": [
"",
"Status Name DisplayName ",
"------ ---- ----------- ",
"Running Netlogon netlogon ",
"",
""
]
}
]
}
}
"* Dies wird" copy check_ad.exe "ausführen, wenn einer der Dienste ausgeführt wird *" - geht das wirklich? IMHO sollte es einen Syntaxfehler in der letzten Aufgabe erzeugen. – techraf
@techraf - welches Syntaxproblem siehst du? Ich habe es oft ohne Problem ausgeführt (abgesehen von dem, den ich erwähnte, dass es die beabsichtigte Aktion nicht ausführt) – ebarrere
Es gibt keine Schleife in 'copy check_ad.exe zu DCs' Task, so dass' item' nicht definiert ist und 'item.rc verweist 'in der Bedingung sollte fehlschlagen. – techraf