Puppetを使用して構成ファイルの一部のみを管理する(複数行file_line)

Puppetを使用して構成ファイルの一部のみを管理する(複数行file_line)

/etc/network/interfaces などの設定ファイルがあります。このファイルの特定の部分を管理するためだけにPuppetを使用したいと思います。

例:

# At the beginning at least is some dynamic content that can be different
# from machine to machine and changed by an admin manually
auto eth0
iface eth0 inet static
    address 192.168.108.5
    netmask 255.255.255.0

# BEGIN PUPPET WLAN0
allow-hotplug wlan0
iface wlan0 inet static
    address 192.168.109.5
    netmask 255.255.255.0
# END PUPPET WLAN0

# Potentially more stuff that I do not want to touch through Puppet
# But could be static if it makes it more easy. E.g. simply force sections to end of file.

stdlib file_lineリソースは私が必要とするものに非常に近いです。一致を置き換えるために使用される正規表現とコンテンツ。しかし、残念ながら、file_lineを複数行に一致させ、それを新しい内容に置き換える方法はありません。

回避策 1: bash スクリプトを作成します。 見苦しい Exec リソースと一時ファイル。

代替案2:Augeasの使用:簡単な検索と交換には少し過度のようです。

複数行で正規表現のマッチングと置換を実行できるstdlibに加えて、他のモジュールはありますか?

一時的なbashスクリプトとExecリソースを組み合わせるよりも優れた手動ソリューションはありますか?

ベストアンサー1

あなたは単に使用することができます一行一致プレースホルダーとして複数行の値:

$wlan_address = [...]
$wlan_netmask = [...]
$wlan_string = "allow-hotplug wlan0
iface wlan0 inet static
    address ${wlan_address}
    netmask ${wlan_netmask}"

file_line { 'wlan0':
  path  => '/etc/network/interfaces',
  line  => $wlan_string,
  match => '^# PUPPET WLAN0$',
}

おすすめ記事