Как я устанавливаю вкусную группу пакета с марионеткой?

Это, кажется, работает теперь. Я изменил "myhostname" на "localhost" в postfix/main.cf, и внезапно вещи, кажется, работают. Спасибо за Ваши ответы!

10
задан 21 November 2013 в 19:52
5 ответов

Я ничего не мог найти в Марионеточной Ссылке Типа для типа Пакета, таким образом, я спросил относительно Марионетки канал IRC на Freenode (#puppet, странно) и ничего не получил так, что я думаю, что ответ "еще" не.

3
ответ дан 2 December 2019 в 22:02

Вы могли обработать это через Марионеточный Исполнительный Тип для выполнения необходимой установки группы. Я, несомненно, включал бы пользу onlyif или unless опция так, чтобы это только выполнило его, при необходимости или установлено на refreshonly и инициируйте его через a Notify так, чтобы это не было выполнено каждый раз все же. Exec тип выполнит команду локально на марионеточном клиенте для Вас, если это инициировано.

3
ответ дан 2 December 2019 в 22:02

Вот определение типа ресурса марионетки «yumgroup». По умолчанию он устанавливает пакеты по умолчанию и обязательные пакеты, а также может устанавливать дополнительные пакеты.

Это определение пока не может удалить группы yum, хотя это было бы легко сделать. Я не беспокоился о себе, потому что при определенных обстоятельствах это может вызвать циклы в марионетке.

Для этого типа требуется установка yum-downloadonly rpm, и я думаю, что он работает только на RHEL / CentOS / SL 6. В то время я написал это, статусы выхода yum в предыдущих версиях были неправильными, поэтому параметр 'if' не работал бы без расширения до grep для вывода.

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

Я намеренно не сделал yum-downloadonly зависимостью, так как это может конфликтовать с другими ' проявляет. Если ты хочешь это сделать, объявить пакет yum-downloadonly в отдельном манифесте и включить его в это определение. Не объявляйте напрямую в этом определении, иначе марионетка выдаст ошибку, если вы используете этот тип ресурса более одного раза. Ресурсу exec затем потребуется Package ['yum-downloadonly'].

4
ответ дан 2 December 2019 в 22:02

Сегодня я столкнулся с подобным запросом, но я не поклонник исполнительного директора, если проблемы можно решить другими способами. Итак, я выбрал другой путь и написал простой пользовательский тип для yumgroup. Просто поместите эти файлы в любой модуль в пути к модулю, и все:

"имя модуля / lib / puppet / provider / 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

"имя модуля / lib / puppet / type / 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

И после этого запустите агент марионеток с включенным pluginsync, и вы можете использовать собственный тип, например:

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

или:

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

И вы можете увидеть, какие группы установлены, запустив:

puppet resource yumgroup

наслаждайтесь!

11
ответ дан 2 December 2019 в 22:02

Мне нравится решение с настраиваемым ресурсом, но оно не идемпотентное. Мой взгляд на сущее? функция:

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
1
ответ дан 2 December 2019 в 22:02

Теги

Похожие вопросы