The general idea is how and when to present the installer/admin with the ability to specify a unique proposal. Normally, populate.py uses nice_ratios and rounding to create the different hardware profiles for separate journals. However, if the numbers simply do not work (12 spinners, 1 SSD), no suggestion is made.
Rather than go down the path of infinite possibilities and also because the above example should be the uncommon case, give the admin the ability to trivially create their own profiles. One feature is to allow optionally filtering based on model and/or capacity. An example command may look like
salt-run populate.proposals --ratio 6:1 --data-model DELL --data-capacity 1862GB --journal-model Intel --journal-capacity 185GB
We use the word capacity rather than "size". This matches the current output of hwinfo and will hopefully prevent any confusion with "journal size". In Ceph, "journal size" is normally the partition size of a given journal. We need the size or the capacity of the disk.
The behavior of the above would filter all non-journal drives by the DELL model that match 1862GB and likewise with the journals that match Intel and 185GB. Once some multiple of 6:1 is achieved, all remaining drives including those excluded by the filter would be listed as dedicated OSDs.
The filter options are truly optional. The model or capacity is only necessary if the admin wishes to further restrict the application of the ratio. Multiple commands could then be run such as
salt-run populate.proposals --ratio 6:1
salt-run populate.proposals --ratio 5:1
salt-run populate.proposals --ratio 12:1
With 12 spinners and 1 SSD, the first profile would have 6 split journals and 6 indepdendent OSDs. The second would have 5 and 7 respectively. The last isn't recommended at all, but then, maybe the admin knows something about the hardware that I don't. :)
To keep the profiles both obvious and avoid colliding with the current profiles, I believe embedding the ratio as part of the name is an okay approach. That means if you see
profile-6:1-1Intel185GB-12DELL1862GB-1
the admin went out of their way to create a custom profile.
The needed logic should be a duplication of the nice_ratio method but using the provided values and making sure to put all remaining devices as OSDs.
The first pass would keep these are arguments to the runner, but working this backward into providing a configuration(s) file may be useful.
Should this solution prove insufficient for some combination of hardware (e.g. imagine 4 types of drives where the admin wants two different ratios), my instinct says not to go any further for now. The additional complexity would likely not benefit the uncommon or one-off group. Also, the creation of a data structure of both data+journal and osds with the real device names still allow for hand editing in the most extreme scenarios.