कुछ भी करने से पहले कठपुतली के लिए यम रेपो जोड़ना


26

क्या कठपुतली को पहले कुछ चीजें करने के लिए मजबूर करने का एक तरीका है? उदाहरण के लिए, किसी भी पैकेज को स्थापित करने से पहले मुझे yum रिपॉजिटरी (IUS समुदाय) को जोड़ने के लिए सभी सर्वरों पर RPM स्थापित करने की आवश्यकता है।


अधिक जटिल उपयोग के मामले के लिए, मेरा संबंधित प्रश्न भी देखें ।
मैट मैकक्लेयर

जवाबों:


37

यदि आप यह सुनिश्चित करना चाहते हैं कि आपके सभी सर्वर पर एक रिपॉजिटरी स्थापित है तो मैं कुछ इस तरह का सुझाव दूंगा

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 रिपॉजिटरी को परिभाषित नहीं किया जाता है
  • पैकेज IUS रिपॉजिटरी को परिभाषित करने से पहले स्थापित करने का प्रयास नहीं करेगा

आह अच्छा। यह बहुत बढ़िया है। मैं वहाँ yumrepo नहीं देखा - धन्यवाद!
जॉन हैडैड

यह केवल डिस्ट्रोस के साथ काम करता है जो यम का उपयोग करते हैं, इसलिए Rhel5 केवल, Rhel4 नहीं
डेव चेनी

2
अगर मुझे नहीं पता कि रिपॉजिटरी में पैकेज क्या है? उदाहरण के लिए एक पैकेज में उपलब्ध हो सकता है फेडोरा फेडोरा पर भंडार और में epel RHEL पर भंडार, CentOS आदि इसका मतलब है कि अगर मैं एक 3 पार्टी नुस्खा का उपयोग / मॉड्यूल मैं इसे अनुकूलित करने के लिए होगा।
क्रिस्टियन सियुपिटु

17

हालांकि चरण इसे संभाल सकते हैं और इसलिए विशिष्ट यम रेपो निर्भरता को बेहतर कर सकते हैं, रिश्ते को उदारतापूर्वक घोषित करना बेहतर है।

बस Yumrepo <| |> -> Package <| provider != 'rpm' |>अपने कठपुतली प्रकट में डाल दिया ।

node default {
  Yumrepo <| |> -> Package <| provider != 'rpm' |>
}

यह ऐसा करता है कि सभी yumrepo प्रकार किसी भी पैकेज से पहले संसाधित हो जाएंगे जिनके पास उनके प्रदाता के रूप में 'rpm' नहीं है। वह बाद का बहिष्करण इसलिए है कि मैं (उदाहरण के लिए) एपल-रिलीज़ RPM पैकेज का उपयोग कर सकता हूं ताकि यम रेपो को स्थापित करने में मदद मिल सके।


8

(मुझे यह प्रश्न लगभग एक ही उत्तर देने के बाद मिला है । तो मुझे लगा कि मेरा उत्तर यहाँ भी लागू होता है और इसे दोहराने के लायक है (यह दो स्थानों पर उत्तर देने के लिए सुरक्षित है ..)

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

सबसे पहले, आप "यम" चरण को शीर्ष स्तर पर ("नोड्स" के ऊपर) घोषित करते हैं, ताकि "यम" चरण में कक्षाएं "मुख्य" वाले से पहले निष्पादित हो जाएं:

stage { 'yum' : before => Stage['main'] }

फिर, आप कक्षाओं को चरण असाइन करते हैं। आप इसे अपनी नोड परिभाषा में कर सकते हैं:

node default {
  class { 'yumrepos' : stage => yum }

  include packages
}

इसके लिए धन्यवाद :) मैं व्यक्तिगत रूप से स्वीकृत उत्तर के लिए इस दृष्टिकोण को पसंद करता हूं।
माइकल मिऑर

5

आप टैग का उपयोग कर सकते हैं । यह आपको रेपो इंस्टॉलर को firstrunकुछ या कुछ के साथ टैग करने की अनुमति देगा ,

तो भागो

 puppetd --tags firstrun

और यह केवल टैग मिलान करने वाले मॉड्यूल / स्टेटमेंट को निष्पादित करेगा।


यह वही है जो मैं देख रहा था - धन्यवाद टॉम!
जॉन हैडैड

3

आपके द्वारा उपयोग की जाने वाली महत्वपूर्ण चीज़ के लिए आवश्यक कीवर्ड है - "एक या एक से अधिक कक्षाओं का मूल्यांकन करें, एक निर्भरता के रूप में आवश्यक वर्ग को जोड़ना।"

उपयुक्त भंडार का उपयोग करने वाला एक उदाहरण हो सकता है:

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

( कठपुतली बूटस्ट्रैपिंग के इस उदाहरण से अनुकूलित )।

तो आप देख सकते हैं कि प्रत्येक चरण की आवश्यकता है कि पहले वाले को पहले किया जाए। मैं आपको यह बताने के लिए काम करता हूं कि इसे यम पर कैसे लागू किया जाए क्योंकि मैं इससे परिचित नहीं हूं कि यह फाइलों में कहां संग्रहीत है।


0

कठपुतली ऊपर से नीचे तक विन्यास को पढ़ता है, इसलिए यदि आप उस वर्ग में पहले 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
   }
}

ऊपर का यह कोड पैकेज जोड़ने से पहले रेपो को जोड़ देगा।


10
कठपुतली एक घोषणात्मक भाषा का उपयोग करती है, इसलिए यह फ़ाइल में चीजों के क्रम के बारे में चिंता नहीं करता है । आपका पहला पैराग्राफ गलत है मुझे डर है। ऐसा करने का सही तरीका requireकीवर्ड का उपयोग करना है , जो आपने दूसरे भाग में किया है।
हामिश डाउनर

0

कुछ इस तरह से मेरे लिए काम किया:

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 पर कुछ इस तरह से शामिल किया। इस तरह, आपके कठपुतली मॉड्यूल, यम रेपो के संदर्भों से मुक्त हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.