Ubuntu

如何讓 Ansible 實際編譯一個更改了應用程序的 debconf 設置的配置文件?

  • May 16, 2021

我正在使用 Ansible 嘗試配置與特定項目相關的所有工作站,以便能夠使用標準配置的 BitTorrent 同步(這實際上只是我想做的事情的一個例子)。

當我執行 playbook 時,我可以確認遠端 PC 上的 debconf 設置已更新,但應用程序的配置文件尚未更新。

有沒有辦法讓 ansible 完成這項工作 - 提供了一堆配置數據,我只想重新編譯實際的配置文件,然後重新啟動服務。

我在 Ubuntu 14.10 64 位主機上使用最新的 Ansible(來自 PyPi)。

- hosts: btsync
 sudo: True
 tasks:
   - apt_repository: repo='ppa:tuxpoldo/btsync' update_cache=yes state=present
   - apt: name=btsync state=present
   - apt: name=debconf-utils state=present
   - apt: name=btsync-gui state=present
   - file: name='create a directory for BT Sync' path=/home/sal/bittorrent_sync state=directory owner=sal group=users mode=0755
   - debconf: name='btsync' question='btsync/runas' value='sal' vtype='string'
   - debconf: name='btsync' question='btsync/directory_root' value='/home/sal/bittorrent_sync' vtype='string'
   - debconf: name='btsync' question='btsync/webgui-bindaddr' value='0.0.0.0' vtype='string'
   - debconf: name='btsync' question='btsync/folder_defaults-use_lan_broadcast' value='true' vtype='boolean'
   - debconf: name='btsync' question='btsync/log_size' value='1' vtype='string'
   - debconf: name='btsync' question='btsync/folder_defaults-use_dht' value='true' vtype='boolean'
   - service: name='btsync' state=restarted

我可以像這樣強制從 debconf 重新配置配置文件:

sudo dpkg-reconfigure -f noninteractive btsync

我想我可以強制 Ansible 遠端執行該語句,但肯定有更好、更 ansibleish 的方式來執行此操作嗎?

這就是 debconf 的工作方式,如果您只是編輯文件,您也不希望包會自動重新配置。

你想要的是一個通知處理程序,它在播放結束時重新配置一次 dpkg。

- debconf: name: 'btsync' question: 'btsync/folder_defaults-use_dht' value: 'true' vtype: 'boolean' notify: reconfigure btsync

並在您的處理程序文件中:

- name: reconfigure btsync command: sudo dpkg-reconfigure -f noninteractive btsync

現在,如果 debconf 確實改變了任何東西(並且僅當 - 冪等),當所有任務都執行時,btsync 將重新配置一次。

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