Puppet 简化傀儡舱单

Puppet 简化傀儡舱单,puppet,Puppet,我想使用现有的puppet模块在服务器上提供多组内容最简单的示例是: file { "/var/www/MYVARIABLEHERE": ensure => "directory", } mysql::db { MYVARIABLEHERE: user => MYVARIABLEHERE, password => MYVARIABLEHERE, host => 'localhost', grant =>

我想使用现有的puppet模块在服务器上提供多组内容最简单的示例是:

file { "/var/www/MYVARIABLEHERE":
    ensure => "directory",
}
mysql::db { MYVARIABLEHERE:
    user     => MYVARIABLEHERE,
    password => MYVARIABLEHERE,
    host     => 'localhost',
    grant    => ['all'],
}
有没有办法把它抽象出来,这样我就可以说一组预定义的选项,然后将它们传递到现有的puppet模块中,这样我就不会得到一个数千行长的清单文件

根据以下答案,我已设置:

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 '}'

您可以使用
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

您不能这样调用
$name
,它是一个伪全局变量。。。为变量使用不同的名称。我用$drupal替换了$name变量,但仍然得到相同的错误。我的全部剧本在这里--我真的很感谢你到目前为止的帮助。我的错。傻。drupal的前面不应该有美元符号
$
。它应该写在mySites{“site”:drupal=>“test”,}。我已经编辑了我的答案…使用你的例子,我知道得到“无效参数密码”,我用vagrant做这些会有什么不同吗?我的木偶版本是2.7.19。很抱歉让你很痛苦!我不确定流浪汉,我从来没有用过它。不知道这里有什么建议。可能是您可以将整个错误发布在pastebin或其他内容中…删除
$
前面的
$name
。。。我仍然建议变量使用不同的名称,而不是
name
。。。。