Puppet has this real neat concept of an external node classifier (ENC) that lets you define your nodes in some way that's not Puppet. If you have your nodes stored in anything from an LDAP database to even an Excel spreadsheet and you can write a script to connect to your datasource, then Puppet can call it to create its node definitions as it runs.
Do you, like me, pull out your hair and get the almost irresistible urge to murder small cute things when forced to use Python's DB-API? Despite being under development for many years it seems to be half-baked at best.
One such idiocy would be the utter lack of dictionary support, the ability that pretty much every other database abstraction layer since, well...forever, has had to allow you to address the columns by name. E.g., print row['firstName'].