Issue #7423 has been reported by Henrik Lindberg. ---------------------------------------- Bug #7423: unclear node inheritance semantics https://projects.puppetlabs.com/issues/7423
Author: Henrik Lindberg Status: Unreviewed Priority: Normal Assignee: Category: parser Target version: 2.6.x Affected Puppet version: Keywords: parser node inheritance semantics easeofuse documentation Branch: While working with Geppetto to provide validation and incremental feedback while editing, I entered into the realm of node inheritance. By looking at what is allowed in the grammar I have several questions regarding the semantics and legality of some of the possible constucts. I have no clue if the grammar should be more retrictive (i.e. these are grammar bugs), or if the documentation should be expanded to declare how it is supposed to work (or for that matter if any of these constructs actually work ;) - they seem to be allowed from a grammar standpoint. (If you prefer to read this online formatted a bit better - see https://github.com/cloudsmith/geppetto/wiki/Semantic-Issues-regarding-Node-Inheritance) ### Can node ‘default’ inherit ? A node declared as node default { } is used for hosts that do not match. Is it possible for such a node to also inherit ? node default inherits x { } ### Circular inheritance Is obviously not allowed. Depending on the semantics for inheritance using regular expressions, there can be some surprises that are introduced when additional classes are added (and they happen to match). ### Ambiguous Nodes ? Are simple and qualified names allowed to overlap? Is it ok to declare all of these: node bugtracker { } node ‘bugtracker.myorg.com’ { } node ‘bugtracker.internal.myorg.com’ { } … or is this an error? ### Ambiguous inheritance A node can be declared with a simple name (e.g. `bugtracker`), or a fully qualified name (`‘bugtracker.myorg.com’`). When inheriting it is possible to use both simple and qualified name - what happens when there are several to choose from e.g. `‘bugtracker.myorg.com’`, `‘bugtracker.internal.myorg.com’`. What happens if a node is declared with: node x inherits bugtracker { } ### Nodes matching with regular expressions A node can match using a regular expression: node /web-([0-9]*).example.com$/ {} How is inhertitance of such a node possible? This syntax is allowed by the parser: node webservers inherits /web-([0-9]*).example.com$/ {} What does this mean? Is the inheritance to a node with an identical (matching) regexp (i.e. equal regexp string), or to equivalently matching regexps, or it is it applied to the regexp as a string? Or, are nodes defined with regexp ‘name’ not included in the matching? This is very confusing... ### Can ‘default’ be matched with regexp? Is this sensical? node /defa.*/ { } ### Linking to non existing nodes Since inheritence can be expressed with regular expressions and string expressions - what happens if there is no match? Is this an error, or simply that there is nothing to inherit at this particular moment? If the answer is that it means that same as not having specified inheritance, then does the same rule apply if a name is used? E.g. 1. No xyz is known ```ruby node a inherits xyz { } ``` 2. Regexp does not match ```ruby node a inherits /x.*/ { } ``` 3. Variably $y is not set to "yz" ```ruby node a inherits "$y" ``` -- You have received this notification because you have either subscribed to it, or are involved in it. To change your notification preferences, please click here: http://projects.puppetlabs.com/my/account -- You received this message because you are subscribed to the Google Groups "Puppet Bugs" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/puppet-bugs?hl=en.
