कठपुतली के साथ sysctl.conf पैरामीटर सेट करें


10

यह CFEngine में एक हवा थी ... लेकिन मैं अब कठपुतली वातावरण में हूं , और कुछ sysctl.conf चर को असाइन / सुनिश्चित करने / जांचने में सक्षम होने की आवश्यकता है। CFEngine दुनिया में, मैं बस एक विन्यास फाइल के भीतर विशिष्ट लाइनों के लिए जाँच कर सकता हूँ ... मैं कठपुतली विकी पर एक sysctl मॉड्यूल और github में एक परियोजना के लिए एक छोटा सा संदर्भ मिला है जो मैं चाहता हूँ करने के लिए प्रकट होता है।

लेकिन न तो वास्तव में अच्छी तरह से प्रलेखित हैं। मैं बस एक तरह से जैसे मूल्यों के एक जोड़े को संपादित करने के लिए देख रहा हूँ net.core.rmem_defaultऔर net.core.wmem_max। गितुब पर होस्ट की गई परियोजना के प्रारूप में , मेरे init.pp मे दिखावट का विन्यास इस तरह होना चाहिए:

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";
        }
}

मंचों और मेलिंग सूचियों के माध्यम से जा रहे हैं, कठपुतली प्लगइन्स और मॉड्यूल के बीच अंतर पर भ्रम होने लगता है। शर्तों का लगभग उपयोग किया जाता है ... मैंने कुछ बालों वाली पिछली त्रुटियों को प्राप्त करने के लिए अपने ग्राहकों पर प्लगइन्स को सक्षम करने की आवश्यकता समाप्त कर दी। मैंने सोचा कि यह एक मॉड्यूल था!

वर्तमान ग्राहक त्रुटियां:

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

कम से कम दर्द के साथ इसे कैसे पूरा किया जाए, इस पर कोई विचार?

संपादित करें: क्या मैं इस बग से प्रभावित हूं ?

संपादित करें: जेफ फेरलैंड और कठपुतली विकि से सुझाए गए ऑगेज पुस्तकालय का उपयोग करके ।

मैंने एक sysctlमॉड्यूल बनाया ...

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"],
   }

}

... और प्रासंगिक सेटिंग्स सेट करने के लिए एक और मॉड्यूल ...

class prod_sysctl {

include sysctl

sysctl::conf {

  # increase PID rollover value
  "kernel.pid_max": value =>  "1048576";
  }
}

यह उत्कृष्ट है। क्या आपने इसे एक मॉड्यूल के रूप में लिखने पर विचार किया है जो कठपुतली फोर्ज पर प्रकाशित हुआ है?
टॉमऑनटाइम

जवाबों:


14

विशिष्ट उत्तर: तुरंत बोलते हुए, आप sysctl :: value को कॉल कर रहे हैं, लेकिन मूल्य आपके sysctl वर्ग में घोषित नहीं किया गया है। इस उदाहरण को देखें जो sysctl :: conf घोषणापत्र का उपयोग करता है। आपके बिना define valueकॉल करने के लिए कोई sysctl :: value subclass नहीं है।


जनरल जवाब और मार्गदर्शन: Augeas निर्माण (यह भी देखें अपने प्रकार संदर्भ प्रलेखन ) कि कठपुतली के वर्तमान संस्करण का हिस्सा है, एक विन्यास फाइल और यहां तक कि मामलों के संदर्भ में लाइनों को बनाए रखने की अनुमति देता है, तो यह इस तरह के एक Git विन्यास के रूप में फाइलों का प्रबंधन कर सकते हैं। नीचे दिया गया उदाहरण कार्यक्षमता को प्रदर्शित करने के लिए और कठपुतली विन्यास के एक महान संदर्भ संग्रह के लिए आपको इंगित करने के लिए है - विकिपीडिया सर्वर के लिए लाइव कॉन्फ़िगरेशन स्टोर।

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = https://gerrit.wikimedia.org/r/p/operations/puppet
[branch "production"]
    remote = origin
    merge = refs/heads/production

उपरोक्त विन्यास प्रलेखन से एक सरल उदाहरण यह होगा:

augeas { "sshd_config":
 context => "/files/etc/ssh/sshd_config",
  changes => [
    "set PermitRootLogin no",
  ],
}

इसलिए, यदि आप अपना /etc/sysctl.conf प्रबंधित करना चाहते हैं, तो निम्न दर्ज करें:

augeas { "sysctl":
 context => "/files/etc/sysctl.conf",
  changes => [
    "set kernel.sysrq = 0",
    #and whatever other lines are interesting to you
  ],
}

Augeas उदाहरण भी एक sysctl Augeus के आधार पर वर्ग है कि क्या आप अपने प्रश्न में पोस्ट करने के लिए इसी तरह की है के लिए एक निर्माण है ताकि भी कुछ प्रकाश डाला सकता है।


