다른 작업을하기 전에 꼭두각시에 yu 레포 추가


26

꼭두각시가 특정 작업을 먼저 수행하도록하는 방법이 있습니까? 예를 들어, 패키지를 설치하기 전에 모든 서버에 RPM을 설치하여 yum 저장소 (IUS Community)를 추가해야합니다.


더 복잡한 사용 사례는 관련 질문 도 참조하십시오 .
Matt McClure

답변:


37

모든 서버에 저장소가 설치되어 있는지 확인하려면 다음과 같이 제안하십시오.

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

그런 다음 확장하는 노드에 대해 base말할 수 있습니다.

class foo {
   package { "bar": ensure => installed, require => Yumrepo["IUS"] }
}

이것은 보장합니다

  • barIUS 저장소가 정의되어 있지 않으면 패키지 가 설치되지 않습니다
  • 패키지는 IUS 리포지토리가 정의되기 전에 설치를 시도하지 않습니다

그래. 이것은 굉장합니다. 나는 거기에 yumrepo를 보지 못했습니다-감사합니다!
Jon Haddad

그것은 단지, 얌 사용하는 배포판에서 작동 RHEL5 만하지 RHEL4 그래서
데이브 체니

2
어떤 저장소에 패키지가 있는지 모르는 경우 어떻게됩니까? 예를 들어 Fedora 의 fedora 저장소와 RHEL, CentOS 등 의 epel 저장소에서 패키지를 사용할 수 있습니다 . 즉, 타사 레시피 / 모듈을 사용하는 경우 패키지 를 사용자 정의해야합니다.
Cristian Ciupitu

17

단계가이를 처리 할 수 ​​있고 특정 yum repo 종속성을 작성할 수 있지만 관계를 일반적으로 선언하는 것이 좋습니다.

Yumrepo <| |> -> Package <| provider != 'rpm' |>꼭두각시 매니페스트를 넣으 십시오.

node default {
  Yumrepo <| |> -> Package <| provider != 'rpm' |>
}

이로 인해 모든 yumrepo 유형이 제공자로 'rpm'이없는 패키지보다 먼저 처리됩니다. 후자의 제외는 (예를 들어) epel-release RPM 패키지를 사용하여 yum 저장소를 설치하는 데 도움이됩니다.


8

(거의 거의 같은 대답을 한 후에이 질문을 찾았습니다 . 그래서 여기에도 내 대답이 적용된다고 생각하고 그것을 반복 할 가치가 있다고 생각했습니다 (두 곳에서 답을 갖는 것이 더 안전합니다.)

내가 이해하는 한, 이것은 정확히 스테이지의 단계 입니다-클래스 실행을 그룹화하고 주문할 수 있습니다. 나는 "단계"를 사용하여 데비안 서버에서 APT를 업데이트하고 구성합니다. 이는 YUM과 매우 유사한 작업이어야합니다.

우선, "yum"단계를 최상위 레벨 ( "노드"위)에 선언하여 "yum"단계의 클래스가 "주"클래스보다 먼저 실행되도록합니다.

stage { 'yum' : before => Stage['main'] }

그런 다음 클래스에 스테이지를 지정합니다. 노드 정의에서 바로 수행 할 수 있습니다.

node default {
  class { 'yumrepos' : stage => yum }

  include packages
}

이것에 감사드립니다 :) 개인적 으로이 답변을 받아 들였습니다.
Michael Mior

5

태그를 사용할 수 있습니다 . 이를 통해 repo 설치 프로그램에 태그를 지정할 수 있습니다 firstrun.

그런 다음 실행

 puppetd --tags firstrun

태그와 일치하는 모듈 / 문만 실행합니다.


이것이 바로 내가 찾던 것입니다-Tom 감사합니다!
Jon Haddad 2019

3

사용해야 할 핵심은 require 키워드입니다. "필수 클래스를 종속성으로 추가하여 하나 이상의 클래스를 평가하십시오."

적절한 저장소를 사용하는 예는 다음과 같습니다.

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];
   }
}

( 인형 부트 스트랩의이 예 에서 적응 ).

따라서 각 단계에서 이전 단계를 먼저 수행해야하는 방법을 확인할 수 있습니다. yum에 파일을 저장하는 위치에 익숙하지 않기 때문에 이것을 yum에 적용하는 방법을 알려 드리겠습니다.


0

Puppet은 위에서 아래로 구성을 읽으므로 해당 클래스에서 yum repo가있는 클래스를 먼저 포함하면이 repo가 ​​다른 것보다 먼저 추가됩니다.

패키지에서 필수 설정을 사용하는 경우 다음과 같이 패키지를 추가하기 전에 필수 자원 유형이 있는지 확인하십시오.

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

위의 코드는 패키지를 추가하기 전에 저장소를 추가합니다.


10
Puppet은 선언적 언어를 사용하므로 파일의 순서에 대해 걱정 하지 않습니다 . 첫 번째 단락이 잘못되었습니다. 이를 수행하는 올바른 방법 require은 두 번째 부분에서 수행 한 키워드 를 사용하는 것입니다.
Hamish Downer

0

이와 같은 것이 나를 위해 일했습니다 :

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에 이와 같은 것을 포함시켰다. 이런 식으로 퍼펫 모듈에는 yum repos에 대한 참조가 없습니다.

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