मैं कठपुतली के साथ एक यम पैकेज समूह कैसे स्थापित करूं?


10

क्या कठपुतली के पास निष्पादन के अलावा यम पैकेज समूह (जैसे 'विकास उपकरण') स्थापित करने का एक तरीका है?

जवाबों:


11

मैं आज भी इसी तरह का अनुरोध कर रहा हूं, लेकिन मैं किसी अमल का प्रशंसक नहीं हूं अगर चीजों को किसी अन्य माध्यम से हल किया जा सकता है। इसलिए मैंने एक अलग रास्ता चुना है और 'यमग्रुप' के लिए एक सरल कस्टम प्रकार लिखा है। इन फ़ाइलों को अपने मॉड्यूलपाथ में किसी भी मॉड्यूल में रखें और बस यही है:

"Modulename / lib / कठपुतली / प्रदाता / yumgroup / default.rb"

Puppet::Type.type(:yumgroup).provide(:default) do
  desc 'Support for managing the yum groups'

  commands :yum => '/usr/bin/yum'

  # TODO
  # find out how yum parses groups and reimplement that in ruby

  def self.instances
    groups = []

    # get list of all groups
    yum_content = yum('grouplist').split("\n")

    # turn of collecting to avoid lines like 'Loaded plugins'
    collect_groups = false

    # loop through lines of yum output
    yum_content.each do |line|
      # if we get to 'Available Groups:' string, break the loop
      break if line.chomp =~ /Available Groups:/

      # collect groups
      if collect_groups and line.chomp !~ /(Installed|Available)/
        current_name = line.chomp.sub(/^\s+/,'\1').sub(/ \[.*\]/,'')
        groups << new(
          :name   => current_name,
          :ensure => :present
        )
      end

      # turn on collecting when the 'Installed Groups:' is reached
      collect_groups = true if line.chomp =~ /Installed Groups:/
    end
    groups
  end

  def self.prefetch(resources)
    instances.each do |prov|
      if resource = resources[prov.name]
        resource.provider = prov
      end
    end
  end

  def create
    yum('-y', 'groupinstall', @resource[:name])
    @property_hash[:ensure] == :present
  end

  def destroy
    yum('-y', 'groupremove', @resource[:name])
    @property_hash[:ensure] == :absent
  end

  def exists?
    @property_hash[:ensure] == :absent
  end

end

"Modulename / lib / कठपुतली / प्रकार / yumgroup.rb"

Puppet::Type.newtype(:yumgroup) do
@doc = "Manage Yum groups

A typical rule will look like this:

yumgroup { 'Development tools':
  ensure => present,
}
"
    ensurable

    newparam(:name) do
       isnamevar
       desc 'The name of the group'
    end

end

और उसके बाद, प्लगइन्स को सक्षम करने के साथ कठपुतली एजेंट को सक्षम करें, और आप इस तरह से कस्टम प्रकार का उपयोग कर सकते हैं:

yumgroup {'Base': ensure => present, }

या:

yumgroup {'Development tools': ensure => absent, }

और आप देख सकते हैं कि कौन से समूह चल रहे हैं:

puppet resource yumgroup

का आनंद लें!


मुझे लगता है कि इतनी yum_content = yum('grouplist')जरूरत है .split("\n")कि .eachत्रुटियों का कारण नहीं है।
एलेक्स.पिलोन

@ alex.pilon टिप के लिए धन्यवाद। हालांकि v3 में यह इस तरह काम कर रहा था।
20ov पर जकोव सोसिक

4

यहाँ 'yumgroup' कठपुतली संसाधन प्रकार की परिभाषा दी गई है। यह डिफ़ॉल्ट रूप से डिफ़ॉल्ट और अनिवार्य पैकेज स्थापित करता है, और वैकल्पिक पैकेज स्थापित कर सकता है।

यह परिभाषा अभी तक yum समूहों को हटा नहीं सकती है हालांकि यह हालांकि इसे बनाना आसान होगा। मैंने खुद को परेशान नहीं किया क्योंकि यह कुछ परिस्थितियों में कठपुतली में छोरों का कारण बन सकता है।

