Puppet - Özel İşlevler

Önceki bölümde açıklandığı gibi işlev, kullanıcıya özel işlevler geliştirme ayrıcalığı sağlar. Puppet, özel işlevler kullanarak yorumlama gücünü artırabilir. Özel işlev, Puppet modüllerinin ve bildirim dosyalarının gücünü artırmaya ve genişletmeye yardımcı olur.

Özel İşlev Yazma

Bir işlevi yazmadan önce akılda tutulması gereken birkaç şey vardır.

  • Puppet'ta, işlevler derleyiciler tarafından yürütülür, bu da tüm işlevlerin Puppet master üzerinde çalıştığı anlamına gelir ve aynı şekilde Puppet istemcisiyle uğraşmaları gerekmez. İşlevler yalnızca aracılarla etkileşime girebilir, ancak bilgiler gerçekler biçiminde sağlanır.

  • Puppet master, özel işlevleri yakalar, bu da Puppet işlevinde bazı değişiklikler yapılırsa, kişinin Puppet master'ı yeniden başlatması gerektiği anlamına gelir.

  • İşlev, sunucuda yürütülecektir; bu, işlevin ihtiyaç duyduğu herhangi bir dosyanın sunucuda bulunması gerektiği anlamına gelir ve işlev, istemci makineye doğrudan erişim gerektirdiğinde hiçbir şey yapılamaz.

  • Tamamen iki farklı işlev türü vardır, biri değeri döndüren Rvalue işlevi ve hiçbir şey döndürmeyen ifade işlevi.

  • Fonksiyonu içeren dosyanın adı, dosyadaki fonksiyonun adı ile aynı olmalıdır. Aksi takdirde, otomatik olarak yüklenmeyecektir.

Özel İşlev Koyulacak Yer

Tüm özel işlevler ayrı olarak uygulanır .rbdosyalar ve modüller arasında dağıtılır. Kişinin lib / puppet / ayrıştırıcı / işlev içine özel işlevler koyması gerekir. Fonksiyonlar şuradan yüklenebilir:.rb aşağıdaki konumlardan dosya.

  • $libdir/puppet/parser/functions
  • Ruby'nizdeki kukla / ayrıştırıcı / işlevler alt dizinleri $ LOAD_PATH

Yeni Bir Fonksiyon Oluşturmak

Yeni işlevler kullanılarak oluşturulur veya tanımlanır newfunction içindeki yöntem puppet::parser::Functionsmodül. İşlev adını bir sembol olarak geçirmek gerekirnewfunctionyöntem ve blok olarak çalıştırılacak kod. Aşağıdaki örnek, / user dizini içindeki dosyaya bir dize yazmak için kullanılan bir işlevdir.

module Puppet::Parser::Functions 
   newfunction(:write_line_to_file) do |args| 
      filename = args[0] 
      str = args[1] 
      File.open(filename, 'a') {|fd| fd.puts str } 
   end 
end

Kullanıcı işlevi ilan ettikten sonra, aşağıda gösterildiği gibi manifest dosyasında kullanılabilir.

write_line_to_file('/user/vipin.txt, "Hello vipin!")