web-dev-qa-db-ja.com

Augeasの使用INIヘッダーなしのレンズ

Splunk管理レンズを作成するためにaugeasでIniFileモジュールを使用しています。これは、通常のINIファイルのようにセクションヘッダーを含むすべてのファイルでうまく機能しますが、name = valueのペアを使用するだけで、このスキームに従わないファイルがいくつかあります。

セクションをメインなどの一般的なものに定義せずに、これらのエントリをマップする準備ができている方法はありますか?この2番目のファイルタイプについて別のモジュールを学ぶ必要はありません。今のところそれを回避する準備ができている方法があります。

module Splunk =
  autoload xfm

  let comment  = IniFile.comment IniFile.comment_re IniFile.comment_default
  let sep      = IniFile.sep IniFile.sep_re IniFile.sep_default

  let setting   = IniFile.record_re
  let title     = IniFile.title ( IniFile.record_re  )
  let entry     = IniFile.entry steting sep comment
  let record    = IniFile.record title entry
  let lns       = IniFile.lns record comment

  let filter    = incl "/etc/splunk/*.conf"
  let xfm       = transform lns filter

  test lns get "[section]\ntest-value=yes\n" = ?
  test lns get "test=yes\n" = ?
3
Tim Brigham

PHPレンズは同様の機能を提供し、定義されたセクションの前のINIファイルの設定をサポートします。これをレンズに適合させ、「設定」を修正しましたあいまいさを避けるためにIniFile.entry_reを使用すべきだったレンズ。

module Splunk =
  autoload xfm

  let comment  = IniFile.comment IniFile.comment_re IniFile.comment_default
  let sep      = IniFile.sep IniFile.sep_re IniFile.sep_default
  let empty    = IniFile.empty

  let setting   = IniFile.entry_re
  let title     = IniFile.title ( IniFile.record_re - ".anon" )
  let entry     = IniFile.entry setting sep comment
  let record    = IniFile.record title entry
  let record_anon = [ label ".anon" . ( entry | empty )+ ]

  let lns       = record_anon | record*

  let filter    = incl "/etc/splunk/*.conf"
  let xfm       = transform lns filter

  test lns get "[section]\ntest-value=yes\n" = ?
  test lns get "test=yes\n" = ?

生成されるツリーは次のようになり、セクション外のすべての設定が「.anon」ノードの下に配置されます。

Test result: splunk.aug:20.2-.31:
  { ".anon"
    { "test" = "yes" }
  }

このノードは、プット方向のあいまいさを回避するために必要です。例を挙げると、このツリーをファイルに書き戻すタスクがある場合は、次のようになります。

{ "foo" }

[foo](セクション名)またはfoo=(セクション外の設定)のいずれかとして記述できます。 「.anon」サブツリーは、この変換バックにあいまいさがないことを保証します。それを削除してフラットな構造にするには、ファイルの種類ごとに2番目のモジュール/レンズを作成する必要があります。これはより自然な解決策だと思います。 「.anon」ノードは、同じファイルに混合があるPHPの場合に意味があります。

完了してテストを追加したら、レンズをAugeasプロジェクトに提出してください。ぜひ含めてください。 trac 経由で送信するか、 list に送信します。

4
Dominic Cleal