回答:
リポジトリがすべてのサーバーにインストールされていることを確認したい場合は、このようなものをお勧めします
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リポジトリの依存関係も処理できますが、関係を一般的に宣言する方が適切です。
Yumrepo <| |> -> Package <| provider != 'rpm' |>
人形のマニフェストを入れるだけ です。
node default {
Yumrepo <| |> -> Package <| provider != 'rpm' |>
}
これにより、プロバイダーとして「rpm」を持たないパッケージの前にすべてのyumrepoタイプが処理されるようになります。後者の除外は、(たとえば)epel-release RPMパッケージを使用してyumリポジトリをインストールできるようにするためです。
(ほぼ同じと答えた後にこの質問を見つけました..私の答えはここにも当てはまると思い、それを繰り返す価値があります(2つの場所に答えを入れる方が安全です..)
私が理解している限り、これがまさにステージの目的です。クラスの実行をグループ化および順序付けできます。「ステージ」を使用して、DebianサーバーでAPTを更新および構成します。これは、YUMで行うことと非常によく似ているはずです。
まず、最上位レベル(「ノード」より上)で「yum」ステージを宣言し、「yum」ステージのクラスが「main」クラスの前に実行されるようにします。
stage { 'yum' : before => Stage['main'] }
次に、ステージをクラスに割り当てます。ノード定義でこれを行うことができます。
node default {
class { 'yumrepos' : stage => yum }
include packages
}
使用する必要がある重要なものはrequireキーワードです-「1つ以上のクラスを評価し、必要なクラスを依存関係として追加します」。
aptリポジトリを使用した例は次のとおりです。
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に適用する方法を考えてみましょう。
Puppetは設定を上から下に読み取ります。そのため、最初にそのクラスにyumリポジトリを持つクラスを含めると、このリポジトリは他の何よりも先に追加されます。
パッケージで必要な設定を使用する場合、パッケージを追加する前に、必要なリソースタイプが存在することを確認してください。
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
は、2番目のパートで行ったキーワードを使用することです。
このような何かが私のために働いた:
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リポジトリへの参照がありません。