【问题标题】:Simplifying Puppet Manifest简化 Puppet 清单
【发布时间】:2013-08-30 15:50:08
【问题描述】:

我想使用现有的 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 '}'

【问题讨论】:

  • 删除$ 前面的$name... 我仍然建议为变量取一个不同的名称而不是name....

标签: puppet


【解决方案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

【讨论】:

  • 你不能这样调用$name,它是一个傀儡全局变量...为变量使用不同的名称。
  • 我用 $drupal 替换了 $name 变量,但我仍然得到同样的错误。我的完整脚本在这里 - pastie.org/private/ku1ny2unv1mofejmpwx4oq - 非常感谢你到目前为止的帮助。
  • 我的错。愚蠢的。 drupal 前面不应该有美元符号 $。应该写成 mySites{"site": drupal => "test",}。我已经编辑了我的答案....
  • 使用你的例子我知道得到“无效的参数密码”,我使用 vagrant 来做这一切会有什么不同吗?我的木偶版本是 2.7.19。对不起,我很痛苦!
  • 我不确定vagrant,我没用过。不知道在这里建议什么。也许您可以在 pastebin 或其他东西中发布整个错误...
猜你喜欢
  • 2015-02-01
  • 2014-09-06
  • 1970-01-01
  • 2013-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多