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.

Reply via email to