大虾居

谈笑有鸿儒,往来无白丁。

0%

Vagrant同步Ansible开发文件夹

要在windows下开发*nux程序,vagrant是一个不可多得的好帮手,随时可以创建一个指定的虚拟机环境,还可以把虚拟机环境配置提交到版本控制库,跟伙伴一起分享。

一般vagrant会把当前文件夹映射到虚拟机中的/vagrant,实时共享。所以我们通常在宿主机修改源代码文件,在客户机中编译和运行。

但是要开发ansible,默认的vagrant配置就无法满足需求了。因为ansible出于安全考虑,在运行时会检查脚本文件夹权限,如果有公共写权限的话就会忽略当前文件夹下的ansible.cfg运行。

[WARNING] Ansible is being run in a world writable directory (/vagrant), ignoring it as an ansible.cfg source. For more information see https://docs.ansible.com/ansible/devel/reference_appendices/config.html#cfg-in-world-writable-dir

由于vagrant使用的使虚拟机的目录映射功能,在这个模式下无法通过chmod修改文件夹的读写权限。

那么是不是就没办法了呢,非也,下面虾哥就分享一下如何能既确保源码文件夹符合ansible权限要求,又能在宿主机和客户机之间共享文件。

解决方法

vagrant默认共享其实等价于隐式声明了一个sync_folder指令

config.vm.synced_folder ".", "/vagrant"

synced_folder还有可以配置一些参数,比如type参数配置同步方式。
Type可以使用nfs,SMB模式,考虑到跨平台兼容性和,这里虾哥建议使用RSync模式。

Rsync安装

rsync 是linux下的一个用于文件同步的协议及相应的实现。

windows可以安装cwrsync

安装方法很简单,解压后把bin目录添加到path环境变量即可。

Vagrantfile写法

config.vm.synced_folder ".", "/vagrant", owner: "root", group: "root", type: "rsync"

这里本地路径,客户机内的共享路径,owner,group都可以根据自己的需要配置。

手动同步/自动同步

type=rsync的文件夹,默认情况下vagrant只会在启动的时候同步一次,之后的修改就不会同步了。

需要手动同步的话可以运行

vagrant rsync

还可以自动实时监听并同步

vagrant rsync-auto

反向同步

rsync时客户机内的修改无法反映到宿主机的文件夹,即只能实现单向同步,要从客户机向宿主机同步的话可以通过一个插件实现。

安装插件

vagrant plugin install vagrant-rsync-back

手动反向同步

vagrant rsync-back

参考