web-dev-qa-db-ja.com

Puppet、augeasで複数のプロパティファイルを変更

プロパティファイルを構成するために、puppetとaugeasツールをかなり頻繁に使用しています。私の最新の要件は、同じ固定の変更セットを非常に長いプロパティファイルのリストに適用することです。そのため、プロパティファイルごとにaugeasを記述せずに、1回の実行で実行したいと思います。

例:

  augeas { 'change_name_whatever':
    lens    => 'a_customized_lens',
    incl    => "$path/file1.properties", 
    changes => $change_set,
  }
  augeas { 'change_name_whatever':
    lens    => 'a_customized_lens',
    incl    => "$path/file2.properties", 
    changes => $change_set,
  }
etc...

使用したい:

  augeas { 'change_name_whatever':
    lens    => 'a_customized_lens',
    incl    => "[list of files to change], 
    changes => $change_set,
  }

しかし、augeasはファイルをプリロードする必要があるため、それは不可能です。

Puppet 3.8を使用しているため、foreachタイプのループを使用できません。 puppet 4では、ファイルのリストを宣言し、それらをループして自分のことを実行できることを確認しました。これはかっこいいです...しかし、puppet3では機能しません。

それで、同じコードを何度もコピー/貼り付けする他の解決策はありますか?

乾杯。

2
bioShark

これを実現するための最良のオプションは、定義されたリソースタイプを作成することです。

define customized::filetype ($change_set) {
 augeas { "customized filetype ${title}":
    lens    => 'a_customized_lens',
    incl    => $name, 
    changes => $change_set,
  }
}

次に、タイトルの配列とともに使用します。

customized::filetype { [
  "$path/file1.properties",
  "$path/file2.properties"
  ]:
  change_set => $change_set,
}

定義されたリソースタイプのキー/値パラメーターとして変更セットを抽象化することもできます(そして私はそれをお勧めします)。例えば:

define customized::filetype ($key, $value) {
 augeas { "customized filetype ${title}":
    lens    => 'a_customized_lens',
    incl    => $name, 
    changes => "set ${key} ${value}",
  }
}
5
ℝaphink