2012-05-17 3 views
1

Предположим, например, у меня 3 сервера, у этих 3 серверов установлен apache. Для каждого из них я должен создать несколько ресурсов, определенных apache :: vhost.Можно ли определить список Defined Resource в Puppet?

Есть ли способ, что вместо того, чтобы делать что

node 'srv1.example.com' inherit webserver { 

    apache::vhost { 'toto1' : 
      ... => ... , 
    } 

    apache::vhost { 'toto2' : 
      ... => ... , 
    } 

    apache::vhost { 'toto3' : 
      ... => ... , 
    } 

} 

можно сделать что-то со следующим рисунком (допуская, что мой определенный ресурс только с именем может делать то, что ему нужно)

node 'srv1.example.com' inherit webserver { 

    $vhost = ['toto1', 'toto2', 'toto3']; 

    ?????? 
} 

ответ

4

Да.

node 'srv1.example.com' inherit webserver { 

    $vhosts = ['toto1', 'toto2', 'toto3']; 

    apache::vhost { [$vhosts]: 
    ... => ... , 
    } 
} 

Это, конечно, требует, чтобы все быть одинаковыми или быть на основе имени (который доступен как $name внутри Apache :: виртуальный хост определить).

Если вы хотите сохранить Apache :: виртуальный хост, как простой определить и до сих пор делают некоторые более сложные вещи, чтобы выработать параметры от имени, вы можете сделать их с промежуточным определить:

define blah::vhost { 
    $wwwroot = "/var/www/html/blah/${name}" 
    $wwwhostname = "${name}.example.com" 
    if ! defined(File[$wwwroot]) { 
    file { $wwwroot: 
     ensure => directory, 
     mode => 0775, 
    } 
    } 
    apache::vhost { $name: 
    path  => $wwwroot, 
    aliases => [$name], 
    hostname => $wwwhostname, 
    require => File[$wwwroot], 
    } 
} 

blah::vhost { [$vhosts]: }