Есть ли у puppet способ установить группу пакетов yum (например, «Инструменты разработки»), кроме exec?
10
Я сталкивался с подобной просьбой сегодня, но я не фанат исполнительного директора, если все можно решить любым другим способом. Поэтому я выбрал другой путь и написал простой пользовательский тип для «yumgroup». Просто поместите эти файлы в любой модуль в вашем модуле path и все:
"Имя_модуля / Библиотека / кукольный / поставщик / 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
"Имя_модуля / Библиотека / кукольный / тип / 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
И после этого запустите агент puppet с включенной функцией pluginsync, и вы можете использовать пользовательский тип, например так:
yumgroup {'Base': ensure => present, }
или:
yumgroup {'Development tools': ensure => absent, }
И вы можете увидеть, какие группы установлены, запустив:
puppet resource yumgroup
наслаждаться!
yum_content = yum('grouplist')
нужно,.split("\n")
чтобы.each
не вызывать ошибок.Вот определение типа ресурса марионетки yumgroup. Он устанавливает стандартные и обязательные пакеты по умолчанию и может устанавливать дополнительные пакеты.
Это определение еще не может удалить группы yum, хотя его легко реализовать. Я не беспокоился о себе, потому что это может вызвать петли в марионетке при определенных обстоятельствах.
Для этого типа требуется установить rum yum-downloadonly rpm, и я думаю, что он работает только на RHEL / CentOS / SL 6. В то время, когда я писал это, состояния выхода yum в предыдущих версиях были неправильными, поэтому параметр «never» не работал без расширения на grep для вывода.
Я намеренно исключил включение зависимости yum-downloadonly, поскольку это может противоречить манифестам других. Если вы хотите сделать это, объявите пакет yum-downloadonly в отдельном манифесте и включите его в это определение. Не указывайте прямо в этом определении, иначе Puppet выдаст ошибку, если вы используете этот тип ресурса более одного раза. Ресурсу exec затем потребуется пакет ['yum-downloadonly'].
источник
class yum_groupinstalls { yumgroup { '"Development tools"': } }
в определении я должен был указать полный путь к yum, который для меня был / usr / bin / yum в CentOS 6.2.Я не смог найти ничего в справочнике типов Puppet для типа Package, поэтому я спросил на IRC-канале Puppet на Freenode (#puppet, как ни странно) и ничего не получил, поэтому я думаю, что ответ «еще нет».
источник
Вы можете обработать это с помощью Puppet Exec Type, чтобы выполнить необходимую групповую установку. Я бы обязательно включил товар
onlyif
илиunless
опцию, чтобы он выполнял его только тогда, когда это необходимо, или устанавливалrefreshonly
иNotify
запускал его, чтобы он не запускался каждый раз.Exec
Тип будет выполнять команду локально на кукольный клиента для вас , если она срабатывает.источник
Мне нравится решение с пользовательским ресурсом, но оно не идемпотентно. Мое мнение существует? функция:
источник