การตรวจสอบเวอร์ชั่นเฉพาะ + + และวนรอบอื่น


2

เพิ่งเริ่มต้นหุ่นเชิด อย่างที่คนอื่นรู้การเริ่มต้นบางสิ่งนั้นยากที่สุดเสมอ สำหรับการปฏิบัติที่ดีฉันต้องการทำสิ่งต่อไปนี้

if 'openssl' version == '1.0.2b' or '1.0.2d'
    upgrade to 1.1.1e
else
     do nothing

ปัจจุบันรหัสของฉันดูเหมือนว่านี้

 package { 'openssl':
    if 'openssl' version == '1.0.2b' or '1.0.2d' {
        ensure => '1.1.1e'
    }
    else {
    }

ฉันมีปัญหาหลายประการ:

1) ฉันไม่คิดว่าไวยากรณ์ของฉันสำหรับรุ่น openssl ถูกเขียนอย่างถูกต้อง เมื่อฉันค้นหาด้วยกูเกิ้ลง่าย ๆ ฉันเห็นผู้คนรับรองเวอร์ชันของ openssl บางอย่างเช่น '1.0.1e-15.el6' บางครั้งก็เป็น '1.0.1e-16.el6_5.7' ฉันสับสนในการพิจารณาว่าอะไรหลังจาก '-'

2) ฉันไม่คิดว่าการพิมพ์ "openssl 'จะทำให้หุ่นรู้ว่าเป็น openssl

3) วิธีการตรวจสอบรุ่นของ openssl ฉันคิดว่าไวยากรณ์ของฉัน if 'openssl' version == 'xxx' ไม่ถูกต้อง.

คำตอบ:


0

มีสองสิ่งที่คุณสามารถทำได้เพื่อแก้ไขปัญหานี้ซึ่งจะทำให้โค้ดของคุณดีขึ้นในระยะยาว

  1. ใช้ ไลบรารี stdlib ซึ่งมีการปรับปรุงการดำเนินการเปรียบเทียบสตริงเช่น versioncmp(). มันจะทำงานอย่างถูกต้องกับสตริงรุ่นที่มีทศนิยมและตัวอักษร

 if versioncmp($::puppetversion, '3.0.0') < 0 {
    fail("foobar requires puppet 3.0.0 or greater, found: \'${::puppetversion}\'")
  }

  1. อย่าทำคำสั่งเงื่อนไขของคุณภายในทรัพยากรของคุณ อย่างน้อยที่สุดก็แยกพวกเขาออกเพื่อให้พวกเขาอยู่ด้านบนของรายการของคุณ (รหัสไม่ได้ทดสอบ)

if versioncmp( '$openssl', '1.1.3e') < 0 {
   $openssl_version = '42'
}

package {'openssl': 
  ensure => "$openssl_version",
}

แม้ว่าคุณจะต้องถามตัวเองว่านี่คือสิ่งที่คุณต้องการจะทำหรือไม่? แนวปฏิบัติที่ดีที่สุดของหุ่นกระบอกคือความต้องการทางธุรกิจของคุณไม่ควรเป็นส่วนหนึ่งของโมดูลฐานของคุณ ควรถูกแยกออกเป็นโมดูลบทบาท / โปรไฟล์หรือด้วย hiera คุณอาจจะดีกว่าด้วยตัวเลือกต่อไปนี้

ตอบเพียงตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์ทั้งหมดของคุณเป็นรุ่นล่าสุดแล้ว

package {'openssl':
  ensure => latest,
}

B. ถ้าคุณมีบางโหนดนั่นก็แค่ ต้อง ใช้รุ่นที่เก่ากว่า / ไม่ปลอดภัย จากนั้นสร้างคลาสที่กำหนดพารามิเตอร์แล้วแทนที่ openssl_version พารามิเตอร์ที่มี hiera หรือบทบาท / โปรไฟล์

ข้อมูลเพิ่มเติม

https://puppetlabs.com/blog/patching-heartbleed-openssl-vulnerability-puppet-enterprise http://garylarizza.com/blog/2014/02/17/puppet-workflow-part-2/

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.