我正在使用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远程执行该声明,但肯定有更好,更可靠的方法来做到这一点?
这就是debconf的工作方式,如果你刚刚编辑了文件,你不会想到包会自动重新配置.
你想要的是一个通知处理程序,它在游戏结束时执行dpkg重新配置一次.
– debconf:
名称:’btsync’
问题:’btsync / folder_defaults-use_dht’
价值:’真’
vtype:’boolean’
通知:重新配置btsync
并在您的处理程序文件中:
– name:重新配置btsync
命令:sudo dpkg-reconfigure -f noninteractive btsync
现在,如果debconf实际上改变了任何东西(并且只有 – 幂等),当所有任务都运行时,btsync将被重新配置一次.