Puppet class inheritance confusion

Posted by EMiller on Server Fault See other posts from Server Fault or by EMiller
Published on 2010-11-03T21:40:57Z Indexed on 2011/01/16 11:55 UTC
Read the original article Hit count: 316

Filed under:

I've read the documentation on scope, but I'm still having trouble working this out. I've got two environments that are very similar - so I've got:

modules/django-env/manifests/init.pp

class django-env {
    package { "python26":
        ensure => installed
    }
    # etc ...
}
import "er.pp"

modules/django-env/manifests/er.pp

$venvname = "er"
$venvpath = "/home/django/virtualenvs"

class er {
    file { "$venvpath/$venvname" :
        ensure => directory
    }
    # etc ...
}
class er-dev {
    include er
}
class er-bce-dev {
    $venvname = "er-bce"
    include er
}

manifests/modules.pp

import "django-env"

manifests/nodes.pp

node default {
    # etc ...
}
node 'centos-dev' imports default {
    include django-env
    include er-bce-dev
    include er-dev
}

The result here is that the "inheritance" works - but only the first "er-" item under the 'centos-dev' node is acted upon, I either get er-bce-dev or er-dev, but not both. There must be some basic thing I'm misunderstanding here.

Is it the difference between import and include ? (not sure I understand that)

© Server Fault or respective owner

Related posts about puppet