Başka bir şey yapmadan önce kuklaya yum repo ekleme


26

Kuklayı ilk önce bazı şeyleri yapmaya zorlamanın bir yolu var mı? Örneğin, paketlerden herhangi birini kurmadan önce bir depo (IUS Topluluğu) eklemek için tüm sunuculara bir RPM yüklemem gerekiyor.


Daha karmaşık bir kullanım durumu için ilgili soruma da bakın .
Matt McClure

Yanıtlar:


37

Tüm sunucunuza bir havuzun yüklendiğinden emin olmak istiyorsanız, bunun gibi bir şey öneririm

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

Ardından, genişleyen herhangi bir düğüm için basesöyleyebilirsiniz

class foo {
   package { "bar": ensure => installed, require => Yumrepo["IUS"] }
}

Bu sağlayacak

  • barIUS deposu tanımlanmadıkça paket kurulmaz
  • Paket, IUS deposu tanımlanmadan önce kurulmaya çalışmaz

Ah tamam. Bu oldukça harika. Orada yumrepo görmedim - teşekkürler!
Jon Haddad

Sadece Yum kullanan dağıtımlarla çalışıyor, bu yüzden Rhel4 değil, yalnızca Rhel5
Dave Cheney

2
Hangi havuzun bir paketi olduğunu bilmiyorsam ne olur? Örneğin , Fedora’daki fedora deposunda ve RHEL, CentOS vb. Epel deposunda bir paket mevcut olabilir .
Cristian Ciupitu

17

Aşamalar bununla başa çıkabilse de, bazı özel repo bağımlılıkları olabilir, ancak ilişkiyi genel olarak ilan etmek daha iyidir.

Sadece Yumrepo <| |> -> Package <| provider != 'rpm' |>kukla tezahürünüzü koyun .

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

Bu, tüm yumrepo türlerinin, sağlayıcıları olarak 'rpm' olmayan paketlerden önce işlenmesini sağlar. Bu son hariç tutma, yum deposunun kurulmasına yardımcı olmak için (örneğin) epel-release RPM paketini kullanabilmemdir.


8

(Neredeyse aynı cevabı verdikten sonra bu soruyu buldum ... bu yüzden cevabımın burada da geçerli olduğunu düşündüm ve tekrarlamaya değeceğini düşündüm (iki yerde bir cevabın olması daha güvenli ..)

Anladığım kadarıyla, bu tam olarak hangi aşamalar için? - sınıf yürütmelerini sıralamanıza ve sıralamanıza izin veriyorlar. APT'yi Debian sunucularında güncellemek ve yapılandırmak için "aşamaları" kullanıyorum, YUM ile yapacağınız şeye çok benzemeliyim.

Öncelikle, "yum" aşamasını en üst düzeyde ("düğümler" in üstünde) ilan edersiniz, böylece "yum" aşamasındaki sınıflar "ana" olanlardan önce yürütülür:

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

Sonra sınıflara sahne atarsınız. Bunu düğüm tanımınızda yapabilirsiniz:

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

  include packages
}

Bunun için teşekkürler :) Ben şahsen bu yaklaşımı kabul edilen cevaplara tercih ederim.
Michael Mior

5

Etiketler kullanabilirsiniz . Bu, repo yükleyiciyi firstrunya da başka bir şeyle etiketlemenizi sağlar ,

o zaman koş

 puppetd --tags firstrun

ve sadece etiketi ile eşleşen modülleri / ifadeleri yürütür.


Bu tam olarak aradığım şeydi - teşekkürler Tom!
Jon Haddad

3

Kullanmanız gereken en önemli şey request anahtar sözcüğüdür - "Bir veya daha fazla sınıfı değerlendirin, gereken sınıfı bir bağımlılık olarak ekleyin."

Bir apt deposu kullanarak bir örnek olabilir:

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

( Bu kukla önyükleme örneğinden uyarlanmıştır ).

Böylece, her bir aşamanın öncekinin ilk önce nasıl yapılmasını istediğini görebilirsiniz. Sizi dosyaları nasıl saklayacağımı bilmediğim için yum'a nasıl uygulanacağına karar vereceğim.


0

Puppet config'i yukarıdan aşağıya okur, bu yüzden o sınıfa önce yum reposunu içeren bir sınıf eklerseniz, bu repo başka bir şeyden önce eklenecektir.

Bir pakette gereken ayarları kullanırsanız, paketi eklemeden önce gerekli kaynak türünün mevcut olduğundan emin olursunuz.

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

Yukarıdaki kod, paketi eklemeden önce depoyu ekler.


10
O bu yüzden Kukla, bildirge dili kullanır değil dosyadaki şeylerin düzenine dert. İlk paragrafın yanlış, korkarım. Bunu yapmanın doğru yolu require, ikinci bölümde yapmış olduğunuz anahtar sözcüğü kullanmaktır .
Hamish Downer

0

Bunun gibi bir şey benim için çalıştı:

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 üzerinde böyle bir şey dahil ettim. Bu sayede kukla modülleriniz yum reposuna atıfta bulunmaz.

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.