परिभाषित मॉड्यूल के value.ppसाथ वितरित एक प्रकट में है module-sysctl। ऐसा लगता हैdefine sysctl::value ( $key = 'name', $value ) {
5

@ यह आपके द्वारा अपनी स्थिति पर लागू किए जा सकने वाले बग से जुड़ा हुआ है। क्या आप पुष्टि कर सकते हैं कि मॉड्यूल आपके लक्ष्य मशीन पर लोड हो रहा है?
जेफ फेरलैंड

मैं मॉड्यूल की उपस्थिति के लिए कैसे जांच कर सकता हूं?
ewwhite

ऑगेस दृष्टिकोण के साथ जा रहे हैं। मुझे लगता है कि मैंने दूसरे समाधान के साथ एक बग मारा।
ewwhite

2

मैंने इस मॉड्यूल का उपयोग अतीत में RHEL5: कठपुतली-सीक्टक्टल के साथ किया है

इसका उपयोग करने के लिए, आपको मॉड्यूल को अपने मॉड्यूल फ़ोल्डर में स्थापित करना होगा (शायद / etc / कठपुतली / मॉड्यूल / sysctl) अपने नोड पर वर्ग को शामिल करें: (sysctl को शामिल करें) और फिर इस तरह डीईएफ संसाधन को कॉल करें:

class s_sysctl::rhel_defaults {
    include sysctl

    # Controls IP packet forwarding
    sysctl::set_value { "net.ipv4.ip_forward": 
                         value => 0 
    }

    # Controls source route verification
    sysctl::set_value { "net.ipv4.conf.default.rp_filter": value => 1 }
}

तो आप सोच रहे होंगे कि यह कोड वास्तव में कहां जाता है? मुझे अपने कठपुतली वृक्ष को इस तरह व्यवस्थित करना पसंद है:

site.pp -> nodes.pp -> roles.pp -> /etc/puppet/site-modules/s_sysctl -> /etc/puppet/modules/sysctl

इस तरह से, साइट-मॉड्यूल में hiera डेटा, या tunables होते हैं, और मॉड्यूल सामान्य, प्लग-इन और "मॉड्यूलर" रहते हैं।


हाँ, यह मेरे प्रश्न में जुड़ा हुआ है। मॉड्यूल के लिए कोई दस्तावेज नहीं है और मुझे यकीन नहीं है कि इसे कहां स्थापित करना है या वास्तव में इसका उपयोग कैसे करना है।
16

क्षमा करें, मैंने आपका पूरा प्रश्न नहीं पढ़ा :) मॉड्यूल में एक परिभाषित शामिल है, जिसे किसी अन्य कक्षा में बुलाया जाना चाहिए। मैं अपने उत्तर को संपादित करूंगा और कोड शामिल
करूंगा

तो इसके साथ ही, मुझे मिलने वाली त्रुटियां हैं: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
ewwhite

ऐसा लगता है कि आप एक परिभाषित 'sysctl :: value' लेबल कर रहे हैं, न कि 'sysctl :: set_value'।
लूट

परिभाषित मॉड्यूल के value.ppसाथ वितरित एक प्रकट में है module-sysctl। ऐसा लगता हैdefine sysctl::value ( $key = 'name', $value ) {
5

0

जब तक आपको मूल्य बदलना नहीं है (या नए मूल्यों के साथ संलग्न लाइनों से संतुष्ट है), आप कॉमन का उपयोग कर सकते हैं line। जब आप मान बदलते हैं तो आप present/ absentकॉन्फ़िगरेशन की जोड़ी का उपयोग कर सकते हैं ।

मान बदलने के लिए - यह मानकर कि लाइन पहले से मौजूद है -, आप replaceएक ही मॉड्यूल में उपयोग कर सकते हैं ।

या आप देख सकते हैं कि कैसे इन परिभाषाओं को आपके कार्य के अनुकूल बनाने के लिए लिखा गया है - जो, आपको मन ही मन, मुझे लगता है कि यह सरल और सामान्य है कि इसे कठपुतली के डिफ़ॉल्ट प्रकारों द्वारा प्रदान किया जाना चाहिए।

तो, यह क्यों नहीं है? क्योंकि कठपुतली आपसे अपेक्षा करता है कि आप उन चीजों को पूरी तरह से प्रबंधित करें जो आप प्रबंधित कर रहे हैं। यही है, आपको केवल एक मूल्य या दूसरे को जोड़ने या निकालने के बजाय, पूरे sysctl फ़ाइल को वितरित करना चाहिए । मैं यह नहीं कह रहा हूं कि ऐसा करना आसान काम है, लेकिन अगर आप इसे दूर कर सकते हैं, तो आप इसे करने का सबसे आसान तरीका है।


मुझे नहीं लगता कि संपूर्ण फ़ाइल का प्रबंधन करना उचित है। मुझे पता था कि संपूर्ण फ़ाइल विकल्प एक संभावना है, लेकिन आरएचईएल रिलीज़ के भीतर छोटे बदलाव के मामले का उपयोग करें ... sysctl.confआरएचईएल के संस्करणों के बीच परिवर्तन करने वाली चूक हो सकती है । हम उन्हें अनदेखा / अधिलेखित नहीं करना चाह सकते हैं, बल्कि यह सुनिश्चित करने के बजाय कि एक विशिष्ट पैरामीटर सेट / बदला जा सकता है।
ईस्वी

@ewwhite RHEL के लिए एक स्थानीय ओवरराइड फ़ाइल नहीं है sysctl.conf? या क्या आपका मतलब है कि आपके पास रिलीज़ के अनुसार अलग-अलग कॉन्फ़िगरेशन हैं? उत्तरार्द्ध मामले में, आप एक टेम्पलेट बना सकते हैं और ओएस संस्करण के आधार पर लाइनों का चयन कर सकते हैं।
डैनियल सी। सोबरल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.