導入

導入

導入

これまで、/etc/sudoersファイル内に N 個のエントリを持つ 1 つのブロックを作成しました。

これは良い解決策ではありません。1 つのシステムのみを更新し、明示的なピラー データを提供したい場合があるからです。その場合、pillar.systemsエントリが 1 つだけのリストになります。

古いコード

etc_sudoers:
  file.blockreplace:
    - name: /etc/sudoers
    - marker_start: "# START managed zone etc_sudoers -DO-NOT-EDIT-"
    - marker_end: "# END managed zone etc_sudoers --"
    - content: |
{% for system_name in pillar.systems %}
        {{system_name}} ALL = NOPASSWD: /bin/systemctl restart apache2*
{% endfor %}

    - append_if_not_found: True
    - backup: '.bak'
    - show_changes: True

新しいコード

{% for system_name in pillar.systems %}
etc_sudoers_{{system_name}}:
  file.blockreplace:
    - name: /etc/sudoers
    - marker_start: "# START managed zone etc_sudoers_{{system_name}} -DO-NOT-EDIT-"
    - marker_end: "# END managed zone etc_sudoers_{{system_name}} --"
    - content: |
        {{system_name}} ALL = NOPASSWD: /bin/systemctl restart apache2*

    - append_if_not_found: True
    - backup: '.bak'
    - show_changes: True
{% endfor %}

質問

サーバー上に残っている古いブロックを削除するにはどうすればいいですか?

答え1

私は次のような状態を設定することでこれを解決します:

etc_sudoers:
  file.blockreplace:
    - name: /etc/sudoers
    - marker_start: "# START managed zone etc_sudoers -DO-NOT-EDIT-"
    - marker_end: "# END managed zone etc_sudoers --"
    - content: '#'
    - append_if_not_found: False
    - backup: '.bak'
    - show_changes: True

cmd.runその後、モジュールを次のように使用して3つのコメント行を削除します。sed

sed アプローチを直接使用して一時的な状態を不要にすることもできますが、これはニーズによって異なります。古いスタイルを一度にすべて削除する場合は、2 番目のアプローチの方が簡単かもしれません。数か月間ボックスを次々に移行する場合は、状態の定義がより明確になります。

関連情報