ตั้งแต่ 0.24.8 เทมเพลต Puppet สามารถเรียกใช้ฟังก์ชั่น Puppet ได้หรือไม่?
ฉันสามารถใช้ฟังก์ชันที่คล้ายกันได้โดยเรียกใช้ฟังก์ชันในรายการของฉันกำหนดค่าส่งคืนให้กับตัวแปรแล้วใช้ lookupvar ('ตัวแปร') ในแม่แบบ แต่ฉันต้องการตัดชายกลางออก
ตั้งแต่ 0.24.8 เทมเพลต Puppet สามารถเรียกใช้ฟังก์ชั่น Puppet ได้หรือไม่?
ฉันสามารถใช้ฟังก์ชันที่คล้ายกันได้โดยเรียกใช้ฟังก์ชันในรายการของฉันกำหนดค่าส่งคืนให้กับตัวแปรแล้วใช้ lookupvar ('ตัวแปร') ในแม่แบบ แต่ฉันต้องการตัดชายกลางออก
คำตอบ:
เทมเพลตภายในคุณสามารถเข้าถึงวัตถุขอบเขตได้ ฟังก์ชั่นทั้งหมดที่คุณสามารถเข้าถึงได้ในหุ่นกระบอกสามารถเข้าถึงได้ผ่านวัตถุขอบเขตนั้นแม้ว่าจะไม่ได้ผ่านชื่อเดียวกัน ย่อหน้า"function_"
จุดเริ่มต้นของชื่อฟังก์ชั่น ตัวอย่างเช่นที่นี่ฉันรวมเทมเพลตหนึ่งอันไว้ในอีกอันหนึ่ง:<%= scope.function_template("template2.erb") %>
http://reductivelabs.com/trac/puppet/wiki/PuppetTemplatingมีเอกสารที่ดีเกี่ยวกับวัตถุขอบเขตภายในแม่แบบ สำหรับข้อมูลลึกจริงเกี่ยวกับแม่แบบและฟังก์ชั่นที่คุณสามารถดูภายในและlib/puppet/parser/templatewrapper.rb
lib/puppet/parser/functions.rb
<%= scope.function_template("sites/$domain/config.erb") %>
<%= scope.function_template("sites/#{domain}/config.erb") %>
สตริงของคุณควรจะ
ให้ฉันขยายคำถามไปยังฟังก์ชันที่กำหนดเองด้วย โดยทั่วไปคุณเรียกใช้ฟังก์ชั่นที่กำหนดเองเช่นเดียวกับฟังก์ชั่นในตัว (ใช้คำนำหน้า 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
ฉันไม่แน่ใจว่าคุณหมายถึงอะไรโดยฟังก์ชั่น Puppet แต่เทมเพลตหุ่นกระบอกนั้นฝังอยู่ใน Ruby ดังนั้นคุณสามารถทำอะไรก็ได้ในเทมเพลตที่คุณสามารถทำได้ใน Ruby