क्या कठपुतली को पहले कुछ चीजें करने के लिए मजबूर करने का एक तरीका है? उदाहरण के लिए, किसी भी पैकेज को स्थापित करने से पहले मुझे yum रिपॉजिटरी (IUS समुदाय) को जोड़ने के लिए सभी सर्वरों पर RPM स्थापित करने की आवश्यकता है।
क्या कठपुतली को पहले कुछ चीजें करने के लिए मजबूर करने का एक तरीका है? उदाहरण के लिए, किसी भी पैकेज को स्थापित करने से पहले मुझे yum रिपॉजिटरी (IUS समुदाय) को जोड़ने के लिए सभी सर्वरों पर RPM स्थापित करने की आवश्यकता है।
जवाबों:
यदि आप यह सुनिश्चित करना चाहते हैं कि आपके सभी सर्वर पर एक रिपॉजिटरी स्थापित है तो मैं कुछ इस तरह का सुझाव दूंगा
node default {
include base
}
class base {
yumrepo { "IUS":
baseurl => "http://dl.iuscommunity.org/pub/ius/stable/$operatingsystem/$operatingsystemrelease/$architecture",
descr => "IUS Community repository",
enabled => 1,
gpgcheck => 0
}
}
फिर, किसी भी नोड के लिए जो base
आप कह सकते हैं फैली हुई है
class foo {
package { "bar": ensure => installed, require => Yumrepo["IUS"] }
}
यह सुनिश्चित करेगा
bar
स्थापित नहीं किया जाएगा जब तक कि IUS रिपॉजिटरी को परिभाषित नहीं किया जाता हैहालांकि चरण इसे संभाल सकते हैं और इसलिए विशिष्ट यम रेपो निर्भरता को बेहतर कर सकते हैं, रिश्ते को उदारतापूर्वक घोषित करना बेहतर है।
बस Yumrepo <| |> -> Package <| provider != 'rpm' |>
अपने कठपुतली प्रकट में डाल दिया ।
node default {
Yumrepo <| |> -> Package <| provider != 'rpm' |>
}
यह ऐसा करता है कि सभी yumrepo प्रकार किसी भी पैकेज से पहले संसाधित हो जाएंगे जिनके पास उनके प्रदाता के रूप में 'rpm' नहीं है। वह बाद का बहिष्करण इसलिए है कि मैं (उदाहरण के लिए) एपल-रिलीज़ RPM पैकेज का उपयोग कर सकता हूं ताकि यम रेपो को स्थापित करने में मदद मिल सके।
(मुझे यह प्रश्न लगभग एक ही उत्तर देने के बाद मिला है । तो मुझे लगा कि मेरा उत्तर यहाँ भी लागू होता है और इसे दोहराने के लायक है (यह दो स्थानों पर उत्तर देने के लिए सुरक्षित है ..)
जहां तक मैं समझता हूं, यह ठीक वही है जो चरणों के लिए हैं - वे आपको समूह और आदेश कक्षा निष्पादित करते हैं। मैं डेबीस सर्वर पर एपीटी को अपडेट और कॉन्फ़िगर करने के लिए "चरणों" का उपयोग करता हूं, जो कि आप यम के साथ क्या करने जा रहे हैं, इसके समान होना चाहिए।
सबसे पहले, आप "यम" चरण को शीर्ष स्तर पर ("नोड्स" के ऊपर) घोषित करते हैं, ताकि "यम" चरण में कक्षाएं "मुख्य" वाले से पहले निष्पादित हो जाएं:
stage { 'yum' : before => Stage['main'] }
फिर, आप कक्षाओं को चरण असाइन करते हैं। आप इसे अपनी नोड परिभाषा में कर सकते हैं:
node default {
class { 'yumrepos' : stage => yum }
include packages
}
आपके द्वारा उपयोग की जाने वाली महत्वपूर्ण चीज़ के लिए आवश्यक कीवर्ड है - "एक या एक से अधिक कक्षाओं का मूल्यांकन करें, एक निर्भरता के रूप में आवश्यक वर्ग को जोड़ना।"
उपयुक्त भंडार का उपयोग करने वाला एक उदाहरण हो सकता है:
class installcustompackages {
# make sure we have the repository file and public key
file { "/etc/apt/sources.list.d/myrepo.list":
source => "puppet://puppet/files/etc/apt/sources.list.d/myrepo.list",
ensure => present;
"/etc/apt/trusted.gpg":
source => "puppet://puppet/files/etc/apt/trusted.gpg",
}
# do an update whenever the list or trusted key file change
exec { "/usr/bin/apt-get update":
alias => "aptgetupdate",
require => [ File["/etc/apt/sources.list.d/myrepo.list"], File["/etc/apt/trusted.gpg"] ],
subscribe => [ File["/etc/apt/sources.list.d/myrepo.list"], File["/etc/apt/trusted.gpg"] ],
refreshonly => true;
}
package { "mypackage":
ensure => latest,
require => Exec["aptgetupdate"];
"mypackage2":
ensure => latest,
require => Exec["aptgetupdate"];
}
service { "myservice":
enable => false,
require => Package[mypackage];
}
}
( कठपुतली बूटस्ट्रैपिंग के इस उदाहरण से अनुकूलित )।
तो आप देख सकते हैं कि प्रत्येक चरण की आवश्यकता है कि पहले वाले को पहले किया जाए। मैं आपको यह बताने के लिए काम करता हूं कि इसे यम पर कैसे लागू किया जाए क्योंकि मैं इससे परिचित नहीं हूं कि यह फाइलों में कहां संग्रहीत है।
कठपुतली ऊपर से नीचे तक विन्यास को पढ़ता है, इसलिए यदि आप उस वर्ग में पहले yum रेपो के साथ एक वर्ग शामिल करते हैं, तो इस रेपो को कुछ और से पहले जोड़ा जाएगा।
यदि आप पैकेज पर आवश्यक सेटिंग्स का उपयोग करते हैं, तो आप यह सुनिश्चित करेंगे कि पैकेज जोड़ने से पहले आवश्यक संसाधन प्रकार मौजूद है, जैसे:
node 'yournode.domain.com' {
package { "bar": ensure => installed, require => Yumrepo["IUS"] }
yumrepo { "IUS":
baseurl => "http://dl.iuscommunity.org/pub/ius/stable/$operatingsystem/$operatingsystemrelease/$architecture",
descr => "IUS Community repository",
enabled => 1,
gpgcheck => 0
}
}
ऊपर का यह कोड पैकेज जोड़ने से पहले रेपो को जोड़ देगा।
require
कीवर्ड का उपयोग करना है , जो आपने दूसरे भाग में किया है।
कुछ इस तरह से मेरे लिए काम किया:
yumrepo { A:
descr => "A repo",
baseurl => '',
enabled => 1,
gpgcheck => 1,
gpgkey => "",
priority => 3
}
yumrepo { B:
descr => "B repo",
baseurl => '',
enabled => 1,
gpgcheck => 1,
gpgkey => "",
priority => 3
}
yumrepo { C:
descr => "C repo",
baseurl => '',
enabled => 1,
gpgcheck => 1,
gpgkey => "",
priority => 3;
}
Package {
require => [Yumrepo[A], Yumrepo[B], Yumrepo[C]]
}
मैंने mysite.pp पर कुछ इस तरह से शामिल किया। इस तरह, आपके कठपुतली मॉड्यूल, यम रेपो के संदर्भों से मुक्त हैं।