Yanıtlar:
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!
İş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.
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ı.
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.
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 onlyif
veya unless
seç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.refreshonly
Notify
Exec
Ö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
yum_content = yum('grouplist')
bir ihtiyacı olduğunu düşünüyorum ..split("\n")
.each