Inconsistencies in property handling compared with ARM
Summary of the new feature / enhancement
DSC and ARM are handling properties in an inconsistent way. DSC assumes that all properties consumed or generated from a resource are under the "properties" property. Only these properties are passed to the resource on set/test and any property generated by the resource are placed inside this property.
In ARM, there are properties that are expected/allowed outside of the "properties". For example, all resources are expected to a "name" property outside of "properties" and this property is part of the unique ID of a resource. It is NOT just a human readable description of the step in the template.
Other properties that are allowed outside of the "properties" property are "kind", "sku", "plan", "systemData", "managedBy" and "tags" (and possibly others that I am forgetting). These properties are considered as part of the payload of a resource and are expected to be passed to the resource on set/test and returned by the resource on get.
Proposed technical implementation details (optional)
No response
Generally speaking, the keywords you enumerated seem to be metadata about a resource, which make some sense for a more-tightly coupled system of service APIs designed from the ground up to work in that paradigm.
There's no global equivalent of those keywords for DSC resources, with the possible exception of tags. This seems like a more compelling case for a data formatter or adapter to handle the mismatched expectations, rather than require all DSC resource authors to conform to a design constraint that the vast majority of them won't use.
These are not part of the ARM Template, so I do think they are best represented in DSC as metadata.
They are indeed part of ARM templates. Have a look at the reference for VMs and you will see quite a few properties that exist in the outer envelope (outside of "properties").
https://learn.microsoft.com/en-us/azure/templates/microsoft.compute/virtualmachines?pivots=deployment-language-arm-template
@Bpoe actually it appears you are correct, I think when I first adopted ARM template syntax, I threw away all the stuff that didn't make sense for DSC. We can revisit this and make them optional.
@Bpoe the original doc used to implement this was https://learn.microsoft.com/en-us/azure/azure-resource-manager/templates/syntax#resources which shows the ones DSC supports. My concern here is how do we know what a complete list is if some are RP specific?