我有一堆针对Puppet 2.7编写和测试的自定义类型和提供程序。无论如何。所述类型/提供者位于专用模块中,该模块仅包含lib子目录,其下包含所有扩展。自定义类型在相同模块子目录下的另一个模块/类中进行测试。据我了解,这曾经属于“最佳实践”。现在,使用Puppetserver 2.1.1至少有两件事发生了变化:
未加载在其他模块中定义的扩展名。如果使用自定义类型的类在模块“test”下的清单中声明,并且自定义类型/提供者位于模块“_ext”下,则我得到Error: Failed to apply catalog: Parameter name failed on Resources[<my_custom_type>]
。甚至没有从服务器下载扩展。一旦我将_ext / lib符号链接到'test / lib',它就会起作用。删除了符号链接,在下一个代理程序运行时从缓存中清除所有内容。那么,加载模块中定义的插件的新规则是什么?
我使用相同的命令行实用程序为不同类型提供了多个提供程序。最后,我已经将一些类实例方法分解为从Puppet :: Provider继承并且是'required'的父类,并作为'parent'参数传递给Puppet :: Type.type(:)。提供函数。 require需要使用相对路径,例如require 'puppet/provider/<parent>.rb'
它适用于Puppet 2.7但Puppetserver 2.1.1会抛出一个除外:
Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Evaluation Error: Error while evaluating a Resource Statement, Could not autoload puppet/type/<custom_type>: Could not autoload puppet/provider/<custom_type>/<custom_provider>: no such file to load -- puppet/provider/<parent>
那么,在这种情况下包含父类的最佳方法是什么?在服务器和代理上,类的完整路径会有所不同,所以这几乎不是一种选择。 / p>
我使用了服务器上的默认设置和最小代理配置。 pluginsync在代理上设置为true,但无论如何都是默认值。
答案 0 :(得分:0)
第一个问题:
模块名称以下划线开头,被忽略(不明白为什么)。但是,将_ext
更改为ext
可以下载,缓存等所有扩展程序
第二个问题,一个肮脏的修复:
在puppetserver.conf中添加ruby-load-path的绝对路径:
ruby-load-path: [/opt/puppetlabs/puppet/lib/ruby/vendor_ruby, /etc/puppetlabs/code/environments/<myenvironment>/modules/ext/lib]
不知道如何让Puppetserver(或者更确切地说,JRuby解释器)查看 Ruby文件的每个 lib
子目录。
在客户端上,一旦在服务器上进行“评估”,一切都会顺利进行。