base
和infrastructure
,还有两个食谱:apt
和php
。 base
角色的目的是进行一些基本的供应和程序包管理,并从github克隆存储库等。apt
食谱有一个食谱,update_upgrade.rb
运行execute
资源以有效地调用[ C0],apt update
,apt upgrade
等apt-get autoremove
角色通过infrastructure
食谱设置了PHP。稍后会再介绍,但它可以很好地说明我的需求。php
食谱有两个配方:php
和add_repository.rb
。 install.rb
配方运行add_repository
资源,将execute
存储库添加到ondrej/php
。 apt
配方遍历软件包列表,以便从添加的存储库安装php。这是对实用程序的需求所在。症结所在,在添加PHP存储库之后,在安装其软件包之前,我需要运行install
。实现此目标的最佳方法是什么?
[最初,我将apt update
和add_repository
资源合并到一个install
配方中,并计划使用install
将我的include_recipe apt::update_upgrade
食谱的apt
资源插入该配方中。但是,在仔细阅读厨师文档和这篇方便的文章:execute
之后,似乎Should I use include_recipe or add the recipe to run_list?不会立即在其放置的位置运行。该文章中的建议是使用运行列表来指示配方的精确执行,而厨师文档确实建议按照列出的顺序执行配方。
这导致我将php资源分解为include_recipe
和add_repository
,并对install
使用以下角色运行列表:
infrastructure
我的"run_list": [
"recipe[php::add_repository]",
"recipe[apt::update_upgrade]",
"recipe[php::install]"
]
食谱的php
具有metadata.rb
,并且Chef不会出错。但是,它也不会在depends apt
之后触发update_upgrade
配方。相反,add_repository
配方在install
之后运行,这会导致错误。
所有这些使我假设角色运行列表也以类似于add_repository
的阶段执行。这个准确吗?
如果这些假设是正确的,那么似乎似乎唯一可以肯定的更新新存储库的方法就是将include_recipe
食谱中的execute
资源复制到我的`php食谱中。我内心的干燥主义者对此大声尖叫。因此存在实用程序配方/资源的问题。
最佳做法是将适当的厨师资源与apt
结合使用。
由于使用的是notification,请使用适当的apt
资源,例如apt
(以确保apt信息库是最新的),apt_update
(使用apt来操作软件包,apt_update
(用于添加apt储存库),并尝试避免使用apt_package
资源来完成所有操作-这将利用厨师的独有优势(您可能希望阅读apt_package
)
每个厨师资源,可以通知和/或订阅通知。但是按顺序写入资源时,可能不需要使用它。
[如果您的这些建议不能正确引导您,请在您遇到问题的地方发布相关代码段,我会尽力帮助您。