Thanks for the reply.  I think this will end up being more complicated as I 
cannot use the service module but must run the script with a stop argument 
and then a start argument.  Can I define a function in Ansible?  Have a 
RedHat.yml file that defines a "restart" function using the proper shell 
information (a task?) for that OS and a separate Debian.yml file with the 
correct syntax for that OS and then call the function "restart" in a 
handler?


On Wednesday, September 30, 2015 at 2:59:33 PM UTC-4, David Karban wrote:
>
> HI Ender,
> I believe there can be only one action in handler. Use variables to solve 
> this. First task in role:
> - name: Load the OS specific variables
>   include_vars: "{{ ansible_os_family }}.yml"
>
> in vars/ have a files:
> RedHat.yml
> service_name: "barfoo"
>
> Debian.yml
> service_name: "barfooinit"
>
> Then in handler:
>   handlers:
>     service: name={{ service_name }} state=restarted
>
> New platform means new variable file, no task modifications.
>
> Regards
> David Karban
> Linux server specialist/Specialista na správu linuxových serverů
> www.karban.eu
>
> 2015-09-30 19:04 GMT+02:00 ender <[email protected] <javascript:>>:
>
>> I am fairly new to Ansible and having a problem with a playbook in which 
>> I wish to have a handler run one script if the target OS is in the RedHat 
>> family and another script if the target OS is in the Debian family.  I am 
>> clearly doing this wrong.  Here's the relevant snippet:
>>
>> [...]
>>   handlers:
>>     - name: restart foo
>>       shell: /etc/init.d/barfoo stop ; /etc/init.d/barfoo start
>>       when: ansible_os_family == "RedHat"
>>       shell: /etc/init.d/bazfooinit stop ; /etc/init.dbazfooinit start
>>       when: ansible_os_family == "Debian"
>> [...]
>>
>> This works fine for the targets running a Debian distro (in this case two 
>> Debians and an Ubuntu) but does not work. for the hosts running a Red Hat 
>> distro (actually three CentOS servers, all running the same version of 
>> CentOS).  The handler just returns "skipping: [<host>]" for each CentOS 
>> host.
>>
>> Running ansible against those targets with -m setup -a 
>> 'filter=ansible_os_family' returns the expected "RedHat" for the CentOS 
>> hosts.
>>
>> I suspect I am doing something wrong.  Is it not possible to have two 
>> "when:" statements and only the last one is interpreted?  That would seem 
>> to explain what I am seeing.  If that, or something similar is the case how 
>> can I accomplish what I need to do... kind of a "if RedHat, elseif Debian" 
>> sort of behavior?
>>
>> Thanks!
>>
>> -- 
>> 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] <javascript:>.
>> To post to this group, send email to [email protected] 
>> <javascript:>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/ansible-project/58f66483-d934-4ccb-8b76-a83d3c7c6fb8%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/ansible-project/58f66483-d934-4ccb-8b76-a83d3c7c6fb8%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
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/50980f0e-6a8d-4d30-8dbe-17c91f19b802%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to