我正在使用Ansible来尝试configuration一个特定项目所涉及的所有工作站,以便能够使用BitTorrent与标准configuration同步(实际上这只是我想要做的事情的一个例子)。
当我执行剧本时,我可以确认远程PC上的debconf设置已经更新,但应用程序的configuration文件尚未更新。
有没有办法让工作完成 – 提供了一堆configuration数据,我只是想重新编译实际的configuration文件,然后重新启动服务。
我在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
我可以强制configuration文件从debconf中重新configuration,如下所示:
sudo dpkg-reconfigure -f noninteractive btsync
我想我可以强制Ansible远程执行这个语句,但是肯定有一个更好,更有效的方法来做到这一点?
这就是debconf的工作方式,如果你只是编辑文件,你也不会期望软件包自动重新configuration。
你想要的是一个通知处理程序,在播放结束时执行dpkg重新configuration一次。
- 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会被重新configuration一次。