1

“在问这个愚蠢的问题之前,我确实道歉”

所以,我的想法是:

  • 厨师服务员
  • N 个节点

在每个节点上;我将定义一个基本角色;像“NodeRole”,它将有 apache、php、mysql

然后,我希望能够部署“à la demande”多个虚拟主机,每个虚拟主机都包含完整的drupal 安装。

所以这个新角色将具有一些属性,例如:

"username"
"password"
"URL"

当“部署”这个时;它会 :

- Add an entry to apache virtual host configuration
- Create a user account with provided password
- Create a database user with provided password
- Install drupal with the provided credentials

我怎样才能“动态地”做到这一点,而不必每次我想部署一个新站点时都创建一个 txt 文件。

是否可以与厨师服务器 api 交互并说出类似“部署 www.example.com john mypassword”的内容?

谢谢 !

4

1 回答 1

3

Chef 是一个拉模型,由客户请求他们的配置。如果您想推动,则必须注入其他东西才能做到这一点。一个命令调度程序,可以在需要时调用客户端与服务器联系。

如果你想一遍又一遍地做同样的事情,感觉就像创建一个 LWRP http://wiki.opscode.com/display/chef/Lightweight+Resources+and+Providers+(LWRP ) 可能是你最好的选择。然后,您可以将您拥有的变量传递给它,这样代码就不需要复制 X 次。

如果您不想为每次安装创建新配方,另一种选择是在属性对象中使用 JSON 混搭功能并循环通过创建安装的对象集合。这种方式是数据驱动的,但我个人希望每次安装使用不同的配方,因为它可能对查看运行列表的人更透明。

使用属性 mash 的示例如下所示。您也可以使用数据包来实现这一点。在这种情况下,您可以更新文件中的 JSON 表示并使用刀上传或在 UI 中进行更改。我再次推荐每个站点的食谱以提高透明度,但这会导致代码/更新运行列表等

您的属性 json 对象看起来有点像这样或类似

"drupal_Sites" : {
    "site1": { "username": "dave", "password" :"password123", "URL":"www.madeup.com" },
    "site2": { "username": "dave2", "password" :"password12", "URL":"www.madeup2.com" }
}

然后在你的食谱中会是这样的

node["drupal_sites"].each do | site | 

Install = yourdrupalcookbook_InstallResource "#{site['URL']}" do
    username site['username']
    password site['password']
    deploy site['URL']
    action :nothing 
    provider "yourdrupalcookbook_InstallProvider"
end

Install.run_action(:create)

结尾

于 2012-11-09T10:35:57.637 回答