It would be better to enhance the service module to understand launchd, but that's a different topic.
On Tue, Jun 24, 2014 at 6:18 AM, Nico K. <[email protected]> wrote: > To see how far I could come I went with the second approach that I > mentioned in my original post. > With some tinkering I managed to abstract away most of the differences, > it's way too chatty though but it works. > However, I am stuck with the Handlers. As 'service' isn't supported on OSX > I had the idea of defining my own Handler like: > > - name: restart someservice > shell: launchctl {{ item }} {{ service_plist}} > with_items: > - stop > - start > when: ansible_os_family == "Darwin" > > This works, except the 'when' clause isn't processed, after all as per the > manual, handlers are matched by name. I could then go down the lane of > naming the service accordingly: > - name: restart {{ ansible_os_family }} > > however this doesn't work either as you can't seem to dynamically set the > name of a handler, so the only approach that I can think of that does work > is giving the handlers another name: > for example "restart nginx darwin / restart nginx ubuntu". > However that means that in my generic code where I change a file I will > have to make a choice which handler to notify based on the OS I'm running > on; same problem as before, you can't do: > notify: > - restart nginx {{ ansible_os_family }} > > Things would be a lot easier if 'Service' would be implemented for OS-X > and package would be abstracted (like for example Salt does). > > > > > > > > > > > > > > > Op maandag 23 juni 2014 21:25:04 UTC+2 schreef Nico K.: > >> Sure, but that's exactly the thing I would like to deal with within a >> role, within a role however you can't perform the 'include' you stated in >> your post as "ansible_os_family" doesn't seem to evaluate. >> >> Op maandag 23 juni 2014 20:33:42 UTC+2 schreef Michael DeHaan: >>> >>> Most all ansible modules already abstract out OS details. >>> >>> Package managers we want you to know - not only do package names change, >>> but the way you interact with those packages change - think of how >>> different Apache is between Ubuntu and CentOS for instance. >>> >>> You can do things like >>> - include: "{{ ansible_os_family }}.yml" >>> >>> And you can also do things like use "include_vars" with similar tricks >>> where you want to maintain differences. >>> >>> In most cases you'll only differ by variables except having a few tasks >>> with "when" statements on them keying off the OS - which will also minimize >>> task duplication. >>> >>> >>> >>> >>> On Mon, Jun 23, 2014 at 1:05 PM, Nico K. <[email protected]> wrote: >>> >>>> Hi, >>>> >>>> So I've been scavenging through a lot of posts to figure out how to >>>> deal with heterogeneous environments. >>>> The two approaches that I see most are either using "group_by" or using >>>> "when". >>>> >>>> For example: >>>> >>>> site.yml: >>>> - name: whatever >>>> tasks: >>>> - group_by: key={{ansible_os_family} >>>> >>>> - hosts: Debian >>>> roles: >>>> - role: rolename-debian >>>> >>>> - hosts: Darwin >>>> roles: >>>> - role: rolename-darwin >>>> >>>> My problem with this approach is that you are saying that a role is >>>> "OS" specific, even though it's not. Perhaps this has to do with my >>>> definition of role, but as I see it a 'role' is a task that any given node >>>> can perform. >>>> I should be able to assign the 'role' 'nginx' to a variety of hosts, >>>> how those hosts then implement that role should be defined within the >>>> 'role' definition. >>>> >>>> Now supposedly you can do this using the 'when' conditional statement, >>>> you would then end up with something like: >>>> >>>> roles/myRole/tasks >>>> >>>> - include: apt.yml >>>> when: ansible_os_family == "Debian" >>>> >>>> - include: brew.yml >>>> when ansible_os_family == "Darwin" >>>> >>>> However this is rather chatty, especially when these files include >>>> files of there own. And with chatty I mean every task, even when the 'when' >>>> clause is not matched is being shown, now you can set 'show_skipped_hosts" >>>> in the ansible configuration, however this still shows the headers of tasks >>>> that are (not) being processed. >>>> >>>> Should I be dealing with this in a different fashion? >>>> What I'm trying to accomplish is having a playbook that installs a >>>> package on a bunch of machines (running differents OS's), then configure >>>> that package based on the OS and configure the service accordingly. >>>> >>>> IMHO the latter approach is the way to go, however the 'chattyness' is >>>> killing my operators. >>>> >>>> Thanks a lot for sharing your insights. >>>> >>>> Best regards. >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> -- >>>> 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/61f300f9-bb1e-4ef3-89a3- >>>> c81637202fb5%40googlegroups.com >>>> <https://groups.google.com/d/msgid/ansible-project/61f300f9-bb1e-4ef3-89a3-c81637202fb5%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/aa367068-c9d2-4393-b23f-5c3d6ab1c4e9%40googlegroups.com > <https://groups.google.com/d/msgid/ansible-project/aa367068-c9d2-4393-b23f-5c3d6ab1c4e9%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/CA%2BnsWgzN-GWeQSdChgsDWkB7csSGbodZ-7nQ2JKZZXeRDAL9jg%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
