何かを行う前にyumリポジトリをパペットに追加する


26

パペットに特定のことを最初に強制する方法はありますか?たとえば、パッケージをインストールする前に、すべてのサーバーにRPMをインストールしてyumリポジトリー(IUSコミュニティー)を追加する必要があります。


より複雑なユースケースについては、関連する質問も参照してください。
マットマクルーア

回答:


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が表示されませんでした-ありがとう!
ジョンハダッド

Yumを使用するディストリビューションでのみ機能するため、Rhel4ではなくRhel5のみ
デイブチェイニー

2
どのリポジトリにパッケージがあるのか​​わからない場合はどうなりますか?たとえば、FedoraのfedoraリポジトリやRHEL、CentOSなどのepelリポジトリでパッケージを利用できる場合があります。これは、サードパーティのレシピ/モジュールを使用する場合はカスタマイズする必要があることを意味します。
クリスチャン・シウピトゥ

17

ステージはこれを処理でき、特定のyumリポジトリの依存関係も処理できますが、関係を一般的に宣言する方が適切です。

Yumrepo <| |> -> Package <| provider != 'rpm' |>人形のマニフェストを入れるだけ です。

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

これにより、プロバイダーとして「rpm」を持たないパッケージの前にすべてのyumrepoタイプが処理されるようになります。後者の除外は、(たとえば)epel-release RPMパッケージを使用してyumリポジトリをインストールできるようにするためです。


8

(ほぼ同じと答えた後にこの質問を見つけました..私の答えはここにも当てはまると思い、それを繰り返す価値があります(2つの場所に答えを入れる方が安全です..)

私が理解している限り、これがまさにステージの目的です。クラスの実行をグループ化および順序付けできます。「ステージ」を使用して、DebianサーバーでAPTを更新および構成します。これは、YUMで行うことと非常によく似ているはずです。

まず、最上位レベル(「ノード」より上)で「yum」ステージを宣言し、「yum」ステージのクラスが「main」クラスの前に実行されるようにします。

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

次に、ステージをクラスに割り当てます。ノード定義でこれを行うことができます。

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

  include packages
}

これに感謝します:)個人的には、受け入れられた答えよりもこのアプローチを好みます。
マイケルミオール

5

タグを使用できます。これにより、リポジトリインストーラーにタグを付けることができますfirstrun

その後、実行します

 puppetd --tags firstrun

そして、タグに一致するモジュール/ステートメントのみを実行します。


これはまさに私が探していたものです。ありがとう、トム!
ジョンハダッド

3

使用する必要がある重要なものは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に適用する方法を考えてみましょう。


0

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

上記のこのコードは、パッケージを追加する前にリポジトリを追加します。


10
Puppetは宣言型言語を使用しているため、ファイル内の事柄の順序については心配しません。あなたの最初の段落は間違っています。これを行う正しい方法requireは、2番目のパートで行ったキーワードを使用することです。
ハミッシュダウナー

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リポジトリへの参照がありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.