2013-08-30 44 views
0

我要使用現有的傀儡模塊最簡單的例子是提供一個服務器上的多套的事情:簡化木偶清單

file { "/var/www/MYVARIABLEHERE": 
    ensure => "directory", 
} 
mysql::db { MYVARIABLEHERE: 
    user  => MYVARIABLEHERE, 
    password => MYVARIABLEHERE, 
    host  => 'localhost', 
    grant => ['all'], 
} 

有沒有辦法來抽象了這一點,這樣我可以有發言權的數組的預先定義的選項,然後將它們傳遞到現有的傀儡模塊中,這樣我就不會得到數千行長的清單文件了?

按答案下面我已經安裝:

define mySites { 
    mysql::db { $name: 
    user  => $name, 
    password => $name, 
    host  => 'localhost', 
    grant => ['all'], 
    } 

    file { "/var/www/${name}.drupal.dev": 
    ensure => "directory", 
    } 
} 

然後我打電話:

mySites {"site": $name => "test", } 

,並出現以下錯誤:

Could not parse for environment production: Syntax error at 'name'; expected '}' 
+0

刪除'$'前面的'$ name' ...我仍然會建議變量名稱不是'name' .... – iamauser

回答

1

你可以使用一個define類型儘可能簡化:

define mydef($usern, $passn) { 
    file { "/var/www/$usern": 
    ensure => "directory", 
    } 
    mysql::db { $usern : 
     user => $usern, 
     password => $passn, 
     host => "localhost", 
     grant => ['all'], 
    } 
} 

# You have to call the define type for each cases. 
mydef{"u1": usern => "john", password => "pass", } 

# It might be possible to provide multiple arrays to a define 
# type if you use puppet's future parser 
+0

謝謝,我已經用我最新的問題更新了這個問題。 – digital

+0

您不能像這樣調用'$ name',它是一個puppet全局變量...爲變量使用不同的名稱。 – iamauser

+0

我用$ drupal取代了$ name變量,我仍然得到相同的錯誤。我的完整腳本在這裏 - http://pastie.org/private/ku1ny2unv1mofejmpwx4oq - 我非常感謝你的幫助。 – digital