The general question is: how do I decide if I should make a feature request for a new module (that I may then code myself) vs. know this is functionality I should just code on a per-play basis?
The supporting data: I am coding a somewhat ambitious project[1], the goal being to be able to set up many different large database clusters in a matter of hours. For example, I might want a 30-node Web/MySQL cluster with 2 masters, 24 DB slaves, and 4 WWW nodes. On DBs: MHA software (for reconfiguring replication topology). On WWW’s: HAproxy configured to talk to the database nodes.
So far I’ve only installed MySQL master/slaves, and I’ve needed to change /etc/hostname and /etc/hosts and set ulimits. I’ve coded up the bits in scripts[2] which act an awful lot like a module, in that they’re idempotent. Should I be requesting/making “hostname” and “ulimits” modules, or would I leave it in script form?
I foresee several other “modules” that I’ll be coding up in the near future, including a MySQL replication topology configuration. Once I delve into HBase, Cassandra, and Postgres[3] systems, I’ll probably discover other modules that need to be created.
[1] https://github.com/time-palominodb/PalominoClusterTool
[2] hostname: https://github.com/time-palominodb/PalominoClusterTool/blob/master/AnsiblePlaybooks/Ubuntu/BaseSaneSystem/files/fixHostName.pl
ulimits: https://github.com/time-palominodb/PalominoClusterTool/blob/master/AnsiblePlaybooks/Ubuntu/MySQLMasterSlaves/files/fixMySQLulimits.pl
Note that my code is pretty quick/simple/dirty (I’m on a deadline) and isn’t representative of how I’d code a module. They make assumptions about the initial state that aren’t true in general.
[3] What I’d be doing with Postgres seems not to overlap with existing Postgres modules.