web-dev-qa-db-ja.com

パッチ管理用のPuppet

大規模なパッチ管理にPuppetを使用することを考えています。

いくつかの調査に基づいて、これを実行する方法は、次の場合のように、クラスを作成し、必要な場所に適用することです。

class mypack_update {
  package { 'mypack':
   # ensure => '1.0.1d-15.el6',
    ensure  => '1.0.1g-16.el6_5.7',
  }
}

ただし、これは、カーネルからssl、bashなど、多くのマシンで利用可能なパッチが何百もある場合は特に実用的ではないようです。

これをより簡単にするために従うことができるベストプラクティスはありますか?

私たちが主に使用するLinuxディストリビューションはSLES11.3です。

1
trikelef

これを行う方法は、「ensure => 'latest'」を使用することですが、これは、制御済みのテスト済みリポジトリに対して実行されます。環境にさまざまな要件を持つさまざまな役割がある場合はさらに複雑になります。その場合、どのパッチがどの役割に適用されるかを判断するための感覚メカニズムとしてファクトを使用する必要があります。これはhieraで行います。 1年ほどやってきたので、正解はパルプなどのレポ管理システムと統合された人形であると私は信じています。それはまさにSatellite6が行っていることです。

1
Walid

あなたが言及する非実用性がそのようなクラスの生成であると仮定すると、それは潜在的にいくつかのスクリプトで行うことができます。 hiera と組み合わせると、バージョンIDを持つパッケージの.yamlリストを作成でき、パペットのセットアップは次のようになります。

hieradata/patchlist.yaml

---
packages:
  mypack:
    ensure: 1.0.1g-16.el6_5.7
  otherpack:
    ensure: latest
  otherpacktwo:
    ensure: 2.0.1

yourclass.pp

class patchset {
    create_resources('packages')
}

スクリプトの部分に関しては、適切なパッチがあることがわかっているサーバーのrpm -qaコマンドに適用されたawk/Perl-fuがその仕事をするはずです。

0
shearn89