Puppet 3.6からpackageリソースでenablerepo/disablerepoが使える

#puppet

yumコマンドでパッケージを入れるときに、--enablerepo--disablerepoを使ってリポジトリを指定することが出来る。

Puppet 3.6から、この2つの機能をinstall_optionsという属性に任せることで利用可能になった。

install_optionsenable/disablerepoの使い方

使い方は簡単で、以下のようにinstall_options属性に配列か文字列で--enablerepo--disablerepoを指定すれば良い。

package { 'the-package':
  ensure          => installed,
  install_options => ['--enablerepo=rpmforge', '--disablerepo=*'],
}

いつから使えるようになったか

タイトルにも出だしにも書いたが、Puppet 3.6.0から使えるようになった。

Several providers were updated to support the install_options attribute, and the yum provider now has special behavior to make --enablerepo and --disablerepo work well when you set them as install_options.

https://docs.puppetlabs.com/puppet/3.6/reference/release_notes.html#package

このオプションが入るまでの細かい経緯は以下のコミットやチケットを見るのが良い。

別々のリポジトリに同名のパッケージがある可能性

このオプションがどういうところで役に立つかというと、例えばCentOSのbaseリポジトリとrpmforgeリポジトリにあるrrdtoolのうち、rpmforgeのほうが欲しい時とか。

複数箇所にあるrrdtoolのうち、新しい方が欲しい、古い方は要らないという宣言を記述するには、例えば以下のようにすればいい。

package { 'rrdtool':
  ensure          => installed,
  install_options => ['--enablerepo=rpmforge', '--disablerepo=*'],
  require         => Yumrepo['rpmforge'],
}

複数のリポジトリを使っている時に、名前が重複していてうまくインストール出来ない時に大変便利である。 というかyumでもともと使えるものがPuppetでも出来るようになっただけなんだけれど。