กำลังเพิ่มบรรทัดไปยัง / etc / profile ด้วย puppet หรือไม่


16

ฉันใช้หุ่นเชิดเพื่อติดตั้ง JDK และ tomcat ปัจจุบัน

package {
    [ "openjdk-6-jdk", "openjdk-6-doc", "openjdk-6-jre",
      "tomcat6", "tomcat6-admin", "tomcat6-common", "tomcat6-docs", 
      "tomcat6-user" ]:
    ensure => present,
}

ตอนนี้ฉันต้องการเพิ่ม

JAVA_HOME="/usr/lib/java"
export JAVA_HOME

เพื่อ/etc/profileเพียงเอาสิ่งนี้ออกไปให้พ้น ฉันยังไม่พบคำตอบที่ตรงไปตรงมาในเอกสารเลย มีวิธีแนะนำให้ทำเช่นนี้หรือไม่?

โดยทั่วไปฉันจะบอกหุ่นเชิดให้วางไฟล์นี้ไว้ที่นั่นหรือแก้ไขไฟล์นั้นได้อย่างไร ฉันใช้หุ่นโหนดเดียว (ในโหมดสแตนด์อโลน) เพียงเพื่อพยายามที่จะออกและเพื่อให้เข้าสู่ระบบของการติดตั้งเซิร์ฟเวอร์


1
หากคุณกำลังเข้าสู่ Puppet ให้ดูตัวอย่าง 42 สำหรับโมดูลที่สร้างไว้ล่วงหน้า พวกเขาไม่ได้ทำงานตามที่คุณต้องการ แต่มันสอดคล้องและมั่นคง github.com/example42/puppet-modules
kashani

คำตอบ:


26

เพิ่มไฟล์ที่จะมีคำต่อท้าย/etc/profile.d/ .shมันจะมีแหล่งที่มาเป็นส่วนหนึ่งของ / etc / โปรไฟล์ใน Red Hat และ Debian และอนุพันธ์ไม่สามารถพูดใน distros อื่น ๆ โดยทั่วไปหากเป็นไปได้ควรเพิ่มส่วนย่อยมากกว่าแทนที่ไฟล์แบบกระจายเนื่องจากมันจะปลอดภัยกว่าในอนาคต

ดังนั้นในหุ่นกระบอกต่อไปนี้จะทำ:

file { "/etc/profile.d/set_java_home.sh":
    ensure => present,
    source => ...[whatever's appropriate for your setup]...,
    ...
}

นี่คือสิ่งที่คุณกำลังมองหาหรือคุณต้องการรายละเอียดเพิ่มเติม?


1
สิ่งนี้สามารถใช้งานได้กับ OpenSUSE และ Gentoo
Kamil Kisiel

1
ขอบคุณมาก มันเกือบจะทำงานได้เพียงแค่ต้องหาวิธีที่เหมาะสมในการอ้างอิงไฟล์ที่เกี่ยวข้องกับ.ppแหล่งที่มา
miku

1
สมมติว่า Puppet 0.25 หรือดีกว่า source => puppet: /// $ modulename / $ file ด้วยเส้นทางที่แท้จริงของระบบคือ $ modulename / files / $ file
kashani

2
IIRC 2.6.5 และใหม่กว่าส่งคำเตือนการเลิกใช้หากคุณใช้หุ่นเชิด: /// $ modulename / files / $ สัญกรณ์ชื่อไฟล์ ควรมีลักษณะเหมือนหุ่นเชิด: /// modules / $ modulename / files / $ filename
ztron

42

โซลูชันของ mark เป็นวิธีที่ดีที่สุดสำหรับการเพิ่มสิ่งต่างๆลงในโปรไฟล์ของทุกคน แต่ถ้าคุณต้องการให้แน่ใจว่ามีบางบรรทัดอยู่ในไฟล์ Puppet Labs มีโมดูลที่เรียกว่าstdlibซึ่งรวมถึง file_line ซึ่งจะทำสิ่งที่คุณต้องการ ก่อนหน้านี้ฉันใช้ echo และ grep ในรูปแบบ exec เพื่อทำสิ่งนี้ แต่ file_line นั้นง่ายและสะอาดกว่ามาก

นี่คือความช่วยเหลือสำหรับมัน:

Ensures that a given line is contained within a file. The implementation
matches the full line, including whitespace at the beginning and end. If
the line is not contained in the given file, Puppet will add the line to
ensure the desired state. Multiple resources may be declared to manage
multiple lines in the same file.

Example:

file_line { 'sudo_rule':
   path => '/etc/sudoers',
   line => '%sudo ALL=(ALL) ALL',
}
file_line { 'sudo_rule_nopw':
   path => '/etc/sudoers',
   line => '%sudonopw ALL=(ALL) NOPASSWD: ALL',
}

In this example, Puppet will ensure both of the specified lines are
contained in the file /etc/sudoers.

2
ตรวจสอบให้แน่ใจว่าคุณเปิดใช้งานปลั๊กอินบนไคลเอ็นต์ไม่เช่นนั้นจะล้มเหลวอย่างเงียบ ๆ
gak

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