2016-09-14 156 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類型中加入了這種元信息。你不能在模塊中做到這一點,但你可以添加你自己的元類型來攜帶這樣的提示。