web-dev-qa-db-ja.com

他に何かする前に、yumレポをパペットに追加する

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

26
Jon Haddad

すべてのサーバーにリポジトリがインストールされていることを確認したい場合は、このようなものをお勧めします

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

これにより、

  • IUSリポジトリが定義されていない限り、パッケージbarはインストールされません
  • IUSリポジトリが定義される前に、パッケージはインストールを試みません
37
Dave Cheney

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

Yumrepo <| |> -> Package <| provider != 'rpm' |>人形マニフェスト。

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

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

17
Steven Roberts

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

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

まず、「yum」ステージをトップレベル(「ノード」の上)で宣言し、「yum」ステージのクラスが「メイン」クラスの前に実行されるようにします。

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

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

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

  include packages
}
8

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

次に実行します

 puppetd --tags firstrun

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

5
Tom O'Connor

使用する必要がある重要なことは、 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に適用する方法を説明します。

3
Hamish Downer

Puppetは設定を上から下に読み取ります。そのため、クラスに最初にyumリポジトリを含むクラスを含めると、このリポジトリは何よりも先に追加されます。

パッケージでrequire設定を使用する場合、次のように、パッケージを追加する前に必要なリソースタイプが存在することを確認します。

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

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

0
tore-

このようなものが私にとってうまくいきました:

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

0
Oscar Montoya