# data types and resource declarations/references

I'm trying to get a better grasp of Puppet's language constructs and I'm having difficulty with the following:

Assuming the following is true:

1. Resource Declarations, since they're an expressions, return a value.
2. The value returned by a Resource Declaration is a Resource Reference.
3. A Resource Reference is a data type (and not a value of that type).
4. The data type Resource Reference is a subtype of Ressource, which itself is a subtype of Data Type.

Now, given that Resource Reference is a TYPE (and not a value), how could it possibly uniquely identify a resource? It would make more sense to me if, to uniquely identify a resource, a VALUE of that type was used instead.

To be more specific here are the 2 excerpts in the documentation that seem to be in opposition (where one stipulates that "Resource Reference" is a type, the other stipulating that "Resource Reference" uniquely identify specific resources.)

For example, a resource declaration -- an expression whose value you might expect would be a resource -- executes a side effect and then produces a resource reference as its value. A resource reference is a data type in this family of data types, rather than a value that has one of those data types.

and this one:

Resource references identify a specific Puppet resource by its type and title.

Thanks for clarifying :)

edit retag close merge delete

Sort by » oldest newest most voted
1. Only functions _return_ a value.
2. Expressions _evaluate_ or _resolve_ to a value.
3. Where have you read Data being a super-type of Resource?
4. I think you're ignoring the “monism” of a variable. When I declare a variable in C int x; I instruct the computer to reserve some memory. Later I can perform operations on this chunk of memory x = 42; Here I don't ask “how am I able to save a value _in_ a data type?” No, it's just another abstraction layer.
5. Now, you've already found the paragraph explaining this. A resource declaration adds its data to the catalog. In the Puppet language you can only _implicitly_ create catalog entries. This is done by writing resource declarations. Since all resources have to be unique, you can't just specify another – the same – literal resource declaration (it would trigger the mentioned “side effects” again). No, you have to call it by its name: a reference.
more