On Wednesday, June 10, 2015 at 11:17:25 PM UTC+2, Brian Coca wrote: > > @Christian, those are my thoughts for the future of the service > module, this package module will serve as a template on how to split > it and keep backwards compatibility using the generic module as a > placeholder. Just need to add service system detection to facts and > then use those internally. >
Cool! > As for keeping the policy in a single place, the same can be achieved > by just making the ssl cipher string into a common variable and then > have each template reference it. This does not work for all cases but > I find it better to keep specific tasks for each OS and then abstract > the common data, than the reverse which abstracts the common task but > requires abstracting the non-common data. > That's only a partial solution -- you still have multiple copies of the policy "we set the SSL cipher string to something custom." The thing I want to achieve is "disable SSLv3 on our Apache servers", not "define a cipher string that disables SSLv3" and "set that cipher string on Debian" and "set that cipher string on RedHat" etc. Say, you want to add support for Arch in the future. You add another include file but happen to forget to add the lineinfile task. Your playbooks run fine, POODLE happened a long time ago and you don't even think about SSLv3 anymore, but all your Arch servers will offer it (assuming Arch's default config still has it enabled, of course...). My playbooks will fail on Arch hosts if I forget to add Arch's config filename to my "disable SSLv3" task, reminding me about my "no SSLv3" policy. > Again, I'm all for choice, in this case I think it is an illusion as > you update 1 common yaml file and 2 non-common yaml files vs 2 common > yaml files and 1 non-common yaml file. > I am only editing 1 common yaml file -- roles/apache/tasks/main.yml -- that includes all the relevant data ("!platform" is a YAML tag that I add to the YAML parser (mis)using a vars_plugin, which, granted, is somewhat hacky and will hopefully still work in v2 ;-) ). Re your other comment about package versions: yes, we will always have to manually curate some OS details. But cfg mgmt should help making that easier, not say "package NAMES are different anyways, so we won't even let you abstract the package MANAGER." My task for installing PHP (different number of packages in different distros) looks like this: - include: install_packages.yml pkgs: !platform - php:: Debian: php5 RedHat: php55w - Debian: php5-cli RedHat: php55w-cli - Debian: php5-curl notify: - reload apache tags: - apache/php/setup That installs the logical "php" package (which is provided by "php5" on Debian, and "php55w" on RedHat, and "php" everywhere else, i.e. Gentoo in my case). In addition, it will install the CLI SAPI on Debian and RedHat (that's included in "php" on Gentoo), and the curl extension on Debian (included in "php55w" on RedHat). All in one single yaml file. Different versions of distros can be treated as distinct distros. Until recently (before we killed our last Ubuntu 10 and 12 servers), I had this in my Apache role: lineinfile: dest: !platform Ubuntu14: /etc/apache2/sites-enabled/000-default.conf Ubuntu12: /etc/apache2/sites-enabled/000-default Ubuntu10: /etc/apache2/sites-enabled/000-default This wasn't perfect: there's still some duplication, but at least it's very close together and not spread over multiple files. Rolling-release distributions are tricky -- luckily I am able to keep all my (few) Gentoo servers in sync, so I don't need to support multiple "versions" of Gentoo. -- 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 ansible-project+unsubscr...@googlegroups.com. To post to this group, send email to ansible-project@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/1588482b-67f1-48c9-840e-5c2e34c06922%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.