Kuklalı yum paket grubunu nasıl kurarım?


Yanıtlar:


11

Bugün benzer bir istekle karşılaştım, ancak işler başka yollarla çözülebilirse, bir yöneticinin hayranı değilim. Bu yüzden farklı bir yol seçtim ve 'yumgroup' için basit bir özel tür yazdım. Bu dosyaları modül yolunuzdaki herhangi bir modüle koyun ve hepsi bu:

"Modulename / lib / kukla / sağlayıcı / 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 / kukla / türü / 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

Bundan sonra, pluginsync etkinken kukla aracısını çalıştırın ve şöyle özel bir tür kullanabilirsiniz:

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

veya:

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

Ve hangi grupların kurulu olduğunu çalıştırarak görebilirsiniz:

puppet resource yumgroup

zevk almak!


Bunun hataya neden olmaması için yum_content = yum('grouplist')bir ihtiyacı olduğunu düşünüyorum . .split("\n").each
alex.pilon

@ alex.pilon bahşiş için teşekkürler. Gerçi v3'te böyle çalışıyordu.
Jakov Sosic

4

İşte bir 'yumgroup' kukla kaynak tipinin tanımı. Varsayılan olarak varsayılan ve zorunlu paketleri yükler ve isteğe bağlı paketleri yükleyebilir.

Bu tanım yum gruplarını kaldıramaz ancak yine de gerçekleşmesi kolay olurdu. Kendim için rahatsız etmedim, çünkü belirli koşullar altında kukla döngülerine neden olabilir.

Bu tür yum-downloadonly rpm'nin yüklenmesini gerektirir ve sadece RHEL / CentOS / SL 6 üzerinde çalıştığını düşünüyorum. Bunu yazdığım sırada, önceki sürümlerde yum'ın çıkış durumları yanlıştı, böylece 'unless' parametresi işe yaramayacaktı çıktı için grep'e uzatılmadan.

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

Başkalarının bildirimleriyle çatışabileceği için yum-downloadonly bağımlılığını kasıtlı olarak atladım. Bunu yapmak istiyorsanız, yum-downloadonly paketini ayrı bir bildirimde belirtin ve bunu bu tanım içine ekleyin. Doğrudan bu tanımlamada beyan etmeyin, aksi takdirde bu kaynak türünü birden fazla kullanırsanız kukla hata verir. Yürütme kaynağı daha sonra Package ['yum-downloadonly'] gerektirir.


Bunun için teşekkürler! Yum_groupinstalls adında bir modül oluşturdum ve tanımınızla birlikte bir init.pp bildirimi ve Geliştirme araçları grubunu kurmak için bir sınıf oluşturdum. Grup adını alıntılamak zorunda olduğunu unutmayın: class yum_groupinstalls { yumgroup { '"Development tools"': } } Tanımda ben CentOS 6.2 benim için / usr / bin / yum olan yum tam yol belirtmek zorunda kaldı.
Banjer

3

Paket tipi için Kukla Tipi Referansında hiçbir şey bulamadım , bu yüzden Freenode (#puppet, garip) üzerinde Kukla IRC kanalında sordum ve hiçbir şey var, bu yüzden cevap "henüz değil" diye düşünüyorum.


3

Gerekli grup kurulumunu yürütmek için bunu bir Kukla Yürütme Türü aracılığıyla gerçekleştirebilirsiniz. Ben sadece gerektiğinde yürütmek veya ayarlamak ve bir tetikleme yoluyla bir iyi onlyifveya unlessseçenek eklemek emin olabilirsiniz, ancak her seferinde çalıştırmak değil ki. Eğer tetiklenir sağlanan tip kukla istemci üzerinde yerel olarak komutu yerine getirecektir.refreshonlyNotifyExec


1

Özel bir kaynak ile çözümü seviyorum ama idempotent değil. Benim varlığım var mı? fonksiyon:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.