เรียกฟังก์ชั่น Puppet จากแม่แบบ Puppet หรือไม่?


13

ตั้งแต่ 0.24.8 เทมเพลต Puppet สามารถเรียกใช้ฟังก์ชั่น Puppet ได้หรือไม่?

ฉันสามารถใช้ฟังก์ชันที่คล้ายกันได้โดยเรียกใช้ฟังก์ชันในรายการของฉันกำหนดค่าส่งคืนให้กับตัวแปรแล้วใช้ lookupvar ('ตัวแปร') ในแม่แบบ แต่ฉันต้องการตัดชายกลางออก

คำตอบ:


18

เทมเพลตภายในคุณสามารถเข้าถึงวัตถุขอบเขตได้ ฟังก์ชั่นทั้งหมดที่คุณสามารถเข้าถึงได้ในหุ่นกระบอกสามารถเข้าถึงได้ผ่านวัตถุขอบเขตนั้นแม้ว่าจะไม่ได้ผ่านชื่อเดียวกัน ย่อหน้า"function_"จุดเริ่มต้นของชื่อฟังก์ชั่น ตัวอย่างเช่นที่นี่ฉันรวมเทมเพลตหนึ่งอันไว้ในอีกอันหนึ่ง:<%= scope.function_template("template2.erb") %>

http://reductivelabs.com/trac/puppet/wiki/PuppetTemplatingมีเอกสารที่ดีเกี่ยวกับวัตถุขอบเขตภายในแม่แบบ สำหรับข้อมูลลึกจริงเกี่ยวกับแม่แบบและฟังก์ชั่นที่คุณสามารถดูภายในและlib/puppet/parser/templatewrapper.rblib/puppet/parser/functions.rb


เยี่ยมมากขอบคุณ คำเตือนสำหรับทุกคนที่ใช้ฟังก์ชัน template () ในเทมเพลต: คุณยังต้องมีคุณสมบัติเหมือนที่คุณทำในรายการหุ่นกระบอก (เช่น scope.function_template ("module / template.erb")
sh-beta

เป็นไปได้ไหมที่จะใช้ตัวแปรสำหรับชื่อไฟล์เท็มเพลตเพื่อโหลดสำหรับการเรียกใช้ฟังก์ชันเทมเพลตภายในเทมเพลต? เช่น<%= scope.function_template("sites/$domain/config.erb") %>
แกรี่

อย่างแน่นอน เพียงแค่ระวังว่าคุณทำงานใน Ruby ไม่ใช่ DSL ของ Puppet ดังนั้นชื่อตัวแปร (และกฎการแก้ไข) จึงแตกต่างกัน <%= scope.function_template("sites/#{domain}/config.erb") %>สตริงของคุณควรจะ
jgoldschrafe

3

ให้ฉันขยายคำถามไปยังฟังก์ชันที่กำหนดเองด้วย โดยทั่วไปคุณเรียกใช้ฟังก์ชั่นที่กำหนดเองเช่นเดียวกับฟังก์ชั่นในตัว (ใช้คำนำหน้า function_) แต่ให้แน่ใจว่าคุณผ่านพารามิเตอร์ทั้งหมดในอาร์เรย์:

module Puppet::Parser::Functions
  newfunction(:namegoeshere, :type => :rvalue) do |args|
    # ...
  end
end

<%= scope.function_namegoeshere(["one","two"]) %>

โปรดทราบว่ามันยังใช้งานได้โดยไม่ต้องใช้เครื่องมือจัดฟันแบบเหลี่ยมในหุ่นกระบอกบางรุ่น ข้อมูลเพิ่มเติม: http://docs.puppetlabs.com/guides/custom_functions.html#referencing-custom-functions-in-templates

อีกสิ่งที่สำคัญคือมีข้อบกพร่อง (หรือคุณสมบัติ) ในPuppet 2.6 หรือเก่ากว่าที่ฟังก์ชั่นที่กำหนดเองไม่ได้โหลดอัตโนมัติในขอบเขตแม่แบบ คุณต้องโหลดมันด้วยตนเองมิฉะนั้นจะไม่พบฟังก์ชั่น!

<% Puppet::Parser::Functions::function('namegoeshere') %>

ข้อมูลเพิ่มเติม: http://projects.puppetlabs.com/issues/7991


-2

ฉันไม่แน่ใจว่าคุณหมายถึงอะไรโดยฟังก์ชั่น Puppet แต่เทมเพลตหุ่นกระบอกนั้นฝังอยู่ใน Ruby ดังนั้นคุณสามารถทำอะไรก็ได้ในเทมเพลตที่คุณสามารถทำได้ใน Ruby


ฟังก์ชั่นหุ่นกระบอกพื้นเมืองคือสิ่งต่างๆเช่น fqdn_rand (), sha1 (), แท็ก () ฯลฯ ฟังก์ชั่นหุ่นกระบอกที่กำหนดเองจะถูกเก็บไว้ภายใต้โมดูล / modulename / ปลั๊กอิน / หุ่นกระบอก / parser / ฟังก์ชั่น / สามารถเรียกสิ่งเหล่านี้จากภายในเทมเพลตได้หรือไม่?
sh-beta
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.