2016-09-14 151 views
0

我在写一个自定义提供程序,我只打算在它所连接的模块的上下文中使用它。该模块已经为我需要采取行动的资源(例如用户名,密码,IP地址)定义了一些东西。我想要做的是从自定义提供程序访问puppet清单中的范围变量。从自定义提供程序访问Puppet模块变量

这可能吗?

init.pp:

class mymodule(
    $username = 'admin', 
    -- snip -- 
} 

provider.rb:

class Puppet::Provider::MyProvider < Puppet::Provider 
    def self.configure 
     #can I get to $mymodule::username here? 

一些背景:

我写了一组将通过API配置的服务器类型。我想有一个像类型:

mymodule_mail_settings { 'current': 
    server => 'mail.server.com' 
    mailuser => 'mail' 
} 

我试图避免被具有通过用户名/密码/ IP访问服务器的API传递到所有这些不同的类型。

+1

这不是做这件事的方法。您想要将提供者与某个类型相关联,然后可以使用分配给其参数的属性作为提供者中的变量。 –

+0

问题是我有大约20种类型都适用于此资源。他们需要用户名和密码来查询资源,所以我试图看看是否可以避免将用户名,密码和IP地址粘贴到每种类型中,特别是如果它们全部在可用的情况下被调用 – Spence

+0

20种类型都需要一个用户名和密码听起来有点可疑,但你应该能够在类型源代码中做一些ruby技巧,使用户名和密码可以从基本类型中重用。 –

回答

0

变量只在评估清单代码和创建目录的上下文中才有意义。它们不会成为目录的零件。这就是您的类型/提供者代码无法直接使用它们的原因。

为避免将冗余信息传递给大量共享资源,可以使用一些“巧妙”的技巧。在我前段时间写的a patch中,我在Puppet的resources类型中加入了这种元信息。你不能在模块中做到这一点,但你可以添加你自己的元类型来携带这样的提示。