深入探索Chef库与资源:自定义命名空间、扩展核心类及资源提供者
1. 自定义命名空间中的方法
在某些简单场景中,我们可以通过库将模块中的方法混入到配方代码中。但这种方式存在一个问题,即方法会像在类中定义的一样对类可用,有时很难明确特定方法与具体功能集的关联。
1.1 创建自定义命名空间
下面我们将使用Ruby的面向对象特性,在Chef现有类下定义新的命名空间,为库方法提供更清晰的结构。以之前创建的 stop_file_exists? 方法为例,这次我们要将其置于更具信息性的命名空间下。
操作步骤如下:
1. 创建一个新的库文件 /tmp/part3_examples/cookbooks/testcookbook/libraries/stop_file.rb ,并粘贴以下代码:
class Chef::Recipe::StopFile
def self.stop_file_exists?
::File.exists?("/tmp/stop_chef")
end
end
这里我们在 Chef::Recipe 类下创建了一个新的命名空间 Chef::Recipe::StopFile ,并使用 self 关键字指定 stop_file_exists? 为类方法,这样就可以直接调用 Chef::Recipe::StopFil
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



