Add backend support for relationships between host, hostgroup, puppetclass, architecture and OS
It may not be possible or desirable, in puppet, to implement a module that supports all combinations of architecture and operating system. For this reason it should be possible to define valid puppetclass/architecture/OS combinations.
These should be modeled in the database as a join between puppetclass/architecture/OS. This will also allow the dropdown selectors in a frontend GUI to prune invalid permutations and can also be used for validation
As part of this work we should include the logic that allows these queries to be made
host.puppetclasses => These would be the classes directly associated with the host and those that are indirectly associated via the host's hostgroup
architecture.operatingsystems => These refer to the operating systems that the installed hosts use
architecture.valid_operatingsystems => These refer to the operating systems that are valid for this architecture; there may be no hosts using this combination.