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.
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.
Yanıtlar:
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 base
söyleyebilirsiniz
class foo {
package { "bar": ensure => installed, require => Yumrepo["IUS"] }
}
Bu sağlayacak
bar
IUS deposu tanımlanmadıkça paket kurulmazAş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.
(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
}
Etiketler kullanabilirsiniz . Bu, repo yükleyiciyi firstrun
ya 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.
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.
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.
require
, ikinci bölümde yapmış olduğunuz anahtar sözcüğü kullanmaktır .
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.