Puppet: ทดสอบว่ามีการกำหนดทรัพยากรหรือสร้างขึ้น


14

ฉันพยายามหาวิธีทดสอบว่าทรัพยากรถูกกำหนดไว้แล้วในไฟล์อื่นและถ้าไม่สร้างมันขึ้นมา? ตัวอย่างรวดเร็ว:

  if File[$local_container] {
    alert("Testing - It existed $local_container")
  } else {
    file{ "$local_container":
      ensure => directory,
    }
  }

อย่างไรก็ตาม - File[$local_container]ดูเหมือนจะประเมินเป็นจริงเสมอ มีวิธีทำเช่นนี้หรือไม่?

คำตอบ:


10

วิธีที่ดีกว่าในการทำเช่นนี้คือการใช้ฟังก์ชั่น sure_resource จาก puppetlabs stdlib

ใช้ประเภททรัพยากรชื่อและรายการของคุณลักษณะที่อธิบายถึงทรัพยากรเป็นพารามิเตอร์

บอกว่าคุณมีกรณีทดสอบเพื่อสร้างทรัพยากรหากยังไม่มีอยู่ -

ensure_resource('package', 'test-pkg', {'ensure' => 'present'})

ดูเหมือนว่าจะสะอาดกว่านี้ผ่านเครื่องหมายนี้ ขอบคุณสำหรับทิป!
แคระ

15

คุณหมายถึง "test ว่าทรัพยากรมีการกำหนดไว้แล้ว" หรือไม่? หากคุณกำหนดทรัพยากร (เช่นfile {}ฯลฯ ) หุ่นเชิดจะสร้างสิ่งที่คุณกำลังอธิบายหากไม่มีอยู่แล้ว (สมมติว่าคุณผ่านensure => presentแน่นอน)

ในการตรวจสอบว่ามีการกำหนดทรัพยากรไว้ในแค็ตตาล็อกหรือไม่:

mark-draytons-macbook:~ mark$ cat test.pp 
file { "/tmp/foo": ensure => present }

if defined(File["/tmp/foo"]) {
  alert("/tmp/foo is defined")
} else {
  alert("/tmp/foo is not defined")
}

if defined(File["/tmp/bar"]) {
  alert("/tmp/bar is defined")
} else {
  alert("/tmp/bar is not defined")
}

mark-draytons-macbook:~ mark$ puppet test.pp 
alert: Scope(Class[main]): /tmp/foo is defined
alert: Scope(Class[main]): /tmp/bar is not defined
notice: //File[/tmp/foo]/ensure: created

หมายเหตุ: defined()คือขึ้นอยู่กับการสั่งซื้อแยก


5
ส่วนที่ "ขึ้นอยู่กับคำสั่งแยกวิเคราะห์" นั้นทำให้มันเกือบจะไร้ประโยชน์
joerx

2

หรือ....

unless File["${local_container}"] {
  file{ "${local_container}":
     ensure => directory,
  }
}

และคอยจับตาดูคำพูดและวงเล็บปีกกา ....


-2

เพียง

file{ "$local_container":
  ensure => directory,
  replace => false,
}

ไม่ถ้า"$local_container"ไฟล์นั้นถูกกำหนดไว้ที่อื่นแล้ว (เช่นพูดโดยสิ่งที่ต้องการควบคุมสิทธิ์ / เจ้าของ) คุณไม่สามารถกำหนดทรัพยากรเดียวกันสองครั้ง
แคระ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.