Puppet: System Administration Automated

Support

Resource relationships are beginning to become difficult to manage in Puppet. They are treated as normal attributes, but they are clearly not like any other attribute. At the least, relationships are one of the few additive aspects of resources (i.e., you are often adding new relationships to a resource), but they also are inherently traits of two resources (the two that are related), rather than just being traits of one resource. Generally, the way we specify relationships does not overlap well with the way we specify normal attributes.

If we could create a syntax for specifying relationships directly in the language, rather than relying on attributes, then it should be easier to support sophisticated relationships. Also, relationships describe how fully specified resources relate to each other; they do not actually affect the behaviour of the resources themselves. As a result, they should be configured differently from how the resources are specified.

It's unclear at this point how this would affect the rest of the system: Would a topological sort be done on the server, instead of the client? Would this enable specification of cross-host relationships? Would this provide better compile-time validation?