Hi Dimitri, A couple of things:
First, please try out the new win_updates module here <https://github.com/ansible/ansible-modules-extras/pull/854> (and +1 the PR if it works for you) - the way you're kicking off the Windows updates asynchronously can fail in all sorts of interesting ways. Second, while the approach you're using will work, it can also mask other failures. I'm guessing you don't really care if the services are running or not, merely that they're installed, and if so, they should be stopped. The win_service module (and most Ansible modules) are designed to enforce a desired state, not just blindly run commands, so that part's already taken care of. To just skip the task if not installed, I'd suggest something like: tasks: - name: check for Lyris service raw: sc query ListManager register: lyris_hint failed_when: lyris_hint.rc not in [0,1060] # 1060 == Service not installed - name: stop services service: name={{ item }} state=stopped with_items: ["ListManager", "LyrisAlert"] when: lyris_hint.rc == 0 # ie, the ListManager service is installed This way, if it fails for some other reason than the service not being installed, your playbook will break instead of masking the failure. Good luck! -Matt On Tuesday, September 1, 2015 at 9:22:23 AM UTC-7, Dimitri Yioulos wrote: > > Hi, all. > > I've been struggling with trying to get Ansible working for Windows > automation. Perhaps I'm asking too much, but here's what I'm after - I > want to update a group of servers, stop a particular service on a few of > those server, then reboot the entire group. Updating and rebooting are the > easy parts. My challenge is in identifying the servers that have the > particular service running, and stopping that service if it's running. The > command that I'd use at the Windows cli would be this: sc query > ListManager | find "RUNNING" or > sc query ListManager | find "STATE", which return "STATE : 4 RUNNING". I > can extend that a bit, like so: sc query ListManager | find "RUNNING" >nul > 2>&1 && echo running, which obviously returns "running". > > Here's my play, so far: > > --- > > - hosts: all > gather_facts: false > > tasks: > - name: update server > raw: 'cmd /c wuauclt.exe /resetauthorization /detectnow /updatenow' > - name: check for Lyris service > raw: sc query ListManager | find "RUNNING" >nul 2>&1 && echo running > # when: "'LM' not in inventory_hostname" > register: lyris_hint > always_run: yes > tags: > - lyristest > > - debug: var=lyris_hint.stdout_lines > > I was hoping that the debug line would output "running" so that I could > use output from the raw as the basis for stopping the service with: > > - win_service: > name: ListManager > state: stopped > > - win_service: > name: LyrisAlert > state: stopped > > and, finally, reboot the systems with: > > - name: reboot server > raw: 'cmd /c shutdown /r /t 0' > > Can anyone help me with the service detection/stop part of this? > > Thanks. > > Dimitri > -- You received this message because you are subscribed to the Google Groups "Ansible Project" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/90a92833-ab19-41fc-89dd-24485cbe8752%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
