Puppet

載入自定義人偶函式的依賴項

  • April 5, 2012

我編寫了一個自定義 puppet 函式,它工作正常,它依賴於 cloudservers gem(一個 Rackspace 客戶端庫)。如果我在執行 puppet 之前在伺服器上預安裝了 gem,這很好,但如果我沒有安裝 gem,則完全中斷,因為該函式似乎在“編譯”掃描期間執行,遠在我的包定義實現之前。這是我的 .pp 的樣子,get_hosts 是需要 cloudservers gem 的函式。

package { "rubygems":
   ensure   => installed,
   provider => "gem";
}

package { "cloudservers":
   ensure   => installed,
   provider => "gem",
   require  => Package["rubygems"];
}

class hosts::us {

   $hosts = get_hosts("us")

   hostentry { $hosts: }
}

define hostentry() {
 $parts   = split($name, ',')
 $address = $parts[0]
 $ip      = $parts[1]
 $aliases = $parts[2]
 host{ $address: ip => $ip, host_aliases => $aliases }
}

有沒有辦法阻止函式這麼早執行,或者至少讓它執行取決於正在安裝的庫。或者,有沒有一種方法可以在函式文件夾中的某處添加對函式可用的依賴項?

您所能做的就是將 包裝require在一個rescue LoadError塊中,該塊返回一個空列表或任何簡單的、不會引發錯誤的返回值。這必須在你的函式內部完成,因為函式所在的文件只會載入一次,但函式內部的程式碼將在每次呼叫函式時執行。

引用自:https://serverfault.com/questions/376916