I'm on the verge of refactoring all our modules to the roles&profile workflow with r10k etc. and the stuff is taking shape - thanks for all the help so far! - and the only thing I'm still not very convenient with is the naming/grouping of data put into Hiera and using that data in the profiles. Let me explain.
Somehow I always wanted to do something like this:
---
profile::tomcat::sudoers:
tomcatadmingroup:
- systemctl start tomcat.service
- systemctl stop tomcat.service
profile::apache::sudoers
apacheadmingroup:
- systemctl start httpd.service
- systemctl stop httpd.service
since if I classify a node with the Tomcat module, I'd like the tomcat admins to be able to start and stop the service. I think this resource belongs to the profile::tomcat. This way, I'd use:
profiles::tomcat {
...
class { "sudoers":
sudoers => $::profiles::tomcat::sudoers
}
}
profiles::apache {
...
class { "sudoers":
sudoers =>$::profiles::apache::sudoers
}
This is (imho) way nicer than trying to remember to extend all these resources every time I need something new, like "Tomcat needs a port, a user, a certificate so let's extend profile::firewall with the port, profile::certs with the cert. Ah crap I forgot the java version in profiles::java at the bottom of the yaml file!".
But this solution obviously doesn't work if a node has both the tomcat and apache modules because of the multiple resource-like class declarations of the same class.
Another example would be that if the tomcat module is assigned to a node, then the tomcat-admins should be able to login via ssh. And the same goes for other admin groups. Assuming this:
profiles::tomcat::pamd:
- 'tomcatadmins'
profiles::oracle::pamd:
- 'oracleadmins'
the final variable used in the pamd class should be ["tomcatadmins", "oracleadmins"] but I can't really get this array in the pamd profile with hiera (or can I?).
Maybe some merging would be possible but I can't simply look up "profile::*::pamd" and merge the results.
Afaik hiera_array is only possible with data on different Hiera levels.
I could use subclasses like ::sudoers::tomcat, ::sudoers::apache... ::pamd::oracle ::pamd::tomcat etc. but that'd be complex and time-consuming.
How could I (meaningfully) use "include ::classname" everywhere without doing something weird?
How do you group your data?
Best
Rp