rjinski
rjinski

Reputation: 615

Puppet class orders break using defines

I have a level of dependency in the order of modules being applied:

class build() {
    # define order
    Class['base'] -> Class['config'] -> Class['app'] -> Class['sso']

    class { 'base' : ... }
    class { 'config' : ... }
    # etc
}

class base::init.pp () {
    class { 'base::prereqs' : ... }
    class { 'base::worker' : 
        require => Class['base::prereqs']
        ... 
    }
}

# etc etc

The error occurs when base::prereqs has:

define base::prereqs::file () { ... }

class base::prereqs () {
    $files = [ 'file_name', ... ]
    base::prereqs::file { $files : }
}

The desired order is base::init --> base::prereqs --> base::worker --> config::init --> config::prepreqs --> config::worker --> app::init ...

However the actual order using a define becomes...

base::init --> base::prereqs (except resources created in the define) --> config::init --> config::prereqs --> ... --> base:prepreqs (resources created by define) --> base::worker

The ordering inside base is consistent but the level above in order does not seem to know that resources have been added inside of prereqs and considers base complete.

Any help?

Puppet v3.6.2 (Puppet Enterprise 3.3.2)

Upvotes: 1

Views: 50

Answers (1)

Felix Frank
Felix Frank

Reputation: 8223

Ordering relationships do not transcend common class declaration using include or class { 'title': }.

The easiest way to go about this in your scenario is to contain classes.

class base {
    contain base::prereqs
    contain base::worker
    Class['base::prereqs'] -> Class['base::worker']
}

Upvotes: 2

Related Questions