2012-05-17 84 views
1

比方說,我有3臺服務器,這3臺服務器都安裝了apache。 對於他們每個人,我都要實例化幾個apache :: vhost定義的資源。是否可以在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 ::虛擬主機裏面定義)。

如果你想保持阿帕奇::虛擬主機作爲一個簡單的定義,仍然做一些更復雜的東西摸出從名字參數,你可以做他們中間定義:

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]: } 
相關問題