“在问这个愚蠢的问题之前我道歉”
所以,我的想法是:
在每个节点上;我将定义一个基本角色;像“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”之类的内容?
谢谢!
答案 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)
端