I am using puppet. And puppet is a declarative language and I need to model my code.
My question is what are the modeling languages for declarative programming languages?
In other words: we use uml to model imperative languages but uml is not suitable for declarative programming languages.
The Puppet DSL models a system state by itself. I don't see need for meta-modeling, but you could try and transform your manifest into a graphical representation.
You'd need three types of nodes in your graph
where the two latter ones are rather similar.
There are two basic types of relation (edges)
include
a class
declare
a resource (i.e., in the manifest, the resource appears in the body of a definition)
Virtual resources are just a variation on resources/defined types, and can be target for multiple realize
edges (also originating from classes or defines) in addition to the declare
edge.
I may be missing some other detail, but for simple manifests, those should suffice.