扩展 Chef IIS 池 LWRP
Extending Chef IIS Pool LWRP
我想扩展 Chef IIS 池 LWRP (https://github.com/chef-cookbooks/iis/blob/master/resources/pool.rb),我希望有人能帮我弄清楚语法。
这是我所在的位置:
我创建了一本新的食谱,然后我引用了 IIS 食谱,
之后我在我的库文件夹中创建了这个文件:
# Located At: myCookbook/libraries/my_iis_pool.rb:
::Chef::Recipe.send(:include, Opscode::IIS)
class Chef
class Resource::MyPool < Chef::Resource::IIS::Pool
# Some Magic Happens
end
end
然后食谱看起来像这样:
# Located At: myCookbook/recipes/default.rb
mypool 'new-pool' do
end
我似乎无法正确理解 < Chef::Resource::IIS::Pool inherit 语句。
它会产生此错误:
NameError: 未初始化常量 Chef::Resource::IIS
我也试过了
class Resource::MyPool < Chef::ResourceResolver.resolve(:iis_pool)
产生此错误:
TypeError: 超类必须是 Class(给定为 NilClass)
如有任何帮助,我们将不胜感激。
谢谢,
亚伯拉罕
不幸的是,没有一种好方法可以像那样直接扩展基于 DSL 的自定义资源。最好的方法是只创建一个在内部使用 iis_pool
的新自定义资源,有点像包装器模式。这只允许您在现有资源代码之前或之后做一些事情,如果这还不够,您可能需要深入研究一些更令人兴奋的元编程,例如 edit_resource
API 或在配方中声明 类文件。
我想扩展 Chef IIS 池 LWRP (https://github.com/chef-cookbooks/iis/blob/master/resources/pool.rb),我希望有人能帮我弄清楚语法。
这是我所在的位置:
我创建了一本新的食谱,然后我引用了 IIS 食谱,
之后我在我的库文件夹中创建了这个文件:
# Located At: myCookbook/libraries/my_iis_pool.rb:
::Chef::Recipe.send(:include, Opscode::IIS)
class Chef
class Resource::MyPool < Chef::Resource::IIS::Pool
# Some Magic Happens
end
end
然后食谱看起来像这样:
# Located At: myCookbook/recipes/default.rb
mypool 'new-pool' do
end
我似乎无法正确理解 < Chef::Resource::IIS::Pool inherit 语句。
它会产生此错误:
NameError: 未初始化常量 Chef::Resource::IIS
我也试过了
class Resource::MyPool < Chef::ResourceResolver.resolve(:iis_pool)
产生此错误:
TypeError: 超类必须是 Class(给定为 NilClass)
如有任何帮助,我们将不胜感激。
谢谢,
亚伯拉罕
不幸的是,没有一种好方法可以像那样直接扩展基于 DSL 的自定义资源。最好的方法是只创建一个在内部使用 iis_pool
的新自定义资源,有点像包装器模式。这只允许您在现有资源代码之前或之后做一些事情,如果这还不够,您可能需要深入研究一些更令人兴奋的元编程,例如 edit_resource
API 或在配方中声明 类文件。