답변:
모든 서버에 저장소가 설치되어 있는지 확인하려면 다음과 같이 제안하십시오.
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"] }
}
이것은 보장합니다
bar
IUS 저장소가 정의되어 있지 않으면 패키지 가 설치되지 않습니다단계가이를 처리 할 수 있고 특정 yum repo 종속성을 작성할 수 있지만 관계를 일반적으로 선언하는 것이 좋습니다.
Yumrepo <| |> -> Package <| provider != 'rpm' |>
꼭두각시 매니페스트를 넣으 십시오.
node default {
Yumrepo <| |> -> Package <| provider != 'rpm' |>
}
이로 인해 모든 yumrepo 유형이 제공자로 'rpm'이없는 패키지보다 먼저 처리됩니다. 후자의 제외는 (예를 들어) epel-release RPM 패키지를 사용하여 yum 저장소를 설치하는 데 도움이됩니다.
(거의 거의 같은 대답을 한 후에이 질문을 찾았습니다 . 그래서 여기에도 내 대답이 적용된다고 생각하고 그것을 반복 할 가치가 있다고 생각했습니다 (두 곳에서 답을 갖는 것이 더 안전합니다.)
내가 이해하는 한, 이것은 정확히 스테이지의 단계 입니다-클래스 실행을 그룹화하고 주문할 수 있습니다. 나는 "단계"를 사용하여 데비안 서버에서 APT를 업데이트하고 구성합니다. 이는 YUM과 매우 유사한 작업이어야합니다.
우선, "yum"단계를 최상위 레벨 ( "노드"위)에 선언하여 "yum"단계의 클래스가 "주"클래스보다 먼저 실행되도록합니다.
stage { 'yum' : before => Stage['main'] }
그런 다음 클래스에 스테이지를 지정합니다. 노드 정의에서 바로 수행 할 수 있습니다.
node default {
class { 'yumrepos' : stage => yum }
include packages
}
태그를 사용할 수 있습니다 . 이를 통해 repo 설치 프로그램에 태그를 지정할 수 있습니다 firstrun
.
그런 다음 실행
puppetd --tags firstrun
태그와 일치하는 모듈 / 문만 실행합니다.
사용해야 할 핵심은 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에 적용하는 방법을 알려 드리겠습니다.
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
}
}
위의 코드는 패키지를 추가하기 전에 저장소를 추가합니다.
require
은 두 번째 부분에서 수행 한 키워드 를 사용하는 것입니다.
이와 같은 것이 나를 위해 일했습니다 :
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에 대한 참조가 없습니다.