इस प्रकार के लिए yum-downloadonly rpm स्थापित होना आवश्यक है और मुझे लगता है कि यह केवल RHEL / CentOS / SL 6 पर काम करता है। जिस समय मैंने यह लिखा था, पिछले संस्करणों पर yum के बाहर निकलने की स्थिति गलत थी, इसलिए 'जब तक' पैरामीटर काम नहीं करेगा बिना आउटपुट के grep तक बढ़ाया जा रहा है।

define yumgroup($ensure = "present", $optional = false) {
   case $ensure {
      present,installed: {
         $pkg_types_arg = $optional ? {
            true => "--setopt=group_package_types=optional,default,mandatory",
            default => ""
         }
         exec { "Installing $name yum group":
            command => "yum -y groupinstall $pkg_types_arg $name",
            unless => "yum -y groupinstall $pkg_types_arg $name --downloadonly",
            timeout => 600,
         }
      }
   }
}

मैंने जानबूझकर यम-डाउनलोड को एक निर्भरता बना दिया है क्योंकि यह दूसरों के अभिव्यक्तियों के साथ संघर्ष कर सकता है। यदि आप ऐसा करना चाहते हैं, तो yum-downloadonly संकुल को एक अलग मेनिफ़ेस्ट में घोषित करें और इसे इस परिभाषा में शामिल करें। यदि आप इस संसाधन प्रकार का एक से अधिक बार उपयोग करते हैं, तो सीधे इस परिभाषित में कठपुतली घोषित न करें अन्यथा कठपुतली एक त्रुटि देगा। निष्पादन संसाधन को तब पैकेज ['yum-downloadonly'] की आवश्यकता होगी।


इसके लिए धन्यवाद! मैंने yum_groupinstalls नामक एक मॉड्यूल बनाया और विकास उपकरण समूह को स्थापित करने के लिए आपकी परिभाषा और वर्ग के साथ एक init.pp प्रकट किया। ध्यान दें कि मुझे समूह का नाम उद्धृत करना था: class yum_groupinstalls { yumgroup { '"Development tools"': } } परिभाषा में मुझे yum के लिए पूर्ण पथ निर्दिष्ट करना था जो CentOS 6.2 पर मेरे लिए / usr / bin / yum था।
बंजर

3

मुझे पैकेज प्रकार के लिए कठपुतली प्रकार के संदर्भ में कुछ भी नहीं मिला , इसलिए मैंने पिपेट आईआरसी चैनल पर फरिनोड (# पिपेट, अजीब तरह से) पर पूछा और मुझे कुछ भी नहीं मिला, इसलिए मुझे लगता है कि उत्तर "अभी तक नहीं" है।


3

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


1

मैं एक कस्टम संसाधन के साथ समाधान पसंद करता हूं, लेकिन यह बेकार नहीं है। मेरा अस्तित्व है? समारोह:

Puppet::Type.type(:yumgroup).provide(:default) do
  desc 'Support for managing the yum groups'

  commands :yum => '/usr/bin/yum'

  # TODO
  # find out how yum parses groups and reimplement that in ruby

  def self.instances
    groups = []

    # get list of all groups
    yum_content = yum('grouplist')

    # turn of collecting to avoid lines like 'Loaded plugins'
    collect_groups = false

    # loop through lines of yum output
    yum_content.each do |line|
      # if we get to 'Available Groups:' string, break the loop
      break if line.chomp =~ /Available Groups:/

      # collect groups
      if collect_groups and line.chomp !~ /(Installed|Available)/
        current_name = line.chomp.sub(/^\s+/,'\1').sub(/ \[.*\]/,'')
        groups << new(
          :name   => current_name,
          :ensure => :present
        )
      end

      # turn on collecting when the 'Installed Groups:' is reached
      collect_groups = true if line.chomp =~ /Installed Groups:/
    end
    groups
  end

  def self.prefetch(resources)
    instances.each do |prov|
      if resource = resources[prov.name]
        resource.provider = prov
      end
    end
  end

  def create
    yum('-y', 'groupinstall', @resource[:name])
    @property_hash[:ensure] == :present
  end

  def destroy
    yum('-y', 'groupremove', @resource[:name])
    @property_hash[:ensure] == :absent
  end


  def exists?
    cmd = "/usr/bin/yum grouplist hidden \"" + @resource[:name] + "\" | /bin/grep \"^Installed\" > /dev/null"
    system(cmd)
    $?.success?
  end

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