要在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