我需要在我的食谱中重复使用一些场景 - 在一台机器上创建多个用户并为每个用户安装相同的软件。安装软件是一项重复操作,我希望将其放在一个地方并重复使用。
我查看了 Providers,但它们似乎有一种load_current_resource
加载当前状态的方法系统,我无法使用这种方法,因为有些用户可能已经安装了这个软件,而其他用户还没有,如果 Chef 在后台调用这个方法,我就无法控制目前正在与哪个特定用户合作。
我也看过MySQL 手册这会将一些自定义代码放入libraries
文件夹中。这对我来说可能是最好的选择,但我不知道这是否是 Chef 的方式。
所以问题是 - Chef 的方式是什么,可以将这些可重复使用的代码部分用于同一个菜谱或多个菜谱中多次使用。
答案1
在 Chef 中,您可以使用一些工具技术来实现这一点,但是,我认为您正在寻找的解决方案不是基于代码/语法的。我认为在这里您想将可重复的代码封装在一个或多个配方中(如果不止一个,则将它们分组到一个角色中)。接下来,对于所有安装调用,利用通用的 not_if/only_if 子句仅在某些条件下安装。
文档:http://docs.opscode.com/resource_common.html
另一种方法是利用数据包,这种方法虽然稍微痛苦一些,但却能提供更干净的源代码树。为您想要安装的每个用户设置简单的 json 结构化数据包,然后在您的配方中循环遍历数据包中的项目并应用您的逻辑。