꼭두각시와 함께 yum 패키지 그룹을 어떻게 설치합니까?


답변:


11

나는 오늘 비슷한 요청을 겪었지만 다른 방법으로 문제를 해결할 수 있다면 경영진의 팬이 아닙니다. 그래서 다른 경로를 선택하고 'yumgroup'에 대한 간단한 사용자 정의 유형을 작성했습니다. 이러한 파일을 모듈 경로의 모든 모듈에 넣으면됩니다.

"modulename / 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

"modulename / 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

즐겨!


나는 그 생각 yum_content = yum('grouplist')필요 .split("\n")그래서 그 .each오류가 발생하지 않습니다를.
alex.pilon

@ alex.pilon 팁 주셔서 감사합니다. v3에서는 이와 같이 작동했습니다.
Jakov Sosic

4

다음은 'yumgroup'퍼펫 리소스 유형의 정의입니다. 기본 및 필수 패키지를 기본적으로 설치하며 선택적 패키지를 설치할 수 있습니다.

이 정의는 yum 그룹을 아직 제거하기는 쉽지만 제거 할 수는 없습니다. 특정 상황에서 꼭두각시 루프가 발생할 수 있기 때문에 귀찮게하지 않았습니다.

이 유형에는 yum-downloadonly rpm이 설치되어 있어야하며 RHEL / CentOS / SL 6에서만 작동한다고 생각합니다.이 파일을 쓸 당시에는 이전 버전에서 yum의 종료 상태가 잘못되어 'unless'매개 변수가 작동하지 않습니다. 출력을 위해 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']가 필요합니다.


감사합니다! yum_groupinstalls라는 모듈을 만들고 개발 도구 그룹을 설치하기위한 클래스와 정의가있는 init.pp 매니페스트를 만들었습니다. 그룹 이름을 인용해야함에 유의 class yum_groupinstalls { yumgroup { '"Development tools"': } } 하십시오. 정의에서 CentOS 6.2에서 / usr / bin / yum 인 yum의 전체 경로를 지정해야했습니다.
Banjer

3

패키지 유형 에 대한 Puppet Type Reference 에서 아무것도 찾을 수 없으므로 Freenode의 Puppet IRC 채널 (#puppet, odds)에 아무 것도 얻지 못했기 때문에 답이 "아직 아님"이라고 생각합니다.


3

필요한 그룹 설치를 실행하기 위해 Puppet Exec Type 을 통해이를 처리 할 수 ​​있습니다 . 나는 그것이 필요할 때만 실행되도록 설정하거나 매번 실행되지 않도록 설정하여 트리거 하도록 good onlyif또는 unlessoption 을 포함해야합니다 . 당신이 트리거 제공을 위해 유형은 꼭두각시 클라이언트에 로컬로 명령을 실행합니다.refreshonlyNotifyExec


1

나는 커스텀 리소스가있는 솔루션을 좋아하지만 dem 등하 지 않습니다. 존재에 대한 나의 테이크? 함수:

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.