Ini sangat mudah di CFEngine ... Tapi saya berada di lingkungan Wayang sekarang, dan harus dapat menetapkan / memastikan / memeriksa variabel sysctl.conf tertentu. Di dunia CFEngine, saya cukup memeriksa baris tertentu dalam file konfigurasi ... Saya telah menemukan referensi kecil ke modul sysctl pada wiki Wayang dan sebuah proyek di github yang tampaknya melakukan apa yang saya inginkan.
Tetapi tidak ada yang benar-benar didokumentasikan dengan baik. Saya hanya mencari cara untuk mengedit beberapa nilai seperti net.core.rmem_default
dan net.core.wmem_max
. Dalam format proyek yang dihosting di github , konfigurasi dalam manifes init.pp saya akan terlihat seperti:
class sysctl {
sysctl::value {
"net.core.rmem_default": value => "9000000";
"net.core.wmem_default": value => "9000000";
"net.core.rmem_max": value => "16777216";
"net.core.wmem_max": value => "16777216";
}
}
Melalui forum dan milis, tampaknya ada kebingungan tentang perbedaan antara plugin dan modul Wayang. Istilah ini hampir digunakan secara bergantian ... Saya akhirnya perlu mengaktifkan pluginsync pada klien saya untuk melewati beberapa kesalahan berbulu. Saya pikir ini adalah modul!
Kesalahan klien saat ini:
info: Loading downloaded plugin /var/lib/puppet/lib/puppet/type/sysctl.rb
info: Loading downloaded plugin /var/lib/puppet/lib/puppet/provider/sysctl/parsed.rb
err: Could not retrieve catalog from remote server: Error 400 on SERVER: Puppet::Parser::AST::Resource failed with error
ArgumentError: Invalid resource type sysctl::value at /var/lib/puppet/base/modules/sysctl/manifests/init.pp:12 on node shimano.deore.abc.net
warning: Not using cache on failed catalog
err: Could not retrieve catalog; skipping run
Adakah pemikiran tentang bagaimana menyelesaikan ini dengan paling sedikit rasa sakit?
Sunting: Apakah saya terpengaruh oleh bug ini ?
Sunting: Diperbaiki menggunakan perpustakaan Augeas seperti yang disarankan oleh Jeff Ferland dan dari wiki Wayang .
Saya membuat sysctl
modul ...
class sysctl {
# nested class/define
define conf ( $value ) {
# $name is provided by define invocation
# guid of this entry
$key = $name
$context = "/files/etc/sysctl.conf"
augeas { "sysctl_conf/$key":
context => "$context",
onlyif => "get $key != '$value'",
changes => "set $key '$value'",
notify => Exec["sysctl"],
}
}
file { "sysctl_conf":
name => $operatingsystem ? {
default => "/etc/sysctl.conf",
},
}
exec { "/sbin/sysctl -p":
alias => "sysctl",
refreshonly => true,
subscribe => File["sysctl_conf"],
}
}
... dan modul lain untuk mengatur pengaturan yang relevan ...
class prod_sysctl {
include sysctl
sysctl::conf {
# increase PID rollover value
"kernel.pid_max": value => "1048576";
}
}
Jawaban:
Jawaban spesifik: Segera berbicara, Anda memanggil sysctl :: value, tetapi nilai tidak dinyatakan dalam kelas sysctl Anda. Lihat contoh ini yang menggunakan deklarasi sysctl :: conf. Tanpa
define value
, tidak ada subclass sysctl :: value untuk Anda panggil.Jawaban umum dan bimbingan: The Augeas membangun (lihat juga yang jenis dokumentasi referensi ) yang merupakan bagian dari versi saat ini dari Wayang memungkinkan mempertahankan baris dalam file konfigurasi dan bahkan hal konteks, sehingga dapat mengelola file seperti konfigurasi git. Contoh di bawah ini adalah untuk mendemonstrasikan fungsionalitas dan mengarahkan Anda ke koleksi referensi konfigurasi Wayang yang hebat - toko konfigurasi langsung untuk server Wikipedia.
Satu contoh sederhana dari dokumentasi konfigurasi di atas adalah ini:
Jadi, jika Anda ingin mengelola /etc/sysctl.conf Anda, masukkan yang berikut ini:
Contoh Augeas juga memiliki konstruksi untuk kelas sysctl berdasarkan Augeus yang mirip dengan apa yang Anda posting dalam pertanyaan Anda, sehingga mungkin juga memberi sedikit cahaya.
sumber
value.pp
manifes yang didistribusikan bersamamodule-sysctl
modul. Sepertinyadefine sysctl::value ( $key = 'name', $value ) {
Saya telah menggunakan modul ini di masa lalu dengan RHEL5: puppet-sysctl
Untuk menggunakannya, Anda harus menginstal modul ke folder modul Anda (mungkin / etc / puppet / modules / sysctl) termasuk kelas pada node Anda: (termasuk sysctl) dan kemudian panggil sumber daya def seperti ini:
Jadi Anda mungkin bertanya-tanya, kemana kode ini sebenarnya pergi? Saya suka mengatur pohon boneka saya seperti ini:
Dengan cara itu, modul-situs berisi data hiera, atau tunables, dan modul-modulnya tetap generik, dapat dipasang, dan "modular".
sumber
err: Could not retrieve catalog from remote server: Error 400 on SERVER: Puppet::Parser::AST::Resource failed with error ArgumentError: Invalid resource type sysctl::value at /var/lib/puppet/base/modules/sysctl/manifests/init.pp:12 on node shimano.deore.abc.net
value.pp
manifes yang didistribusikan bersamamodule-sysctl
modul. Sepertinyadefine sysctl::value ( $key = 'name', $value ) {
Selama Anda tidak harus mengubah nilai (atau puas dengan menambahkan baris dengan nilai-nilai baru), Anda dapat menggunakan Common
line
. Anda dapat menggunakan sepasangpresent
/absent
konfigurasi saat Anda mengubah nilainya.Untuk mengubah nilai - dengan asumsi garis sudah ada -, Anda dapat menggunakan
replace
modul yang sama.Atau Anda dapat melihat bagaimana definisi-definisi ini ditulis untuk menjadikannya sesuai dengan tugas Anda - yang, menurut Anda, menurut saya sederhana dan cukup umum sehingga seharusnya disediakan oleh jenis wayang standar.
Jadi, mengapa tidak? Karena Wayang mengharapkan Anda untuk sepenuhnya mengelola hal-hal yang Anda kelola. Artinya, Anda harus mendistribusikan seluruh file sysctl, alih-alih hanya menambahkan atau menghapus satu nilai atau lainnya. Saya tidak mengatakan bahwa itu selalu hal yang mudah untuk dilakukan, tetapi jika Anda dapat melakukannya, Anda itulah cara termudah untuk melakukannya.
sumber
sysctl.conf
default yang berubah di antara versi RHEL. Kami mungkin tidak ingin mengabaikan / menimpa itu, daripada memastikan parameter tertentu dapat diatur / diubah.sysctl.conf
? Atau maksud Anda Anda memiliki konfigurasi yang berbeda sesuai dengan rilis? Dalam kasus yang terakhir, Anda dapat membuat templat dan memilih garis tergantung pada versi OS.