कठपुतली के साथ एक मौजूदा उपयोगकर्ता को एक समूह में जोड़ना


16

क्या कठपुतली 2.7.18 के साथ एक मौजूदा उपयोगकर्ता को एक समूह में जोड़ना संभव है?

हमारे पास दो मॉड्यूल हैं, प्रत्येक एक वर्ग को परिभाषित करता है:

  • मॉड्यूल "उपयोगकर्ता" उपयोगकर्ता फू और उपयोगकर्ता बार सहित सभी उपयोगकर्ताओं को बनाता है।
  • मॉड्यूल "तोड़फोड़" विभिन्न गोपनीय फाइलों से संबंधित है और समूह svn बनाता है।

हम मॉड्यूल "तोड़फोड़" के अंदर समूह svn के लिए उपयोगकर्ता फू जोड़ना चाहते हैं।

मैंने मौजूदा सुविधा अनुरोध में वर्णित सदस्यता पैरामीटर की कोशिश की है :

group {
"svn":
    ensure  => present,
    gid     => xxxxx;
}
user {
"foo":
    group      => ["svn"],
    membership => minimum;
}

लेकिन मुझे निम्नलिखित त्रुटि मिलती है:

गलत: दूरस्थ सर्वर से कैटलॉग प्राप्त नहीं कर सका: सर्वर पर त्रुटि 400: डुप्लिकेट घोषणा: उपयोगकर्ता [foo] पहले से ही फ़ाइल /pathto/modules/subversion/manifests/init.pp पर लाइन xx में घोषित किया गया है; नोड myserver.example.com पर /pathto/modules/users/manifests/init.pp:xxx पर redeclare नहीं कर सकते

क्या यह सुविधा पहले से लागू है? यदि नहीं, तो क्या एक अच्छा समाधान है?

जवाबों:


15

यदि आप उपयोगकर्ताओं को आभासी संसाधनों के रूप में घोषित करते हैं, तो आप 'एहसास' या संग्रह वाक्यविन्यास (उपयोगकर्ता <| ...>>) का उपयोग कर सकते हैं। यहाँ एक उदाहरण है:

@user { 'foo':
  groups     => ['somegroup'],
  membership => minimum,
}

तब उस आभासी उपयोगकर्ता को तब के सिंटैक्स के संग्रह का एहसास होता है:

User <| title == foo |>

और कहीं और आप उस वर्चुअल रिसोर्स के लिए मापदंडों को जोड़ सकते हैं जिसमें एग्जाइनमेंट का उपयोग किया गया है:

User <| title == foo |> { groups +> "svn" }

इसलिए मुझे लगता है कि इस समय आभासी ressources के अलावा कोई विकल्प नहीं है :( जवाब के लिए बहुत बहुत धन्यवाद।

1
पपेट संस्करणों के बीच एक टाइपो या विशेषता बदल जाती है: यह समूह नहीं है, बल्कि समूह (बहुवचन) है। कठपुतली का उपयोग 3.2.2
गोरान मिस्कोविक

1
क्या कोई इस पर संक्षिप्त उदाहरण के साथ विस्तार कर सकता है।
7

22

कठपुतली आभासी संसाधनों का उपयोग करना सही तरीका है - लेकिन अगर आप उपयोगकर्ता की परिभाषाओं को नहीं बदल सकते हैं और इस बीच वर्कअराउंड फिक्स की आवश्यकता है, तो निम्नलिखित भयानक और हैकरी है, लेकिन काम करेगा:

exec { 'foo somegroup membership':
  unless  => '/bin/grep -q "somegroup\\S*foo" /etc/group',
  command => '/sbin/usermod -aG somegroup foo',
  require => User['foo'],
}

अनिवार्य रूप से हम सिर्फ यह जांचते हैं कि कहीं किसी समूह में उपयोगकर्ता फू अभी तक मौजूद है ... यदि नहीं, तो सामान्य समूहों के अतिरिक्त मौजूदा समूहों के अलावा इसे जोड़ने के लिए कमांडर का उपयोग करें।


1
कठपुतली निष्पादन योग्य लोगों के लिए पूरी तरह से योग्य पथों को पुनः प्राप्त कर सकती है। इसे प्रतिबिंबित करने के लिए संपादित किया गया।
hrr

2
भयानक और हैकरी, लेकिन वास्तव में मददगार। मैं उम्मीद कर रहा था कि एक उपयोगकर्ता को एक समूह में जोड़ने के रूप में एक वैचारिक रूप से सरल करने के लिए एक नई भाषा निर्माण सीखने की ज़रूरत नहीं है।
बिलमैन

1
शायद एक और अधिक उचित (जबकि अभी भी निश्चित रूप से हैक किया जा रहा है) तरीका यह होगा getent group somegroup|cut -d: -f4|grep -q fooकि हम जो प्रयोग कर रहे हैं उसे न मानें /etc/group
फालस्ट्रो

सुपर उपयोगी - धन्यवाद। मुझे पूरा रास्ता शामिल करने के लिए "जब तक" और "खरपतवार" को बदलना पड़ा था: जब तक => "/ उपयोगकर्ता / बिन / grep ..." कमांड => "/ उपयोगकर्ता / बिन / usermod ..."
JNP

@JnpWebDeveloper और उन्हें पसंद करने वालों के लिए: प्रलेखन के अनुसार , आप एक pathपैरामीटर भी निर्दिष्ट कर सकते हैं । मेरा सुझाव है कि वैश्विक संसाधन डिफ़ॉल्ट होना चाहिए, शायद यह $PATHतथ्य से खींचता है।
सिनकोडेनादा

2

धन्यवाद - बदसूरत हैक के लिए यकीन है, लेकिन यह काम हो जाता है। यहाँ 'nagpe' समूह में 'nrpe' जोड़ने के लिए एक उपर्युक्त उदाहरण (उपरोक्त टिप्पणियों को मिलाकर) है। मैंने एक पैकेज की आवश्यकता का उपयोग किया है क्योंकि यहां उपयोगकर्ता को RPM प्रदान किया जाता है बजाय कठपुतली द्वारा।

  exec {"nrpe nagios membership":
    unless => "/bin/getent group nagios|/bin/cut -d: -f4|/bin/grep -q nrpe",
    command => "/usr/sbin/usermod -a -G nagios nrpe",
    require => Package['nrpe'],
  }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.