Virtual Resources

Resources in Puppet can only be declared once per client configuration. This can make managing resources that relate to multiple configurations complicated. To alleviate this issue, we have the virtual resource. When marked with a @ prefix, a resource can be declared, but not yet applied to the client. When we want to apply it to a particular client, it must be realized first.

I’ve declared three virtual users: bob, alice, and eve, each of which has a different group membership. If I’d like to realize one of these users, I could use the realize User[username] mechanism. It could be tedious to realize each of your users in this fashion. In order to realize virtual resources in groups, specified by their attributes, we can use collections. The last two statements are collections; each is a collection of users defined by their membership in a particular group. The first collection will contain alice and eve and the second will contain all three:

@user { bob: 
    ensure => present,
    groups => [ "mail", "web" ], 
    }

@user { alice: 
    ensure => present,
    groups => [ "db", "web" ],        
    }

@user { eve:
    ensure => present,
    groups => [ "db", "web", "mail", "admin" ],
    }

User <| group == db |>

User <| group == web |>

Get Managing Infrastructure with Puppet now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.