Directory

如何確保只有鹽管理的文件保留在目錄中並保持差異清潔?

  • January 16, 2020

假設這樣的目錄:

- etc/nginx/sites-available/
   - hostA
   - hostB
   - hostC

hostA和hostB是由 salt 創建的**。**hostC**也是由 salt 更早創建的,但此後它已從支柱中刪除並且不再需要。我希望目錄只包含代表目前狀態的文件。可以選擇使用. 這使得檢查發生的變化變得非常困難。有沒有辦法解決這個問題?clean: True

更新:目前輸出(偽 yaml)

- directory
 - deleted: 
   - file: hostA
   - file: hostB
   - file: hostC
- file
  - new file: hostA
- file
  - new file: hostB

我希望

- directory:
 - deleted: 
   - file: hostC

你可以通過呼叫file.find模組來獲取你想要的目錄列表,並且由於你有一個你想要管理的文件列表,你可以刪除不在要管理的文件列表中的文件。

這是一些改編自我必須管理 /etc/yum.repos.d 的狀態文件的程式碼。我將假設您要管理的文件來自支柱,它們是字典的鍵,其值是渲染文件的其餘數據。

{% set site_dir = '/etc/nginx/sites-available/' %}
{% set sites = salt['pillar.get']('nginx_sites',{}) %}
{% set site_files = salt['file.find'](site_dir,type='f',print='name',maxdepth=0) %}
{% for site_file in site_files %}
{%   if site_file not in sites %}
delete-old-{{ site_file }}:
 file.absent:
   - name: {{ site_dir }}/{{ site_file }}
{%   endif %}
{% endfor %}
{# then go through the sites and manage the files... #}
{% for site in sites %}
manage-site-file-{{ site_file }}:
 file.managed:
   - name: {{ site_dir }}/{{ site }}
   - source: salt://nginx/files/site-file.conf
   - template: jinja
{% endfor %}

引用自:https://serverfault.com/questions/758370