我可以使用Chef作为PaaS部署协调器来部署多个drupal站点吗?

时间:2012-11-08 17:15:59

标签: drupal deployment chef cookbook

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

所以,我的想法是:

  • 厨师服务器
  • N个节点

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

然后,我希望能够部署'àlademande'多个虚拟主机,每个虚拟主机包含一个完整的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”之类的内容?

谢谢!

1 个答案:

答案 0 :(得分:3)

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

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

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

使用属性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)