Menambahkan baris ke / etc / profile dengan boneka?

16

Saya menggunakan boneka untuk menginstal JDK dan kucing jantan saat ini.

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

Sekarang saya ingin menambahkan

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

untuk /etc/profile, hanya untuk mendapatkan ini keluar dari jalan. Saya belum menemukan jawaban langsung di dokumen, belum. Apakah ada cara yang disarankan untuk melakukan ini?

Secara umum, bagaimana cara saya memberi tahu boneka untuk menempatkan file ini di sana atau memodifikasi file itu? Saya menggunakan boneka untuk satu simpul (dalam mode mandiri) hanya untuk mencobanya dan untuk menyimpan log pengaturan server .

miku
sumber
1
Jika Anda masuk ke Wayang, lihat Example42 untuk modul prebuilt. Mereka tidak selalu bekerja seperti yang Anda inginkan, tetapi mereka koheren dan stabil. github.com/example42/puppet-modules
kashani

Jawaban:

26

Tambahkan file ke /etc/profile.d/dengan akhiran .sh. Ini akan bersumber sebagai bagian dari / etc / profile di Red Hat dan Debian dan turunannya, tidak dapat dikatakan di distro lain. Secara umum, jika memungkinkan, lebih baik menambahkan snippet daripada mengganti file yang didistribusikan karena cenderung lebih aman di masa depan.

Jadi dalam wayang, hal-hal berikut bisa dilakukan:

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

Ini yang Anda cari atau perlu lebih detail?

menandai
sumber
1
Ini juga berfungsi pada OpenSUSE dan Gentoo.
Kamil Kisiel
1
Terima kasih, itu hebat. Sudah hampir berfungsi, hanya perlu menemukan cara yang tepat untuk referensi file relatif ke .ppsumbernya.
miku
1
Dengan asumsi Wayang 0.25 atau lebih baik sumber => wayang: /// $ modulename / $ file dengan jalur sistem nyata menjadi $ modulename / file / $ file
kashani
2
IIRC 2.6.5 dan yang lebih baru memancarkan peringatan penghentian jika Anda menggunakan boneka: /// $ modulename / file / $ notasi nama file. seharusnya terlihat seperti boneka: /// modules / $ modulename / file / $ filename
ztron
42

solusi mark adalah yang terbaik untuk menambahkan hal-hal ke profil semua orang, tetapi jika Anda perlu memastikan beberapa baris dalam file, Puppet Labs memiliki modul hebat bernama stdlib yang mencakup file_line yang akan melakukan apa yang Anda butuhkan. Sebelumnya saya telah menggunakan echo dan grep dalam jenis exec untuk melakukan ini, tetapi file_line jauh lebih mudah dan bersih.

Inilah bantuan untuk itu:

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.
Mark McKinstry
sumber
2
Pastikan Anda mengaktifkan pluginsync pada klien, jika tidak, ini akan gagal.
gak
1
inilah dokumennya
Francesco Casula