2014-09-03 66 views
1

假設我在一個節點上有一個exec資源,該節點用運行時確定的名字創建一個文件。我可以完全訪問正在運行的腳本,腳本知道它正在創建的文件的名稱。在Puppet中處理生成的文件

在Puppet中,最好不要使用那麼多原始紅寶石,我怎樣才能使用在File或Package資源中創建的這個文件的名稱?

從我所看到的一些人提到使用自定義的事實。但是,如果我打算多次使用相同的腳本,我該如何將事實隔離在正確的範圍內?

回答

1

這可能比看起來更困難。

通常情況下,事實是從代理向主人獲取信息的好方法。通過Facter 2.x,事實上可以採用數組或散列值來容納您希望通信的多個文件名。

但是,清單從不依賴於在同步exec(或任何)資源時確定的值。這是因爲資源在目錄申請階段進行評估。清單編譯完成後,此階段開始。代理與完整的目錄一起工作。在編譯甚至開始之前收集事實信息。因此,清單必須能夠完全依賴編譯器開始評估之前存在的信息。

請注意,如果您使用puppet apply而不是主/代理,則這不會發生變化。

我可以看到兩種方式讓你去做這件事。

  1. 將所有邏輯從主控移動到代理 - 構建一個更復雜的腳本,通過一個單片exec資源完成所有必需的工作。這可能也可能不可行。
  2. 解決方案需要兩次Puppet運行。請創建一組收集生成文件名的自定義事實。構建清單的方式要確保所有依賴文件名的邏輯都被忽略,直到文件名已確定。

兩者都可能不理想。

另一種替代方法是重新考慮模型,以便文件名無需動態生成。如果沒有更多關於具體問題/情景的知識,我不能評論可行性。

+0

再次感謝您,我最終編寫了一個使用ruby的tempfile類創建文件並返回名稱的自定義函數。 – Derongan 2014-09-04 17:37:30

相關問題