Ansible ini_file モジュールはオプションが指定されていない場合はセクションを作成しません

Ansible ini_file モジュールはオプションが指定されていない場合はセクションを作成しません

Ansible を使用して、ini 形式で構成ファイルを作成します。ini_fileオプションと値のペアを持つモジュールを使用すると、期待どおりに動作します。例:

- name: Create configuration file
  ini_file:
    path: /tmp/test.conf
    state: present
    section: lol
    option: foo
    value: bar

結果は次のようになります:

[lol]
foo = bar

ただし、次のように、オプションのない特定のセクションを存在させたいのです。

- name: Create configuration file
  ini_file:
    path: /tmp/test.conf
    state: present
    section: lol

okしかし、タスクについて報告するだけで、次のタスクに進みます。

詳細モードを使用すると、次のようになります:ok: [localhost] => {"changed": false, "msg": "OK", "path": "/tmp/test.conf", "state": "absent"}

モジュールを使用してオプションのないセクションを作成するにはどうすればよいですか?

答え1

ini は非公式の標準ですが、私の理解では、オプションのないセクションにはあまり意味がありません。これが、これが Ansible に実装されていない理由であると最初に推測します。

ini-Moduleを使用する代わりに、lineinfile モジュールセクションがiniファイルに存在することを確認します。

答え2

設定ファイルを構築するにはテンプレートを使用します。これが適切な方法です。ini_fileモジュールはファイルの編集にのみ使用してください。lineinfile モジュールは使用せず、最後の手段として使用してください。

ルール0)可能であれば、代わりにテンプレート モジュールを使用してください。これにより、完全な制御と検証が可能になります。Brian Coca (シニア ソフトウェア エンジニア、Ansible、Red Hat)

答え3

回避策としては、オプションに空白/コメント付きのコードを指定して、値を許可しないことです。

- ini_file:
    dest: '/tmp/telegraf.conf'
    section: '[inputs.interrupts]'
    option: '  ## no configuration'
    allow_no_value: yes

ただし、セクションにすでに値がある場合は、オプションと値のないセクションが必要な場合は、それを削除する必要がありstate: absent、その後追加します。申し訳ありませんが、実際の答えも見つかりませんでした。

関連情報