介紹

介紹

介紹

到目前為止,我們在/etc/sudoers文件中創建了一個包含 N 個條目的區塊。

這不是一個好的解決方案,因為有時我們只想更新一個系統並提供明確的支柱資料。然後pillar.systems是一個只有一個條目的清單。

舊代碼

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之後,我將使用該模組以及例如刪除三個註解行sed

您可能想要直接使用 sed 方法,這使得臨時狀態變得不必要 - 但這取決於您的需求 - 如果您立即在所有地方刪除舊樣式,則第二種方法可能會更容易。如果您連續幾個月遷移盒子,那麼狀態的定義會更加清晰。

相關內容